aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile276
1 files changed, 50 insertions, 226 deletions
diff --git a/Makefile b/Makefile
index 35addb0..61d51fb 100644
--- a/Makefile
+++ b/Makefile
@@ -1,244 +1,68 @@
-# Copying and distribution of this file, with or without modification,
-# are permitted in any medium without royalty provided the copyright
-# notice and this notice are preserved. This file is offered as-is,
-# without any warranty.
-
-
-# The package path prefix, if you want to install to another root, set DESTDIR to that root.
-PREFIX = /usr
-# The binary path excluding prefix.
-BIN = /bin
-# The resource path excluding prefix.
-DATA = /share
-# The binary path including prefix.
-BINDIR = $(PREFIX)$(BIN)
-# The resource path including prefix.
-DATADIR = $(PREFIX)$(DATA)
-# The generic documentation path including prefix
-DOCDIR = $(DATADIR)/doc
-# The info manual documentation path including prefix
-INFODIR = $(DATADIR)/info
-# The man page documentation path including prefix
-MANDIR = $(DATADIR)/man
-# The license base path including prefix.
-LICENSEDIR = $(DATADIR)/licenses
-
-
-# The name of the package as it should be installed.
-PKGNAME = sleep-until
-# The name of the command as it should be installed.
-COMMAND = sleep-until
-
-
-# The https://github.com/maandree/gpp command.
-GPP = gpp
-
-
-WARN = -Wall -Wextra -pedantic -Wdouble-promotion -Wformat=2 -Winit-self -Wmissing-include-dirs \
- -Wtrampolines -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
- -Wno-variadic-macros -Wsync-nand -Wunsafe-loop-optimizations -Wcast-align \
- -Wdeclaration-after-statement -Wundef -Wbad-function-cast -Wwrite-strings -Wlogical-op \
- -Wstrict-prototypes -Wold-style-definition -Wpacked -Wvector-operation-performance \
- -Wunsuffixed-float-constants -Wsuggest-attribute=const -Wsuggest-attribute=noreturn \
- -Wsuggest-attribute=format -Wnormalized=nfkc -Wshadow -Wredundant-decls -Winline -Wcast-qual \
- -Wsign-conversion -Wstrict-overflow=5 -Wconversion -Wsuggest-attribute=pure -Wswitch-default \
- -Wstrict-aliasing=1 -fstrict-overflow -Wfloat-equal -Wpadded -Waggregate-return \
- -Wtraditional-conversion
-STD = -std=c99
-OPTIMISE = -O2
-FLAGS = $(WARN) $(STD) $(OPTIMISE) -D_POSIX_C_SOURCE=199309L
-
-
-# Build rules.
-
-.PHONY: default
-default: command info shell
-
-.PHONY: all
-all: command doc shell
-
-# Build rules for the command.
-
-.PHONY: command
-command: bin/sleep-until
-
-bin/sleep-until: obj/sleep-until.o
- @mkdir -p bin
- $(CC) $(FLAGS) -o $@ $^ $(LDFLAGS)
-
-obj/sleep-until.o: obj/sleep-until.c
- $(CC) $(FLAGS) -c -o $@ $< $(CFLAGS) $(CPPFLAGS)
-
-obj/sleep-until.c: src/sleep-until.c
- @mkdir -p obj
- $(GPP) -s '$$' -i $< -o $@
-
-# Build rules for documentation.
-
-.PHONY: doc
-doc: info pdf dvi ps
-
-.PHONY: info
-info: bin/sleep-until.info
-bin/%.info: doc/info/%.texinfo doc/info/fdl.texinfo
- @mkdir -p bin
- makeinfo $<
- mv $*.info $@
-
-.PHONY: pdf
-pdf: bin/sleep-until.pdf
-bin/%.pdf: doc/info/%.texinfo doc/info/fdl.texinfo
- @mkdir -p obj/pdf bin
- cd obj/pdf ; yes X | texi2pdf ../../$< < /dev/null
- mv obj/pdf/$*.pdf $@
-
-.PHONY: dvi
-dvi: bin/sleep-until.dvi
-bin/%.dvi: doc/info/%.texinfo doc/info/fdl.texinfo
- @mkdir -p obj/dvi bin
- cd obj/dvi ; yes X | $(TEXI2DVI) ../../$< < /dev/null
- mv obj/dvi/$*.dvi $@
-
-.PHONY: ps
-ps: bin/sleep-until.ps
-bin/%.ps: doc/info/%.texinfo doc/info/fdl.texinfo
- @mkdir -p obj/ps bin
- cd obj/ps ; yes X | texi2pdf --ps ../../$< < /dev/null
- mv obj/ps/$*.ps $@
-
-# Build rules for shell auto-completion.
-
-.PHONY: shell
-shell: bash zsh fish
-
-.PHONY: bash
-bash: bin/sleep-until.bash
-bin/sleep-until.bash: src/completion
- @mkdir -p bin
- auto-auto-complete bash --output $@ --source $<
-
-.PHONY: zsh
-zsh: bin/sleep-until.zsh
-bin/sleep-until.zsh: src/completion
- @mkdir -p bin
- auto-auto-complete zsh --output $@ --source $<
-
-.PHONY: fish
-fish: bin/sleep-until.fish
-bin/sleep-until.fish: src/completion
- @mkdir -p bin
- auto-auto-complete fish --output $@ --source $<
-
-
-# Install rules.
-
-.PHONY: install
-install: install-base install-info install-man install-shell
-
-.PHONY: install
-install-all: install-base install-doc install-shell
-
-# Install base rules.
+.POSIX:
-.PHONY: install-base
-install-base: install-command install-copyright
+CONFIGFILE = config.mk
+include $(CONFIGFILE)
-.PHONY: install-command
-install-command: bin/sleep-until
- install -dm755 -- "$(DESTDIR)$(BINDIR)"
- install -m755 $< -- "$(DESTDIR)$(BINDIR)/$(COMMAND)"
-
-.PHONY: install-copyright
-install-copyright: install-copying install-license
-
-.PHONY: install-copying
-install-copying:
- install -dm755 -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)"
- install -m644 COPYING -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)/COPYING"
-
-.PHONY: install-license
-install-license:
- install -dm755 -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)"
- install -m644 LICENSE -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)/LICENSE"
-
-# Install documentation.
-
-.PHONY: install-doc
-install-doc: install-info install-pdf install-ps install-dvi install-man
+all: base shell
+base: sleep-until
+shell: bash zsh fish
+bash: sleep-until.bash
+zsh: sleep-until.zsh
+fish: sleep-until.fish
-.PHONY: install-info
-install-info: bin/sleep-until.info
- install -dm755 -- "$(DESTDIR)$(INFODIR)"
- install -m644 $< -- "$(DESTDIR)$(INFODIR)/$(PKGNAME).info"
+clocks.h:
+ sed -n 's/^[ \t]*#[ \t]*define[ \t][ \t]*\(CLOCK_[^ \t]*\).*$$/X(\1)/p' < /usr/include/bits/time.h > $@
-.PHONY: install-pdf
-install-pdf: bin/sleep-until.pdf
- install -dm755 -- "$(DESTDIR)$(DOCDIR)"
- install -m644 $< -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).pdf"
+sleep-until.o: sleep-until.c clocks.h
+ $(CC) -c -o $@ $< $(CFLAGS) $(CPPFLAGS)
-.PHONY: install-ps
-install-ps: bin/sleep-until.ps
- install -dm755 -- "$(DESTDIR)$(DOCDIR)"
- install -m644 $< -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).ps"
+sleep-until: sleep-until.o
+ $(CC) -o $@ sleep-until.o $(LDFLAGS)
-.PHONY: install-dvi
-install-dvi: bin/sleep-until.dvi
- install -dm755 -- "$(DESTDIR)$(DOCDIR)"
- install -m644 $< -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).dvi"
+sleep-until.bash: completion
+ auto-auto-complete bash --output $@ --source $<
-.PHONY: install-man
-install-man:
- install -dm755 -- "$(DESTDIR)$(MANDIR)/man1"
- install -m644 doc/man/sleep-until.1 -- "$(DESTDIR)$(MANDIR)/man1/$(COMMAND).1"
+sleep-until.zsh: completion
+ auto-auto-complete zsh --output $@ --source $<
-# Install shell auto-completion.
+sleep-until.fish: completion
+ auto-auto-complete fish --output $@ --source $<
-.PHONY: install-shell
+install: install-base install-shell
install-shell: install-bash install-zsh install-fish
-.PHONY: install-bash
-install-bash: bin/sleep-until.bash
- install -dm755 -- "$(DESTDIR)$(DATADIR)/bash-completion/completions"
- install -m644 $< -- "$(DESTDIR)$(DATADIR)/bash-completion/completions/$(COMMAND)"
+install-base: sleep-until
+ mkdir -p -- "$(DESTDIR)$(PREFIX)/bin"
+ mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man1"
+ cp -- sleep-until "$(DESTDIR)$(PREFIX)/bin"
+ cp -- sleep-until.1 "$(DESTDIR)$(MANPREFIX)/man1"
-.PHONY: install-zsh
-install-zsh: bin/sleep-until.zsh
- install -dm755 -- "$(DESTDIR)$(DATADIR)/zsh/site-functions"
- install -m644 $< -- "$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(COMMAND)"
+install-bash: sleep-until.bash
+ mkdir -p -- "$(DESTDIR)$(PREFIX)/share/bash-completion/completions"
+ cp -- sleep-until.bash "$(DESTDIR)$(PREFIX)/share/bash-completion/completions/sleep-until"
-.PHONY: install-fish
-install-fish: bin/sleep-until.fish
- install -dm755 -- "$(DESTDIR)$(DATADIR)/fish/completions"
- install -m644 $< -- "$(DESTDIR)$(DATADIR)/fish/completions/$(COMMAND).fish"
+install-zsh: sleep-until.zsh
+ mkdir -p -- "$(DESTDIR)$(PREFIX)/share/zsh/site-functions"
+ cp -- sleep-until.zsh "$(DESTDIR)$(PREFIX)/share/zsh/site-functions/_sleep-until"
+install-fish: sleep-until.fish
+ mkdir -p -- "$(DESTDIR)$(PREFIX)/share/fish/completions"
+ cp -- sleep-until.fish "$(DESTDIR)$(PREFIX)/share/fish/completions/sleep-until.fish"
-# Uninstall rules.
-
-.PHONY: uninstall
uninstall:
- -rm -- "$(DESTDIR)$(BINDIR)/$(COMMAND)"
- -rm -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)/COPYING"
- -rm -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)/LICENSE"
- -rmdir -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)"
- -rm -- "$(DESTDIR)$(INFODIR)/$(PKGNAME).info"
- -rm -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).pdf"
- -rm -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).ps"
- -rm -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).dvi"
- -rm -- "$(DESTDIR)$(MANDIR)/man1/$(COMMAND).1"
- -rm -- "$(DESTDIR)$(DATADIR)/fish/completions/$(COMMAND).fish"
- -rmdir -- "$(DESTDIR)$(DATADIR)/fish/completions"
- -rmdir -- "$(DESTDIR)$(DATADIR)/fish"
- -rm -- "$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(COMMAND)"
- -rmdir -- "$(DESTDIR)$(DATADIR)/zsh/site-functions"
- -rmdir -- "$(DESTDIR)$(DATADIR)/zsh"
- -rm -- "$(DESTDIR)$(DATADIR)/bash-completion/completions/$(COMMAND)"
- -rmdir -- "$(DESTDIR)$(DATADIR)/bash-completion/completions"
- -rmdir -- "$(DESTDIR)$(DATADIR)/bash-completion"
-
-
-# Clean rules.
-
-.PHONY: clean
+ -rm -f -- "$(DESTDIR)$(BINDIR)/sleep-until"
+ -rm -f -- "$(DESTDIR)$(MANPREFIX)/man1/sleep-until.1"
+ -rm -f -- "$(DESTDIR)$(PREFIX)/share/fish/completions/sleep-until.fish"
+ -rmdir -- "$(DESTDIR)$(PREFIX)/share/fish/completions"
+ -rmdir -- "$(DESTDIR)$(PREFIX)/share/fish"
+ -rm -f -- "$(DESTDIR)$(PREFIX)/share/zsh/site-functions/_sleep-until"
+ -rmdir -- "$(DESTDIR)$(PREFIX)/share/zsh/site-functions"
+ -rmdir -- "$(DESTDIR)$(PREFIX)/share/zsh"
+ -rm -f -- "$(DESTDIR)$(PREFIX)/share/bash-completion/completions/sleep-until"
+ -rmdir -- "$(DESTDIR)$(PREFIX)/share/bash-completion/completions"
+ -rmdir -- "$(DESTDIR)$(PREFIX)/share/bash-completion"
+
clean:
- -rm -rf obj bin
+ -rm -f -- sleep-until *.o clocks.h *.bash *.zsh *.fish
+.PHONY: all base shell bash zsh fish install install-base install-shell install-base install-zsh install-fish uninstall clean