Makefile (6749B)
1 include config.mk 2 3 .SUFFIXES: 4 .SUFFIXES: .o .c 5 6 HDR =\ 7 arg.h\ 8 compat.h\ 9 crypt.h\ 10 fs.h\ 11 md5.h\ 12 queue.h\ 13 sha1.h\ 14 sha224.h\ 15 sha256.h\ 16 sha384.h\ 17 sha512.h\ 18 sha512-224.h\ 19 sha512-256.h\ 20 text.h\ 21 utf.h\ 22 util.h 23 24 LIBUTF = libutf.a 25 LIBUTFSRC =\ 26 libutf/fgetrune.c\ 27 libutf/fputrune.c\ 28 libutf/isalnumrune.c\ 29 libutf/isalpharune.c\ 30 libutf/isblankrune.c\ 31 libutf/iscntrlrune.c\ 32 libutf/isdigitrune.c\ 33 libutf/isgraphrune.c\ 34 libutf/isprintrune.c\ 35 libutf/ispunctrune.c\ 36 libutf/isspacerune.c\ 37 libutf/istitlerune.c\ 38 libutf/isxdigitrune.c\ 39 libutf/lowerrune.c\ 40 libutf/rune.c\ 41 libutf/runetype.c\ 42 libutf/upperrune.c\ 43 libutf/utf.c\ 44 libutf/utftorunestr.c 45 46 LIBUTIL = libutil.a 47 LIBUTILSRC =\ 48 libutil/concat.c\ 49 libutil/cp.c\ 50 libutil/crypt.c\ 51 libutil/ealloc.c\ 52 libutil/enmasse.c\ 53 libutil/eprintf.c\ 54 libutil/eregcomp.c\ 55 libutil/estrtod.c\ 56 libutil/fnck.c\ 57 libutil/fshut.c\ 58 libutil/getlines.c\ 59 libutil/human.c\ 60 libutil/linecmp.c\ 61 libutil/md5.c\ 62 libutil/memmem.c\ 63 libutil/mkdirp.c\ 64 libutil/mode.c\ 65 libutil/parseoffset.c\ 66 libutil/putword.c\ 67 libutil/reallocarray.c\ 68 libutil/recurse.c\ 69 libutil/rm.c\ 70 libutil/sha1.c\ 71 libutil/sha224.c\ 72 libutil/sha256.c\ 73 libutil/sha384.c\ 74 libutil/sha512.c\ 75 libutil/sha512-224.c\ 76 libutil/sha512-256.c\ 77 libutil/strcasestr.c\ 78 libutil/strlcat.c\ 79 libutil/strlcpy.c\ 80 libutil/strsep.c\ 81 libutil/strtonum.c\ 82 libutil/unescape.c\ 83 libutil/writeall.c 84 85 LIB = $(LIBUTF) $(LIBUTIL) 86 87 BIN =\ 88 basename\ 89 cal\ 90 cat\ 91 chgrp\ 92 chmod\ 93 chown\ 94 chroot\ 95 cksum\ 96 cmp\ 97 cols\ 98 comm\ 99 cp\ 100 cron\ 101 cut\ 102 date\ 103 dd\ 104 dirname\ 105 du\ 106 echo\ 107 ed\ 108 env\ 109 expand\ 110 expr\ 111 false\ 112 find\ 113 flock\ 114 fold\ 115 getconf\ 116 grep\ 117 head\ 118 hostname\ 119 join\ 120 kill\ 121 link\ 122 ln\ 123 logger\ 124 logname\ 125 ls\ 126 md5sum\ 127 mkdir\ 128 mkfifo\ 129 mknod\ 130 mktemp\ 131 mv\ 132 nice\ 133 nl\ 134 nohup\ 135 od\ 136 paste\ 137 pathchk\ 138 printenv\ 139 printf\ 140 pwd\ 141 readlink\ 142 renice\ 143 rev\ 144 rm\ 145 rmdir\ 146 sed\ 147 seq\ 148 setsid\ 149 sha1sum\ 150 sha224sum\ 151 sha256sum\ 152 sha384sum\ 153 sha512sum\ 154 sha512-224sum\ 155 sha512-256sum\ 156 sleep\ 157 sort\ 158 split\ 159 sponge\ 160 strings\ 161 sync\ 162 tail\ 163 tar\ 164 tee\ 165 test\ 166 tftp\ 167 time\ 168 touch\ 169 tr\ 170 true\ 171 tsort\ 172 tty\ 173 uname\ 174 unexpand\ 175 uniq\ 176 unlink\ 177 uudecode\ 178 uuencode\ 179 wc\ 180 which\ 181 whoami\ 182 xargs\ 183 xinstall\ 184 yes 185 186 LIBUTFOBJ = $(LIBUTFSRC:.c=.o) 187 LIBUTILOBJ = $(LIBUTILSRC:.c=.o) 188 OBJ = $(BIN:=.o) $(LIBUTFOBJ) $(LIBUTILOBJ) 189 SRC = $(BIN:=.c) 190 MAN = $(BIN:=.1) 191 192 all: $(BIN) 193 194 $(BIN): $(LIB) $(@:=.o) 195 196 $(OBJ): $(HDR) config.mk 197 198 .o: 199 $(CC) $(LDFLAGS) -o $@ $< $(LIB) 200 201 .c.o: 202 $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< 203 204 $(LIBUTF): $(LIBUTFOBJ) 205 $(AR) rc $@ $? 206 $(RANLIB) $@ 207 208 $(LIBUTIL): $(LIBUTILOBJ) 209 $(AR) rc $@ $? 210 $(RANLIB) $@ 211 212 getconf.o: getconf.h 213 214 getconf.h: getconf.sh 215 ./getconf.sh > $@ 216 217 install: all 218 mkdir -p $(DESTDIR)$(PREFIX)/bin 219 cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin 220 cd $(DESTDIR)$(PREFIX)/bin && ln -f test [ && chmod 755 $(BIN) 221 mv -f $(DESTDIR)$(PREFIX)/bin/xinstall $(DESTDIR)$(PREFIX)/bin/install 222 mkdir -p $(DESTDIR)$(MANPREFIX)/man1 223 for m in $(MAN); do sed "s/^\.Os sbase/.Os sbase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done 224 cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN) 225 mv -f $(DESTDIR)$(MANPREFIX)/man1/xinstall.1 $(DESTDIR)$(MANPREFIX)/man1/install.1 226 227 uninstall: 228 cd $(DESTDIR)$(PREFIX)/bin && rm -f $(BIN) [ install 229 cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(MAN) install.1 230 231 dist: clean 232 mkdir -p sbase-$(VERSION) 233 cp -r LICENSE Makefile README TODO config.mk $(SRC) $(MAN) libutf libutil $(HDR) sbase-$(VERSION) 234 tar -cf sbase-$(VERSION).tar sbase-$(VERSION) 235 gzip sbase-$(VERSION).tar 236 rm -rf sbase-$(VERSION) 237 238 sbase-box: $(LIB) $(SRC) getconf.h 239 mkdir -p build 240 cp $(HDR) build 241 cp getconf.h build 242 for f in $(SRC); do sed "s/^main(/$$(echo "$${f%.c}" | sed s/-/_/g)_&/" < $$f > build/$$f; done 243 echo '#include <libgen.h>' > build/$@.c 244 echo '#include <stdio.h>' >> build/$@.c 245 echo '#include <stdlib.h>' >> build/$@.c 246 echo '#include <string.h>' >> build/$@.c 247 echo '#include "util.h"' >> build/$@.c 248 for f in $(SRC); do echo "int $$(echo "$${f%.c}" | sed s/-/_/g)_main(int, char **);"; done >> build/$@.c 249 echo 'int main(int argc, char *argv[]) { char *s = basename(argv[0]);' >> build/$@.c 250 echo 'if(!strcmp(s,"sbase-box")) { argc--; argv++; s = basename(argv[0]); } if(0) ;' >> build/$@.c 251 echo "else if (!strcmp(s, \"install\")) return xinstall_main(argc, argv);" >> build/$@.c 252 echo "else if (!strcmp(s, \"[\")) return test_main(argc, argv);" >> build/$@.c 253 for f in $(SRC); do echo "else if(!strcmp(s, \"$${f%.c}\")) return $$(echo "$${f%.c}" | sed s/-/_/g)_main(argc, argv);"; done >> build/$@.c 254 echo 'else { fputs("[ ", stdout);' >> build/$@.c 255 for f in $(SRC); do echo "fputs(\"$${f%.c} \", stdout);"; done >> build/$@.c 256 echo 'putchar(0xa); }; return 0; }' >> build/$@.c 257 $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ build/*.c $(LIB) 258 rm -r build 259 260 sbase-box-install: sbase-box 261 mkdir -p $(DESTDIR)$(PREFIX)/bin 262 cp -f sbase-box $(DESTDIR)$(PREFIX)/bin 263 chmod 755 $(DESTDIR)$(PREFIX)/bin/sbase-box 264 for f in $(BIN); do ln -sf sbase-box $(DESTDIR)$(PREFIX)/bin/"$$f"; done 265 ln -sf sbase-box $(DESTDIR)$(PREFIX)/bin/[ 266 mv -f $(DESTDIR)$(PREFIX)/bin/xinstall $(DESTDIR)$(PREFIX)/bin/install 267 mkdir -p $(DESTDIR)$(MANPREFIX)/man1 268 for m in $(MAN); do sed "s/^\.Os sbase/.Os sbase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done 269 cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN) 270 mv -f $(DESTDIR)$(MANPREFIX)/man1/xinstall.1 $(DESTDIR)$(MANPREFIX)/man1/install.1 271 272 sbase-box-uninstall: uninstall 273 cd $(DESTDIR)$(PREFIX)/bin && rm -f sbase-box 274 275 clean: 276 rm -f $(BIN) $(OBJ) $(LIB) sbase-box sbase-$(VERSION).tar.gz 277 rm -f getconf.h 278 279 .gitignore: 280 { printf '*.o\n' ; printf '/%s\n' getconf.h $(LIB) $(BIN) ; } > $@ 281 282 .PHONY: all install uninstall dist sbase-box-install sbase-box-uninstall clean .gitignore