/
Makefile
79 lines (65 loc) · 2.09 KB
/
Makefile
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
# standard Python project Makefile
progname = $(shell awk '/^Source/ {print $$2}' debian/control)
name=
prefix = /usr/local
PATH_BIN = $(prefix)/bin
PATH_ETC = $(destdir)/etc
PATH_INSTALL_LIB = $(prefix)/lib/$(progname)
PATH_UDEV_RULES = $(destdir)/lib/udev/rules.d
all: help
debug:
$(foreach v, $V, $(warning $v = $($v)))
@true
### Extendable targets
# target: help
help:
@echo '=== Targets:'
@echo 'install [ prefix=path/to/usr ] # default: prefix=$(value prefix)'
@echo 'uninstall [ prefix=path/to/usr ]'
@echo
@echo 'clean'
# DRY macros
truepath = $(shell echo $1 | sed -e 's/^debian\/$(progname)//')
libpath = $(call truepath,$(PATH_INSTALL_LIB))/$$(basename $1)
subcommand = $(progname)-$$(echo $1 | sed 's|.*/||; s/^cmd_//; s/_/-/g; s/.py$$//')
echo-do = echo $1; $1
# first argument: code we execute if there is just one executable module
# second argument: code we execute if there is more than on executable module
define with-py-executables
@modules=$$(find -maxdepth 1 -type f -name '*.py' -perm -100); \
modules_len=$$(echo $$modules | wc -w); \
if [ $$modules_len = 1 ]; then \
module=$$modules; \
$(call echo-do, $1); \
elif [ $$modules_len -gt 1 ]; then \
for module in $$modules; do \
$(call echo-do, $2); \
done; \
fi;
endef
# set path bin in udev rules
%.rules: %.rules.in
sed "s|@PATH_BIN@|$(call truepath,$(PATH_BIN))|g" $< > $@
# target: install
install: 85-ebsmount.rules
@echo
@echo \*\* CONFIG: prefix = $(prefix) \*\*
@echo
install -d $(PATH_BIN) $(PATH_ETC) $(PATH_INSTALL_LIB) $(PATH_UDEV_RULES)
cp *.conf $(PATH_ETC)
cp *.py $(PATH_INSTALL_LIB)
cp *.rules $(PATH_UDEV_RULES)
$(call with-py-executables, \
ln -fs $(call libpath, $$module) $(PATH_BIN)/$(progname), \
ln -fs $(call libpath, $$module) $(PATH_BIN)/$(call subcommand, $$module))
# target: uninstall
uninstall:
rm -rf $(PATH_INSTALL_LIB)
rm -f $(PATH_ETC)/ebsmount.conf
rm -f $(PATH_UDEV_RULES)/85-ebsmount.rules
$(call with-py-executables, \
rm -f $(PATH_BIN)/$(progname), \
rm -f $(PATH_BIN)/$(call subcommand, $$module))
# target: clean
clean:
rm -f *.pyc *.pyo *.rules _$(progname)