]> jfr.im git - irc/rizon/znc.git/commitdiff
Make ZNC compile on Mac OS out of the box
authorpsychon <redacted>
Wed, 22 Oct 2008 19:40:51 +0000 (19:40 +0000)
committerpsychon <redacted>
Wed, 22 Oct 2008 19:40:51 +0000 (19:40 +0000)
Thanks to ashikase for pointing out the needed linker and compiler flags.
Thanks to GiZMo for testing on his mac 10.5.4.

This also cleans up configure.in a little by adding appendMod.

git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1258 726aef4b-f618-498e-8847-2d620e286838

configure
configure.in
modules/Makefile.in
znc-config.in

index 5a43bca71227bf4ef4b6d47639834e0957c24ec9..34ec7e855eeaac16a8a9f2a9e08c7f42581d01bd 100755 (executable)
--- a/configure
+++ b/configure
@@ -630,6 +630,8 @@ host_cpu
 host_vendor
 host_os
 MODFLAGS
+MODULES
+MODLINK
 MODTARGET
 NOSSL
 PERL
@@ -2426,6 +2428,14 @@ appendCXX () {
        fi
 }
 
+appendMod () {
+       if test "$MODFLAGS" != ""; then
+               MODFLAGS="$MODFLAGS $*"
+       else
+               MODFLAGS=$*
+       fi
+}
+
 appendLD () {
        if test "$LDFLAGS" != ""; then
                LDFLAGS="$LDFLAGS $*"
@@ -2440,7 +2450,7 @@ case "${host_os}" in
        freebsd*)
                appendCXX -I/usr/local/include
                appendLib -L/usr/local/lib -lcompat
-               MODFLAGS="$MODFLAGS -L/usr/local/lib"
+               appendMod -L/usr/local/lib
        ;;
        solaris*)
                appendLib -lsocket -lnsl
@@ -2449,6 +2459,9 @@ case "${host_os}" in
        cygwin)
                ISCYGWIN=1
        ;;
+       darwin*)
+               ISDARWIN=1
+       ;;
 esac
 
 # cygwin
@@ -3055,15 +3068,28 @@ echo "$as_me: error: could not find dlopen. Try --disable-modules" >&2;}
        fi
 
        appendCXX -D_MODULES
-       MODFLAGS="$MODFLAGS $CXXFLAGS"
-       if test -z "$ISSUN"; then
+       appendMod "$CXXFLAGS"
+
+       if test -z "$ISSUN" -a -z "$ISDARWIN"; then
+               # This is an unknown compiler flag on some OS
                appendLD -Wl,--export-dynamic
        fi
        MODTARGET="modules"
 
-       # FIXME why don't we do this for sun?
+       # FIXME why do we need this for sun?
        if test -n "$ISSUN"; then
-               MODFLAGS="$MODFLAGS -mimpure-text"
+               appendMod -mimpure-text
+       fi
+
+       if test -z "$ISDARWIN"; then
+               MODLINK="-shared"
+       else
+               # Mac OS X differentiates between shared libs (-dynamiclib)
+               # and loadable modules (-bundle).
+               MODLINK="-bundle -flat_namespace -undefined suppress"
+               # TODO test if -twolevel_namespace and/or
+               # -undefined dynamic_lookup work
+               # (dynamic_lookup might only work on 10.4 and later)
        fi
 
        appendCXX "-D_MODDIR_=\\\"${MODDIR}\\\""
@@ -3241,6 +3267,8 @@ fi
 
 
 
+
+
 ac_config_files="$ac_config_files Makefile"
 
 ac_config_files="$ac_config_files znc-config"
@@ -3938,6 +3966,8 @@ host_cpu!$host_cpu$ac_delim
 host_vendor!$host_vendor$ac_delim
 host_os!$host_os$ac_delim
 MODFLAGS!$MODFLAGS$ac_delim
+MODULES!$MODULES$ac_delim
+MODLINK!$MODLINK$ac_delim
 MODTARGET!$MODTARGET$ac_delim
 NOSSL!$NOSSL$ac_delim
 PERL!$PERL$ac_delim
@@ -3948,7 +3978,7 @@ LIBOBJS!$LIBOBJS$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 61; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 63; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
index c16b2466d1a88b5046a6b4f68e1cbdaf33bbc02f..ea6f8002d64e0955c892ea27ea2756fbf53a3a2a 100644 (file)
@@ -24,6 +24,14 @@ appendCXX () {
        fi
 }
 
+appendMod () {
+       if test "$MODFLAGS" != ""; then
+               MODFLAGS="$MODFLAGS $*"
+       else
+               MODFLAGS=$*
+       fi
+}
+
 appendLD () {
        if test "$LDFLAGS" != ""; then
                LDFLAGS="$LDFLAGS $*"
@@ -38,7 +46,7 @@ case "${host_os}" in
        freebsd*)
                appendCXX -I/usr/local/include
                appendLib -L/usr/local/lib -lcompat
-               MODFLAGS="$MODFLAGS -L/usr/local/lib"
+               appendMod -L/usr/local/lib
        ;;
        solaris*)
                appendLib -lsocket -lnsl
@@ -47,6 +55,9 @@ case "${host_os}" in
        cygwin)
                ISCYGWIN=1
        ;;
+       darwin*)
+               ISDARWIN=1
+       ;;
 esac
 
 # cygwin
@@ -159,15 +170,28 @@ if test "$MODULES" = "yes"; then
        fi
 
        appendCXX -D_MODULES
-       MODFLAGS="$MODFLAGS $CXXFLAGS"
-       if test -z "$ISSUN"; then
+       appendMod "$CXXFLAGS"
+
+       if test -z "$ISSUN" -a -z "$ISDARWIN"; then
+               # This is an unknown compiler flag on some OS
                appendLD -Wl,--export-dynamic
        fi
        MODTARGET="modules"
 
-       # FIXME why don't we do this for sun?
+       # FIXME why do we need this for sun?
        if test -n "$ISSUN"; then
-               MODFLAGS="$MODFLAGS -mimpure-text"
+               appendMod -mimpure-text
+       fi
+
+       if test -z "$ISDARWIN"; then
+               MODLINK="-shared"
+       else
+               # Mac OS X differentiates between shared libs (-dynamiclib)
+               # and loadable modules (-bundle).
+               MODLINK="-bundle -flat_namespace -undefined suppress"
+               # TODO test if -twolevel_namespace and/or
+               # -undefined dynamic_lookup work
+               # (dynamic_lookup might only work on 10.4 and later)
        fi
 
        appendCXX "-D_MODDIR_=\\\"${MODDIR}\\\""
@@ -202,6 +226,7 @@ AC_SUBST([CPPFLAGS])
 AC_SUBST([MODFLAGS])
 AC_SUBST([LDFLAGS])
 AC_SUBST([LIBS])
+AC_SUBST([MODLINK])
 AC_SUBST([MODTARGET])
 AC_SUBST([NOSSL])
 AC_SUBST([PERL])
index 597a26d122dc0a631c4c75755d43bf915a4e63b8..683dbe3ea2797da736a895f8e223e6b7140b7b50 100644 (file)
@@ -14,6 +14,7 @@ localstatedir := @localstatedir@
 CXX      := @CXX@
 # CXXFLAGS are for the main binary, so don't use them here, use MODFLAGS instead
 MODFLAGS := @CPPFLAGS@ @MODFLAGS@ -I$(srcdir)/..
+MODLINK  := @MODLINK@
 LDFLAGS  := @LDFLAGS@
 # LIBS are not and should not be used in here.
 # The znc binary links already against those.
@@ -75,7 +76,7 @@ clean:
 
 %.so: %.cpp Makefile
        @mkdir -p .depend
-       $(CXX) $(MODFLAGS) $(LDFLAGS) -shared -o $@ $< $($(basename $@)FLAGS) -MMD -MF .depend/$@.dep
+       $(CXX) $(MODFLAGS) $(LDFLAGS) $(MODLINK) -o $@ $< $($(basename $@)FLAGS) -MMD -MF .depend/$@.dep
 
 modperl_install: create_install_dir
        for i in $(srcdir)/*.pm; do \
index 0d941b685c590567c16e01f6fef4db1391f775d7..dd6e2715a4171045d59bdfde552cce454dc6ec59 100755 (executable)
@@ -8,6 +8,7 @@ datadir="@datadir@"
 
 CXX="@CXX@"
 CXXFLAGS="@CPPFLAGS@ @MODFLAGS@ -I@prefix@/include/znc"
+MODLINK="@MODLINK@"
 # LIBS="@LIBS@"
 # No libs needed, ZNC links against $LIBS and thus modules don't need to.
 LIBS=""
@@ -19,6 +20,7 @@ if test -z "$1"; then
        echo "USAGE: $0 <flag>"
        echo "  --cxx        [$CXX]"
        echo "  --cflags     [$CXXFLAGS]"
+       echo "  --modlink    [$MODLINK]"
        echo "  --libs       [$LIBS]"
        echo "  --moddir     [$MODDIR]"
        echo "  --datadir    [$DATADIR]"
@@ -32,6 +34,8 @@ case $1 in
                echo $CXX;;
        --cflags)
                echo $CXXFLAGS;;
+       --modlink)
+               echo $MODLINK;;
        --include)
                # Left here for backwards compatibility
                ;;