summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2023-04-13 17:56:14 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2023-04-13 17:56:14 +0200
commit9d3b555393735e08c27b04a8b616f2736afe26de (patch)
treef483cb50a59547fdc8b03ef01dfefb8123b0292b /Makefile
downloadabase-9d3b555393735e08c27b04a8b616f2736afe26de.tar.gz
abase-9d3b555393735e08c27b04a8b616f2736afe26de.tar.bz2
created initial layout and a dummy more.c
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile98
1 files changed, 98 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..0a0fdc2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,98 @@
+include config.mk
+
+.SUFFIXES:
+.SUFFIXES: .o .c
+
+HDR =\
+ arg.h\
+ util.h
+
+LIBUTIL = libutil.a
+LIBUTILSRC =\
+ libutil/eprintf.c
+
+LIB = $(LIBUTF) $(LIBUTIL)
+
+BIN =\
+ more
+
+LIBUTILOBJ = $(LIBUTILSRC:.c=.o)
+OBJ = $(BIN:=.o) $(LIBUTFOBJ) $(LIBUTILOBJ)
+SRC = $(BIN:=.c)
+MAN = $(BIN:=.1)
+
+all: $(BIN)
+
+$(BIN): $(LIB) $(@:=.o)
+
+$(OBJ): $(HDR) config.mk
+
+.o:
+ $(CC) $(LDFLAGS) -o $@ $< $(LIB)
+
+.c.o:
+ $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
+
+$(LIBUTIL): $(LIBUTILOBJ)
+ $(AR) rc $@ $?
+ $(RANLIB) $@
+
+install: all
+ mkdir -p $(DESTDIR)$(PREFIX)/bin
+ cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin
+ mv -f $(DESTDIR)$(PREFIX)/bin/xinstall $(DESTDIR)$(PREFIX)/bin/install
+ mkdir -p $(DESTDIR)$(MANPREFIX)/man1
+ for m in $(MAN); do sed "s/^\.Os abase/.Os abase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done
+ cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN)
+ mv -f $(DESTDIR)$(MANPREFIX)/man1/xinstall.1 $(DESTDIR)$(MANPREFIX)/man1/install.1
+
+uninstall:
+ cd $(DESTDIR)$(PREFIX)/bin && rm -f $(BIN)
+ cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(MAN)
+
+dist: clean
+ mkdir -p abase-$(VERSION)
+ cp -r LICENSE Makefile README TODO config.mk $(SRC) $(MAN) libutil $(HDR) abase-$(VERSION)
+ tar -cf abase-$(VERSION).tar abase-$(VERSION)
+ gzip abase-$(VERSION).tar
+ rm -rf abase-$(VERSION)
+
+abase-box: $(LIB) $(SRC)
+ mkdir -p build
+ cp $(HDR) build
+ for f in $(SRC); do sed "s/^main(/$$(echo "$${f%.c}" | sed s/-/_/g)_&/" < $$f > build/$$f; done
+ echo '#include <libgen.h>' > build/$@.c
+ echo '#include <stdio.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 $$(echo "$${f%.c}" | sed s/-/_/g)_main(int, char **);"; done >> build/$@.c
+ echo 'int main(int argc, char *argv[]) { char *s = basename(argv[0]);' >> build/$@.c
+ echo 'if(!strcmp(s,"abase-box")) { argc--; argv++; s = basename(argv[0]); } if(0) ;' >> build/$@.c
+ 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
+ echo 'else {' >> build/$@.c
+ for f in $(SRC); do echo "fputs(\"$${f%.c} \", stdout);"; done >> build/$@.c
+ echo 'putchar(0xa); }; return 0; }' >> build/$@.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ build/*.c $(LIB)
+ rm -r build
+
+abase-box-install: abase-box
+ mkdir -p $(DESTDIR)$(PREFIX)/bin
+ cp -f abase-box $(DESTDIR)$(PREFIX)/bin
+ chmod 755 $(DESTDIR)$(PREFIX)/bin/abase-box
+ for f in $(BIN); do ln -sf abase-box $(DESTDIR)$(PREFIX)/bin/"$$f"; done
+ mkdir -p $(DESTDIR)$(MANPREFIX)/man1
+ for m in $(MAN); do sed "s/^\.Os abase/.Os abase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done
+ cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN)
+ mv -f $(DESTDIR)$(MANPREFIX)/man1/xinstall.1 $(DESTDIR)$(MANPREFIX)/man1/install.1
+
+abase-box-uninstall: uninstall
+ cd $(DESTDIR)$(PREFIX)/bin && rm -f abase-box
+
+clean:
+ rm -f $(BIN) $(OBJ) $(LIB) abase-box abase-$(VERSION).tar.gz
+
+.gitignore:
+ { printf '*.o\n' ; printf '/%s\n' $(LIB) $(BIN) ; } > $@
+
+.PHONY: all install uninstall dist abase-box-install abase-box-uninstall clean .gitignore