| 1 | # Makefile to update config. |
|---|
| 2 | # NOTE: GNU make is required. |
|---|
| 3 | ID=$$Id$$#{{{1 |
|---|
| 4 | |
|---|
| 5 | all: update |
|---|
| 6 | .PHONY: all clean package _package update |
|---|
| 7 | |
|---|
| 8 | SHELL=/bin/sh |
|---|
| 9 | # For testing `update', use like DESTDIR=./test |
|---|
| 10 | DESTDIR= |
|---|
| 11 | |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | |
|---|
| 15 | # Group definitions #{{{1 |
|---|
| 16 | ALL_GROUPS |
|---|
| 17 | ## sample |
|---|
| 18 | # ALL_GROUPS=DOTS VIM |
|---|
| 19 | |
|---|
| 20 | GROUP_DOTS_FILES=\ |
|---|
| 21 | dot.bash_profile \ |
|---|
| 22 | dot.bashrc \ |
|---|
| 23 | dot.bash.d/bash_completion \ |
|---|
| 24 | dot.bash.d/cdhist.sh \ |
|---|
| 25 | dot.bash.d/svk-completion.pl \ |
|---|
| 26 | dot.inputrc \ |
|---|
| 27 | dot.guile \ |
|---|
| 28 | dot.screenrc \ |
|---|
| 29 | dot.Xdefaults |
|---|
| 30 | GROUP_DOTS_RULE=$(patsubst dot.%,$(HOME)/.%,$(1)) |
|---|
| 31 | |
|---|
| 32 | GROUP_VIM_FILES=\ |
|---|
| 33 | $(GROUP_VIM_DOC_FILES) \ |
|---|
| 34 | vim/dot.vim/after/ftplugin/xml_autons.vim \ |
|---|
| 35 | vim/dot.vim/autoload/narrow.vim \ |
|---|
| 36 | vim/dot.vim/autoload/scratch.vim \ |
|---|
| 37 | vim/dot.vim/autoload/textobj/user.vim \ |
|---|
| 38 | vim/dot.vim/autoload/vcsi.vim \ |
|---|
| 39 | vim/dot.vim/autoload/xml/svg11.vim \ |
|---|
| 40 | vim/dot.vim/colors/black_angus.vim \ |
|---|
| 41 | vim/dot.vim/colors/gothic.vim \ |
|---|
| 42 | vim/dot.vim/colors/less.vim \ |
|---|
| 43 | vim/dot.vim/ftplugin/c_tofunc.vim \ |
|---|
| 44 | vim/dot.vim/ftplugin/issue.vim \ |
|---|
| 45 | vim/dot.vim/ftplugin/vim_tofunc.vim \ |
|---|
| 46 | vim/dot.vim/ftplugin/xml_move.vim \ |
|---|
| 47 | vim/dot.vim/plugin/cygclip.vim \ |
|---|
| 48 | vim/dot.vim/plugin/narrow.vim \ |
|---|
| 49 | vim/dot.vim/plugin/scratch.vim \ |
|---|
| 50 | vim/dot.vim/plugin/surround.vim \ |
|---|
| 51 | vim/dot.vim/plugin/surround_config.vim \ |
|---|
| 52 | vim/dot.vim/plugin/textobj/datetime.vim \ |
|---|
| 53 | vim/dot.vim/plugin/tofunc.vim \ |
|---|
| 54 | vim/dot.vim/plugin/vcsi.vim \ |
|---|
| 55 | vim/dot.vim/plugin/zapit.vim \ |
|---|
| 56 | vim/dot.vim/syntax/issue.vim \ |
|---|
| 57 | vim/dot.vim/syntax/rest.vim \ |
|---|
| 58 | vim/dot.vimrc |
|---|
| 59 | GROUP_VIM_RULE=$(patsubst vim/dot.%,$(HOME)/.%,$(1)) |
|---|
| 60 | GROUP_VIM_DOC_FILES=\ |
|---|
| 61 | vim/dot.vim/doc/cygclip.txt \ |
|---|
| 62 | vim/dot.vim/doc/narrow.txt \ |
|---|
| 63 | vim/dot.vim/doc/scratch.txt \ |
|---|
| 64 | vim/dot.vim/doc/surround.txt \ |
|---|
| 65 | vim/dot.vim/doc/textobj-datetime.txt \ |
|---|
| 66 | vim/dot.vim/doc/textobj-user.txt \ |
|---|
| 67 | vim/dot.vim/doc/tofunc.txt \ |
|---|
| 68 | vim/dot.vim/doc/vcsi.txt \ |
|---|
| 69 | vim/dot.vim/doc/xml_autons.txt \ |
|---|
| 70 | vim/dot.vim/doc/xml_move.txt \ |
|---|
| 71 | vim/dot.vim/doc/zapit.txt |
|---|
| 72 | GROUP_VIM_POST_TARGETS=vim-update-local-helptags |
|---|
| 73 | vim-update-local-helptags: $(DESTDIR)$(HOME)/.vim/doc/tags |
|---|
| 74 | $(DESTDIR)$(HOME)/.vim/doc/tags: $(GROUP_VIM_DOC_FILES) |
|---|
| 75 | vim -n -N -u NONE -U NONE -e -c 'helptags $(dir $@) | q' |
|---|
| 76 | |
|---|
| 77 | |
|---|
| 78 | |
|---|
| 79 | |
|---|
| 80 | # Package definitions #{{{1 |
|---|
| 81 | # Usage: |
|---|
| 82 | # make PACKAGE_NAME={one in ALL_PACKAGES} \ |
|---|
| 83 | # PACKAGE_TYPE={one in ALL_PACKAGE_TYPES} \ |
|---|
| 84 | # package |
|---|
| 85 | ALL_PACKAGES= |
|---|
| 86 | ## sample: |
|---|
| 87 | #ALL_PACKAGES=\ |
|---|
| 88 | # vim-all \ |
|---|
| 89 | # vim-cygclip |
|---|
| 90 | |
|---|
| 91 | PACKAGE_vim_all_ARCHIVE=vim-all |
|---|
| 92 | PACKAGE_vim_all_BASE=vim |
|---|
| 93 | PACKAGE_vim_all_FILES=$(GROUP_VIM_FILES) |
|---|
| 94 | |
|---|
| 95 | PACKAGE_vim_cygclip_ARCHIVE=vim-cygclip-0.1 |
|---|
| 96 | PACKAGE_vim_cygclip_BASE=vim/dot.vim |
|---|
| 97 | PACKAGE_vim_cygclip_FILES=\ |
|---|
| 98 | vim/dot.vim/doc/cygclip.txt \ |
|---|
| 99 | vim/dot.vim/plugin/cygclip.vim |
|---|
| 100 | |
|---|
| 101 | |
|---|
| 102 | |
|---|
| 103 | |
|---|
| 104 | # package #{{{1 |
|---|
| 105 | |
|---|
| 106 | PACKAGE_NAME=# Set from command line |
|---|
| 107 | PACKAGE_TYPE=tar |
|---|
| 108 | |
|---|
| 109 | ALL_PACKAGE_TYPES=tar zip |
|---|
| 110 | PACKAGE_COMMAND_tar=tar jcvf |
|---|
| 111 | PACKAGE_SUFFIX_tar=.tar.bz2 |
|---|
| 112 | PACKAGE_COMMAND_zip=zip |
|---|
| 113 | PACKAGE_SUFFIX_zip=.zip |
|---|
| 114 | |
|---|
| 115 | package: |
|---|
| 116 | if [ -z '$(filter $(PACKAGE_NAME),$(ALL_PACKAGES))' ]; then \ |
|---|
| 117 | echo 'Error: Invalid PACKAGE_NAME "$(PACKAGE_NAME)".'; \ |
|---|
| 118 | false; \ |
|---|
| 119 | fi |
|---|
| 120 | if [ -z '$(filter $(PACKAGE_TYPE),$(ALL_PACKAGE_TYPES))' ]; then \ |
|---|
| 121 | echo 'Error: Invalid PACKAGE_TYPE "$(PACKAGE_TYPE)".'; \ |
|---|
| 122 | false; \ |
|---|
| 123 | fi |
|---|
| 124 | $(MAKE) 'package=$(subst -,_,$(PACKAGE_NAME))' _package |
|---|
| 125 | _package: |
|---|
| 126 | ln -s $(PACKAGE_$(package)_BASE) $(PACKAGE_$(package)_ARCHIVE) |
|---|
| 127 | $(PACKAGE_COMMAND_$(PACKAGE_TYPE)) \ |
|---|
| 128 | $(PACKAGE_$(package)_ARCHIVE)$(PACKAGE_SUFFIX_$(PACKAGE_TYPE)) \ |
|---|
| 129 | $(foreach file, \ |
|---|
| 130 | $(PACKAGE_$(package)_FILES), \ |
|---|
| 131 | $(patsubst $(PACKAGE_$(package)_BASE)/%, \ |
|---|
| 132 | $(PACKAGE_$(package)_ARCHIVE)/%, \ |
|---|
| 133 | $(file))) |
|---|
| 134 | rm $(PACKAGE_$(package)_ARCHIVE) |
|---|
| 135 | |
|---|
| 136 | |
|---|
| 137 | |
|---|
| 138 | |
|---|
| 139 | # update #{{{1 |
|---|
| 140 | # Rules for `update' are generated by eval. |
|---|
| 141 | |
|---|
| 142 | UPDATE_DIR=mkdir -p |
|---|
| 143 | UPDATE_FILE=cp |
|---|
| 144 | |
|---|
| 145 | RemoveCurrentDirectory=$(filter-out ./,$(1)) |
|---|
| 146 | RemoveDuplicates=$(sort $(1)) |
|---|
| 147 | CallRule=$(call RemoveCurrentDirectory,$(call GROUP_$(1)_RULE,$(2))) |
|---|
| 148 | |
|---|
| 149 | define GenerateRulesToUpdateFile # (src, dest) |
|---|
| 150 | update: $(DESTDIR)$(2) |
|---|
| 151 | $(DESTDIR)$(2): $(1) |
|---|
| 152 | $(UPDATE_FILE) '$$<' '$$@' |
|---|
| 153 | |
|---|
| 154 | endef |
|---|
| 155 | |
|---|
| 156 | define GenerateRulesToUpdateDirectory # (dest) |
|---|
| 157 | update: $(DESTDIR)$(1) |
|---|
| 158 | $(DESTDIR)$(1): |
|---|
| 159 | $(UPDATE_DIR) '$$@' |
|---|
| 160 | |
|---|
| 161 | endef |
|---|
| 162 | |
|---|
| 163 | define GenerateRulesFromGroups # (groups = (group_name*)) |
|---|
| 164 | $(foreach directory, \ |
|---|
| 165 | $(call RemoveDuplicates, \ |
|---|
| 166 | $(foreach group, \ |
|---|
| 167 | $(1), \ |
|---|
| 168 | $(dir $(call CallRule,$(group),$(GROUP_$(group)_FILES))))), \ |
|---|
| 169 | $(call GenerateRulesToUpdateDirectory,$(directory))) |
|---|
| 170 | $(foreach group, \ |
|---|
| 171 | $(1), \ |
|---|
| 172 | $(foreach file, \ |
|---|
| 173 | $(GROUP_$(group)_FILES), \ |
|---|
| 174 | $(call GenerateRulesToUpdateFile,$(file),$(call CallRule,$(group),$(file))))) |
|---|
| 175 | update .PHONY: $(foreach group,$(1),$(GROUP_$(group)_POST_TARGETS)) |
|---|
| 176 | endef |
|---|
| 177 | |
|---|
| 178 | $(eval $(call GenerateRulesFromGroups,$(ALL_GROUPS))) |
|---|
| 179 | |
|---|
| 180 | |
|---|
| 181 | |
|---|
| 182 | |
|---|
| 183 | # clean #{{{1 |
|---|
| 184 | |
|---|
| 185 | clean: |
|---|
| 186 | rm -rf `find -name '*~' -or -name ',*'` |
|---|
| 187 | |
|---|
| 188 | |
|---|
| 189 | |
|---|
| 190 | |
|---|
| 191 | # __END__ |
|---|
| 192 | # vim: foldmethod=marker |
|---|