On Sun, Jan 10, 2010 at 11:36 PM, Daniel Lezcano <daniel.lezc...@free.fr> wrote: > Hi all, > > A little summary of what was talked about and what is pending: > > [... snip ...] > > * Statically link the executable > > Ciprian Dorin sent a patchset in order to generate a static library and > link against it. > That was a wish of Michael T Johnson of Foresight Linux. > I will take the patchset. > > [... snip ...]
Hy Daniel! A few months ago I've sent a patch that allows the user to configure and build a static version of all our binaries. We've exchanged a few emails about the subject (the date was after the quote above). But then the subject was dropped. Could I reiterate the proposal? Is there something wrong with my approach? Should I do it in some other (better) way? If interested my repository is at the following URL (the diff with the current master is at the end of the email): git://gitorious.org/~ciprian.craciun/lxc/ciprian-craciun-patches.git Thanks, Ciprian. P.S.: I've also created a "mainline" mirror of LXC repository on Gitorious: http://gitorious.org/lxc/mainline If someone wants ownership to this repository please tell me. (I've created it because there will be users (like myself) that would like to "fork" it from there, and thus we could see which are potential developers to LXC.) My `static-build` diff to current master: ~~~~~~~~~~~~~~~~ diff --git a/configure.ac b/configure.ac index f82e7df..aac7ce6 100644 --- a/configure.ac +++ b/configure.ac @@ -31,6 +31,29 @@ AC_ARG_ENABLE([examples], AM_CONDITIONAL([ENABLE_EXAMPLES], [test "x$enable_examples" = "xyes"]) +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static], [build liblxc.a static library (default is no)])], + [static_libraries=$enableval], [static_libraries=no]) + +AM_CONDITIONAL([STATIC_LIBRARIES], [test "x$static_libraries" = "xyes"]) + +AC_ARG_ENABLE([static-linking], + [AC_HELP_STRING([--enable-static-linking], [link all binaries statically (default is taken from static)])], + [static_linking=$enableval], [static_linking=$static_libraries]) + +AC_ARG_ENABLE([static-linking], + [AC_HELP_STRING([--enable-static-linking], [link all binaries statically (default is taken from static)])], + [static_linking=$enableval], [static_linking=$static_libraries]) + +AM_CONDITIONAL([STATIC_LINKING], [test "x$static_linking" = "xyes"]) + +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared], [build liblxc.so shared library (default is negated from static)])], + [shared_libraries=$enableval], + [shared_libraries=$( if test "x$static_linking" = "xyes" ; then echo no ; else echo yes ; fi )]) + +AM_CONDITIONAL([SHARED_LIBRARIES], [test "x$shared_libraries" = "xyes"]) + AS_AC_EXPAND(PREFIX, $prefix) AS_AC_EXPAND(LIBDIR, $libdir) AS_AC_EXPAND(BINDIR, $bindir) @@ -57,8 +80,7 @@ AC_DEFINE_UNQUOTED(LXCLIBEXECDIR, "$LIBEXECDIR") AC_CHECK_HEADERS([linux/netlink.h linux/genetlink.h], [], AC_MSG_ERROR([netlink headers not found. Please install the linux kernel headers.]), - [#include <sys/socket.h> - ]) + [#include <sys/socket.h>]) AC_CHECK_HEADERS([sys/capability.h], [], AC_MSG_ERROR([please install libcap-devel.]), [#include <sys/types.h> @@ -70,18 +92,19 @@ AC_CHECK_DECLS([PR_CAPBSET_DROP], [], [], [#include <sys/prctl.h>]) AC_CHECK_HEADERS([sys/signalfd.h]) AC_PROG_GCC_TRADITIONAL +AC_PROG_RANLIB if test "x$GCC" = "xyes"; then CFLAGS="$CFLAGS -Wall" fi AC_CONFIG_FILES([ - Makefile + Makefile lxc.pc lxc.spec - config/Makefile + config/Makefile - doc/Makefile + doc/Makefile doc/lxc-create.sgml doc/lxc-destroy.sgml doc/lxc-execute.sgml @@ -115,7 +138,7 @@ AC_CONFIG_FILES([ scripts/lxc-fedora scripts/lxc-sshd - src/Makefile + src/Makefile src/lxc/Makefile src/lxc/lxc-ps src/lxc/lxc-ls diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am index f516841..eb47f99 100644 --- a/src/lxc/Makefile.am +++ b/src/lxc/Makefile.am @@ -12,11 +12,17 @@ pkginclude_HEADERS = \ log.h \ state.h +if SHARED_LIBRARIES sodir=$(libdir) # use PROGRAMS to avoid complains from automake so_PROGRAMS = liblxc.so +endif -liblxc_so_SOURCES = \ +if STATIC_LIBRARIES +lib_LIBRARIES = liblxc.a +endif + +liblxc_SOURCES = \ arguments.c arguments.h \ commands.c commands.h \ start.c \ @@ -39,22 +45,28 @@ liblxc_so_SOURCES = \ log.c log.h \ \ network.c network.h \ - nl.c nl.h \ - rtnl.c rtnl.h \ - genl.c genl.h \ + nl.c nl.h \ + rtnl.c rtnl.h \ + genl.c genl.h \ \ mainloop.c mainloop.h \ af_unix.c af_unix.h AM_CFLAGS=-I$(top_srcdir)/src +liblxc_so_SOURCES = $(liblxc_SOURCES) + liblxc_so_CFLAGS = -fPIC -DPIC $(AM_CFLAGS) liblxc_so_LDFLAGS = \ -shared \ -Wl,-soname,liblxc.so.$(firstword $(subst ., ,$(VERSION))) -liblxc_so_LDADD = -lutil +liblxc_so_LDADD = + +liblxc_a_SOURCES = $(liblxc_SOURCES) + +liblxc_a_CFLAGS = -fPIC -DPIC $(AM_CFLAGS) bin_SCRIPTS = \ lxc-ps \ @@ -84,8 +96,13 @@ bin_PROGRAMS = \ libexec_PROGRAMS = \ lxc-init +if STATIC_LINKING +AM_LDFLAGS=-static +LDADD=liblxc.a -lutil +else AM_LDFLAGS=-Wl,-E -Wl,-rpath -Wl,$(libdir) -LDADD=liblxc.so +LDADD=liblxc.so -lutil +endif lxc_cgroup_SOURCES = lxc_cgroup.c lxc_checkpoint_SOURCES = lxc_checkpoint.c @@ -102,11 +119,15 @@ lxc_unfreeze_SOURCES = lxc_unfreeze.c lxc_unshare_SOURCES = lxc_unshare.c lxc_wait_SOURCES = lxc_wait.c +if SHARED_LIBRARIES install-exec-local: install-soPROGRAMS mv $(DESTDIR)$(libdir)/liblxc.so $(DESTDIR)$(libdir)/liblxc.so.$(VERSION) /sbin/ldconfig -l $(DESTDIR)$(libdir)/liblxc.so.$(VERSION) cd $(DESTDIR)$(libdir); \ ln -sf liblxc.so.$(firstword $(subst ., ,$(VERSION))) liblxc.so +endif +if SHARED_LIBRARIES uninstall-local: $(RM) $(DESTDIR)$(libdir)/liblxc.so* +endif ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel