# Makefile to update config. # NOTE: GNU make is required. ID=$$Id$$#{{{1 all: update .PHONY: all clean package _package update SHELL=/bin/sh # For testing `update', use like DESTDIR=./test DESTDIR= # Group definitions #{{{1 ALL_GROUPS ## sample # ALL_GROUPS=DOTS VIM GROUP_DOTS_FILES=\ dot.bash_profile \ dot.bashrc \ dot.bash.d/bash_completion \ dot.bash.d/cdhist.sh \ dot.bash.d/svk-completion.pl \ dot.inputrc \ dot.guile \ dot.screenrc \ dot.Xdefaults GROUP_DOTS_RULE=$(patsubst dot.%,$(HOME)/.%,$(1)) GROUP_VIM_FILES=\ $(GROUP_VIM_DOC_FILES) \ vim/dot.vim/after/ftplugin/xml_autons.vim \ vim/dot.vim/autoload/narrow.vim \ vim/dot.vim/autoload/scratch.vim \ vim/dot.vim/autoload/textobj/user.vim \ vim/dot.vim/autoload/vcsi.vim \ vim/dot.vim/autoload/xml/svg11.vim \ vim/dot.vim/colors/black_angus.vim \ vim/dot.vim/colors/gothic.vim \ vim/dot.vim/colors/less.vim \ vim/dot.vim/ftplugin/c_tofunc.vim \ vim/dot.vim/ftplugin/issue.vim \ vim/dot.vim/ftplugin/vim_tofunc.vim \ vim/dot.vim/ftplugin/xml_move.vim \ vim/dot.vim/plugin/cygclip.vim \ vim/dot.vim/plugin/narrow.vim \ vim/dot.vim/plugin/scratch.vim \ vim/dot.vim/plugin/surround.vim \ vim/dot.vim/plugin/surround_config.vim \ vim/dot.vim/plugin/textobj/datetime.vim \ vim/dot.vim/plugin/tofunc.vim \ vim/dot.vim/plugin/vcsi.vim \ vim/dot.vim/plugin/zapit.vim \ vim/dot.vim/syntax/issue.vim \ vim/dot.vim/syntax/rest.vim \ vim/dot.vimrc GROUP_VIM_RULE=$(patsubst vim/dot.%,$(HOME)/.%,$(1)) GROUP_VIM_DOC_FILES=\ vim/dot.vim/doc/cygclip.txt \ vim/dot.vim/doc/narrow.txt \ vim/dot.vim/doc/scratch.txt \ vim/dot.vim/doc/surround.txt \ vim/dot.vim/doc/textobj-datetime.txt \ vim/dot.vim/doc/textobj-user.txt \ vim/dot.vim/doc/tofunc.txt \ vim/dot.vim/doc/vcsi.txt \ vim/dot.vim/doc/xml_autons.txt \ vim/dot.vim/doc/xml_move.txt \ vim/dot.vim/doc/zapit.txt GROUP_VIM_POST_TARGETS=vim-update-local-helptags vim-update-local-helptags: $(DESTDIR)$(HOME)/.vim/doc/tags $(DESTDIR)$(HOME)/.vim/doc/tags: $(GROUP_VIM_DOC_FILES) vim -n -N -u NONE -U NONE -e -c 'helptags $(dir $@) | q' # Package definitions #{{{1 # Usage: # make PACKAGE_NAME={one in ALL_PACKAGES} \ # PACKAGE_TYPE={one in ALL_PACKAGE_TYPES} \ # package ALL_PACKAGES= ## sample: #ALL_PACKAGES=\ # vim-all \ # vim-cygclip PACKAGE_vim_all_ARCHIVE=vim-all PACKAGE_vim_all_BASE=vim PACKAGE_vim_all_FILES=$(GROUP_VIM_FILES) PACKAGE_vim_cygclip_ARCHIVE=vim-cygclip-0.1 PACKAGE_vim_cygclip_BASE=vim/dot.vim PACKAGE_vim_cygclip_FILES=\ vim/dot.vim/doc/cygclip.txt \ vim/dot.vim/plugin/cygclip.vim # package #{{{1 PACKAGE_NAME=# Set from command line PACKAGE_TYPE=tar ALL_PACKAGE_TYPES=tar zip PACKAGE_COMMAND_tar=tar jcvf PACKAGE_SUFFIX_tar=.tar.bz2 PACKAGE_COMMAND_zip=zip PACKAGE_SUFFIX_zip=.zip package: if [ -z '$(filter $(PACKAGE_NAME),$(ALL_PACKAGES))' ]; then \ echo 'Error: Invalid PACKAGE_NAME "$(PACKAGE_NAME)".'; \ false; \ fi if [ -z '$(filter $(PACKAGE_TYPE),$(ALL_PACKAGE_TYPES))' ]; then \ echo 'Error: Invalid PACKAGE_TYPE "$(PACKAGE_TYPE)".'; \ false; \ fi $(MAKE) 'package=$(subst -,_,$(PACKAGE_NAME))' _package _package: ln -s $(PACKAGE_$(package)_BASE) $(PACKAGE_$(package)_ARCHIVE) $(PACKAGE_COMMAND_$(PACKAGE_TYPE)) \ $(PACKAGE_$(package)_ARCHIVE)$(PACKAGE_SUFFIX_$(PACKAGE_TYPE)) \ $(foreach file, \ $(PACKAGE_$(package)_FILES), \ $(patsubst $(PACKAGE_$(package)_BASE)/%, \ $(PACKAGE_$(package)_ARCHIVE)/%, \ $(file))) rm $(PACKAGE_$(package)_ARCHIVE) # update #{{{1 # Rules for `update' are generated by eval. UPDATE_DIR=mkdir -p UPDATE_FILE=cp RemoveCurrentDirectory=$(filter-out ./,$(1)) RemoveDuplicates=$(sort $(1)) CallRule=$(call RemoveCurrentDirectory,$(call GROUP_$(1)_RULE,$(2))) define GenerateRulesToUpdateFile # (src, dest) update: $(DESTDIR)$(2) $(DESTDIR)$(2): $(1) $(UPDATE_FILE) '$$<' '$$@' endef define GenerateRulesToUpdateDirectory # (dest) update: $(DESTDIR)$(1) $(DESTDIR)$(1): $(UPDATE_DIR) '$$@' endef define GenerateRulesFromGroups # (groups = (group_name*)) $(foreach directory, \ $(call RemoveDuplicates, \ $(foreach group, \ $(1), \ $(dir $(call CallRule,$(group),$(GROUP_$(group)_FILES))))), \ $(call GenerateRulesToUpdateDirectory,$(directory))) $(foreach group, \ $(1), \ $(foreach file, \ $(GROUP_$(group)_FILES), \ $(call GenerateRulesToUpdateFile,$(file),$(call CallRule,$(group),$(file))))) update .PHONY: $(foreach group,$(1),$(GROUP_$(group)_POST_TARGETS)) endef $(eval $(call GenerateRulesFromGroups,$(ALL_GROUPS))) # clean #{{{1 clean: rm -rf `find -name '*~' -or -name ',*'` # __END__ # vim: foldmethod=marker