From 62ee3ef1ca13872e1f9b07f6e4e53cea8b684d72 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Thu, 12 Feb 2026 17:58:06 +0100 Subject: Replace Makefile with configure script Since libweb depends on dynstr, this dependency can be already available on the system, and therefore the CFLAGS and LDFLAGS should be updated according to pkg-config(1), rather than hardcoding them to the source tree. --- configure | 178 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100755 configure (limited to 'configure') diff --git a/configure b/configure new file mode 100755 index 0000000..4d055f9 --- /dev/null +++ b/configure @@ -0,0 +1,178 @@ +#! /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 -- cgit v1.2.3