What's the reason for using dynamic libraries in the client?
And how does this relate to applications?
-- David
On 17-Jun-2014 6:11 AM, Gianfranco Costamagna wrote:
Hi Boinc development team,
as you already know debian has a little patched boinc version that dynamically
links
almost everything and exports those libraries to applications that uses them
(e.g.
seti, milkyway)
This approach has never been merged upstream since you don't want to dynamically
link almost anything in your source tree, however since in debian we have really
nice results I decided to merge my patches and give you a single patch with a
new
autoconf swich, that permits distros who wants to automagically dynamically
build
the source code.
This approach is disabled by default, so the current behaviour will still be
the default
what do you think about?
This will simplify a lot the debian maintaining of your package.
Thanks,
Gianfranco
--- /dev/null
+++ b/debian/patches/dynamic-libs.patch
@@ -0,0 +1,203 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -71,6 +71,11 @@
+ [dynamic_client=${enableval}],
+ [dynamic_client=no])
+
++AC_ARG_ENABLE(dynamic-libs,
++ AS_HELP_STRING([--enable-dynamic-libs],
++ [build dynamic libraries]),
++ [dynamic_libs=yes])
++
+ AC_ARG_ENABLE(server,
+ AS_HELP_STRING([--disable-server],
+ [disable building the scheduling server]),
+@@ -949,6 +954,7 @@
+
+ dnl tell automake about whether to build client and/or server
+ AM_CONDITIONAL(DYNAMIC_CLIENT, [test "${dynamic_client}" = yes])
++AM_CONDITIONAL(DYNAMIC_LIBS, [test "x${dynamic_libs}" = xyes])
+ AM_CONDITIONAL(ENABLE_SERVER, [test "${enable_server}" = yes])
+ AM_CONDITIONAL(ENABLE_CLIENT, [test "${enable_client}" = yes])
+ AM_CONDITIONAL(ENABLE_MANAGER, [ test "x${ac_cv_have_wxwidgets}" = xyes -a
"${enable_manager}" = yes ])
+--- a/Makefile.incl
++++ b/Makefile.incl
+@@ -41,26 +41,36 @@
+ # dependencies to make sure libs gets compiled before
+ # programs linking to them:
+
+-LIBSCHED = $(top_builddir)/sched/libsched.la
++if DYNAMIC_LIBS
++ LIBSCHED = -lsched
++ LIBSCHED_FCGI = -lsched_fcgi
++ LIBBOINC = -lboinc
++ LIBBOINC_CRYPT = -lboinc_crypt
++ LIBBOINC_FCGI = -lboinc_fcgi
++ LIBAPI = -lboinc_api
++else
++ LIBSCHED = $(top_builddir)/sched/libsched.la
++ LIBSCHED_FCGI = $(top_builddir)/sched/libsched_fcgi.la
++ LIBBOINC = $(top_builddir)/lib/libboinc.la
++ LIBBOINC_CRYPT = $(top_builddir)/lib/libboinc_crypt.la
++ LIBBOINC_FCGI = $(top_builddir)/lib/libboinc_fcgi.la
++ LIBAPI = $(top_builddir)/api/libboinc_api.la
++endif
++
+ $(LIBSCHED):
+ cd $(top_builddir)/sched; ${MAKE} libsched.la
+-LIBSCHED_FCGI = $(top_builddir)/sched/libsched_fcgi.la
+ $(LIBSCHED_FCGI):
+ cd $(top_builddir)/sched; ${MAKE} libsched_fcgi.la
+-LIBBOINC = $(top_builddir)/lib/libboinc.la
+ $(LIBBOINC):
+ cd $(top_builddir)/lib; ${MAKE} libboinc.la
+-LIBBOINC_CRYPT = $(top_builddir)/lib/libboinc_crypt.la
+ $(LIBBOINC_CRYPT):
+ cd $(top_builddir)/lib; ${MAKE} libboinc.la
+-LIBBOINC_FCGI = $(top_builddir)/lib/libboinc_fcgi.la
+ $(LIBBOINC_FCGI):
+ cd $(top_builddir)/lib; ${MAKE} libboinc_fcgi.la
+-LIBAPI = $(top_builddir)/api/libboinc_api.la
+ $(LIBAPI):
+ cd $(top_builddir)/api; ${MAKE} libboinc_api.la
+
+ SERVERLIBS = $(LIBSCHED) $(LIBBOINC_CRYPT) $(LIBBOINC) $(MYSQL_LIBS)
$(PTHREAD_LIBS) $(RSA_LIBS) $(SSL_LIBS)
+ SERVERLIBS_FCGI = $(LIBSCHED_FCGI) $(LIBBOINC_CRYPT) $(LIBBOINC_FCGI) -lfcgi
$(MYSQL_LIBS) $(PTHREAD_LIBS) $(RSA_LIBS) $(SSL_LIBS)
+ APPLIBS = $(LIBAPI) $(LIBBOINC)
+-
++.PHONY: $(LIBBOINC) $(LIBBOINC_CRYPT) $(LIBBOINC_FCGI) $(LIBAPI) $(LIBSCHED)
$(LIBSCHED_FCGI)
+--- a/client/Makefile.am
++++ b/client/Makefile.am
+@@ -31,7 +31,11 @@
+ boinccmd_DEPENDENCIES = $(LIBBOINC)
+ boinccmd_CPPFLAGS = $(AM_CPPFLAGS)
+ boinccmd_LDFLAGS = $(AM_LDFLAGS) -L$(top_srcdir)/lib
++if DYNAMIC_LIBS
++boinccmd_LDADD = $(LIBBOINC) $(BOINC_EXTRA_LIBS) $(PTHREAD_LIBS)
-L../lib/.libs
++else
+ boinccmd_LDADD = $(LIBBOINC) $(BOINC_EXTRA_LIBS) $(PTHREAD_LIBS)
++endif
+
+ boinc_client_SOURCES = \
+ acct_mgr.cpp \
+--- a/apps/Makefile.am
++++ b/apps/Makefile.am
+@@ -8,15 +8,27 @@
+
+ upper_case_SOURCES = upper_case.cpp
+ upper_case_CXXFLAGS = $(PTHREAD_CFLAGS)
++if DYNAMIC_LIBS
++upper_case_LDFLAGS = -static-libtool-libs $(PTHREAD_CFLAGS) -L../api/.libs
-L../lib/.libs
++else
+ upper_case_LDFLAGS = -static-libtool-libs $(PTHREAD_CFLAGS)
++endif
+ upper_case_LDADD = $(APPLIBS)
+
+ concat_SOURCES = concat.cpp
+ concat_CXXFLAGS = $(PTHREAD_CFLAGS)
++if DYNAMIC_LIBS
++concat_LDFLAGS = -static-libtool-libs $(PTHREAD_CFLAGS) -L../api/.libs
-L../lib/.libs
++else
+ concat_LDFLAGS = -static-libtool-libs $(PTHREAD_CFLAGS)
++endif
+ concat_LDADD = $(APPLIBS)
+
+ 1sec_SOURCES = 1sec.cpp
+ 1sec_CXXFLAGS = $(PTHREAD_CFLAGS)
++if DYNAMIC_LIBS
++1sec_LDFLAGS = -static-libtool-libs $(PTHREAD_CFLAGS) -L../api/.libs
-L../lib/.libs
++else
+ 1sec_LDFLAGS = -static-libtool-libs $(PTHREAD_CFLAGS)
++endif
+ 1sec_LDADD = $(APPLIBS)
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -175,13 +175,21 @@
+ libboinc_la_SOURCES = $(generic_sources) $(mac_sources) $(win_sources)
+ libboinc_la_CFLAGS = $(AM_CFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
+ libboinc_la_CXXFLAGS = $(AM_CXXFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
++if DYNAMIC_LIBS
++libboinc_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number
$(LIBBOINC_VERSION)
++else
+ libboinc_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -static -version-number
$(LIBBOINC_VERSION)
++endif
+ libboinc_la_LIBADD =
+
+ libboinc_crypt_la_SOURCES = crypt.cpp
+ libboinc_crypt_la_CFLAGS = $(AM_CFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
$(SSL_CFLAGS)
+ libboinc_crypt_la_CXXFLAGS = $(AM_CXXFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
$(SSL_CXXFLAGS)
++if DYNAMIC_LIBS
++libboinc_crypt_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number
$(LIBBOINC_VERSION)
++else
+ libboinc_crypt_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -static
-version-number
$(LIBBOINC_VERSION)
++endif
+ libboinc_crypt_la_LIBADD =
+
+
+@@ -250,7 +258,11 @@
+ msg_test_LDADD = $(LIBBOINC)
+ crypt_prog_SOURCES = crypt_prog.cpp
+ crypt_prog_CXXFLAGS = $(PTHREAD_CFLAGS)
++if DYNAMIC_LIBS
++crypt_prog_LDADD = $(LIBBOINC_CRYPT_STATIC) $(LIBBOINC) $(SSL_LIBS)
-L../lib/.libs
++else
+ crypt_prog_LDADD = $(LIBBOINC_CRYPT_STATIC) $(LIBBOINC) $(SSL_LIBS)
++endif
+ parse_test_SOURCES = parse_test.cpp
+ parse_test_CXXFLAGS = $(PTHREAD_CFLAGS)
+ parse_test_LDADD = $(LIBBOINC)
+--- a/vda/Makefile.am
++++ b/vda/Makefile.am
+@@ -4,7 +4,11 @@
+ vda_PROGRAMS = vda vdad ssim
+
+ AM_CXXFLAGS += $(MYSQL_CFLAGS)
++if DYNAMIC_LIBS
++AM_LDFLAGS += -L../sched -L../lib/.libs
++else
+ AM_LDFLAGS += -static
++endif
+
+ vda_SOURCES = vda.cpp vda_lib.cpp vda_lib2.cpp vda_policy.cpp stats.cpp
+ vda_LDADD = $(SERVERLIBS)
+--- a/sched/Makefile.am
++++ b/sched/Makefile.am
+@@ -4,7 +4,11 @@
+ include $(top_srcdir)/Makefile.incl
+
+ AM_CPPFLAGS += $(MYSQL_CFLAGS) $(PTHREAD_CFLAGS)
++if DYNAMIC_LIBS
++AM_LDFLAGS += -L../lib/.libs
++else
+ AM_LDFLAGS += -static
++endif
+
+ if ENABLE_LIBRARIES
+
+--- a/tools/Makefile.am
++++ b/tools/Makefile.am
+@@ -44,7 +44,11 @@
+ gui_urls.xml
+
+ AM_CXXFLAGS += $(MYSQL_CFLAGS)
++if DYNAMIC_LIBS
++AM_LDFLAGS += -L../sched -L../lib/.libs
++else
+ AM_LDFLAGS += -static
++endif
+
+ cancel_jobs_SOURCES = cancel_jobs.cpp
+ cancel_jobs_LDADD = $(SERVERLIBS)
+--- a/clientgui/Makefile.am
++++ b/clientgui/Makefile.am
+@@ -13,7 +13,9 @@ if ENABLE_CLIENT_RELEASE
+ ## so we'll use the safer "-static-libtool-libs" by default.
+ else
+ if DYNAMIC_CLIENT
+-## if libtool starts to need flags for dynamic linking, add them here
++if DYNAMIC_LIBS
++ AM_LDFLAGS += -L../lib/.libs
++endif
+ else
+ AM_LDFLAGS += -static
+ endif
_______________________________________________
boinc_dev mailing list
[email protected]
http://lists.ssl.berkeley.edu/mailman/listinfo/boinc_dev
To unsubscribe, visit the above URL and
(near bottom of page) enter your email address.