[pass] [PATCH] Reorganize build process
Lukas Fleischer
info at cryptocrack.de
Sat Apr 19 22:58:57 CEST 2014
The new build system inlines platform-specific code instead of
referencing a file from /usr/lib/. This allows for creating a working
shell script without having to run `make install` which is useful during
testing. The inline code replacement is done using m4(1).
Signed-off-by: Lukas Fleischer <info at cryptocrack.de>
---
Makefile | 24 ++++++++----------------
src/Makefile | 10 ++++++++++
src/{password-store.sh => password-store.sh.in} | 9 ++++++++-
3 files changed, 26 insertions(+), 17 deletions(-)
create mode 100644 src/Makefile
rename src/{password-store.sh => password-store.sh.in} (98%)
mode change 100755 => 100644
diff --git a/Makefile b/Makefile
index bee69e1..c714031 100644
--- a/Makefile
+++ b/Makefile
@@ -1,18 +1,18 @@
PREFIX ?= /usr
DESTDIR ?=
BINDIR ?= $(PREFIX)/bin
-LIBDIR ?= $(PREFIX)/lib
MANDIR ?= $(PREFIX)/share/man
-PLATFORMFILE := src/platform/$(shell uname | cut -d _ -f 1 | tr '[:upper:]' '[:lower:]').sh
+.PHONY: build clean install uninstall install-common
-.PHONY: install uninstall install-common
+build:
+ make -C src/
-all:
- @echo "Password store is a shell script, so there is nothing to do. Try \"make install\" instead."
+clean:
+ make -C src/ clean
install-common:
- @mkdir -p "$(DESTDIR)$(BINDIR)" "$(DESTDIR)$(LIBDIR)" "$(DESTDIR)$(MANDIR)/man1" "$(DESTDIR)$(PREFIX)/share/bash-completion/completions/"
+ @mkdir -p "$(DESTDIR)$(BINDIR)" "$(DESTDIR)$(MANDIR)/man1" "$(DESTDIR)$(PREFIX)/share/bash-completion/completions/"
@install -m 0644 -v man/pass.1 "$(DESTDIR)$(MANDIR)/man1/pass.1"
@install -m 0644 -v src/completion/pass.bash-completion "$(DESTDIR)$(PREFIX)/share/bash-completion/completions/pass"
@@ -22,16 +22,8 @@ install-common:
# Uncomment to install the fish completion file.
# @install -m 0644 -v src/completion/pass.fish-completion "$(DESTDIR)$(PREFIX)/share/fish/completions/pass.fish"
-ifneq ($(strip $(wildcard $(PLATFORMFILE))),)
-install: install-common
- @install -m 0644 -v "$(PLATFORMFILE)" "$(DESTDIR)$(LIBDIR)/password-store.platform.sh"
- @mkdir -p -v "$(DESTDIR)$(BINDIR)/"
- sed 's:.*platform-defined-functions.*:source $(DESTDIR)$(LIBDIR)/password-store.platform.sh:' src/password-store.sh > "$(DESTDIR)$(BINDIR)/pass"
- @chmod 0755 "$(DESTDIR)$(BINDIR)/pass"
-else
-install: install-common
- @install -m 0755 -v src/password-store.sh "$(DESTDIR)$(BINDIR)/pass"
-endif
+install: build install-common
+ install -m 0755 src/password-store.sh > "$(DESTDIR)$(BINDIR)/pass"
uninstall:
@rm -vf "$(DESTDIR)$(BINDIR)/pass" "$(DESTDIR)$(MANDIR)/man1/pass.1" "$(DESTDIR)$(PREFIX)/share/bash-completion/completions/password-store" "$(DESTDIR)$(LIBDIR)/password-store.platform.sh"
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..1171824
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,10 @@
+all: password-store.sh
+
+clean:
+ rm -f password-store.sh
+
+%.sh: %.sh.in
+ m4 -P $< >$@
+ chmod +x $@
+
+.PHONY: all clean
diff --git a/src/password-store.sh b/src/password-store.sh.in
old mode 100755
new mode 100644
similarity index 98%
rename from src/password-store.sh
rename to src/password-store.sh.in
index eb98fad..0830010
--- a/src/password-store.sh
+++ b/src/password-store.sh.in
@@ -177,7 +177,14 @@ tmpdir() {
GETOPT="getopt"
SHRED="shred -f -z"
-# source /path/to/platform-defined-functions
+m4_dnl include platform specific functions during build
+m4_define(`newline', `
+')
+m4_define(`normalize', `m4_translit(`$1', newline, `')')
+m4_define(`tolower', `m4_translit(`$1', `A-Z', `a-z')')
+m4_define(`stripsuffix', `m4_patsubst(`$1', `_.*$', `')')
+m4_define(`uname', stripsuffix(tolower(normalize(m4_esyscmd(`uname')))))
+m4_sinclude(`platform/'uname`.sh')
#
# END platform definable
--
1.9.2
More information about the Password-Store
mailing list