about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-05-18 16:45:23 -0400
committerJune McEnroe <june@causal.agency>2020-05-19 13:08:43 -0400
commitb0e371c63359ce326371bb039fd79afe4b7f18c7 (patch)
treeeb6296c6df0de26b03d729c74e9038aef19f3e36
parentAdd RUNDIR make variable (diff)
downloadpounce-b0e371c63359ce326371bb039fd79afe4b7f18c7.tar.gz
pounce-b0e371c63359ce326371bb039fd79afe4b7f18c7.zip
Rewrite build and install to be more amenable to packaging
Hopefully. Trying to write a FreeBSD port against this.
-rw-r--r--.gitignore7
-rw-r--r--Makefile48
-rw-r--r--README.729
-rwxr-xr-xconfigure43
4 files changed, 58 insertions, 69 deletions
diff --git a/.gitignore b/.gitignore
index 9d34433..6c8280c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,9 @@
+*.1.gz
 *.conf
 *.o
-/calico
-/pounce
+calico
 config.mk
 localhost.crt
 localhost.key
-rc.d/calico
-rc.d/pounce
+pounce
 tags
diff --git a/Makefile b/Makefile
index d992548..0f6a8d8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,19 @@
-PREFIX = /usr/local
-MANDIR = ${PREFIX}/share/man
-ETCDIR = ${PREFIX}/etc
-RUNDIR = /var/run
+PREFIX ?= /usr/local
+MANDIR ?= ${PREFIX}/share/man
+ETCDIR ?= ${PREFIX}/etc
+RUNDIR ?= /var/run
+
+CFLAGS += -I${PREFIX}/include
+LDFLAGS += -L${PREFIX}/lib
 
 CFLAGS += -std=c11 -Wall -Wextra -Wpedantic
-LDLIBS = -lcrypt -lcrypto -ltls
+LDLIBS = -lcrypt -ltls
 
 BINS = calico pounce
-MANS = ${BINS:=.1}
+MANS = ${BINS:=.1.gz}
 RCS  = ${BINS:%=rc.d/%}
 DIRS = ${ETCDIR}/pounce ${RUNDIR}/calico
+INSTALLS = install-rcs install-dirs
 
 -include config.mk
 
@@ -35,7 +39,10 @@ ${OBJS}: bounce.h compat.h
 
 dispatch.o: compat.h
 
-.SUFFIXES: .in
+.SUFFIXES: .1 .1.gz .in
+
+.1.1.gz:
+	gzip -cn $< > $@
 
 .in:
 	sed -e 's|%%PREFIX%%|${PREFIX}|g' $< > $@
@@ -44,21 +51,24 @@ tags: *.c *.h
 	ctags -w *.c *.h
 
 clean:
-	rm -f tags ${BINS} ${RCS} ${OBJS} dispatch.o
+	rm -f tags ${BINS} ${MANS} ${RCS} ${OBJS} dispatch.o
+
+install: ${BINS} ${MANS} ${INSTALLS}
+	install -d ${DESTDIR}${PREFIX}/bin ${DESTDIR}${MANDIR}/man1
+	install ${BINS} ${DESTDIR}${PREFIX}/bin
+	install -m 644 ${MANS} ${DESTDIR}${MANDIR}/man1
+
+install-rcs: ${RCS}
+	install -d ${DESTDIR}${ETCDIR}/rc.d
+	install ${RCS} ${DESTDIR}${ETCDIR}/rc.d
 
-install: ${BINS} ${MANS} ${RCS}
-	install -d ${PREFIX}/bin ${MANDIR}/man1
-	install ${BINS} ${PREFIX}/bin
-	install -m 644 ${MANS} ${MANDIR}/man1
-	if [ -n '${RCS}' ]; then install -d ${ETCDIR}/rc.d; fi
-	if [ -n '${RCS}' ]; then install ${RCS} ${ETCDIR}/rc.d; fi
-	if [ -n '${DIRS}' ]; then install -d ${DIRS}; fi
+install-dirs:
+	install -d ${DIRS:%=${DESTDIR}%}
 
 uninstall:
-	rm -f ${BINS:%=${PREFIX}/bin/%}
-	rm -f ${MANS:%=${MANDIR}/man1/%}
-	if [ -n '${RCS}' ]; then rm -f ${RCS:%=${ETCDIR}/%}; fi
-	if [ -n '${DIRS}' ]; then rmdir ${DIRS}; fi
+	rm -f ${BINS:%=${DESTDIR}${PREFIX}/bin/%}
+	rm -f ${MANS:%=${DESTDIR}${MANDIR}/man1/%}
+	rm -f ${RCS:%=${DESTDIR}${ETCDIR}/%}
 
 localhost.crt:
 	printf "[dn]\nCN=localhost\n[req]\ndistinguished_name=dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth" \
diff --git a/README.7 b/README.7
index d14aef2..d15c34a 100644
--- a/README.7
+++ b/README.7
@@ -1,4 +1,4 @@
-.Dd May 18, 2020
+.Dd May 19, 2020
 .Dt README 7
 .Os "Causal Agency"
 .
@@ -46,29 +46,28 @@ requires LibreSSL
 .Pq Fl ltls
 and primarily targets
 .Fx ,
-as well as macOS and Linux.
-On
-.Fx ,
-processes are sandboxed with
+where it is sandboxed with
 .Xr capsicum 4 .
-On other systems,
-who knows what might happen?
-.
 .Bd -literal -offset indent
-\&./configure
 make all
 sudo make install PREFIX=/usr/local
 .Ed
 .
 .Pp
-If your system installs LibreSSL
-in a non-standard path, set
+On other systems,
+such as macOS and Linux,
+the build is configured using
+.Xr pkg-config 1 .
+If LibreSSL is installed
+in a non-standard prefix,
+set
 .Ev PKG_CONFIG_PATH
-for
-.Nm ./configure .
-For example,
+appropriately.
+For example:
 .Bd -literal -offset indent
 PKG_CONFIG_PATH=/opt/libressl/lib/pkgconfig ./configure
+make all
+sudo make install PREFIX=/usr/local
 .Ed
 .
 .Sh FILES
@@ -93,7 +92,7 @@ configuration parsing
 .It Pa dispatch.c
 SNI socket dispatch
 .It Pa compat.h
-compatibility with lesser operating systems
+compatibility with other systems
 .It Pa rc.d/
 .Fx
 .Xr rc 8
diff --git a/configure b/configure
index 2936780..96224d0 100755
--- a/configure
+++ b/configure
@@ -3,43 +3,24 @@ set -eu
 
 base='-lcrypt'
 libs='libcrypto libtls'
+[ "$(uname)" = 'Darwin' ] && base=
 
 exec >config.mk
 
-case "$(uname)" in
-	(Darwin)
-		base=''
-		;;
-	(FreeBSD)
-		if ! pkg info -e libressl; then
-			echo 'LibreSSL required' >&2
-			exit 1
-		fi
-		prefix=$(pkg query '%p' libressl)
-		cat <<-EOF
-		MANDIR = \${PREFIX}/man
-		CFLAGS += -I${prefix}/include
-		CFLAGS += -D'OPENSSL_BIN="${prefix}/bin/openssl"'
-		LDFLAGS += -L${prefix}/lib
-		EOF
-		exit
-		;;
-	(Linux)
-		cat <<-EOF
-		CFLAGS += -D_GNU_SOURCE
-		CFLAGS += -D'CERTBOT_PATH="/etc/letsencrypt"'
-		LDLIBS.calico = \${LDLIBS}
-		RCS =
-		DIRS =
-		EOF
-		;;
-esac
-
 pkg-config --print-errors $libs
 
 cat <<EOF
 CFLAGS += $(pkg-config --cflags $libs)
-CFLAGS += -D'OPENSSL_BIN="$(pkg-config --variable=prefix openssl)/bin/openssl"'
 LDFLAGS += $(pkg-config --libs-only-L $libs)
-LDLIBS = $base $(pkg-config --libs-only-l $libs)
+LDLIBS = ${base} $(pkg-config --libs-only-l $libs)
+CFLAGS += -D'OPENSSL_BIN="$(pkg-config --variable=exec_prefix openssl)/bin/openssl"'
+CFLAGS += -D'CERTBOT_PATH="/etc/letsencrypt"'
+INSTALLS =
 EOF
+
+if [ "$(uname)" = 'Linux' ]; then
+	cat <<-EOF
+	CFLAGS += -D_GNU_SOURCE
+	LDLIBS.calico = \${LDLIBS}
+	EOF
+fi