summary refs log tree commit diff stats
path: root/Makefile
blob: 1b26e1174a4ed2fd175a3afa278e7d0c06104682 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# Copyright (C) 2009, 2010  Roman Zimbelmann <romanz@lavabit.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

NAME = ranger
VERSION = $(shell grep -m 1 -o '[0-9][0-9.]\+' README)
SNAPSHOT_NAME ?= $(NAME)-$(VERSION)-$(shell git rev-parse HEAD | cut -b 1-8).tar.gz
# Find suitable python version (need python >= 2.6 or 3.1):
PYTHON ?= $(shell python -c 'import sys; sys.exit(sys.version < "2.6")' && \
	which python || which python3.1 || which python3 || which python2.6)
SETUPOPTS ?= '--record=install_log.txt'
DOCDIR ?= doc/pydoc
DESTDIR ?= /
PYOPTIMIZE ?= 1
BMCOUNT ?= 5  # how often to run the benchmarks?

CWD = $(shell pwd)

default: compile
	@echo 'Run `make options` for a list of all options'

options: help
	@echo
	@echo 'Options:'
	@echo 'PYTHON = $(PYTHON)'
	@echo 'PYOPTIMIZE = $(PYOPTIMIZE)'
	@echo 'DOCDIR = $(DOCDIR)'

help:
	@echo 'make install: Install $(NAME)'
	@echo 'make doc: Create the pydoc documentation'
	@echo 'make clean: Remove the compiled files (*.pyc, *.pyo)'
	@echo 'make cleandoc: Remove the pydoc documentation'
	@echo 'make snapshot: Create a tar.gz of the current git revision'
	@echo 'make test: Run all unittests.'

install:
	$(PYTHON) setup.py install $(SETUPOPTS) \
		'--root=$(DESTDIR)' --optimize=$(PYOPTIMIZE)

compile: clean
	PYTHONOPTIMIZE=$(PYOPTIMIZE) $(PYTHON) -m compileall -q ranger

clean:
	find . -regex .\*.py[co]\$$ -exec rm -f -- {} \;

doc: cleandoc
	mkdir -p $(DOCDIR)
	cd $(DOCDIR); \
		$(PYTHON) -c 'import pydoc, sys; \
		sys.path[0] = "$(CWD)"; \
		pydoc.writedocs("$(CWD)")'
	rm $(DOCDIR)/test*
	find . -name \*.html -exec sed -i 's|'$(CWD)'|../..|g' -- {} \;

cleandoc:
	test -d $(DOCDIR) && rm -f -- $(DOCDIR)/*.html || true

test:
	@$(PYTHON) test/all_tests.py 1

bm:
	@$(PYTHON) test/all_benchmarks.py $(BMCOUNT)

snapshot:
	git archive --prefix='$(NAME)-$(VERSION)/' --format=tar HEAD | gzip > $(SNAPSHOT_NAME)

.PHONY: default options compile clean doc cleandoc test bm snapshot install
ss="bp">self) # pylint: disable=invalid-unary-operand-type def relative(self): return not Direction.absolute(self) def vertical_direction(self): down = Direction.down(self) return (down > 0) - (down < 0) def horizontal_direction(self): right = Direction.right(self) return (right > 0) - (right < 0) def vertical(self): return set(self) & set(['up', 'down']) def horizontal(self): return set(self) & set(['left', 'right']) def pages(self): return 'pages' in self and self['pages'] def percentage(self): return 'percentage' in self and self['percentage'] def cycle(self): return self.get('cycle') in ('true', 'on', 'yes') def multiply(self, n): for key in ('up', 'right', 'down', 'left'): try: self[key] *= n except Exception: pass def set(self, n): for key in ('up', 'right', 'down', 'left'): if key in self: self[key] = n def move(self, direction, override=None, minimum=0, # pylint: disable=too-many-arguments maximum=9999, current=0, pagesize=1, offset=0): """Calculates the new position in a given boundary. Example: >>> d = Direction(pages=True) >>> d.move(direction=3) 3 >>> d.move(direction=3, current=2) 5 >>> d.move(direction=3, pagesize=5) 15 >>> # Note: we start to count at zero. >>> d.move(direction=3, pagesize=5, maximum=10) 9 >>> d.move(direction=9, override=2) 18 """ pos = direction if override is not None: if self.absolute(): pos = override else: pos *= override if self.pages(): pos *= pagesize elif self.percentage(): pos *= maximum / 100.0 if self.absolute(): if pos < minimum: pos += maximum else: pos += current if self.cycle(): return minimum + pos % (maximum + offset - minimum) return int(max(min(pos, maximum + offset - 1), minimum)) def select(self, lst, current, pagesize, override=None, offset=1): dest = self.move(direction=self.down(), override=override, current=current, pagesize=pagesize, minimum=0, maximum=len(lst) + 1) selection = lst[min(current, dest):max(current, dest) + offset] return dest + offset - 1, selection if __name__ == '__main__': import doctest doctest.testmod()