|
- # Makefile is here to make it possible to use this whole shebang
- # outside of emacs.
- #
- # TODO: wrap this stuff into a script maybe?
- DEST:=$(HOME)
- LAST!=cat .last || echo 0
- NEXT!=l=$(LAST); ((l=l+1)); echo $$l
- NEXTGEN:=$(PWD)/generation/$(NEXT)
- LASTGEN:=$(PWD)/generation/$(LAST)
- TANGLERS:=$(wildcard *.org)
- GEN:=$(LAST)
- OPTS:=
- # OSX uses scutil --get ComputerName
- # uname -n && hostname -s can return dhcp addresses
- # which aren't stable.
- HOST!=scutil --get ComputerName || uname -n
- USEROPTS:=$(OPTS):$(HOST)
-
- # Make it easier to check if a variable is defined or not
- # params:
- # variable name
- # optional message to print if variable is not set
- check_defined = \
- $(strip $(foreach 1,$1, \
- $(call __check_defined,$1,$(strip $(value 2)))))
- __check_defined = \
- $(if $(value $1),, \
- $(error Undefined variable $1$(if $2, ($2))))
-
- INSTALLDIRS=tmp $(NEXTGEN) $(LASTGEN) generation/$(GEN)
-
- all: clean tangle-next
-
- $(INSTALLDIRS):
- install -dm755 $@
-
- generation: $(NEXTGEN) $(LASTGEN) tmp
- cd tmp && cp -av . $(NEXTGEN)
-
- diff: generation/$(GEN)
- ./ddiff $(PWD)/generation/$(GEN) $(DEST)
-
- next: diff
-
- .PHONY: tangle-next
- tangle-next:
- @echo Tangling for hostname $(HOST)
- $(MAKE) tangle
- $(MAKE) generation
- $(MAKE) next
- $(MAKE) copy GEN=$(NEXT)
- $(MAKE) set-last NEXT=$(NEXT)
- @echo Tangled for hostname $(HOST)
-
- set-last:
- @echo $(NEXT) > .last
-
- copy:
- cd $(PWD)/generation/$(GEN) && find . -type f -exec rm -f $(DEST)/{} \;
- cd $(PWD)/generation/$(GEN) && cp -r . $(DEST)
-
- .PHONY: tangle
- tangle: tmp
- USEROPTS=$(USEROPTS) /usr/bin/env emacs --script ./etangle $(TANGLERS)
-
- # TODO: is this gnu diff output... only or not? note: wip until i've
- # tested on bsd make etc...
-
- .PHONY: removed
- removed:
- $(call check_defined, OLD, generation to compare removed files against)
- $(call check_defined, NEW, generation to compare removed files to)
- @diff -bur generation/$(OLD) generation/$(NEW) 2>&1 | grep 'Only in generation/'$(OLD) | sed -e 's|Only in ||' -e 's|.*[:] ||'
-
- clean:
- -rm -fr tmp
-
- nuke: clean
- -rm -fr .last generation
-
- .PHONY: option
- option:
- $(call check_defined, NAME, predicate NAME to define in option files. Note: without -p i.e. NAME-p = t and no-NAME-p = nil)
- echo "(setq $(NAME)-p t)" > options/$(NAME).el
- echo "(setq $(NAME)-p nil)" > options/no-$(NAME).el
|