#! /bin/sh set -e default_prefix=/usr/local prefix=$default_prefix default_CC='c99' # FILE_OFFSET_BITS=64 is required for large file support on 32-bit platforms. default_CFLAGS='-O1 -D_FILE_OFFSET_BITS=64 -MD -Iinclude -fPIC' default_LDFLAGS="-shared" CC=${CC:-$default_CC} help() { cat <<-EOF $0 [OPTION ...] --prefix Set installation directory [$default_prefix] Some influential environment variables: CC C compiler [$default_CC] CFLAGS C compiler flags [$default_CFLAGS] LDFLAGS Link-time flags [$default_LDFLAGS] EOF } while true; do split_arg=0 if printf "%s" "$1" | grep -e '=' > /dev/null then key="$(printf "%s" "$1" | cut -d '=' -f1)" value="$(printf "%s" "$1" | cut -d '=' -f2)" split_arg=1 else key="$1" value="$2" fi case "$key" in --prefix ) prefix="$value"; shift; test $split_arg -eq 0 && shift ;; -h | --help ) help; exit 0 ;; * ) test "$1" != "" && help && exit 1 || break ;; esac done if pkg-config dynstr then in_tree_dynstr=0 proj_CFLAGS="$(pkg-config --cflags dynstr) $proj_CFLAGS" proj_LDFLAGS="$(pkg-config --libs dynstr) $proj_LDFLAGS" else echo "Info: dynstr not found. Using in-tree copy" >&2 in_tree_dynstr=1 proj_CFLAGS="-Idynstr/include $proj_CFLAGS" proj_LDFLAGS="-Ldynstr -ldynstr $proj_LDFLAGS" fi proj_CFLAGS="$proj_CFLAGS $default_CFLAGS $CFLAGS" proj_LDFLAGS="$proj_LDFLAGS $default_LDFLAGS $LDFLAGS" cleanup() { rm -f $F } F=/tmp/Makefile.libweb trap cleanup EXIT cat < $F .POSIX: CC = ${CC} CFLAGS = $CFLAGS PROJ_CFLAGS = $proj_CFLAGS PROJ_LDFLAGS = $proj_LDFLAGS prefix = $prefix EOF cat <<"EOF" >> $F PROJECT = libweb PROJECT_A = $(PROJECT).a MAJOR_VERSION = 0 MINOR_VERSION = 1 PATCH_VERSION = 0 VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION) PROJECT_SO = $(PROJECT).so.$(VERSION) PROJECT_SO_FQ = $(PROJECT).so.$(MAJOR_VERSION) PROJECT_SO_NV = $(PROJECT).so exec_prefix = $(prefix) includedir = $(prefix)/include datarootdir = $(prefix)/share mandir = $(datarootdir)/man libdir = $(exec_prefix)/lib pkgcfgdir = $(libdir)/pkgconfig O = -O1 DEPS = $(OBJECTS:.o=.d) OBJECTS = \ form.o \ handler.o \ html.o \ http.o \ server.o \ wildcard_cmp.o all: $(PROJECT_A) $(PROJECT_SO) install: all $(pkgcfgdir)/libweb.pc mkdir -p $(DESTDIR)$(includedir) cp -R include/libweb $(DESTDIR)$(includedir) chmod 0644 $(DESTDIR)$(includedir)/libweb/*.h mkdir -p $(DESTDIR)$(libdir) cp $(PROJECT_A) $(PROJECT_SO) $(DESTDIR)$(libdir) chmod 0755 $(libdir)/$(PROJECT_A) $(DESTDIR)$(libdir)/$(PROJECT_SO) ln -fs $(libdir)/$(PROJECT_SO) $(DESTDIR)$(libdir)/$(PROJECT_SO_FQ) ln -fs $(libdir)/$(PROJECT_SO) $(DESTDIR)$(libdir)/$(PROJECT_SO_NV) +cd doc && $(MAKE) install \ DESTDIR=$(DESTDIR) \ prefix=$(prefix) \ datarootdir=$(datarootdir) \ mandir=$(mandir) FORCE: .c.o: $(CC) $(PROJ_CFLAGS) -c $< -o $@ examples: FORCE +cd examples && $(MAKE) $(PROJECT_A): $(OBJECTS) $(AR) $(ARFLAGS) $@ $(OBJECTS) $(PROJECT_SO): $(OBJECTS) $(CC) $(PROJ_LDFLAGS) $(OBJECTS) -o $@ $(pkgcfgdir)/libweb.pc: libweb.pc mkdir -p $(pkgcfgdir) sed -e 's,/usr/local,$(prefix),' $< > $@ chmod 0644 $@ EOF if [ $in_tree_dynstr -ne 0 ] then cat <<"EOF" >> $F DYNSTR = dynstr/libdynstr.a $(PROJECT): $(DYNSTR) $(DYNSTR): FORCE +cd dynstr && $(MAKE) CC=$(CC) EOF fi cat <<"EOF" >> $F clean: rm -f $(OBJECTS) $(DEPS) +cd examples && $(MAKE) clean EOF if [ $in_tree_dynstr -ne 0 ] then cat <<"EOF" >> $F +cd dynstr && $(MAKE) clean EOF fi cat <<"EOF" >> $F distclean: clean rm -f $(PROJECT_A) $(PROJECT_SO) +cd examples && $(MAKE) distclean rm Makefile EOF cat <<"EOF" >> $F -include $(DEPS) EOF mv $F Makefile