improve build, Makefile - tscrape - twitter scraper
HTML git clone git://git.codemadness.org/tscrape
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
DIR commit 6b4de933fb56b745de11b6190b8cda65b9bcf843
DIR parent 93e46a59d2e61d9218312b5459166256964d8408
HTML Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Wed, 9 Mar 2016 22:27:37 +0100
improve build, Makefile
just always build strlcpy and strlcat, these are synced from OpenBSD.
Diffstat:
M Makefile | 74 ++++++++++++++++++-------------
M config.mk | 31 ++++++++++++++-----------------
M tscrape.c | 8 +++++++-
3 files changed, 64 insertions(+), 49 deletions(-)
---
DIR diff --git a/Makefile b/Makefile
@@ -2,59 +2,75 @@ include config.mk
NAME = tscrape
VERSION = 0.1
-SRC = \
- tscrape.c\
- xml.c
-COMPATSRC = \
- strlcat.c\
- strlcpy.c
BIN = \
tscrape
-MAN1 = \
- tscrape.1
+
+SRC = ${BIN:=.c}
+
+LIBUTIL = libutil.a
+LIBUTILSRC = \
+ strlcat.c\
+ strlcpy.c
+LIBUTILOBJ = ${LIBUTILSRC:.c=.o}
+
+LIBXML = libxml.a
+LIBXMLSRC = \
+ xml.c
+LIBXMLOBJ = ${LIBXMLSRC:.c=.o}
+
+LIB = ${LIBUTIL} ${LIBXML}
+
+MAN1 = ${BIN:=.1}
+
DOC = \
LICENSE\
README
HDR = \
- compat.h\
xml.h
-OBJ = ${SRC:.c=.o} ${EXTRAOBJ}
-
all: $(BIN)
+${BIN}: ${LIB} ${@:=.o}
+
+OBJ = ${SRC:.c=.o} ${LIBUTILOBJ} ${LIBXMLOBJ}
+
+${OBJ}: config.mk ${HDR}
+
+.o:
+ ${CC} ${LDFLAGS} -o $@ $< ${LIB}
+
.c.o:
- ${CC} -c ${CFLAGS} $<
+ ${CC} -c ${CFLAGS} ${CPPFLAGS} -o $@ -c $<
+
+${LIBUTIL}: ${LIBUTILOBJ}
+ ${AR} rc $@ $?
+ ${RANLIB} $@
+
+${LIBXML}: ${LIBXMLOBJ}
+ ${AR} rc $@ $?
+ ${RANLIB} $@
dist: $(BIN)
rm -rf release/${VERSION}
mkdir -p release/${VERSION}
- cp -f ${MAN1} ${HDR} ${SRC} ${COMPATSRC} ${DOC} \
+ cp -f ${MAN1} ${DOC} ${HDR} \
+ ${SRC} ${LIBXMLSRC} ${LIBUTILSRC} \
Makefile config.mk \
release/${VERSION}/
# make tarball
- rm -f sfeed-${VERSION}.tar.gz
+ rm -f tscrape-${VERSION}.tar.gz
(cd release/${VERSION}; \
- tar -czf ../../sfeed-${VERSION}.tar.gz .)
-
-${OBJ}: config.mk ${HDR}
-
-tscrape: tscrape.o xml.o ${EXTRAOBJ}
- ${CC} -o $@ tscrape.o xml.o ${EXTRAOBJ} ${LDFLAGS}
+ tar -czf ../../tscrape-${VERSION}.tar.gz .)
clean:
- rm -f ${BIN} ${OBJ}
+ rm -f ${BIN} ${OBJ} ${LIB}
install: all
# installing executable files.
mkdir -p ${DESTDIR}${PREFIX}/bin
- cp -f ${BIN} ${DESTDIR}${PREFIX}/bin
+ cp -f ${BIN} ${SCRIPTS} ${DESTDIR}${PREFIX}/bin
for f in $(BIN); do chmod 755 ${DESTDIR}${PREFIX}/bin/$$f; done
- # installing example files.
- mkdir -p ${DESTDIR}${PREFIX}/share/${NAME}
- cp -f README\
- ${DESTDIR}${PREFIX}/share/${NAME}
- # installing manual pages.
+ # installing manual pages for tools.
mkdir -p ${DESTDIR}${MANPREFIX}/man1
cp -f ${MAN1} ${DESTDIR}${MANPREFIX}/man1
for m in $(MAN1); do chmod 644 ${DESTDIR}${MANPREFIX}/man1/$$m; done
@@ -62,10 +78,6 @@ install: all
uninstall:
# removing executable files.
for f in $(BIN); do rm -f ${DESTDIR}${PREFIX}/bin/$$f; done
- # removing example files.
- rm -f \
- ${DESTDIR}${PREFIX}/share/${NAME}/README
- -rmdir ${DESTDIR}${PREFIX}/share/${NAME}
# removing manual pages.
for m in $(MAN1); do rm -f ${DESTDIR}${MANPREFIX}/man1/$$m; done
DIR diff --git a/config.mk b/config.mk
@@ -2,30 +2,27 @@
# paths
PREFIX = /usr/local
-MANPREFIX = ${PREFIX}/share/man
+MANPREFIX = ${PREFIX}/man
-# includes and libs
-LIBS = -lc
+# compiler and linker
+CC = cc
+AR = ar
+RANLIB = ranlib
# debug
#CFLAGS = -fstack-protector-all -O0 -g -std=c99 -Wall -Wextra -pedantic \
# -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -D_BSD_SOURCE
-#LDFLAGS = ${LIBS}
+#LDFLAGS =
# optimized
-CFLAGS = -O2 -std=c99 \
- -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -D_BSD_SOURCE
-LDFLAGS = -s ${LIBS}
+CFLAGS = -O2 -std=c99
+CPPFLAGS = -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -D_BSD_SOURCE
+LDFLAGS = -s
# optimized static
-#CFLAGS = -static -O2 -std=c99 \
-# -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -D_BSD_SOURCE
-#LDFLAGS = -static -s ${LIBS}
+#CFLAGS = -static -O2 -std=c99
+CPPFLAGS = -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -D_BSD_SOURCE
+#LDFLAGS = -static -s
-# uncomment for compat
-CFLAGS += -DCOMPAT
-# uncomment if your libc doesn't support strlcat, strlcpy and strtonum.
-EXTRAOBJ = strlcat.o strlcpy.o
-
-# compiler and linker
-#CC = cc
+# OpenBSD 5.9+: use pledge(2)
+#CPPFLAGS += -DUSE_PLEDGE
DIR diff --git a/tscrape.c b/tscrape.c
@@ -11,7 +11,6 @@
#include <time.h>
#include <unistd.h>
-#include "compat.h"
#include "xml.h"
#define STRP(s) s,sizeof(s)-1
@@ -27,6 +26,13 @@ enum {
Username = 64
};
+/* for compatibility with libcs that don't have strlcat or strlcpy. The
+ * functions are synced from OpenBSD */
+#undef strlcat
+size_t strlcat(char *, const char *, size_t);
+#undef strlcpy
+size_t strlcpy(char *, const char *, size_t);
+
/* data */
static char fullname[128];
static char timestamp[16];