Makefile (6003B)
1 include config.mk 2 3 .SUFFIXES: 4 .SUFFIXES: .o .c 5 6 HDR = \ 7 arg.h \ 8 config.h \ 9 passwd.h \ 10 proc.h \ 11 queue.h \ 12 reboot.h \ 13 rtc.h \ 14 text.h \ 15 util.h 16 17 LIBUTIL = libutil.a 18 LIBUTILSRC = \ 19 libutil/agetcwd.c \ 20 libutil/agetline.c \ 21 libutil/apathmax.c \ 22 libutil/concat.c \ 23 libutil/ealloc.c \ 24 libutil/eprintf.c \ 25 libutil/estrtol.c \ 26 libutil/estrtoul.c \ 27 libutil/explicit_bzero.c \ 28 libutil/passwd.c \ 29 libutil/proc.c \ 30 libutil/putword.c \ 31 libutil/recurse.c \ 32 libutil/strlcat.c \ 33 libutil/strlcpy.c \ 34 libutil/strtonum.c \ 35 libutil/tty.c 36 37 LIB = $(LIBUTIL) 38 39 BIN = \ 40 blkdiscard \ 41 chvt \ 42 clear \ 43 ctrlaltdel \ 44 dd \ 45 df \ 46 dmesg \ 47 eject \ 48 fallocate \ 49 free \ 50 freeramdisk \ 51 fsfreeze \ 52 getty \ 53 halt \ 54 hwclock \ 55 id \ 56 insmod \ 57 killall5 \ 58 last \ 59 lastlog \ 60 login \ 61 lsmod \ 62 lsusb \ 63 mesg \ 64 mknod \ 65 mkswap \ 66 mount \ 67 mountpoint \ 68 nologin \ 69 pagesize \ 70 passwd \ 71 pidof \ 72 pivot_root \ 73 ps \ 74 pwdx \ 75 readahead \ 76 respawn \ 77 rmmod \ 78 stat \ 79 su \ 80 swaplabel \ 81 swapoff \ 82 swapon \ 83 switch_root \ 84 sysctl \ 85 truncate \ 86 umount \ 87 unshare \ 88 uptime \ 89 vtallow \ 90 watch \ 91 who 92 93 MAN1 = \ 94 chvt.1 \ 95 clear.1 \ 96 dd.1 \ 97 df.1 \ 98 dmesg.1 \ 99 eject.1 \ 100 fallocate.1 \ 101 free.1 \ 102 id.1 \ 103 login.1 \ 104 mesg.1 \ 105 mknod.1 \ 106 mountpoint.1 \ 107 pagesize.1 \ 108 passwd.1 \ 109 pidof.1 \ 110 ps.1 \ 111 pwdx.1 \ 112 respawn.1 \ 113 stat.1 \ 114 su.1 \ 115 truncate.1 \ 116 unshare.1 \ 117 uptime.1 \ 118 vtallow.1 \ 119 watch.1 \ 120 who.1 121 122 MAN8 = \ 123 ctrlaltdel.8 \ 124 freeramdisk.8 \ 125 fsfreeze.8 \ 126 getty.8 \ 127 halt.8 \ 128 hwclock.8 \ 129 insmod.8 \ 130 killall5.8 \ 131 lastlog.8 \ 132 lsmod.8 \ 133 lsusb.8 \ 134 mkswap.8 \ 135 mount.8 \ 136 nologin.8 \ 137 pivot_root.8 \ 138 readahead.8 \ 139 rmmod.8 \ 140 swaplabel.8 \ 141 swapoff.8 \ 142 swapon.8 \ 143 switch_root.8 \ 144 sysctl.8 \ 145 umount.8 146 147 LIBUTILOBJ = $(LIBUTILSRC:.c=.o) 148 OBJ = $(BIN:=.o) $(LIBUTILOBJ) 149 SRC = $(BIN:=.c) 150 151 all: $(BIN) 152 153 $(BIN): $(LIB) 154 155 $(OBJ): $(HDR) config.mk 156 157 config.h: 158 cp config.def.h $@ 159 160 .o: 161 $(CC) $(LDFLAGS) -o $@ $< $(LIB) $(LDLIBS) 162 163 .c.o: 164 $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< 165 166 $(LIBUTIL): $(LIBUTILOBJ) 167 $(AR) rc $@ $? 168 $(RANLIB) $@ 169 170 install: all 171 mkdir -p $(DESTDIR)$(PREFIX)/bin 172 cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin 173 cd $(DESTDIR)$(PREFIX)/bin && chmod 755 $(BIN) 174 mkdir -p $(DESTDIR)$(MANPREFIX)/man1 175 for m in $(MAN1); do sed "s/^\.Os ubase/.Os ubase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done 176 mkdir -p $(DESTDIR)$(MANPREFIX)/man8 177 for m in $(MAN8); do sed "s/^\.Os ubase/.Os ubase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man8/"$$m"; done 178 cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN1) 179 cd $(DESTDIR)$(MANPREFIX)/man8 && chmod 644 $(MAN8) 180 181 uninstall: 182 cd $(DESTDIR)$(PREFIX)/bin && rm -f $(BIN) 183 cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(MAN1) 184 cd $(DESTDIR)$(MANPREFIX)/man8 && rm -f $(MAN8) 185 186 dist: clean 187 mkdir -p ubase-$(VERSION) 188 cp -r LICENSE Makefile README TODO config.mk $(SRC) $(MAN1) $(MAN8) libutil $(HDR) config.def.h ubase-$(VERSION) 189 tar -cf ubase-$(VERSION).tar ubase-$(VERSION) 190 gzip ubase-$(VERSION).tar 191 rm -rf ubase-$(VERSION) 192 193 ubase-box: $(LIB) $(SRC) 194 mkdir -p build 195 cp $(HDR) build 196 cp config.h build 197 for f in $(SRC); do sed "s/^main(/`basename $$f .c`_&/" < $$f > build/$$f; done 198 echo '#include <libgen.h>' > build/$@.c 199 echo '#include <stdio.h>' >> build/$@.c 200 echo '#include <stdlib.h>' >> build/$@.c 201 echo '#include <string.h>' >> build/$@.c 202 echo '#include "util.h"' >> build/$@.c 203 for f in $(SRC); do echo "int `basename $$f .c`_main(int, char **);" >> build/$@.c; done 204 echo 'int main(int argc, char *argv[]) { char *s = basename(argv[0]); if(!strcmp(s,"ubase-box")) { argc--; argv++; s = basename(argv[0]); } if(0) ;' >> build/$@.c 205 for f in $(SRC); do echo "else if(!strcmp(s, \"`basename $$f .c`\")) return `basename $$f .c`_main(argc, argv);" >> build/$@.c; done 206 echo 'else {' >> build/$@.c 207 for f in $(SRC); do echo "printf(\"`basename $$f .c`\"); putchar(' ');" >> build/$@.c; done 208 echo "putchar(0xa); }; return 0; }" >> build/$@.c 209 $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ build/*.c $(LIB) $(LDLIBS) 210 rm -r build 211 212 ubase-box-install: ubase-box 213 mkdir -p $(DESTDIR)$(PREFIX)/bin 214 cp -f ubase-box $(DESTDIR)$(PREFIX)/bin 215 chmod 755 $(DESTDIR)$(PREFIX)/bin/ubase-box 216 for f in $(BIN); do ln -sf ubase-box $(DESTDIR)$(PREFIX)/bin/"$$f"; done 217 mkdir -p $(DESTDIR)$(MANPREFIX)/man1 218 for m in $(MAN1); do sed "s/^\.Os ubase/.Os ubase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done 219 mkdir -p $(DESTDIR)$(MANPREFIX)/man8 220 for m in $(MAN8); do sed "s/^\.Os ubase/.Os ubase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man8/"$$m"; done 221 cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN1) 222 cd $(DESTDIR)$(MANPREFIX)/man8 && chmod 644 $(MAN8) 223 224 clean: 225 rm -f $(BIN) $(OBJ) $(LIB) ubase-box ubase-$(VERSION).tar.gz 226 227 .PHONY: 228 all install uninstall dist ubase-box ubase-box-install clean