G'day team Dan identified that there were problems building OpenChange on an AMD64 (x86_64) box. I certainly saw that with Fedora 7 on my x86_64 box.
I've got it partly sorted though. There are really two problems - we need to
use -fPIC and we need to make sure that we link to the 64 bit libs (i.e.
from /usr/lib64) when trying to build.
man gcc says:
-fPIC
If supported for the target machine, emit position-independent
code, suitable for dynamic linking and avoiding any limit on the size of the
global offset table. This option makes a difference on the m68k, PowerPC and
SPARC.
Position-independent code requires special support, and therefore
works only on certain machines.
It looks like we should use -fPIC for shared libraries on x86_64.
Also, there are a couple of places where we have dependencies on the library,
and there is some kind of libtool interaction. I didn't see why -lpopt made a
sensible dependency, so I just moved it to the build line.
Patch (inlined for review, attached for application) enclosed.
You still have to pass LDFLAGS for this:
./configure LDFLAGS=-L/usr/lib64
Brad
Index: Makefile.in
===================================================================
--- Makefile.in (revision 272)
+++ Makefile.in (working copy)
@@ -180,7 +180,7 @@
@$(LEX) -t $< > $@
# Avoid warnings:
-libmapi/utf8_convert.yy.o: CFLAGS=
+#libmapi/utf8_convert.yy.o: CFLAGS=
server/dcesrv_exchange.$(SHLIBEXT): providers/emsabp.o
server/dcesrv_exchange.o \
libmapi.$(SHLIBEXT).$(PACKAGE_VERSION)
@@ -244,22 +244,20 @@
bin/openchangepfadmin: utils/openchangepfadmin.o \
libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) \
- libmapiadmin.$(SHLIBEXT).$(PACKAGE_VERSION) \
- -lpopt
+ libmapiadmin.$(SHLIBEXT).$(PACKAGE_VERSION)
@echo "Linking $@"
- @$(CC) -o $@ $^ $(LIBS) $(LIBMAPIADMIN_LIBS)
+ @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBMAPIADMIN_LIBS) -lpopt
bin/openchangemapidump: utils/backup/openchangemapidump.o
\
utils/backup/openchangebackup.o \
- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) \
- -lpopt
+ libmapi.$(SHLIBEXT).$(PACKAGE_VERSION)
@echo "Linking $@"
- @$(CC) -o $@ $^ $(LIBS)
+ @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -lpopt
bin/exchange2mbox: utils/exchange2mbox.o \
- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) -lpopt
$(MAGIC_LIBS)
+ libmapi.$(SHLIBEXT).$(PACKAGE_VERSION)
@echo "Linking $@"
- @$(CC) -o $@ $^ $(LIBS)
+ @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(MAGIC_LIBS) -lpopt
distclean: clean $(SWIGDIRS-DISTCLEAN)
rm -rf autom4te.cache
Index: configure.ac
===================================================================
--- configure.ac (revision 272)
+++ configure.ac (working copy)
@@ -7,6 +7,33 @@
AC_DEFINE(_GNU_SOURCE, 1, [Use GNU extensions])
AC_PROG_CC
+
+AC_DEFUN([OC_CHECK_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CC supports -$1])
+oc_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(oc_cv_prog_cc_$oc_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_C
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -shared -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "oc_cv_prog_cc_$oc_cache=yes"], [])
+ CFLAGS="$save_CFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$oc_cv_prog_cc_'$oc_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+
dnl AC_PROG_YACC
dnl ***********************
@@ -47,6 +74,8 @@
AC_PATH_PROG(SMBTORTURE, smbtorture, no, "$prefix/bin")
+OC_CHECK_COMPILER_FLAG(fPIC, [cc_shared_flag="-fPIC"])
+CFLAGS="$cc_shared_flag ${CFLAGS}"
dnl *****************************
dnl Check for libmagic
Index: Makefile.in
===================================================================
--- Makefile.in (revision 272)
+++ Makefile.in (working copy)
@@ -180,7 +180,7 @@
@$(LEX) -t $< > $@
# Avoid warnings:
-libmapi/utf8_convert.yy.o: CFLAGS=
+#libmapi/utf8_convert.yy.o: CFLAGS=
server/dcesrv_exchange.$(SHLIBEXT): providers/emsabp.o server/dcesrv_exchange.o \
libmapi.$(SHLIBEXT).$(PACKAGE_VERSION)
@@ -244,22 +244,20 @@
bin/openchangepfadmin: utils/openchangepfadmin.o \
libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) \
- libmapiadmin.$(SHLIBEXT).$(PACKAGE_VERSION) \
- -lpopt
+ libmapiadmin.$(SHLIBEXT).$(PACKAGE_VERSION)
@echo "Linking $@"
- @$(CC) -o $@ $^ $(LIBS) $(LIBMAPIADMIN_LIBS)
+ @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBMAPIADMIN_LIBS) -lpopt
bin/openchangemapidump: utils/backup/openchangemapidump.o \
utils/backup/openchangebackup.o \
- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) \
- -lpopt
+ libmapi.$(SHLIBEXT).$(PACKAGE_VERSION)
@echo "Linking $@"
- @$(CC) -o $@ $^ $(LIBS)
+ @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -lpopt
bin/exchange2mbox: utils/exchange2mbox.o \
- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) -lpopt $(MAGIC_LIBS)
+ libmapi.$(SHLIBEXT).$(PACKAGE_VERSION)
@echo "Linking $@"
- @$(CC) -o $@ $^ $(LIBS)
+ @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(MAGIC_LIBS) -lpopt
distclean: clean $(SWIGDIRS-DISTCLEAN)
rm -rf autom4te.cache
Index: configure.ac
===================================================================
--- configure.ac (revision 272)
+++ configure.ac (working copy)
@@ -7,6 +7,33 @@
AC_DEFINE(_GNU_SOURCE, 1, [Use GNU extensions])
AC_PROG_CC
+
+AC_DEFUN([OC_CHECK_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CC supports -$1])
+oc_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(oc_cv_prog_cc_$oc_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_C
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -shared -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "oc_cv_prog_cc_$oc_cache=yes"], [])
+ CFLAGS="$save_CFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$oc_cv_prog_cc_'$oc_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+
dnl AC_PROG_YACC
dnl ***********************
@@ -47,6 +74,8 @@
AC_PATH_PROG(SMBTORTURE, smbtorture, no, "$prefix/bin")
+OC_CHECK_COMPILER_FLAG(fPIC, [cc_shared_flag="-fPIC"])
+CFLAGS="$cc_shared_flag ${CFLAGS}"
dnl *****************************
dnl Check for libmagic
pgpWC90Ti5YQH.pgp
Description: PGP signature
_______________________________________________ devel mailing list [email protected] http://mailman.openchange.org/listinfo/devel
