sbase/Makefile
FRIGN 73577f10a0 Scrap chartorunearr(), introducing utftorunestr()
Interface and function as proposed by cls.

The reasoning behind this function is that cls expressed his
interest to keep memory allocation out of libutf, which is a
very good motive.
This simplifies the function a lot and should also increase the
speed a bit, but the most important factor here is that there's
no malloc anywhere in libutf, making it a lot smaller and more
robust with a smaller attack-surface.

Look at the paste(1) and tr(1) changes for an idiomatic way to
allocate the right amount of space for the Rune-array.
2015-02-11 21:32:09 +01:00

221 lines
3.9 KiB
Makefile

include config.mk
.SUFFIXES:
.SUFFIXES: .o .c
HDR =\
arg.h\
compat.h\
crypt.h\
fs.h\
md5.h\
queue.h\
sha1.h\
sha256.h\
sha512.h\
text.h\
utf.h\
util.h
LIBUTF = libutf.a
LIBUTFSRC =\
libutf/rune.c\
libutf/runetype.c\
libutf/utf.c\
libutf/utftorunestr.c\
libutf/fgetrune.c\
libutf/fputrune.c\
libutf/isalnumrune.c\
libutf/isalpharune.c\
libutf/isblankrune.c\
libutf/iscntrlrune.c\
libutf/isdigitrune.c\
libutf/isgraphrune.c\
libutf/isprintrune.c\
libutf/ispunctrune.c\
libutf/isspacerune.c\
libutf/istitlerune.c\
libutf/isxdigitrune.c\
libutf/lowerrune.c\
libutf/upperrune.c
LIBUTIL = libutil.a
LIBUTILSRC =\
libutil/agetcwd.c\
libutil/apathmax.c\
libutil/concat.c\
libutil/cp.c\
libutil/crypt.c\
libutil/ealloc.c\
libutil/enmasse.c\
libutil/eprintf.c\
libutil/eregcomp.c\
libutil/estrtod.c\
libutil/fnck.c\
libutil/getlines.c\
libutil/human.c\
libutil/md5.c\
libutil/mode.c\
libutil/putword.c\
libutil/recurse.c\
libutil/rm.c\
libutil/sha1.c\
libutil/sha256.c\
libutil/sha512.c\
libutil/strcasestr.c\
libutil/strlcat.c\
libutil/strlcpy.c\
libutil/strsep.c\
libutil/strtonum.c\
libutil/unescape.c
LIB = $(LIBUTF) $(LIBUTIL)
BIN =\
basename\
cal\
cat\
chgrp\
chmod\
chown\
chroot\
cksum\
cmp\
cols\
comm\
cp\
cron\
cut\
date\
dirname\
du\
echo\
env\
expand\
expr\
false\
fold\
grep\
head\
hostname\
kill\
link\
ln\
logger\
logname\
ls\
md5sum\
mkdir\
mkfifo\
mktemp\
mv\
nice\
nl\
nohup\
paste\
printenv\
printf\
pwd\
readlink\
renice\
rm\
rmdir\
sed\
seq\
setsid\
sha1sum\
sha256sum\
sha512sum\
sleep\
sort\
split\
sponge\
strings\
sync\
tail\
tar\
tee\
test\
touch\
tr\
true\
tty\
uname\
unexpand\
uniq\
unlink\
uudecode\
uuencode\
wc\
xargs\
yes
LIBUTFOBJ = $(LIBUTFSRC:.c=.o)
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:
$(LD) $(LDFLAGS) -o $@ $< $(LIB)
.c.o:
$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
$(LIBUTF): $(LIBUTFOBJ)
$(AR) rc $@ $?
$(RANLIB) $@
$(LIBUTIL): $(LIBUTILOBJ)
$(AR) rc $@ $?
$(RANLIB) $@
install: all
mkdir -p $(DESTDIR)$(PREFIX)/bin
cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin
cd $(DESTDIR)$(PREFIX)/bin && chmod 755 $(BIN)
mkdir -p $(DESTDIR)$(MANPREFIX)/man1
for m in $(MAN); do sed "s/^\.Os sbase/.Os sbase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done
cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN)
uninstall:
cd $(DESTDIR)$(PREFIX)/bin && rm -f $(BIN)
cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(MAN)
dist: clean
mkdir -p sbase-$(VERSION)
cp -r LICENSE Makefile README TODO config.mk $(SRC) $(MAN) libutf libutil $(HDR) sbase-$(VERSION)
tar -cf sbase-$(VERSION).tar sbase-$(VERSION)
gzip sbase-$(VERSION).tar
rm -rf sbase-$(VERSION)
sbase-box: $(LIB) $(SRC)
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 <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 `basename $$f .c`_main(int, char **);" >> build/$@.c; done
echo 'int main(int argc, char *argv[]) { char *s = basename(argv[0]); if(!strcmp(s,"sbase-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
echo 'else {' >> build/$@.c
for f in $(SRC); do echo "printf(\"`basename $$f .c`\"); putchar(' ');" >> build/$@.c; done
echo "putchar(0xa); }; return 0; }" >> build/$@.c
$(LD) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ build/*.c $(LIB)
rm -r build
clean:
rm -f $(BIN) $(OBJ) $(LIB) sbase-box sbase-$(VERSION).tar.gz
.PHONY:
all install uninstall dist sbase-box clean