Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into v4-0-wsgi
[nivanova/samba-autobuild/.git] / source4 / build / m4 / check_ld.m4
index ad514054cd300aded0cebd13e6df6dbd32af2f05..3a74ffc239505b6a080f08d3dab3920f14b3eb0b 100644 (file)
@@ -10,131 +10,74 @@ AC_PATH_PROG(PROG_LD,ld)
 LD=${PROG_LD}
 AC_PROG_LD_GNU
 LD=""
-AC_PATH_PROG(PROG_AR, ar)
 
-AC_SUBST(STLD)
-AC_SUBST(STLD_FLAGS)
 AC_SUBST(BLDSHARED)
 AC_SUBST(LD)
+AC_SUBST(SYS_LDFLAGS)
 AC_SUBST(LDFLAGS)
-AC_SUBST(SHLD)
-AC_SUBST(SHLD_FLAGS)
-AC_SUBST(SHLD_UNDEF_FLAGS)
-AC_SUBST(SHLIBEXT)
-AC_SUBST(SONAMEFLAG)
-AC_SUBST(PICFLAG)
 
 # Assume non-shared by default and override below
 # these are the defaults, good for lots of systems
-STLD=${PROG_AR}
-STLD_FLAGS="-rcs"
 BLDSHARED="false"
 LD="${CC}"
-LDFLAGS=""
-SHLD="${CC}"
-SHLD_FLAGS="-shared"
-SHLIBEXT="so"
-SONAMEFLAG=""
 PICFLAG=""
 
-AC_MSG_CHECKING([ability to build shared libraries])
+# allow for --with-hostld=gcc
+AC_ARG_WITH(hostld,[  --with-hostld=linker    choose host linker],
+[HOSTLD=$withval],
+[HOSTLD=$HOSTCC])
+
+AC_MSG_CHECKING([whether to try to build shared libraries on $host_os])
 
 # and these are for particular systems
 case "$host_os" in
        *linux*)
                BLDSHARED="true"
-               SHLD_FLAGS="-shared -Wl,-Bsymbolic"
-               SHLD_UNDEF_FLAGS="-Wl,--allow-shlib-undefined"
-               LDFLAGS="-Wl,--export-dynamic"
-               PICFLAG="-fPIC"
-               SONAMEFLAG="-Wl,-soname="
+               SYS_LDFLAGS="-Wl,--export-dynamic"
                ;;
        *solaris*)
                BLDSHARED="true"
-               SHLD_FLAGS="-G"
-               SONAMEFLAG="-h "
                if test "${GCC}" = "yes"; then
-                       PICFLAG="-fPIC"
-                       SONAMEFLAG="-Wl,-soname="
                        if test "${ac_cv_prog_gnu_ld}" = "yes"; then
-                               LDFLAGS="-Wl,-E"
+                               SYS_LDFLAGS="-Wl,-E"
                        fi
-               else
-                       PICFLAG="-KPIC"
-                       ## ${CFLAGS} added for building 64-bit shared 
-                       ## libs using Sun's Compiler
-                       SHLD_FLAGS="-G \${CFLAGS}"
                fi
                ;;
        *sunos*)
                BLDSHARED="true"
-               SHLD_FLAGS="-G"
-               SONAMEFLAG="-Wl,-h,"
-               PICFLAG="-KPIC"   # Is this correct for SunOS
                ;;
        *netbsd* | *freebsd* | *dragonfly* )  
                BLDSHARED="true"
-               LDFLAGS="-Wl,--export-dynamic"
-               SONAMEFLAG="-Wl,-soname,"
-               PICFLAG="-fPIC -DPIC"
+               SYS_LDFLAGS="-Wl,--export-dynamic"
                ;;
        *openbsd*)
                BLDSHARED="true"
-               LDFLAGS="-Wl,-Bdynamic"
-               SONAMEFLAG="-Wl,-soname,"
-               PICFLAG="-fPIC"
+               SYS_LDFLAGS="-Wl,-Bdynamic"
                ;;
        *irix*)
                BLDSHARED="true"
-               SHLD_FLAGS="-set_version sgi1.0 -shared"
-               SONAMEFLAG="-soname "
-               SHLD="${PROG_LD}"
-               if test "${GCC}" = "yes"; then
-                       PICFLAG="-fPIC"
-               else 
-                       PICFLAG="-KPIC"
-               fi
                ;;
        *aix*)
                BLDSHARED="true"
-               SHLD_FLAGS="-Wl,-G,-bexpall,-bbigtoc"
-               LDFLAGS="-Wl,-brtl,-bexpall,-bbigtoc"
-               # as AIX code is always position independent...
-               PICFLAG="-O2"
+               SYS_LDFLAGS="-Wl,-brtl,-bexpall,-bbigtoc"
                ;;
        *hpux*)
                # Use special PIC flags for the native HP-UX compiler.
-               if test $ac_cv_prog_cc_Ae = yes; then
-                       BLDSHARED="true"
-                       SHLD_FLAGS="-b -Wl,-B,symbolic,-b,-z"
-                       SONAMEFLAG="-Wl,+h "
-                       PICFLAG="+z"
-               elif test "${GCC}" = "yes"; then
-                       BLDSHARED="true" # I hope this is correct
-                       PICFLAG="-fPIC"
-               fi
+               BLDSHARED="true" # I hope this is correct
                if test "$host_cpu" = "ia64"; then
-                       SHLIBEXT="so"
-                       LDFLAGS="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
+                       SYS_LDFLAGS="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
                else
-                       SHLIBEXT="sl"
-                       LDFLAGS="-Wl,-E,+b/usr/local/lib:/usr/lib"
+                       SYS_LDFLAGS="-Wl,-E,+b/usr/local/lib:/usr/lib"
                fi
                ;;
        *osf*)
                BLDSHARED="true"
-               SONAMEFLAG="-Wl,-soname,"
-               PICFLAG="-fPIC"
                ;;
        *unixware*)
                BLDSHARED="true"
-               SONAMEFLAG="-Wl,-soname,"
-               PICFLAG="-KPIC"
                ;;
        *darwin*)
                BLDSHARED="true"
-               SHLD_FLAGS="-bundle -flat_namespace -undefined suppress"
-               SHLIBEXT="dylib"
                ;;
 esac
 
@@ -144,43 +87,79 @@ AC_MSG_CHECKING([LD])
 AC_MSG_RESULT([$LD])
 AC_MSG_CHECKING([LDFLAGS])
 AC_MSG_RESULT([$LDFLAGS])
+AC_MSG_CHECKING([SYS_LDFLAGS])
+AC_MSG_RESULT([$SYS_LDFLAGS])
+
+AC_SUBST(HOSTLD)
+
+AC_LIBREPLACE_STLD
+AC_LIBREPLACE_STLD_FLAGS
 
 AC_MSG_CHECKING([STLD])
 AC_MSG_RESULT([$STLD])
 AC_MSG_CHECKING([STLD_FLAGS])
 AC_MSG_RESULT([$STLD_FLAGS])
 
+AC_LD_PICFLAG
+AC_LD_EXPORT_DYNAMIC
+AC_LD_SHLIBEXT
+AC_LD_SONAMEFLAG
+AC_LIBREPLACE_SHLD
+AC_LIBREPLACE_SHLD_FLAGS
+AC_LIBREPLACE_MDLD
+AC_LIBREPLACE_MDLD_FLAGS
+AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
+
 #######################################################
 # test whether building a shared library actually works
 if test $BLDSHARED = true; then
 
-AC_MSG_CHECKING([SHLD])
-AC_MSG_RESULT([$SHLD])
-AC_MSG_CHECKING([SHLD_FLAGS])
-AC_MSG_RESULT([$SHLD_FLAGS])
+       AC_MSG_CHECKING([SHLD])
+       AC_MSG_RESULT([$SHLD])
+       AC_MSG_CHECKING([SHLD_FLAGS])
+       AC_MSG_RESULT([$SHLD_FLAGS])
+
+       AC_MSG_CHECKING([MDLD])
+       AC_MSG_RESULT([$MDLD])
+       AC_MSG_CHECKING([MDLD_FLAGS])
+       AC_MSG_RESULT([$MDLD_FLAGS])
+
+       AC_MSG_CHECKING([SHLIBEXT])
+       AC_MSG_RESULT([$SHLIBEXT])
+       AC_MSG_CHECKING([SONAMEFLAG])
+       AC_MSG_RESULT([$SONAMEFLAG])
+
+       AC_MSG_CHECKING([PICFLAG])
+       AC_MSG_RESULT([$PICFLAG])
+
+       AC_CACHE_CHECK([whether building shared libraries actually works], 
+                      [ac_cv_shlib_works],[
+                       ac_cv_shlib_works=no
+                       # try building a trivial shared library
+                       # TODO: also test SONAMEFLAG
+                       ${CC} ${CFLAGS} ${PICFLAG} -c ${srcdir-.}/build/tests/shlib.c -o shlib.o &&
+                               ${SHLD} ${SHLD_FLAGS} -o shlib.${SHLIBEXT} shlib.o && 
+                               ac_cv_shlib_works=yes
+                       rm -f shlib.${SHLIBEXT} shlib.o
+       ])
+       AC_CACHE_CHECK([whether building shared modules actually works], 
+                      [ac_cv_shmod_works],[
+                       ac_cv_shmod_works=no
+                       # try building a trivial shared library
+                       ${CC} ${CFLAGS} ${PICFLAG} -c ${srcdir-.}/build/tests/shlib.c -o shlib.o &&
+                               ${MDLD} ${MDLD_FLAGS} -o shlib.${SHLIBEXT} shlib.o && 
+                               ac_cv_shmod_works=yes
+                       rm -f shlib.${SHLIBEXT} shlib.o
+       ])
+       if test $ac_cv_shlib_works = no; then
+               AC_MSG_ERROR(unable to build shared libraries)
+       fi
+       if test $ac_cv_shmod_works = no; then
+               AC_MSG_ERROR(unable to build shared modules)
+       fi
+fi
 
 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
-AC_MSG_CHECKING([SHLIBEXT])
-AC_MSG_RESULT([$SHLIBEXT])
-AC_MSG_CHECKING([SONAMEFLAG])
-AC_MSG_RESULT([$SONAMEFLAG])
-
-AC_MSG_CHECKING([PICFLAG])
-AC_MSG_RESULT([$PICFLAG])
-
-AC_CACHE_CHECK([whether building shared libraries actually works], 
-               [ac_cv_shlib_works],[
-   ac_cv_shlib_works=no
-   # try building a trivial shared library
-   ${CC} ${CFLAGS} ${PICFLAG} -c ${srcdir-.}/build/tests/shlib.c -o shlib.o &&
-       ${SHLD} `eval echo ${SHLD_FLAGS} ` -o shlib.${SHLIBEXT} shlib.o &&
-       ac_cv_shlib_works=yes
-   rm -f shlib.${SHLIBEXT} shlib.o
-])
-if test $ac_cv_shlib_works = no; then
-   BLDSHARED=false
-fi
-fi
 
 AC_MSG_CHECKING([if we can link using the selected flags])
 AC_TRY_RUN([#include "${srcdir-.}/build/tests/trivial.c"],
@@ -193,7 +172,7 @@ USESHARED=false
 AC_SUBST(USESHARED)
 
 AC_ARG_ENABLE(dso,
-[  --enable-dso                Enable using shared libraries internally (experimental)],
+[  --enable-dso                  Enable using shared libraries internally (experimental)],
 [],[enable_dso=no])
 
 if test x"$enable_dso" = x"yes" -a x"$BLDSHARED" != x"true"; then