sbase

suckless unix tools
git clone git://git.suckless.org/sbase
Log | Files | Refs | README | LICENSE

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