diff --git a/Makefile b/Makefile index 78be2b6..ede850c 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ PACKAGE = 'build_zsh' -VERSION = '0.2.2' +VERSION = '0.3.0' PREFIX := /usr/local BINDIR := $(PREFIX)/bin @@ -16,184 +16,197 @@ LDFLAGS := Q := @ -all: build.zsh build/binary.zsh build/crystal.zsh build/header.zsh build/library.zsh build/man.zsh build/moon.zsh build/ofile.zsh build/script.zsh build/sharedlib.zsh build/staticlib.zsh +all: build.zsh build/binary.zsh build/crystal.zsh build/header.zsh build/library.zsh build/man.zsh build/moon.zsh build/ofile.zsh build/scdocman.zsh build/script.zsh build/sharedlib.zsh build/staticlib.zsh @: -build.zsh: build.zsh.in . - @echo ' SED > build.zsh' - $(Q)sed -e 's&@LIBDIR@&$(LIBDIR)&;s&@BINDIR@&$(BINDIR)&;s&@SHAREDIR@&$(SHAREDIR)&;' build.zsh.in > 'build.zsh' +build.zsh: build.zsh.in + @echo ' SED > build.zsh' + $(Q)sed -e 's&@PREFIX@&$(PREFIX)&;s&@BINDIR@&$(BINDIR)&;s&@LIBDIR@&$(LIBDIR)&;s&@SHAREDIR@&$(SHAREDIR)&;s&@INCLUDEDIR@&$(INCLUDEDIR)&;s&@MANDIR@&$(MANDIR)&;' build.zsh.in > 'build.zsh' $(Q)chmod +x 'build.zsh' build.zsh.install: build.zsh - @echo ' IN > $(BINDIR)/build.zsh' + @echo ' IN > $(BINDIR)/build.zsh' $(Q)mkdir -p '$(DESTDIR)$(BINDIR)' $(Q)install -m0755 build.zsh $(DESTDIR)$(BINDIR)/build.zsh build.zsh.clean: - @echo ' RM > build.zsh' + @echo ' RM > build.zsh' $(Q)rm -f build.zsh build.zsh.uninstall: - @echo ' RM > $(BINDIR)/build.zsh' + @echo ' RM > $(BINDIR)/build.zsh' $(Q)rm -f '$(DESTDIR)$(BINDIR)/build.zsh' build/binary.zsh: build/binary.zsh.install: build/binary.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/binary.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/binary.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/binary.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/binary.zsh build/binary.zsh.clean: build/binary.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/binary.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/binary.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/binary.zsh' build/crystal.zsh: build/crystal.zsh.install: build/crystal.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/crystal.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/crystal.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/crystal.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/crystal.zsh build/crystal.zsh.clean: build/crystal.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/crystal.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/crystal.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/crystal.zsh' build/header.zsh: build/header.zsh.install: build/header.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/header.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/header.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/header.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/header.zsh build/header.zsh.clean: build/header.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/header.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/header.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/header.zsh' build/library.zsh: build/library.zsh.install: build/library.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/library.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/library.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/library.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/library.zsh build/library.zsh.clean: build/library.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/library.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/library.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/library.zsh' build/man.zsh: build/man.zsh.install: build/man.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/man.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/man.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/man.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/man.zsh build/man.zsh.clean: build/man.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/man.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/man.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/man.zsh' build/moon.zsh: build/moon.zsh.install: build/moon.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/moon.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/moon.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/moon.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/moon.zsh build/moon.zsh.clean: build/moon.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/moon.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/moon.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/moon.zsh' build/ofile.zsh: build/ofile.zsh.install: build/ofile.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/ofile.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/ofile.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/ofile.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/ofile.zsh build/ofile.zsh.clean: build/ofile.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/ofile.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/ofile.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/ofile.zsh' +build/scdocman.zsh: + +build/scdocman.zsh.install: build/scdocman.zsh + @echo ' IN > $(SHAREDIR)/build.zsh/scdocman.zsh' + $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' + $(Q)install -m0755 build/scdocman.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/scdocman.zsh + +build/scdocman.zsh.clean: + +build/scdocman.zsh.uninstall: + @echo ' RM > $(SHAREDIR)/build.zsh/scdocman.zsh' + $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/scdocman.zsh' + build/script.zsh: build/script.zsh.install: build/script.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/script.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/script.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/script.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/script.zsh build/script.zsh.clean: build/script.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/script.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/script.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/script.zsh' build/sharedlib.zsh: build/sharedlib.zsh.install: build/sharedlib.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/sharedlib.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/sharedlib.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/sharedlib.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/sharedlib.zsh build/sharedlib.zsh.clean: build/sharedlib.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/sharedlib.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/sharedlib.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/sharedlib.zsh' build/staticlib.zsh: build/staticlib.zsh.install: build/staticlib.zsh - @echo ' IN > $(SHAREDIR)/build.zsh/staticlib.zsh' + @echo ' IN > $(SHAREDIR)/build.zsh/staticlib.zsh' $(Q)mkdir -p '$(DESTDIR)$(SHAREDIR)/build.zsh' $(Q)install -m0755 build/staticlib.zsh $(DESTDIR)$(SHAREDIR)/build.zsh/staticlib.zsh build/staticlib.zsh.clean: build/staticlib.zsh.uninstall: - @echo ' RM > $(SHAREDIR)/build.zsh/staticlib.zsh' + @echo ' RM > $(SHAREDIR)/build.zsh/staticlib.zsh' $(Q)rm -f '$(DESTDIR)$(SHAREDIR)/build.zsh/staticlib.zsh' build: $(Q)mkdir -p build $(DESTDIR)$(PREFIX): - @echo ' DIR > $(PREFIX)' + @echo ' DIR > $(PREFIX)' $(Q)mkdir -p $(DESTDIR)$(PREFIX) $(DESTDIR)$(BINDIR): - @echo ' DIR > $(BINDIR)' + @echo ' DIR > $(BINDIR)' $(Q)mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR): - @echo ' DIR > $(LIBDIR)' + @echo ' DIR > $(LIBDIR)' $(Q)mkdir -p $(DESTDIR)$(LIBDIR) $(DESTDIR)$(SHAREDIR): - @echo ' DIR > $(SHAREDIR)' + @echo ' DIR > $(SHAREDIR)' $(Q)mkdir -p $(DESTDIR)$(SHAREDIR) $(DESTDIR)$(INCLUDEDIR): - @echo ' DIR > $(INCLUDEDIR)' + @echo ' DIR > $(INCLUDEDIR)' $(Q)mkdir -p $(DESTDIR)$(INCLUDEDIR) $(DESTDIR)$(MANDIR): - @echo ' DIR > $(MANDIR)' + @echo ' DIR > $(MANDIR)' $(Q)mkdir -p $(DESTDIR)$(MANDIR) -install: subdirs.install build.zsh.install build/binary.zsh.install build/crystal.zsh.install build/header.zsh.install build/library.zsh.install build/man.zsh.install build/moon.zsh.install build/ofile.zsh.install build/script.zsh.install build/sharedlib.zsh.install build/staticlib.zsh.install +install: subdirs.install build.zsh.install build/binary.zsh.install build/crystal.zsh.install build/header.zsh.install build/library.zsh.install build/man.zsh.install build/moon.zsh.install build/ofile.zsh.install build/scdocman.zsh.install build/script.zsh.install build/sharedlib.zsh.install build/staticlib.zsh.install @: subdirs.install: -uninstall: subdirs.uninstall build.zsh.uninstall build/binary.zsh.uninstall build/crystal.zsh.uninstall build/header.zsh.uninstall build/library.zsh.uninstall build/man.zsh.uninstall build/moon.zsh.uninstall build/ofile.zsh.uninstall build/script.zsh.uninstall build/sharedlib.zsh.uninstall build/staticlib.zsh.uninstall +uninstall: subdirs.uninstall build.zsh.uninstall build/binary.zsh.uninstall build/crystal.zsh.uninstall build/header.zsh.uninstall build/library.zsh.uninstall build/man.zsh.uninstall build/moon.zsh.uninstall build/ofile.zsh.uninstall build/scdocman.zsh.uninstall build/script.zsh.uninstall build/sharedlib.zsh.uninstall build/staticlib.zsh.uninstall @: subdirs.uninstall: @@ -203,7 +216,7 @@ test: all subdirs subdirs.test subdirs.test: -clean: build.zsh.clean build/binary.zsh.clean build/crystal.zsh.clean build/header.zsh.clean build/library.zsh.clean build/man.zsh.clean build/moon.zsh.clean build/ofile.zsh.clean build/script.zsh.clean build/sharedlib.zsh.clean build/staticlib.zsh.clean +clean: build.zsh.clean build/binary.zsh.clean build/crystal.zsh.clean build/header.zsh.clean build/library.zsh.clean build/man.zsh.clean build/moon.zsh.clean build/ofile.zsh.clean build/scdocman.zsh.clean build/script.zsh.clean build/sharedlib.zsh.clean build/staticlib.zsh.clean distclean: clean @@ -216,7 +229,7 @@ distdir: dist-gz: $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION).tar.gz: distdir - @echo ' TAR > $(PACKAGE)-$(VERSION).tar.gz' + @echo ' TAR > $(PACKAGE)-$(VERSION).tar.gz' $(Q)tar czf $(PACKAGE)-$(VERSION).tar.gz \ $(PACKAGE)-$(VERSION)/build/binary.zsh \ $(PACKAGE)-$(VERSION)/build/crystal.zsh \ @@ -225,6 +238,7 @@ $(PACKAGE)-$(VERSION).tar.gz: distdir $(PACKAGE)-$(VERSION)/build/man.zsh \ $(PACKAGE)-$(VERSION)/build/moon.zsh \ $(PACKAGE)-$(VERSION)/build/ofile.zsh \ + $(PACKAGE)-$(VERSION)/build/scdocman.zsh \ $(PACKAGE)-$(VERSION)/build/script.zsh \ $(PACKAGE)-$(VERSION)/build/sharedlib.zsh \ $(PACKAGE)-$(VERSION)/build/staticlib.zsh \ @@ -234,7 +248,7 @@ $(PACKAGE)-$(VERSION).tar.gz: distdir dist-xz: $(PACKAGE)-$(VERSION).tar.xz $(PACKAGE)-$(VERSION).tar.xz: distdir - @echo ' TAR > $(PACKAGE)-$(VERSION).tar.xz' + @echo ' TAR > $(PACKAGE)-$(VERSION).tar.xz' $(Q)tar cJf $(PACKAGE)-$(VERSION).tar.xz \ $(PACKAGE)-$(VERSION)/build/binary.zsh \ $(PACKAGE)-$(VERSION)/build/crystal.zsh \ @@ -243,6 +257,7 @@ $(PACKAGE)-$(VERSION).tar.xz: distdir $(PACKAGE)-$(VERSION)/build/man.zsh \ $(PACKAGE)-$(VERSION)/build/moon.zsh \ $(PACKAGE)-$(VERSION)/build/ofile.zsh \ + $(PACKAGE)-$(VERSION)/build/scdocman.zsh \ $(PACKAGE)-$(VERSION)/build/script.zsh \ $(PACKAGE)-$(VERSION)/build/sharedlib.zsh \ $(PACKAGE)-$(VERSION)/build/staticlib.zsh \ @@ -252,7 +267,7 @@ $(PACKAGE)-$(VERSION).tar.xz: distdir dist-bz2: $(PACKAGE)-$(VERSION).tar.bz2 $(PACKAGE)-$(VERSION).tar.bz2: distdir - @echo ' TAR > $(PACKAGE)-$(VERSION).tar.bz2' + @echo ' TAR > $(PACKAGE)-$(VERSION).tar.bz2' $(Q)tar cjf $(PACKAGE)-$(VERSION).tar.bz2 \ $(PACKAGE)-$(VERSION)/build/binary.zsh \ $(PACKAGE)-$(VERSION)/build/crystal.zsh \ @@ -261,6 +276,7 @@ $(PACKAGE)-$(VERSION).tar.bz2: distdir $(PACKAGE)-$(VERSION)/build/man.zsh \ $(PACKAGE)-$(VERSION)/build/moon.zsh \ $(PACKAGE)-$(VERSION)/build/ofile.zsh \ + $(PACKAGE)-$(VERSION)/build/scdocman.zsh \ $(PACKAGE)-$(VERSION)/build/script.zsh \ $(PACKAGE)-$(VERSION)/build/sharedlib.zsh \ $(PACKAGE)-$(VERSION)/build/staticlib.zsh \ @@ -269,46 +285,47 @@ $(PACKAGE)-$(VERSION).tar.bz2: distdir $(PACKAGE)-$(VERSION)/Makefile help: - @echo ' :: build_zsh-0.2.2' + @echo ' :: build_zsh-0.3.0' @echo '' - @echo 'Generic targets:' - @echo ' - help Prints this help message.' - @echo ' - all Builds all targets.' - @echo ' - dist Creates tarballs of the files of the project.' - @echo ' - install Installs the project.' - @echo ' - clean Removes compiled files.' - @echo ' - uninstall Deinstalls the project.' + @echo 'Generic targets:' + @echo ' - help  Prints this help message.' + @echo ' - all  Builds all targets.' + @echo ' - dist  Creates tarballs of the files of the project.' + @echo ' - install  Installs the project.' + @echo ' - clean  Removes compiled files.' + @echo ' - uninstall  Deinstalls the project.' @echo '' - @echo 'CLI-modifiable variables:' - @echo ' - CC ${CC}' - @echo ' - CFLAGS ${CFLAGS}' - @echo ' - LDFLAGS ${LDFLAGS}' - @echo ' - DESTDIR ${DESTDIR}' - @echo ' - PREFIX ${PREFIX}' - @echo ' - BINDIR ${BINDIR}' - @echo ' - LIBDIR ${LIBDIR}' - @echo ' - SHAREDIR ${SHAREDIR}' - @echo ' - INCLUDEDIR ${INCLUDEDIR}' - @echo ' - MANDIR ${MANDIR}' + @echo 'CLI-modifiable variables:' + @echo ' - CC  ${CC}' + @echo ' - CFLAGS  ${CFLAGS}' + @echo ' - LDFLAGS  ${LDFLAGS}' + @echo ' - DESTDIR  ${DESTDIR}' + @echo ' - PREFIX  ${PREFIX}' + @echo ' - BINDIR  ${BINDIR}' + @echo ' - LIBDIR  ${LIBDIR}' + @echo ' - SHAREDIR  ${SHAREDIR}' + @echo ' - INCLUDEDIR  ${INCLUDEDIR}' + @echo ' - MANDIR  ${MANDIR}' @echo '' - @echo 'Project targets: ' - @echo ' - build.zsh script' - @echo ' - build/binary.zsh script' - @echo ' - build/crystal.zsh script' - @echo ' - build/header.zsh script' - @echo ' - build/library.zsh script' - @echo ' - build/man.zsh script' - @echo ' - build/moon.zsh script' - @echo ' - build/ofile.zsh script' - @echo ' - build/script.zsh script' - @echo ' - build/sharedlib.zsh script' - @echo ' - build/staticlib.zsh script' + @echo 'Project targets: ' + @echo ' - build.zsh  script' + @echo ' - build/binary.zsh script' + @echo ' - build/crystal.zsh script' + @echo ' - build/header.zsh script' + @echo ' - build/library.zsh script' + @echo ' - build/man.zsh  script' + @echo ' - build/moon.zsh script' + @echo ' - build/ofile.zsh script' + @echo ' - build/scdocman.zsh script' + @echo ' - build/script.zsh script' + @echo ' - build/sharedlib.zsh script' + @echo ' - build/staticlib.zsh script' @echo '' - @echo 'Makefile options:' + @echo 'Makefile options:' @echo ' - gnu: false' - @echo ' - colors: false' + @echo ' - colors: true' @echo '' - @echo 'Rebuild the Makefile with:' - @echo ' zsh ./build.zsh' + @echo 'Rebuild the Makefile with:' + @echo ' zsh ./build.zsh -c' .PHONY: all subdirs clean distclean dist install uninstall help diff --git a/build/scdocman.zsh b/build/scdocman.zsh new file mode 100644 index 0000000..d4c9e44 --- /dev/null +++ b/build/scdocman.zsh @@ -0,0 +1,81 @@ + +function scdocman.build { + typeset -l S + + if [[ -n "${sources[$target]}" ]]; then + S="${sources[$target]}" + elif [[ -e "${target}.scd" ]]; then + S="${target}.scd" + fi + + write -n "${target}:" + + if [[ -n "${S}" ]]; then + write " $S $(dirdep $target)" + write "\t@echo '$(SED "${target}" | sed 's|SED|MAN|')'" + write "\t${Q}scdoc < '$S' > '${target}'" + fi + + write "\n" +} + +function scdocman.install { + local basename="${filename[$target]}" + if [[ -z "$basename" ]]; then + basename="$(basename "${target}")" + fi + + local section="${basename%.scd}" + section="${section##*.}" + local install="${install[$target]:-\$(MANDIR)/man${section}}" + + write "${target}.install: ${target}" + write "\t@echo '$(IN "${install}/${basename}")'" + write "\t${Q}mkdir -p '\$(DESTDIR)${install}'" + write "\t${Q}install -m0644 ${target} \$(DESTDIR)${install}/${basename}" + write +} + +function scdocman.uninstall { + local basename="${filename[$target]}" + if [[ -z "$basename" ]]; then + basename="$(basename "${target}")" + fi + + local section="${basename%.scd}" + section="${section##*.}" + local install="${install[$target]:-\$(MANDIR)/man${section}}" + + write "${target}.uninstall:" + write "\t@echo '$(RM ${install}/${basename})'" + write "\t${Q}rm -f '\$(DESTDIR)${install}/${basename}'" + write +} + +function scdocman.clean { + typeset -l S + + if [[ -n "${sources[$target]}" ]]; then + S="${sources[$target]}" + else + S="${target}.scd" + fi + + write "${target}.clean:" + + if [[ -e "${S%% *}" ]]; then + write "\t@echo '$(RM ${target})'" + write "\t${Q}rm -f ${target}" + fi + + write +} + +function scdocman.distfiles { + if [[ -e "${target}.scd" ]]; then + echo "${target}.scd" + else + echo "${target}" + fi +} +