Extend portability improvements of Linux client build to Linux clientgui.

svn path=/trunk/boinc/; revision=5149
This commit is contained in:
Bruce Allen 2005-01-20 17:04:21 +00:00
parent 9abcdd1ac3
commit 8fa397b2ef
3 changed files with 60 additions and 29 deletions

View File

@ -22987,8 +22987,7 @@ Bruce 20 Jan 2005
Linux client using static rather than
dynamic linking to the gcc C++ lib. Note that modifying
this to do the same whenever gcc is used (not just under
Linux) might be desirable. Also modifying the clientgui
build in the same way might also be desirable.
Linux) might be desirable.
configure.ac
client/

View File

@ -3,8 +3,7 @@
include $(top_srcdir)/Makefile.incl
# by default, "-static -static-libgcc" on linux.
#STATIC_FLAGS=@STATIC_FLAGS@
LIBS += @LINUXLIBS@
bin_PROGRAMS = boinc_gui
@ -46,7 +45,7 @@ EXTRA_DIST = BOINCBaseView.h DlgAttachProject.h ValidateAccountKey.h ViewWork
boinc_gui_CPPFLAGS = $(AM_CPPFLAGS) $(WX_CPPFLAGS) $(CLIENTGUIFLAGS)
boinc_gui_CXXFLAGS = $(AM_CXXFLAGS) $(WX_CXXFLAGS) $(CLIENTGUIFLAGS)
boinc_gui_LDADD = $(PTHREAD_LIBS) $(WX_LIBS)
boinc_gui_LDADD = $(CLIENTGUILIBS)
all-local: client_gui-bin
client_gui-bin: @CLIENT_GUI_BIN_FILENAME@

View File

@ -128,16 +128,18 @@ I am continuing now as if --disable-server had been specified.
fi
dnl Checks for libraries.
AC_CHECK_LIB(gen, main)
AC_CHECK_LIB(m, sin)
AC_CHECK_LIB(socket, main)
AC_CHECK_LIB(nsl, gethostbyaddr)
dnl AC_CHECK_LIB(socket, main)
dnl AC_CHECK_LIB(nsl, gethostbyaddr, [have_nsl=yes])
dnl AM_CONDITIONAL([HAVE_NSL], [test x$have_nsl = xyes])
dnl AC_SEARCH_LIBS(gethostbyname, nsl, , AC_SEARCH_LIBS(gethostbyname, nsl, ,, -lsocket), , )
AC_CHECK_LIB(cygipc, shmget)
dnl NOTE: we might want to link the following libs statically on linux
dnl for building portable binaries, so we store them in a separate variable
dnl BOINC_EXTRA_LIBS for later post-processing instead of the default-action,
dnl which would prepend them to LIBS
dnl (note, we also don't define HAVE_LIBXXX, because currently they aren't used
AC_CHECK_LIB(nsl, gethostbyname, [BOINC_EXTRA_LIBS="-lnsl ${BOINC_EXTRA_LIBS}"])
AC_CHECK_LIB(socket, setservent, [BOINC_EXTRA_LIBS="-lsocket ${BOINC_EXTRA_LIBS}"])
AC_CHECK_LIB(z, gzopen, [BOINC_EXTRA_LIBS="-lz ${BOINC_EXTRA_LIBS}"])
AC_CHECK_LIB(z, gzopen)
dnl check for pthread
ACX_PTHREAD(AC_DEFINE(HAVE_PTHREAD,1, [Have pthread]))
CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
@ -182,12 +184,6 @@ fi
AM_CONDITIONAL(BUILD_GRAPHICS_API, [ test "$have_glut" = yes ])
dnl --------------------------------------------------------------------------------
AC_CHECK_LIB(socket, setservent)
AC_CHECK_LIB(gen, strfind)
AC_CHECK_LIB(gen, strfind, [ AC_DEFINE(HAVE_STRFIND, 1, [Have strfind]) ] )
AC_CHECK_LIB(cygipc, shmget)
dnl put double-inclusion protection into config.h
AH_TOP([
/* double-inclusion protection for config.h */
@ -202,6 +198,7 @@ AH_BOTTOM([
/* end double-inclusion protection for config.h */
#endif /* #ifndef BOINC_CONFIG_H */
])
dnl ----------------------------------------------------------------------
dnl Checks for header files.
AC_HEADER_DIRENT
@ -234,7 +231,7 @@ dnl Checks for library functions.
AC_PROG_GCC_TRADITIONAL
AC_FUNC_VPRINTF
AC_FUNC_WAIT3
AC_CHECK_FUNCS(gethostname gettimeofday mkdir select socket strstr uname lockf flock strftime setpriority wait4 strlcpy strlcat sigaction getutent setutent)
AC_CHECK_FUNCS(lockf flock setpriority wait4 strlcpy strlcat sigaction getutent setutent)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
@ -307,11 +304,6 @@ fi
AM_CONDITIONAL(BUILD_CLIENTGUI, [ test "$wxWin" = 1 -a "${enable_client}" = yes ])
if ( test "${enable_client}" = yes ) && ( test "$wxWin" = 1 ); then
CLIENTGUIFLAGS="-DNOCLIPBOARD -DNOTASKBAR"
AC_SUBST(CLIENTGUIFLAGS)
fi
dnl --------------------------------------------------------------------------------
dnl Here's another way to set up host-specific stuff
@ -325,8 +317,9 @@ AM_CONDITIONAL(ENABLE_SERVER, [test "${enable_server}" = yes])
AM_CONDITIONAL(ENABLE_CLIENT, [test "${enable_client}" = yes])
##----------------------------------------------------------------------
dnl vodoo for building portable linux-binary (client, clientgui)
dnl ======================================================================
dnl some vodoo required for building portable linux-binary (client, clientgui)
dnl ======================================================================
AC_ARG_ENABLE([linux-release], AS_HELP_STRING([--enable-linux-release],
[Try building a portable "release-candidate" for Linux: \
this links libstd++ statically. You will probably need gcc-3.0 for
@ -342,6 +335,9 @@ case $target in
--------------------------------------------------
The switch --enable-linux-release is only useful for building the client and will be ignored
--------------------------------------------------])
else
LDSTATIC="-Wl,-Bstatic"
LDDYNAMIC="-Wl,-Bdynamic"
fi
;;
*) ## in the non-linux case, --enable-linux-release is not allowed
@ -365,13 +361,50 @@ if ( test "${enable_linux_release}" = yes ) && ( test "${enable_client}" = yes )
else
GCC_EH_LIB=
fi
LINUXLIBS="-nodefaultlibs -Wl,-Bstatic -lstdc++ -lgcc $GCC_EH_LIB -Wl,-Bdynamic -lpthread -lm -lc"
LINUXLIBS="-nodefaultlibs $LDSTATIC -lstdc++ -lgcc $GCC_EH_LIB $LDDYNAMIC -lpthread -lm -lc"
else
LINUXLIBS=
fi
AC_SUBST(LINUXLIBS)
##----------------------------------------------------------------------
## --------------------
## some more tweaking to turn non-standard libs into statically linked ones
CLIENTGUIFLAGS="-DNOCLIPBOARD -DNOTASKBAR"
CLIENTGUILIBS=${WX_LIBS}
if test "${enable_linux_release}" = yes; then
## list of possible libraries, which we have to link statically against
## on Linux in order to avoid portability problems
## extend this list as necessary if you find additional libs required on your system
## ****************************************
blacklist="gtk gdk gmodule gthread glib Xi png jpeg tiff nsl z socket"
## ****************************************
## now we walk through the blacklist and turn all matching libs found in
## WX_LIBS_STATIC into a static link-command
CLIENTGUILIBS="-L. ${WX_LIBS_STATIC} -L." ## dummy -L's to make sure the regexp always works
echo "DEBUG: before mangling CLIENTGUILIBS='$CLIENTGUILIBS'"
for somelib in ${blacklist}; do
CLIENTGUILIBS=`echo $CLIENTGUILIBS | sed -e"s/ -l${somelib} / $LDSTATIC -l${somelib} $LDDYNAMIC /g"`
done
echo "DEBUG: final link-line for CLIENTGUILIBS = $CLIENTGUILIBS"
## do exactly the same for all BOINC_EXTRA_LIBS
BOINC_EXTRA_LIBS="-L. ${BOINC_EXTRA_LIBS} -L." ## dummy -L's to make sure the regexp always works
echo "DEBUG: before mangling BOINC_EXTRA_LIBS='$BOINC_EXTRA_LIBS'"
for somelib in ${blacklist}; do
BOINC_EXTRA_LIBS=`echo $BOINC_EXTRA_LIBS | sed -e"s/ -l${somelib} / $LDSTATIC -l${somelib} $LDDYNAMIC /g"`
done
echo "DEBUG: final BOINC_EXTRA_LIBS= $BOINC_EXTRA_LIBS"
fi
## prepend BOINC_EXTRA_LIBS (mangled or not) to LIBS for standard linking
LIBS="${BOINC_EXTRA_LIBS} $LIBS"
AC_SUBST(CLIENTGUIFLAGS)
AC_SUBST(CLIENTGUILIBS)
dnl ======================================================================
AC_CONFIG_FILES([