Procházet zdrojové kódy

Merge branch 'dynamic-linking'

* dynamic-linking:
  * Update docs
  * Link libcrypto statically for now until it is moved to dlopen()
  * Add 'dynamic' and 'static' targets and default to dynamic
  * Check for libdl via dlopen and rerun autotools
Bryan Drewery před 15 roky
rodič
revize
6379363a0a
4 změnil soubory, kde provedl 92 přidání a 23 odebrání
  1. 41 19
      Makefile.in
  2. 2 2
      autotools/includes/acinclude.m4
  3. 46 2
      configure
  4. 3 0
      doc/UPDATES

+ 41 - 19
Makefile.in

@@ -31,9 +31,10 @@ RESPONSESFILE = doc/responses.txt
 
 # defaults
 CXX = @CCACHE@ @DISTCC@ @CXX@ @STATIC@
-LD = @CXX@ @STATIC@
+LD_DYNAMIC = @CXX@
+LD_STATIC = @CXX@ @STATIC@
 CCDEBUG = @CCACHE@ @DISTCC@ @CXX@
-LDDEBUG = @CXX@
+LD_DEBUG = @CXX@
 STRIP = @STRIP@
 DIFF = @DIFF@
 
@@ -56,19 +57,24 @@ _CFLGS = -fno-strict-aliasing -W -Wformat \
 
 MAKEFLAGS = -s @MAKEJOBS@
 
-MAKE_BIN = $(MAKE) 'MAKE=$(MAKE)' 'CXX=$(CXX)' 'LD=$(LD)' \
+MAKE_STATIC = $(MAKE) 'MAKE=$(MAKE)' 'CXX=$(CXX)' 'LD=$(LD_STATIC)' \
 'CCDEPMODE=$(CCDEPMODE)' 'BRANCH=$(BRANCH)' 'COMMIT=$(COMMIT_SHORT)' 'BUILDTS=$(BUILDTS)' 'VERSION=$(VERSION)' \
-'STRIP=$(STRIP)' 'CFLGS=$(CFLGS)' \
+'STRIP=$(STRIP)' 'CFLGS=$(CFLGS) -DBIN_TYPE_STATIC' \
 'LIBS=$(LIBS)' 'EGGEXEC=$(BINEXEC)' 'EGGBUILD=(wraith)'
 
-MAKE_DEBUG = $(MAKE) 'MAKE=$(MAKE)' 'CXX=$(CCDEBUG)' 'LD=$(LDDEBUG) -g' \
+MAKE_DYNAMIC = $(MAKE) 'MAKE=$(MAKE)' 'CXX=$(CXX)' 'LD=$(LD_DYNAMIC)' \
 'CCDEPMODE=$(CCDEPMODE)' 'BRANCH=$(BRANCH)' 'COMMIT=$(COMMIT_SHORT)' 'BUILDTS=$(BUILDTS)' 'VERSION=$(VERSION)' \
-'STRIP=touch' 'CFLGS=$(CFLGS) $(DEBCXXFLAGS)' \
-'LIBS=$(LIBS)' 'EGGEXEC=$(BINEXEC)' 'EGGBUILD=(debug)' 
+'STRIP=$(STRIP)' 'CFLGS=$(CFLGS) -DBIN_TYPE_DYNAMIC' \
+'LIBS=$(LIBS)' 'EGGEXEC=$(BINEXEC)' 'EGGBUILD=(wraith)'
+
+MAKE_DEBUG = $(MAKE) 'MAKE=$(MAKE)' 'CXX=$(CCDEBUG)' 'LD=$(LD_DEBUG) -g' \
+'CCDEPMODE=$(CCDEPMODE)' 'BRANCH=$(BRANCH)' 'COMMIT=$(COMMIT_SHORT)' 'BUILDTS=$(BUILDTS)' 'VERSION=$(VERSION)' \
+'STRIP=touch' 'CFLGS=$(CFLGS) $(DEBCXXFLAGS) -DBIN_TYPE_DYNAMIC' \
+'LIBS=$(LIBS)' 'EGGEXEC=$(BINEXEC)' 'EGGBUILD=(debug)'
 
 MAKE_UTILS = $(MAKE) 'MAKE=$(MAKE)' 'CXX=$(CCDEBUG)' 'STRIP=touch' \
 'CCDEPMODE=$(CCDEPMODE)' \
-'CFLGS=$(CFLGS) $(DEBCXXFLAGS)' 'LIBS=$(LIBS)' 'LD=$(LDDEBUG) -g'
+'CFLGS=$(CFLGS) $(DEBCXXFLAGS)' 'LIBS=$(LIBS)' 'LD=$(LD_DEBUG) -g'
 
 MAKE_UTILS_NR = $(MAKE) 'CXX=$(CXX)' 'STRIP=touch' \
 'CCDEPMODE=$(CCDEPMODE)' \
@@ -76,9 +82,9 @@ MAKE_UTILS_NR = $(MAKE) 'CXX=$(CXX)' 'STRIP=touch' \
 
 MAKE_CONFIG = $(MAKE) 'MAKE=$(MAKE)'
 
-.PHONY: checkclean.wraith checkclean.debug lib wraith dwraith lib.debug debug check general crypto utils sorthelp makehelp makeset makeres stringfix set res help sort indent tar distrib distclean clean cleanutils test default
+.PHONY: checkclean.static checkclean.dynamic checkclean.debug lib wraith dwraith lib.debug debug check general crypto utils sorthelp makehelp makeset makeres stringfix set res help sort indent tar distrib distclean clean cleanutils test default dynamic static
 
-default: wraith
+default: dynamic
 
 test:
 
@@ -202,17 +208,24 @@ general: help res set
 
 check:
 
-.NOTPARALLEL: checkclean.wraith checkclean.debug
+.NOTPARALLEL: checkclean.static checkclean.dynamic checkclean.debug
+
+checkclean.static:
+	@(if test -f stamp.dynamic -o -f stamp.debug; then \
+	echo "[*] Cleaning up alternate build"; \
+	$(MAKE) MAKEFLAGS=-s clean; \
+	fi)
+	@touch stamp.static
 
-checkclean.wraith:
-	@(if test -f stamp.debug; then \
+checkclean.dynamic:
+	@(if test -f stamp.static -o -f stamp.debug; then \
 	echo "[*] Cleaning up alternate build"; \
 	$(MAKE) MAKEFLAGS=-s clean; \
 	fi)
-	@touch stamp.wraith
+	@touch stamp.dynamic
 
 checkclean.debug:
-	@(if test -f stamp.wraith; then \
+	@(if test -f stamp.static -o -f stamp.dynamic; then \
 	echo "[*] Cleaning up alternate build"; \
 	$(MAKE) MAKEFLAGS=-s clean; \
 	fi)
@@ -221,13 +234,22 @@ checkclean.debug:
 lib:
 	+@cd lib && $(MAKE)
 
-wraith:	checkclean.wraith lib general
+dynamic: checkclean.dynamic lib general
+	@echo ""
+	@echo "Making dynamic binary"
+	@echo ""
+	@echo ""
+	+@cd src/mod && $(MAKE_DYNAMIC) static
+	+@cd src && $(MAKE_DYNAMIC) $(BINEXEC)
+	@echo ""
+
+static: checkclean.static lib general
 	@echo ""
-	@echo "Making binary"
+	@echo "Making static binary"
 	@echo ""
 	@echo ""
-	+@cd src/mod && $(MAKE_BIN) static
-	+@cd src && $(MAKE_BIN) $(BINEXEC)
+	+@cd src/mod && $(MAKE_STATIC) static
+	+@cd src && $(MAKE_STATIC) $(BINEXEC)
 	@echo ""
 
 dwraith: debug

+ 2 - 2
autotools/includes/acinclude.m4

@@ -361,7 +361,7 @@ AC_DEFUN([EGG_CHECK_LIBS],
 [
   AC_CHECK_LIB(socket, socket)
 #  AC_CHECK_LIB(nsl, connect)
-#  AC_CHECK_LIB(dl, dlopen)
+  AC_CHECK_LIB(dl, dlopen)
 #  AC_CHECK_LIB(nsl, gethostbyname)
 #  AC_CHECK_LIB(dns, gethostbyname)
 
@@ -529,7 +529,7 @@ AC_TRY_COMPILE([#include <openssl/opensslv.h>],[
 
 CXX="$CXX $SSL_LIBS"
 AC_CHECK_LIB(crypto, AES_encrypt,
-[SSL_LIBS="$SSL_LIBS -lcrypto"],
+[SSL_LIBS="$SSL_LIBS -Wl,-Bstatic -lcrypto -Wl,-Bdynamic"],
 [
   AC_MSG_RESULT([not found.])
   AC_MSG_ERROR([Libcrypto/openssl is required.], 1)

+ 46 - 2
configure

@@ -4582,7 +4582,51 @@ _ACEOF
 fi
 
 #  AC_CHECK_LIB(nsl, connect)
-#  AC_CHECK_LIB(dl, dlopen)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBDL 1
+_ACEOF
+
+  LIBS="-ldl $LIBS"
+
+fi
+
 #  AC_CHECK_LIB(nsl, gethostbyname)
 #  AC_CHECK_LIB(dns, gethostbyname)
 
@@ -5310,7 +5354,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_AES_encrypt" >&5
 $as_echo "$ac_cv_lib_crypto_AES_encrypt" >&6; }
 if test "x$ac_cv_lib_crypto_AES_encrypt" = x""yes; then :
-  SSL_LIBS="$SSL_LIBS -lcrypto"
+  SSL_LIBS="$SSL_LIBS -Wl,-Bstatic -lcrypto -Wl,-Bdynamic"
 else
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found." >&5

+ 3 - 0
doc/UPDATES

@@ -1,6 +1,9 @@
 release
   * Add an extra 2 second delay before releasing nick to aide in syncing and time to type /nick
   * When a nick is released, start regaining as soon as it is witnessed to have been taken again
+  * Wraith is now linked dynamically. This should improve binary compat.
+    Compile on the oldest OS you want to support, and ensure newer ones have
+    all necessary compat libraries.
 
 maint
   * 'make' on BSD will now redirect to gmake.