summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Darwin.mk2
-rw-r--r--Linux.mk6
-rw-r--r--Makefile7
-rw-r--r--README.751
-rw-r--r--bounce.c4
-rw-r--r--bounce.h4
-rwxr-xr-xconfigure43
7 files changed, 80 insertions, 37 deletions
diff --git a/Darwin.mk b/Darwin.mk
deleted file mode 100644
index 42ba483..0000000
--- a/Darwin.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-LIBRESSL_PREFIX = /usr/local/opt/libressl
-LDLIBS := ${LDLIBS:-lcrypt=}
diff --git a/Linux.mk b/Linux.mk
deleted file mode 100644
index fff0c8a..0000000
--- a/Linux.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-CFLAGS += -D_GNU_SOURCE -D'CERTBOT_PATH="/etc/letsencrypt"'
-LDLIBS_calico = -lcrypto
-
-MANDIR = ${PREFIX}/share/man
-RCS =
-DIRS =
diff --git a/Makefile b/Makefile
index de08e06..597534e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,8 @@
 PREFIX = /usr/local
-MANDIR = ${PREFIX}/man
+MANDIR = ${PREFIX}/share/man
 ETCDIR = ${PREFIX}/etc
-LIBRESSL_PREFIX = /usr/local
-LIBRESSL_BIN_PREFIX = ${LIBRESSL_PREFIX:%=%/bin}
 
 CFLAGS += -std=c11 -Wall -Wextra -Wpedantic
-CFLAGS += ${LIBRESSL_PREFIX:%=-I%/include}
-CFLAGS += ${LIBRESSL_BIN_PREFIX:%=-D'LIBRESSL_BIN_PREFIX="%/"'}
-LDFLAGS += ${LIBRESSL_PREFIX:%=-L%/lib}
 LDLIBS = -lcrypt -lcrypto -ltls
 
 BINS = calico pounce
diff --git a/README.7 b/README.7
index 1508628..225a7a7 100644
--- a/README.7
+++ b/README.7
@@ -1,4 +1,4 @@
-.Dd January 17, 2020
+.Dd March  1, 2020
 .Dt README 7
 .Os "Causal Agency"
 .
@@ -15,24 +15,6 @@ and the IRCv3.2
 .Sy server-time
 extension to communicate with clients.
 .
-.Pp
-.Nm
-requires LibreSSL
-.Pq Fl ltls
-and targets
-.Fx .
-It can also be built
-on Darwin or GNU/Linux
-by copying the appropriate file to
-.Pa config.mk
-and modifying as needed.
-On
-.Fx ,
-processes are sandboxed with
-.Xr capsicum 4 .
-On other systems,
-who knows what might happen?
-.
 .Sh RATIONALE
 As a former
 .Xr znc 1
@@ -58,6 +40,37 @@ extension,
 all events can be accurately replayed,
 rather than being limited to messages.
 .
+.Sh INSTALLING
+.Nm
+requires LibreSSL
+.Pq Fl ltls
+and primarily targets
+.Fx ,
+as well as macOS and Linux.
+On
+.Fx ,
+processes are 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
+.Ev PKG_CONFIG_PATH
+for
+.Nm ./configure .
+For example,
+.Bd -literal -offset indent
+PKG_CONFIG_PATH=/opt/libressl/lib/pkgconfig ./configure
+.Ed
+.
 .Sh FILES
 .Bl -tag -width "dispatch.c" -compact
 .It Pa bounce.h
diff --git a/bounce.c b/bounce.c
index efcc59d..604830a 100644
--- a/bounce.c
+++ b/bounce.c
@@ -58,7 +58,7 @@ static void genKey(const char *path) {
 	char subj[256];
 	snprintf(subj, sizeof(subj), "/CN=%.*s", (int)strcspn(name, "."), name);
 	execlp(
-		LIBRESSL_BIN_PREFIX "openssl", "openssl", "req",
+		OPENSSL_BIN, "openssl", "req",
 		"-x509", "-new", "-newkey", "rsa:4096", "-sha256", "-days", "3650",
 		"-nodes", "-subj", subj, "-keyout", path,
 		NULL
@@ -97,7 +97,7 @@ static void genCert(const char *path, const char *ca) {
 	close(rw[1]);
 	redir(STDIN_FILENO, rw[0]);
 	execlp(
-		LIBRESSL_BIN_PREFIX "openssl", "openssl", "x509",
+		OPENSSL_BIN, "openssl", "x509",
 		"-CA", ca, "-CAcreateserial", "-days", "3650",
 		NULL
 	);
diff --git a/bounce.h b/bounce.h
index ffbd24b..a5dc836 100644
--- a/bounce.h
+++ b/bounce.h
@@ -27,8 +27,8 @@
 #define CERTBOT_PATH "/usr/local/etc/letsencrypt"
 #endif
 
-#ifndef LIBRESSL_BIN_PREFIX
-#define LIBRESSL_BIN_PREFIX
+#ifndef OPENSSL_BIN
+#define OPENSSL_BIN "openssl"
 #endif
 
 #define SOURCE_URL "https://git.causal.agency/pounce"
diff --git a/configure b/configure
new file mode 100755
index 0000000..7d1e424
--- /dev/null
+++ b/configure
@@ -0,0 +1,43 @@
+#!/bin/sh
+set -eu
+
+case "$(uname)" in
+	(FreeBSD)
+		if ! pkg info -e libressl; then
+			echo 'LibreSSL required'
+			exit 1
+		fi
+		prefix=$(pkg query '%p' libressl)
+		cat >config.mk <<-EOF
+		MANDIR = \${PREFIX}/man
+		CFLAGS += -I${prefix}/include
+		CFLAGS += -D'OPENSSL_BIN="${prefix}/bin/openssl"'
+		LDFLAGS += -L${prefix}/lib
+		EOF
+		exit
+		;;
+esac
+
+libs='libcrypto libtls'
+pkg-config --print-errors $libs
+
+cat >config.mk <<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 = -lcrypt $(pkg-config --libs-only-l $libs)
+EOF
+
+case "$(uname)" in
+	(Darwin)
+		echo 'LDLIBS := ${LDLIBS:-lcrypt=}' >>config.mk
+		;;
+	(Linux)
+		cat >>config.mk <<-EOF
+		CFLAGS += -D_GNU_SOURCE -D'CERTBOT_PATH="/etc/letsencrypt"'
+		LDLIBS_calico = $(pkg-config --libs-only-l libcrypto)
+		RCS =
+		DIRS =
+		EOF
+		;;
+esac