From 1f11333c7beaf36987f06d5bb60186598b2bebf1 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 20 Jun 2007 20:03:30 +0200 Subject: [PATCH] makefiles: Build programs that link against libwine twice with appropriate rpaths. One rpath is for installing and one is for running inside the build tree. --- .gitignore | 7 +++++++ Make.rules.in | 3 ++- configure | 19 +++++++++++++------ configure.ac | 10 +++++++--- loader/Makefile.in | 31 ++++++++++++++++++++++--------- server/Makefile.in | 11 +++++++---- tools/Makefile.in | 6 ++++-- tools/wmc/Makefile.in | 11 +++++++---- tools/wrc/Makefile.in | 11 +++++++---- 9 files changed, 76 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index 07e4bd212a4..b70d332b7ad 100644 --- a/.gitignore +++ b/.gitignore @@ -744,9 +744,13 @@ libs/wpp/ppy.tab.c libs/wpp/ppy.tab.h loader/wine loader/wine-glibc +loader/wine-glibc-installed loader/wine-kthread +loader/wine-kthread-installed loader/wine-preloader +loader/wine-preloader-installed loader/wine-pthread +loader/wine-pthread-installed loader/wine.man programs/Makeprog.rules programs/clock/clock @@ -912,6 +916,7 @@ programs/wordpad/wordpad.ico programs/xcopy/rsrc.res programs/xcopy/xcopy server/wineserver +server/wineserver-installed server/wineserver.man tools/bin2res tools/fnt2bdf @@ -939,9 +944,11 @@ tools/wineprefixcreate.man tools/wmc/mcy.tab.c tools/wmc/mcy.tab.h tools/wmc/wmc +tools/wmc/wmc-installed tools/wmc/wmc.man tools/wrc/parser.tab.c tools/wrc/parser.tab.h tools/wrc/parser.yy.c tools/wrc/wrc +tools/wrc/wrc-installed tools/wrc/wrc.man diff --git a/Make.rules.in b/Make.rules.in index 02df1711656..a32b2765d0a 100644 --- a/Make.rules.in +++ b/Make.rules.in @@ -83,7 +83,8 @@ DLLDIR = $(TOPOBJDIR)/dlls LIBPORT = $(TOPOBJDIR)/libs/port/libwine_port.a LIBWPP = $(TOPOBJDIR)/libs/wpp/libwpp.a LIBWINE = -L$(TOPOBJDIR)/libs/wine -lwine -LIBWINE_LDFLAGS = @LIBWINE_LDFLAGS@ $(LIBWINE) +LDRPATH_INSTALL = @LDRPATH_INSTALL@ +LDRPATH_LOCAL = @LDRPATH_LOCAL@ @SET_MAKE@ diff --git a/configure b/configure index 05d20a36a96..88b8eb8142c 100755 --- a/configure +++ b/configure @@ -744,7 +744,8 @@ LDSHARED LDDLLFLAGS LIBEXT IMPLIBEXT -LIBWINE_LDFLAGS +LDRPATH_INSTALL +LDRPATH_LOCAL DLLTOOL DLLWRAP MINGWAR @@ -12850,7 +12851,9 @@ LIBEXT="so" IMPLIBEXT="def" -LIBWINE_LDFLAGS="" +LDRPATH_INSTALL="" + +LDRPATH_LOCAL="" case $host_os in @@ -13160,6 +13163,7 @@ fi LIBWINE_LDFLAGS="-multiply_defined suppress" LDSHARED="\$(CC) -dynamiclib" STRIP="$STRIP -u -r" + LDRPATH_LOCAL="&& install_name_tool -change @executable_path/\`\$(RELPATH) \$(bindir) \$(libdir)\`/libwine.1.dylib @executable_path/\$(TOPOBJDIR)/libs/wine/libwine.1.dylib \$@ || \$(RM) \$@" COREFOUNDATIONLIB="-framework CoreFoundation" IOKITLIB="-framework IOKit -framework CoreFoundation" @@ -13650,7 +13654,8 @@ ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then - LIBWINE_LDFLAGS="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" + LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" + LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" else as_ac_var=`echo "ac_cv_cflags_-fPIC -Wl,-R,\$ORIGIN/../lib" | $as_tr_sh` { echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 @@ -13709,7 +13714,8 @@ ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then - LIBWINE_LDFLAGS="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" + LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" + LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" fi fi @@ -22222,7 +22228,8 @@ LDSHARED!$LDSHARED$ac_delim LDDLLFLAGS!$LDDLLFLAGS$ac_delim LIBEXT!$LIBEXT$ac_delim IMPLIBEXT!$IMPLIBEXT$ac_delim -LIBWINE_LDFLAGS!$LIBWINE_LDFLAGS$ac_delim +LDRPATH_INSTALL!$LDRPATH_INSTALL$ac_delim +LDRPATH_LOCAL!$LDRPATH_LOCAL$ac_delim DLLTOOL!$DLLTOOL$ac_delim DLLWRAP!$DLLWRAP$ac_delim MINGWAR!$MINGWAR$ac_delim @@ -22248,7 +22255,7 @@ LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 71; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 72; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/configure.ac b/configure.ac index 070faacbf6c..b5bffb88927 100644 --- a/configure.ac +++ b/configure.ac @@ -915,7 +915,8 @@ AC_SUBST(LDSHARED,"") AC_SUBST(LDDLLFLAGS,"") AC_SUBST(LIBEXT,"so") AC_SUBST(IMPLIBEXT,"def") -AC_SUBST(LIBWINE_LDFLAGS,"") +AC_SUBST(LDRPATH_INSTALL,"") +AC_SUBST(LDRPATH_LOCAL,"") case $host_os in cygwin*|mingw32*) @@ -941,6 +942,7 @@ case $host_os in LIBWINE_LDFLAGS="-multiply_defined suppress" LDSHARED="\$(CC) -dynamiclib" STRIP="$STRIP -u -r" + LDRPATH_LOCAL="&& install_name_tool -change @executable_path/\`\$(RELPATH) \$(bindir) \$(libdir)\`/libwine.1.dylib @executable_path/\$(TOPOBJDIR)/libs/wine/libwine.1.dylib \$@ || \$(RM) \$@" dnl declare needed frameworks AC_SUBST(COREFOUNDATIONLIB,"-framework CoreFoundation") AC_SUBST(IOKITLIB,"-framework IOKit -framework CoreFoundation") @@ -996,9 +998,11 @@ case $host_os in [AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"])]) WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], - [LIBWINE_LDFLAGS="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"], + [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" + LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine"], [WINE_TRY_CFLAGS([-fPIC -Wl,-R,\$ORIGIN/../lib], - [LIBWINE_LDFLAGS="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"])]) + [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" + LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine"])]) case $host_cpu in *i[[3456789]]86* | x86_64) diff --git a/loader/Makefile.in b/loader/Makefile.in index 2b3d457c564..f94e08f9c92 100644 --- a/loader/Makefile.in +++ b/loader/Makefile.in @@ -21,15 +21,19 @@ WINE_BINARIES = $(MAIN_BINARY) $(EXTRA_BINARIES) PROGRAMS = \ wine \ wine-glibc \ + wine-glibc-installed \ wine-kthread \ + wine-kthread-installed \ wine-preloader \ - wine-pthread\ + wine-preloader-installed \ + wine-pthread \ + wine-pthread-installed MANPAGES = wine.man INSTALLDIRS = $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man$(prog_manext) -all: $(WINE_BINARIES) $(MODULE) $(MANPAGES) +all: $(WINE_BINARIES) $(WINE_BINARIES:%=%-installed) $(MODULE) $(MANPAGES) @MAKE_RULES@ @@ -37,25 +41,34 @@ LIBPTHREAD = @LIBPTHREAD@ LDEXECFLAGS = @LDEXECFLAGS@ wine-glibc: glibc.o Makefile.in - $(CC) -o $@ glibc.o $(LIBWINE_LDFLAGS) $(LIBPORT) $(LIBPTHREAD) $(EXTRALIBS) $(LDFLAGS) + $(CC) -o $@ glibc.o $(LIBWINE) $(LIBPORT) $(LIBPTHREAD) $(EXTRALIBS) $(LDFLAGS) $(LDRPATH_LOCAL) -wine-preloader: preloader.o Makefile.in +wine-glibc-installed: glibc.o Makefile.in + $(CC) -o $@ glibc.o $(LIBWINE) $(LIBPORT) $(LIBPTHREAD) $(EXTRALIBS) $(LDFLAGS) $(LDRPATH_INSTALL) + +wine-preloader wine-preloader-installed: preloader.o Makefile.in $(CC) -o $@ -static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7c000000 preloader.o $(LIBPORT) $(LDFLAGS) wine-kthread: $(KTHREAD_OBJS) Makefile.in - $(CC) -o $@ $(LDEXECFLAGS) $(KTHREAD_OBJS) $(LIBWINE_LDFLAGS) $(LIBPORT) $(EXTRALIBS) $(LDFLAGS) + $(CC) -o $@ $(LDEXECFLAGS) $(KTHREAD_OBJS) $(LIBWINE) $(LIBPORT) $(EXTRALIBS) $(LDFLAGS) $(LDRPATH_LOCAL) + +wine-kthread-installed: $(KTHREAD_OBJS) Makefile.in + $(CC) -o $@ $(LDEXECFLAGS) $(KTHREAD_OBJS) $(LIBWINE) $(LIBPORT) $(EXTRALIBS) $(LDFLAGS) $(LDRPATH_INSTALL) wine-pthread: $(PTHREAD_OBJS) Makefile.in - $(CC) -o $@ $(LDEXECFLAGS) $(PTHREAD_OBJS) $(LIBWINE_LDFLAGS) $(LIBPORT) $(LIBPTHREAD) $(EXTRALIBS) $(LDFLAGS) + $(CC) -o $@ $(LDEXECFLAGS) $(PTHREAD_OBJS) $(LIBWINE) $(LIBPORT) $(LIBPTHREAD) $(EXTRALIBS) $(LDFLAGS) $(LDRPATH_LOCAL) + +wine-pthread-installed: $(PTHREAD_OBJS) Makefile.in + $(CC) -o $@ $(LDEXECFLAGS) $(PTHREAD_OBJS) $(LIBWINE) $(LIBPORT) $(LIBPTHREAD) $(EXTRALIBS) $(LDFLAGS) $(LDRPATH_INSTALL) $(MODULE): $(MAIN_BINARY) $(RM) $(MODULE) && $(LN_S) $(MAIN_BINARY) $(MODULE) -install:: $(WINE_BINARIES) $(MANPAGES) $(INSTALLDIRS) +install:: $(WINE_BINARIES:%=%-installed) $(MANPAGES) $(INSTALLDIRS) for f in $(WINE_BINARIES); do \ if [ "$(MAIN_BINARY)" = "$$f" ]; \ - then $(INSTALL_PROGRAM) $$f $(DESTDIR)$(bindir)/$(MODULE); \ - else $(INSTALL_PROGRAM) $$f $(DESTDIR)$(bindir)/$$f; \ + then $(INSTALL_PROGRAM) $$f-installed $(DESTDIR)$(bindir)/$(MODULE); \ + else $(INSTALL_PROGRAM) $$f-installed $(DESTDIR)$(bindir)/$$f; \ fi; \ done $(INSTALL_DATA) wine.man $(DESTDIR)$(mandir)/man$(prog_manext)/wine.$(prog_manext) diff --git a/server/Makefile.in b/server/Makefile.in index 7648281f73f..bc0a6bd837f 100644 --- a/server/Makefile.in +++ b/server/Makefile.in @@ -55,7 +55,7 @@ C_SRCS = \ window.c \ winstation.c -PROGRAMS = wineserver +PROGRAMS = wineserver wineserver-installed MANPAGES = wineserver.man INSTALLDIRS = $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man$(prog_manext) @@ -65,10 +65,13 @@ all: $(PROGRAMS) $(MANPAGES) @MAKE_RULES@ wineserver: $(OBJS) - $(CC) -o $@ $(OBJS) $(LIBWINE_LDFLAGS) $(LIBPORT) $(LDFLAGS) $(LIBS) + $(CC) -o $@ $(OBJS) $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(LIBS) $(LDRPATH_LOCAL) -install:: $(PROGRAMS) $(MANPAGES) $(INSTALLDIRS) - $(INSTALL_PROGRAM) wineserver $(DESTDIR)$(bindir)/wineserver +wineserver-installed: $(OBJS) + $(CC) -o $@ $(OBJS) $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(LIBS) $(LDRPATH_INSTALL) + +install:: wineserver-installed $(MANPAGES) $(INSTALLDIRS) + $(INSTALL_PROGRAM) wineserver-installed $(DESTDIR)$(bindir)/wineserver $(INSTALL_DATA) wineserver.man $(DESTDIR)$(mandir)/man$(prog_manext)/wineserver.$(prog_manext) uninstall:: diff --git a/tools/Makefile.in b/tools/Makefile.in index aa69d97f107..7400a87a98c 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -69,8 +69,8 @@ fnt2fon$(EXEEXT): fnt2fon.o relpath$(EXEEXT): relpath.o $(CC) $(CFLAGS) -o $@ relpath.o $(LIBPORT) $(LDFLAGS) -sfnt2fnt$(EXEEXT): sfnt2fnt.o - $(CC) $(CFLAGS) -o $@ sfnt2fnt.o $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(FREETYPELIBS) +sfnt2fnt$(EXEEXT): sfnt2fnt.o relpath$(EXEEXT) + $(CC) $(CFLAGS) -o $@ sfnt2fnt.o $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(FREETYPELIBS) $(LDRPATH_LOCAL) bin2res$(EXEEXT): bin2res.o $(CC) $(CFLAGS) -o $@ bin2res.o $(LIBPORT) $(LDFLAGS) @@ -94,6 +94,8 @@ uninstall:: $(RM) $(DESTDIR)$(bindir)/winemaker $(DESTDIR)$(bindir)/wineprefixcreate $(DESTDIR)$(mandir)/man$(prog_manext)/winemaker.$(prog_manext) $(DESTDIR)$(mandir)/man$(prog_manext)/wineprefixcreate.$(prog_manext) $(DESTDIR)$(datadir)/wine/wine.inf $(DESTDIR)$(datadir)/applications/wine.desktop -$(UPDATE_DESKTOP_DATABASE) +wmc wrc: relpath$(EXEEXT) + @DEPENDENCIES@ # everything below this line is overwritten by make depend Makefile: makedep$(EXEEXT) diff --git a/tools/wmc/Makefile.in b/tools/wmc/Makefile.in index 5e6e31a2d4b..b78f12b4d52 100644 --- a/tools/wmc/Makefile.in +++ b/tools/wmc/Makefile.in @@ -4,7 +4,7 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ EXEEXT = @EXEEXT@ -PROGRAMS = wmc$(EXEEXT) +PROGRAMS = wmc$(EXEEXT) wmc-installed MANPAGES = wmc.man MODULE = none @@ -24,11 +24,14 @@ all: $(PROGRAMS) $(MANPAGES) @MAKE_RULES@ wmc$(EXEEXT): $(OBJS) - $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBWINE_LDFLAGS) $(LIBPORT) $(LDFLAGS) + $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(LDRPATH_LOCAL) -install:: $(PROGRAMS) $(MANPAGES) $(INSTALLDIRS) +wmc-installed: $(OBJS) + $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(LDRPATH_INSTALL) + +install:: wmc-installed $(MANPAGES) $(INSTALLDIRS) $(INSTALL_DATA) wmc.man $(DESTDIR)$(mandir)/man$(prog_manext)/wmc.$(prog_manext) - $(INSTALL_PROGRAM) wmc$(EXEEXT) $(DESTDIR)$(bindir)/wmc$(EXEEXT) + $(INSTALL_PROGRAM) wmc-installed $(DESTDIR)$(bindir)/wmc$(EXEEXT) uninstall:: $(RM) $(DESTDIR)$(bindir)/wmc$(EXEEXT) $(DESTDIR)$(mandir)/man$(prog_manext)/wmc.$(prog_manext) diff --git a/tools/wrc/Makefile.in b/tools/wrc/Makefile.in index 9bae142be9d..191bf97c75b 100644 --- a/tools/wrc/Makefile.in +++ b/tools/wrc/Makefile.in @@ -5,7 +5,7 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ EXEEXT = @EXEEXT@ -PROGRAMS = wrc$(EXEEXT) +PROGRAMS = wrc$(EXEEXT) wrc-installed MANPAGES = wrc.man MODULE = none @@ -29,11 +29,14 @@ all: $(PROGRAMS) $(MANPAGES) @MAKE_RULES@ wrc$(EXEEXT): $(OBJS) $(LIBWPP) - $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBWPP) $(LIBWINE_LDFLAGS) $(LIBPORT) $(LDFLAGS) + $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBWPP) $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(LDRPATH_LOCAL) -install:: $(PROGRAMS) $(MANPAGES) $(INSTALLDIRS) +wrc-installed: $(OBJS) $(LIBWPP) + $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBWPP) $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(LDRPATH_INSTALL) + +install:: wrc-installed $(MANPAGES) $(INSTALLDIRS) $(INSTALL_DATA) wrc.man $(DESTDIR)$(mandir)/man$(prog_manext)/wrc.$(prog_manext) - $(INSTALL_PROGRAM) wrc$(EXEEXT) $(DESTDIR)$(bindir)/wrc$(EXEEXT) + $(INSTALL_PROGRAM) wrc-installed $(DESTDIR)$(bindir)/wrc$(EXEEXT) uninstall:: $(RM) $(DESTDIR)$(bindir)/wrc$(EXEEXT) $(DESTDIR)$(mandir)/man$(prog_manext)/wrc.$(prog_manext)