diff options
| author | Xavier Del Campo Romero <xavi92@disroot.org> | 2025-09-22 17:32:44 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi92@disroot.org> | 2026-02-13 09:57:39 +0100 |
| commit | 78bf2fe4a5bf37514f6dfd203ef969da0bf40c2e (patch) | |
| tree | 33f9440b8ee0fa7a3b3ad033616d722d2101bb4d /configure | |
| parent | 107a2e43d54f9a42fb85b00b83cb0d9abb194680 (diff) | |
Diffstat (limited to 'configure')
| -rwxr-xr-x | configure | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/configure b/configure new file mode 100755 index 0000000..1fff315 --- /dev/null +++ b/configure @@ -0,0 +1,262 @@ +#! /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 -Wall -MD' +default_LDFLAGS="" + +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 sqlite3 +then + proj_CFLAGS="$proj_CFLAGS $(pkg-config --cflags sqlite3)" + proj_LDFLAGS="$proj_LDFLAGS $(pkg-config --libs sqlite3)" + tk_LDFLAGS="$tk_LDFLAGS $(pkg-config --libs sqlite3)" +else + echo "Error: sqlite3 not found" >&2 + exit 1 +fi + +if pkg-config libcjson +then + proj_CFLAGS="$proj_CFLAGS $(pkg-config --cflags libcjson)" + proj_LDFLAGS="$proj_LDFLAGS $(pkg-config --libs libcjson)" + tk_LDFLAGS="$tk_LDFLAGS $(pkg-config --libs libcjson)" +else + echo "Error: libcjson not found." >&2 + exit 1 +fi + +if pkg-config libsodium +then + proj_CFLAGS="$proj_CFLAGS $(pkg-config --cflags libsodium)" + proj_LDFLAGS="$proj_LDFLAGS $(pkg-config --libs libsodium)" + tk_LDFLAGS="$tk_LDFLAGS $(pkg-config --libs libsodium)" +else + echo "Error: libsodium not found" >&2 + exit 1 +fi + +if pkg-config dynstr +then + in_tree_dynstr=0 + proj_CFLAGS="$proj_CFLAGS $(pkg-config --cflags dynstr)" + proj_LDFLAGS="$proj_LDFLAGS $(pkg-config --libs dynstr)" + tk_LDFLAGS="$tk_LDFLAGS $(pkg-config --libs dynstr)" +else + echo "Info: dynstr not found. Using in-tree copy" >&2 + in_tree_dynstr=1 + proj_CFLAGS="$proj_CFLAGS -Ilibweb/dynstr/include" + proj_LDFLAGS="$proj_LDFLAGS -Llibweb/dynstr -ldynstr" + tk_LDFLAGS="$tk_LDFLAGS -Llibweb/dynstr -ldynstr" +fi + +if pkg-config libweb +then + in_tree_libweb=0 + proj_CFLAGS="$proj_CFLAGS $(pkg-config --cflags libweb)" + proj_LDFLAGS="$proj_LDFLAGS $(pkg-config --libs libweb)" +else + echo "Info: libweb not found. Using in-tree copy" >&2 + in_tree_libweb=1 + proj_CFLAGS="$proj_CFLAGS -Ilibweb/include" + proj_LDFLAGS="$proj_LDFLAGS -Llibweb -lweb" + + if [ -f libweb/Makefile ] + then + echo "Info: Re-configuring libweb" >&2 + (cd libweb && CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" ./configure \ + --prefix="$prefix") + fi +fi + +proj_CFLAGS="$proj_CFLAGS $default_CFLAGS $CFLAGS" +proj_LDFLAGS="$proj_LDFLAGS $default_LDFLAGS $LDFLAGS" +tk_LDFLAGS="$tk_LDFLAGS $LDFLAGS" + +cleanup() +{ + rm -f $F +} + +F=/tmp/Makefile.nanobbs +trap cleanup EXIT + +cat <<EOF > $F +.POSIX: + +CC = $CC +PREFIX = $prefix +DST = $prefix/bin +CFLAGS = $CFLAGS +LDFLAGS = $LDFLAGS +PROJ_CFLAGS = $proj_CFLAGS +PROJ_LDFLAGS = $proj_LDFLAGS +TK_LDFLAGS = $tk_LDFLAGS +EOF + +cat <<"EOF" >> $F +PROJECT = nanobbs +DEPS = $(OBJECTS:.o=.d) +OBJECTS = \ + auth.o \ + astrftime.o \ + db.o \ + db_post.o \ + db_section.o \ + db_topic.o \ + default_prv_policy.o \ + default_style.o \ + default_terms.o \ + ep_create.o \ + ep_index.o \ + ep_login.o \ + ep_logout.o \ + ep_passwd.o \ + ep_signup.o \ + ep_style.o \ + ep_ucp.o \ + ep_view.o \ + form_badreq.o \ + form_category.o \ + form_footer.o \ + form_head.o \ + form_login.o \ + form_post.o \ + form_section.o \ + form_shortpwd.o \ + form_topic.o \ + form_unauthorized.o \ + gencookie.o \ + getul.o \ + getul_n.o \ + jwt.o \ + login_get.o \ + main.o \ + op.o \ + sanitize.o + +TK_OBJECTS = \ + jwt.o \ + tokengen.o + +all: $(PROJECT) tokengen + +.c.o: + $(CC) $(PROJ_CFLAGS) -c $< -o $@ + +install: all + mkdir -p $(DST) + install nanobbs tokengen $(DST) + +cd doc && $(MAKE) PREFIX=$(PREFIX) install + +FORCE: +$(PROJECT): $(OBJECTS) + $(CC) $(OBJECTS) $(PROJ_LDFLAGS) -o $@ + +tokengen: $(TK_OBJECTS) + $(CC) $(TK_OBJECTS) $(TK_LDFLAGS) -o $@ +EOF + +if [ $in_tree_dynstr -ne 0 ] +then +cat <<"EOF" >> $F +DYNSTR = libweb/dynstr/libdynstr.a +$(PROJECT) tokengen: $(DYNSTR) +$(DYNSTR): FORCE + +cd libweb/dynstr && $(MAKE) CC=$(CC) +EOF +fi + +if [ $in_tree_libweb -ne 0 ] +then +cat <<"EOF" >> $F +LIBWEB_MK = libweb/Makefile +$(LIBWEB_MK): + cd libweb && CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ + ./configure --prefix=$(PREFIX) +LIBWEB = libweb/libweb.a +$(PROJECT): $(LIBWEB) +$(LIBWEB): $(LIBWEB_MK) FORCE + +cd libweb && $(MAKE) CC=$(CC) +libweb: $(LIBWEB) +EOF +fi + +cat <<"EOF" >> $F +clean: + rm -f $(OBJECTS) $(TK_OBJECTS) $(DEPS) +EOF + +if [ $in_tree_dynstr -ne 0 ] +then +cat <<"EOF" >> $F + +cd libweb/dynstr && $(MAKE) clean +EOF +fi + +if [ $in_tree_libweb -ne 0 ] +then +cat <<"EOF" >> $F + +test -f $(LIBWEB_MK) && cd libweb && $(MAKE) clean || : +EOF +fi + +cat <<"EOF" >> $F +distclean: clean + rm -f nanobbs tokengen + rm Makefile +EOF + +# dynstr has no distclean target as of the time of this writing. + +if [ $in_tree_libweb -ne 0 ] +then +cat <<"EOF" >> $F + +test -f $(LIBWEB_MK) && cd libweb && $(MAKE) distclean || : +EOF +fi + +cat <<"EOF" >> $F +-include $(DEPS) +EOF + +mv $F Makefile |
