ubase/Makefile
sin 051ed9a79c Add halt(8)
This is a very barebones halt cmd.  Please make sure that your
system is in a proper state to halt before using this.  This is
likely only useful for very barebones systems like an emergency
shell or similar.

Normally this command would be part of an actual init system.
2013-08-09 15:37:04 +01:00

106 lines
2.6 KiB
Makefile

include config.mk
.POSIX:
.SUFFIXES: .c .o
HDR = util.h arg.h ubase.h
LIB = \
$(OS)/grabmntinfo.o \
$(OS)/syslog.o \
$(OS)/umount.o \
util/eprintf.o \
util/estrtol.o
SRC = \
df.c \
dmesg.c \
umount.c
ifeq ($(OS),linux)
SRC += \
halt.c \
insmod.c \
lsmod.c \
mkswap.c \
reboot.c \
rmmod.c
endif
OBJ = $(SRC:.c=.o) $(LIB)
BIN = $(SRC:.c=)
MAN = $(SRC:.c=.1)
all: options binlib
options:
@echo ubase build options:
@echo "OS = $(OS)"
@echo "CFLAGS = $(CFLAGS)"
@echo "LDFLAGS = $(LDFLAGS)"
@echo "CC = $(CC)"
binlib: util.a
$(MAKE) bin
bin: $(BIN)
$(OBJ): util.h config.mk
.o:
@echo LD $@
@$(LD) -o $@ $< util.a $(LDFLAGS)
.c.o:
@echo CC $<
@$(CC) -c -o $@ $< $(CFLAGS)
util.a: $(LIB)
@echo AR $@
@$(AR) -r -c $@ $(LIB)
@ranlib $@
install: all
@echo installing executables to $(DESTDIR)$(PREFIX)/bin
@mkdir -p $(DESTDIR)$(PREFIX)/bin
@cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin
@cd $(DESTDIR)$(PREFIX)/bin && chmod 755 $(BIN)
@echo installing manual pages to $(DESTDIR)$(MANPREFIX)/man1
@mkdir -p $(DESTDIR)$(MANPREFIX)/man1
@cp -f $(MAN) $(DESTDIR)$(MANPREFIX)/man1
@cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN)
uninstall:
@echo removing executables from $(DESTDIR)$(PREFIX)/bin
@cd $(DESTDIR)$(PREFIX)/bin && rm -f $(BIN)
@echo removing manual pages from $(DESTDIR)$(MANPREFIX)/man1
@cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(MAN)
dist: clean
@echo creating dist tarball
@mkdir -p ubase-$(VERSION)
@cp -r LICENSE Makefile config.mk $(SRC) $(MAN) util $(HDR) ubase-$(VERSION)
@tar -cf ubase-$(VERSION).tar ubase-$(VERSION)
@gzip ubase-$(VERSION).tar
@rm -rf ubase-$(VERSION)
ubase-box: $(SRC) util.a
@echo creating box binary
@mkdir -p build
@cp $(HDR) build
@for f in $(SRC); do sed "s/^main(/`basename $$f .c`_&/" < $$f > build/$$f; done
@echo '#include <libgen.h>' > build/$@.c
@echo '#include <stdlib.h>' >> build/$@.c
@echo '#include <string.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
@echo 'int main(int argc, char *argv[]) { char *s = basename(argv[0]); if(0) ;' >> build/$@.c
@for f in $(SRC); do echo "else if(!strcmp(s, \"`basename $$f .c`\")) `basename $$f .c`_main(argc, argv);" >> build/$@.c; done
@printf 'else eprintf("%%s: unknown program\\n", s); return EXIT_SUCCESS; }\n' >> build/$@.c
@echo LD $@
@$(LD) -o $@ build/*.c util.a $(CFLAGS) $(LDFLAGS)
@rm -r build
clean:
@echo cleaning
@rm -f $(BIN) $(OBJ) $(LIB) util.a ubase-box