pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/44810: pkgsrc 2010Q4 samba35 Solaris 2.{8,10} - libintl problem - configure in samba35 broken
>Number: 44810
>Category: pkg
>Synopsis: pkgsrc 2010Q4 samba35 Solaris 2.{8,10} - libintl problem -
>configure in samba35 broken
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Mar 31 09:45:00 +0000 2011
>Originator: Dr. Wolfgang Stukenbrock
>Release: pkgsrc 2010Q4
>Organization:
Dr. Nagler & Company GmbH
>Environment:
System: NetBSD test-s0 4.0 NetBSD 4.0 (NSW-WS) #0: Tue Aug 17 17:28:09 CEST
2010 wgstuken@test-s0:/usr/src/sys/arch/amd64/compile/NSW-WS amd64
Architecture: x86_64
Machine: amd64
>Description:
While building samba35 on Solaris 8 linking "net" fails due to
unresolved symbols. (same on 2.10)
libintl_gettext is one of them.
Libintl has been build before by pkgsrc and is installed in /usr/pkg
correctly.
The problem is the configure script source3/configure.
It checks for the presense of "libintl.h" and defines HAVE_LIBINTL_H in
config.h in any case.
So libintl.h gets included in the sources. There gettext() is redefined
to libintl_gettext() like
some other function now.
Accedently the check for the library is only done in the samba4-merged
build check stuff.
There it is found and some variables for the source4 build part are set.
"-lintl" is never added to the link commands (or the LIBS vairable in
configure) for source3 linking.
This is a problem on systems that requires libintl for pkgsrc builds.
There may be other architectures affected too.
>How-To-Repeat:
Try to compile samba35 on Solaris 2.8 (I use sunstudio as main
compiler, but same happens if ggc is used).
>Fix:
The configure (and configure.in) must be fixed in order to check for
libintl.so presence and add it to
the LIBS variable.
Accedently I found no easy way to check this only if libintl.h has been
found before. I found no variable
in configure that I can test.
The following patch will add a check for libintl in all cases and if
found -lintl is added to LIBS.
With this change samba35 now compiles on Solaris 2.8.
But this change has a side effect on other builds - e.g. NetBSD builds.
The libintl.so is no linked to all binaries, even if not needed. I
count 11 additional references to
/usr/lib/libintl.so on a 5.0.2 system in the resulting "bin" folder.
I have no idea how to add the libintl linkage only if libintl.h is
found and libintl is a requirement
in the pkgsrc build process. Someone with more experiance in this topic
should have a look at it.
Normaly the best way would be to correct configure.in and let configure
to be recreated.
But this is not possible, because there is a large patch for
source3/configure in the patches folder
and the output of autoconf is very version specific. pkgsrc autoconf is
a newer version as used
to generate the configure script in samba35. A diff will report nearly
all of the 100000 lines ...
So I generate an additional patch for source3/configure - it should be
integrated into the existing one.
remark: autoconf is not called by pkgsrc build in any case - as far as
I figured out.
The "new" part in configure is simply a copy of the generated code for
-lintl-check in the samba4-merged
check.
--- configure.in.orig 2011-03-30 16:52:19.000000000 +0200
+++ configure.in 2010-10-07 18:41:16.000000000 +0200
@@ -6733,6 +6733,8 @@
Im4_include(samba4.m4)
IUSESHARED="$saved_USESHARED"
fi
+AC_CHECK_LIB_EXT(intl, INTL_LIBS, gettext)
+LIBS="$INTL_LIBS $LIBS"
AC_SUBST(ZLIB_LIBS)
AC_SUBST(ZLIB_OBJS)
--- configure.orig 2011-03-29 11:11:40.766380000 +0200
+++ configure 2011-03-29 11:10:45.547857000 +0200
@@ -47252,6 +47251,104 @@
USESHARED="$saved_USESHARED"
fi
+ac_check_lib_ext_save_LIBS=$LIBS
+LIBS="-lintl $INTL_LIBS $LIBS"
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for gettext in -lintl" >&5
+$as_echo_n "checking for gettext in -lintl... " >&6; }
+if test "${ac_cv_lib_ext_intl_gettext+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 gettext ();
+int
+main ()
+{
+return gettext ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_ext_intl_gettext=yes;
+ ac_cv_lib_ext_intl=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_ext_intl_gettext=no;
+ ac_cv_lib_ext_intl=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ext_intl_gettext" >&5
+$as_echo "$ac_cv_lib_ext_intl_gettext" >&6; }
+ if test $ac_cv_lib_ext_intl_gettext = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+fi
+
+LIBS=$ac_check_lib_ext_save_LIBS
+
+if test $ac_cv_lib_ext_intl = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBINTL 1
+_ACEOF
+
+ case "$INTL_LIBS" in
+ *-lintl*)
+ ;;
+ *)
+ INTL_LIBS="-lintl $INTL_LIBS"
+ ;;
+ esac
+
+
+fi
+
+
+LIBS="$INTL_LIBS $LIBS"
>Unformatted:
Home |
Main Index |
Thread Index |
Old Index