aboutsummaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi92@disroot.org>2025-09-22 17:32:44 +0200
committerXavier Del Campo Romero <xavi92@disroot.org>2026-02-13 09:57:39 +0100
commit78bf2fe4a5bf37514f6dfd203ef969da0bf40c2e (patch)
tree33f9440b8ee0fa7a3b3ad033616d722d2101bb4d /configure
parent107a2e43d54f9a42fb85b00b83cb0d9abb194680 (diff)
Setup project skeletonHEADmaster
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure262
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