aboutsummaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure178
1 files changed, 178 insertions, 0 deletions
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 <<EOF > $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