--Boundary-00=_E2b++zhzYMNCdr+ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi! Currently our kdeinit support in the Makefiles lack as the kdeinit modules are installed in parallel to a binary linking against these modules. This has some drawbacks: 1. glibc's ldconfig doesn't cache DSOs that don't match the lib*.so* pattern, so starting konqueror won't be able to use the cache to find konqueror.so 2. (more important) this doesn't work at all on non-ELF systems (have you asked who the hell is using non-ELF these days? Mac OS X does) Benjamin Reed once tried to get am_edit to create a shared library per KLM and then link both the KLM and the binary to it. As he failed, he tried the same for unsermake. Problem with unsermake is: automake users will fall behind without kdeinit support at all. So we made a short brain storm session today and came up with the following idea: install a kdeinit module only and create in bin a link to a binary that will be kdeinit without kdeinit: "one binary to rule them all". So here is the patch to do exactly that: introducing brockenboring Greetings, Stephan P.S. DSO == dynamic shared object, KLM == kdeinit loaded module --Boundary-00=_E2b++zhzYMNCdr+ Content-Type: text/x-diff; charset="us-ascii"; name="patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="patch" Index: configure.in.in =================================================================== RCS file: /home/kde/kdelibs/configure.in.in,v retrieving revision 1.108 diff -u -3 -p -u -r1.108 configure.in.in --- configure.in.in 7 May 2003 07:08:43 -0000 1.108 +++ configure.in.in 25 Jun 2003 15:01:39 -0000 @@ -49,6 +49,7 @@ DCOPIDL2CPP="compiled" DCOPIDL="compiled" MEINPROC="compiled" KDECONFIG="compiled" +BROCKENBORING='$(bindir)/brockenboring' dnl Checks for libraries etc AC_BASE_PATH_KDE([don't test]) dnl kdelibs is a special case Index: admin/acinclude.m4.in =================================================================== RCS file: /home/kde/kde-common/admin/acinclude.m4.in,v retrieving revision 2.369 diff -u -3 -p -u -r2.369 acinclude.m4.in --- admin/acinclude.m4.in 9 Jun 2003 12:55:12 -0000 2.369 +++ admin/acinclude.m4.in 25 Jun 2003 15:01:39 -0000 @@ -546,8 +546,9 @@ AC_DEFUN(KDE_SUBST_PROGRAMS, KDE_FIND_PATH(artsc-config, ARTSCCONFIG, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(artsc-config)]) fi KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs]) + KDE_FIND_PATH(brockenboring, BROCKENBORING, [$kde_default_bindirs]) KDE_FIND_PATH(meinproc, MEINPROC, [$kde_default_bindirs]) - + if test -n "$MEINPROC" && test ! "$MEINPROC" = "compiled"; then kde_sharedirs="/usr/share/kde /usr/local/share /usr/share /opt/kde3/share /opt/kde/share $prefix/share" test -n "$KDEDIR" && kde_sharedirs="$KDEDIR/share $kde_sharedirs" @@ -566,6 +567,7 @@ AC_DEFUN(KDE_SUBST_PROGRAMS, AC_SUBST(MCOPIDL) AC_SUBST(ARTSCCONFIG) AC_SUBST(KDECONFIG) + AC_SUBST(BROCKENBORING) AC_SUBST(MEINPROC) AC_SUBST(KDE_XSL_STYLESHEET) @@ -654,6 +656,7 @@ AC_SUBST(kde_templatesdir) AC_SUBST(kde_servicesdir) AC_SUBST(kde_servicetypesdir) AC_SUBST(kde_moduledir) +AC_SUBST(kdeinitdir, '$(kde_moduledir)') AC_SUBST(kde_styledir) AC_SUBST(kde_widgetdir) if test "$kde_qtver" = 1; then Index: admin/am_edit =================================================================== RCS file: /home/kde/kde-common/admin/am_edit,v retrieving revision 1.372 diff -u -3 -p -u -r1.372 am_edit --- admin/am_edit 7 Jun 2003 15:38:44 -0000 1.372 +++ admin/am_edit 25 Jun 2003 15:01:39 -0000 @@ -66,6 +66,7 @@ sub tag_NO_UNDEFINED(); sub tag_NMCHECK(); sub tag_NMCHECK_GLOBAL(); sub tag_DIST(); +sub tag_KDEINIT(); # Some global globals... $verbose = 0; # a debug flag @@ -331,6 +332,7 @@ sub processMakefile ($) make_meta_classes(); tag_COMPILE_FIRST(); tag_FINAL() if (!$kdeopts{"nofinal"}); + tag_KDEINIT(); my $final_lines = "final:\n\t\$(MAKE) "; my $final_install_lines = "final-install:\n\t\$(MAKE) "; @@ -805,6 +807,26 @@ sub tag_FINAL() $finalfile =~ s/\.[^.]*$/.P/; $dep_finals .= " \$(DEPDIR)/$finalfile"; } + } +} + +sub tag_KDEINIT() +{ + my $lookup = 'kdeinit_LTLIBRARIES\s*=\s*(.*)'; + if ($MakefileData =~ m/\n$lookup\n/) { + my @kdeinits = split(/[\034\s]+/, $1); + my $lines = ""; + foreach $kdeinit (@kdeinits) { + if ($kdeinit =~ m/\.la$/) { + $kdeinit =~ s/\.la$//; + $lines .= "\t-rm -f \$(DESTDIR)\$(bindir)/$kdeinit\n"; + $lines .= "\t\$(LN_S) \$(BROCKENBORING) \$(DESTDIR)\$(bindir)/$kdeinit\n"; + } + } + $target_adds{"install-exec-am"} .= "install-kdeinit-links "; + $lines = "install-kdeinit-links:\n" . + "\t\$(mkinstalldirs) \$(DESTDIR)\$(bindir)\n" . $lines; + appendLines($lines); } } Index: dcop/Makefile.am =================================================================== RCS file: /home/kde/kdelibs/dcop/Makefile.am,v retrieving revision 1.57 diff -u -3 -p -u -r1.57 Makefile.am --- dcop/Makefile.am 6 Mar 2003 18:02:05 -0000 1.57 +++ dcop/Makefile.am 25 Jun 2003 15:01:39 -0000 @@ -26,10 +26,10 @@ KDE_OPTIONS = qtonly INCLUDES= $(all_includes) -bin_PROGRAMS = dcopserver dcopserver_shutdown +bin_PROGRAMS = dcopserver_shutdown check_PROGRAMS = testdcop testdcopc -lib_LTLIBRARIES = libDCOP.la dcopserver.la +lib_LTLIBRARIES = libDCOP.la libDCOP_la_LIBADD = KDE-ICE/libkICE.la $(LIB_QT) libDCOP_la_LDFLAGS = $(KDE_RPATH) -version-info 6:0:2 -no-undefined $(all_libraries) libDCOP_la_NMCHECK = $(srcdir)/libDCOP.nmcheck @@ -47,13 +47,10 @@ testdcop_METASOURCES = testdcop.moc # dcopstub needs to go first for --enable-final to work libDCOP_la_SOURCES = dcopstub.cpp dcopref.cpp dcopobject.cpp dcopclient.cpp +kdeinit_LTLIBRARIES = dcopserver.la dcopserver_la_LDFLAGS = -module -avoid-version $(all_libraries) dcopserver_la_SOURCES = dcopserver.cpp dcopsignals.cpp -dcopserver_la_LIBADD = libDCOP.la - -dcopserver_LDFLAGS = $(KDE_RPATH) $(all_libraries) -dcopserver_SOURCES = dummy.cpp -dcopserver_LDADD = dcopserver.la +dcopserver_la_LIBADD = libDCOP.la dcopserver_shutdown_SOURCES = dcopserver_shutdown.c @@ -66,9 +63,6 @@ testdcopc_SOURCES = testdcopc.c dcopc.c testdcopc_LDADD = KDE-ICE/libkICE.la $(LIBSM) EXTRA_DIST = HOWTO ICE - -dummy.cpp: - echo > dummy.cpp DOXYGEN_REFERENCES = kdecore DOXYGEN_EXCLUDE = KDE-ICE/* Index: dcop/dcopserver.cpp =================================================================== RCS file: /home/kde/kdelibs/dcop/dcopserver.cpp,v retrieving revision 1.157 diff -u -3 -p -u -r1.157 dcopserver.cpp --- dcop/dcopserver.cpp 19 Mar 2003 18:50:17 -0000 1.157 +++ dcop/dcopserver.cpp 25 Jun 2003 15:01:39 -0000 @@ -1538,7 +1538,7 @@ const char* const ABOUT = "Copyright (C) 1999-2001, The KDE Developers \n" ; -int main( int argc, char* argv[] ) +extern "C" int kdemain( int argc, char* argv[] ) { bool serverid = false; bool nofork = false; Index: kinit/Makefile.am =================================================================== RCS file: /home/kde/kdelibs/kinit/Makefile.am,v retrieving revision 1.30 diff -u -3 -p -u -r1.30 Makefile.am --- kinit/Makefile.am 13 Sep 2002 11:52:30 -0000 1.30 +++ kinit/Makefile.am 25 Jun 2003 15:01:40 -0000 @@ -19,9 +19,8 @@ INCLUDES = -I$(srcdir)/../libltdl/ $(all SUBDIRS = . tests -bin_PROGRAMS = kdeinit kdeinit_wrapper kshell kdeinit_shutdown lnusertemp kwrapper klauncher kioslave -lib_LTLIBRARIES = klauncher.la - +bin_PROGRAMS = kdeinit kdeinit_wrapper kshell kdeinit_shutdown lnusertemp kwrapper kioslave brockenboring +kdeinit_LTLIBRARIES = klauncher.la kdeinit_SOURCES = kinit.cpp setproctitle.cpp # NOTE: We link against all common libraries even if we don't need them ourselves. @@ -37,6 +36,9 @@ kioslave_LDADD = $(LIB_KIO) kdeinit_wrapper_SOURCES = wrapper.c kdeinit_wrapper_LDADD = $(LIBSOCKET) +brockenboring_SOURCES = brockenboring.c +brockenboring_LDADD = $(top_builddir)/libltdl/libltdlc.la + kshell_SOURCES = shell.c kshell_LDADD = $(LIBSOCKET) @@ -52,10 +54,6 @@ kwrapper_LDADD = $(LIBSOCKET) klauncher_la_LDFLAGS = $(all_libraries) -module -avoid-version klauncher_la_LIBADD = $(LIB_KIO) klauncher_la_SOURCES = klauncher.cpp klauncher_main.cpp autostart.cpp - -klauncher_LDFLAGS = $(all_libraries) $(KDE_RPATH) -klauncher_LDADD = klauncher.la -klauncher_SOURCES = dummy.cpp METASOURCES = AUTO Index: kinit/brockenboring.c =================================================================== RCS file: kinit/brockenboring.c diff -N kinit/brockenboring.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ kinit/brockenboring.c 25 Jun 2003 15:01:40 -0000 @@ -0,0 +1,90 @@ +#include +#include +#include "ltdl.h" +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + char path[PATH_MAX + 1]; + char target[PATH_MAX + 1]; + char *p; + + if (argv[0][0] != '/') + { + if (getcwd(path, PATH_MAX)) + { + strncat(path, "/", PATH_MAX); + strncat(path, argv[0], PATH_MAX); + } else { + perror("getpwd"); + return 1; + } + } + else + { + strncpy(path, argv[0], PATH_MAX); + } + + p = path + strlen(path); + while (p > path) + { + if (*p == '/') break; + p--; + } + + if ( *p == '/') + *p = 0; + + strncpy(target, p + 1, PATH_MAX); + + strncat(path, "/../lib/kde3/", PATH_MAX); + strncat(path, target, PATH_MAX); + strncat(path, ".la", PATH_MAX); + + if (!access(path, R_OK)) { + + lt_dlhandle handle; + lt_ptr sym; + int (*func)(int, char *[]); + int ret; + + if (lt_dlinit()) + { + const char * errMsg = lt_dlerror(); + fprintf(stderr, "can't initialize dynamic loading: %s\n", + errMsg ? errMsg : "(null)" ); + } + + handle = lt_dlopen(path); + + if ( !handle ) + { + const char* errMsg = lt_dlerror(); + fprintf(stderr, "Can't open %s - error: %s\n", + path, errMsg ? errMsg : "(null)"); + return 1; + } + sym = lt_dlsym( handle, "kdemain"); + if (!sym ) + { + const char * errMsg = lt_dlerror(); + fprintf(stderr, "Can't find 'kdemain' in '%s'\n%s", + path, errMsg ? errMsg : "(null)"); + return 1; + } + func = (int (*)(int, char *[])) sym; + ret = func(argc, argv); + lt_dlexit(); + return ret; + + } else { + fprintf(stderr, "Can't access %s\n", path); + return 1; + } + + return 0; +} + --Boundary-00=_E2b++zhzYMNCdr+--