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

Attachment: pgpMWvhNLnOGY.pgp
Description: PGP signature

_______________________________________________
devel mailing list
[email protected]
http://mailman.openchange.org/listinfo/devel

Reply via email to