Bring in the sbase Makefile updates to ubase

This commit is contained in:
sin 2014-11-30 12:09:34 +00:00
parent ae7aafc127
commit 0c008b65ee
2 changed files with 128 additions and 143 deletions

263
Makefile
View File

@ -1,11 +1,11 @@
include config.mk include config.mk
.POSIX: .SUFFIXES:
.SUFFIXES: .c .o .SUFFIXES: .o .c
HDR = \ HDR = \
arg.h \ arg.h \
config.def.h \ config.h \
passwd.h \ passwd.h \
proc.h \ proc.h \
queue.h \ queue.h \
@ -14,73 +14,76 @@ HDR = \
text.h \ text.h \
util.h util.h
LIB = \ LIBUTIL = libutil.a
libutil/agetcwd.o \ LIBUTILSRC = \
libutil/agetline.o \ libutil/agetcwd.c \
libutil/apathmax.o \ libutil/agetline.c \
libutil/concat.o \ libutil/apathmax.c \
libutil/ealloc.o \ libutil/concat.c \
libutil/eprintf.o \ libutil/ealloc.c \
libutil/estrtol.o \ libutil/eprintf.c \
libutil/estrtoul.o \ libutil/estrtol.c \
libutil/explicit_bzero.o \ libutil/estrtoul.c \
libutil/passwd.o \ libutil/explicit_bzero.c \
libutil/proc.o \ libutil/passwd.c \
libutil/putword.o \ libutil/proc.c \
libutil/recurse.o \ libutil/putword.c \
libutil/strlcat.o \ libutil/recurse.c \
libutil/strlcpy.o \ libutil/strlcat.c \
libutil/tty.o libutil/strlcpy.c \
libutil/tty.c
SRC = \ LIB = $(LIBUTIL)
last.c \
lastlog.c \ BIN = \
chvt.c \ chvt \
clear.c \ clear \
ctrlaltdel.c \ ctrlaltdel \
dd.c \ dd \
df.c \ df \
dmesg.c \ dmesg \
eject.c \ eject \
fallocate.c \ fallocate \
free.c \ free \
freeramdisk.c \ freeramdisk \
fsfreeze.c \ fsfreeze \
getty.c \ getty \
halt.c \ halt \
hwclock.c \ hwclock \
id.c \ id \
insmod.c \ insmod \
killall5.c \ killall5 \
login.c \ last \
lsmod.c \ lastlog \
lsusb.c \ login \
mesg.c \ lsmod \
mknod.c \ lsusb \
mkswap.c \ mesg \
mount.c \ mknod \
mountpoint.c \ mkswap \
pagesize.c \ mount \
passwd.c \ mountpoint \
pidof.c \ pagesize \
pivot_root.c \ passwd \
ps.c \ pidof \
readahead.c \ pivot_root \
respawn.c \ ps \
rmmod.c \ readahead \
stat.c \ respawn \
su.c \ rmmod \
swaplabel.c \ stat \
swapoff.c \ su \
swapon.c \ swaplabel \
switch_root.c \ swapoff \
sysctl.c \ swapon \
truncate.c \ switch_root \
umount.c \ sysctl \
unshare.c \ truncate \
uptime.c \ umount \
watch.c \ unshare \
who.c uptime \
watch \
who
MAN1 = \ MAN1 = \
chvt.1 \ chvt.1 \
@ -133,93 +136,73 @@ MAN8 = \
sysctl.8 \ sysctl.8 \
umount.8 umount.8
OBJ = $(SRC:.c=.o) $(LIB) LIBUTILOBJ = $(LIBUTILSRC:.c=.o)
BIN = $(SRC:.c=) lastb OBJ = $(BIN:=.o) $(LIBUTILOBJ)
SRC = $(BIN:=.c)
all: options binlib all: $(BIN)
options: $(BIN): $(LIB)
@echo ubase build options:
@echo "CFLAGS = $(CFLAGS)"
@echo "LDFLAGS = $(LDFLAGS)"
@echo "CC = $(CC)"
binlib: libutil.a $(OBJ): $(HDR) config.mk
$(MAKE) bin
bin: $(BIN)
$(OBJ): config.h util.h config.mk
config.h: config.h:
@echo creating $@ from config.def.h cp config.def.h $@
@cp config.def.h $@
.o: .o:
@echo LD $@ $(LD) $(LDFLAGS) -o $@ $< $(LIB)
@$(LD) -o $@ $< libutil.a $(LDFLAGS)
.c.o: .c.o:
@echo CC $< $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
@$(CC) -c -o $@ $< $(CFLAGS)
libutil.a: $(LIB) $(LIBUTIL): $(LIBUTILOBJ)
@echo AR $@ $(AR) -r -c $@ $?
@$(AR) -r -c $@ $? $(RANLIB) $@
@ranlib $@
lastb: last
ln -f last lastb
install: all install: all
@echo installing executables to $(DESTDIR)$(PREFIX)/bin mkdir -p $(DESTDIR)$(PREFIX)/bin
@mkdir -p $(DESTDIR)$(PREFIX)/bin cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin
@cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin cd $(DESTDIR)$(PREFIX)/bin && chmod 755 $(BIN)
@cd $(DESTDIR)$(PREFIX)/bin && chmod 755 $(BIN) mkdir -p $(DESTDIR)$(MANPREFIX)/man1
@echo installing manual pages to $(DESTDIR)$(MANPREFIX)/man1 for m in $(MAN1); do sed "s/VERSION/$(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done
@mkdir -p $(DESTDIR)$(MANPREFIX)/man1 mkdir -p $(DESTDIR)$(MANPREFIX)/man8
@for m in $(MAN1); do sed "s/VERSION/$(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done for m in $(MAN8); do sed "s/VERSION/$(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man8/"$$m"; done
@echo installing manual pages to $(DESTDIR)$(MANPREFIX)/man8 cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN1)
@mkdir -p $(DESTDIR)$(MANPREFIX)/man8 cd $(DESTDIR)$(MANPREFIX)/man8 && chmod 644 $(MAN8)
@for m in $(MAN8); do sed "s/VERSION/$(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man8/"$$m"; done
@chmod 644 $(DESTDIR)$(MANPREFIX)/man1/$(MAN1)
@chmod 644 $(DESTDIR)$(MANPREFIX)/man8/$(MAN8)
uninstall: uninstall:
@echo removing executables from $(DESTDIR)$(PREFIX)/bin cd $(DESTDIR)$(PREFIX)/bin && rm -f $(BIN)
@cd $(DESTDIR)$(PREFIX)/bin && rm -f $(BIN) cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(MAN1)
@echo removing manual pages from $(DESTDIR)$(MANPREFIX)/man1 cd $(DESTDIR)$(MANPREFIX)/man8 && rm -f $(MAN8)
@cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(MAN)
dist: clean dist: clean
@echo creating dist tarball mkdir -p ubase-$(VERSION)
@mkdir -p ubase-$(VERSION) cp -r LICENSE Makefile README TODO config.mk $(SRC) $(MAN1) $(MAN8) libutil $(HDR) config.def.h ubase-$(VERSION)
@cp -r LICENSE Makefile config.mk TODO $(SRC) $(MAN) libutil $(HDR) ubase-$(VERSION) tar -cf ubase-$(VERSION).tar ubase-$(VERSION)
@tar -cf ubase-$(VERSION).tar ubase-$(VERSION) gzip ubase-$(VERSION).tar
@gzip ubase-$(VERSION).tar rm -rf ubase-$(VERSION)
@rm -rf ubase-$(VERSION)
ubase-box: config.h $(SRC) libutil.a ubase-box: $(LIB) $(SRC)
@echo creating box binary mkdir -p build
@mkdir -p build cp $(HDR) build
@cp $(HDR) build cp config.h build
@cp config.h build for f in $(SRC); do sed "s/^main(/`basename $$f .c`_&/" < $$f > build/$$f; done
@for f in $(SRC); do sed "s/^main(/`basename $$f .c`_&/" < $$f > build/$$f; done echo '#include <libgen.h>' > build/$@.c
@echo '#include <libgen.h>' > build/$@.c echo '#include <stdio.h>' >> build/$@.c
@echo '#include <stdio.h>' >> build/$@.c echo '#include <stdlib.h>' >> build/$@.c
@echo '#include <stdlib.h>' >> build/$@.c echo '#include <string.h>' >> build/$@.c
@echo '#include <string.h>' >> build/$@.c echo '#include "util.h"' >> build/$@.c
@echo '#include "util.h"' >> build/$@.c for f in $(SRC); do echo "int `basename $$f .c`_main(int, char **);" >> build/$@.c; done
@for f in $(SRC); do echo "int `basename $$f .c`_main(int, char **);" >> build/$@.c; done 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
@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 for f in $(SRC); do echo "else if(!strcmp(s, \"`basename $$f .c`\")) return `basename $$f .c`_main(argc, argv);" >> build/$@.c; done
@for f in $(SRC); do echo "else if(!strcmp(s, \"`basename $$f .c`\")) return `basename $$f .c`_main(argc, argv);" >> build/$@.c; done echo 'else {' >> build/$@.c
@echo 'else {' >> build/$@.c for f in $(SRC); do echo "printf(\"`basename $$f .c`\"); putchar(' ');" >> build/$@.c; done
@for f in $(SRC); do echo "printf(\"`basename $$f .c`\"); putchar(' ');" >> build/$@.c; done echo "putchar(0xa); }; return 0; }" >> build/$@.c
@echo "putchar(0xa); }; return 0; }" >> build/$@.c $(LD) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ build/*.c $(LIB)
@echo LD $@ rm -r build
@$(LD) -o $@ build/*.c libutil.a $(CFLAGS) $(LDFLAGS)
@rm -r build
clean: clean:
@echo cleaning rm -f $(BIN) $(OBJ) $(LIB) ubase-box ubase-$(VERSION).tar.gz
@rm -f $(BIN) $(OBJ) $(LIB) libutil.a ubase-box
.PHONY:
all install uninstall dist ubase-box clean

View File

@ -5,9 +5,11 @@ VERSION = 0.1
PREFIX = /usr/local PREFIX = /usr/local
MANPREFIX = $(PREFIX)/share/man MANPREFIX = $(PREFIX)/share/man
#CC = gcc CC = cc
#CC = musl-gcc
LD = $(CC) LD = $(CC)
AR = ar
RANLIB = ranlib
CPPFLAGS = -D_XOPEN_SOURCE -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 CPPFLAGS = -D_XOPEN_SOURCE -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
CFLAGS = -std=c99 -Wall -Wextra $(CPPFLAGS) CFLAGS = -std=c99 -Wall -Wextra
LDFLAGS = -s -lcrypt # -static LDFLAGS = -s -lcrypt # -static