From a1515c68d4d4b4334f44b098debba2548a16ca38 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 28 Oct 2015 10:56:21 +0900 Subject: [PATCH] makefiles: Automatically add RPATH support for programs that use libwine. Signed-off-by: Alexandre Julliard --- configure | 48 ++++++++++++++++++---------------------------- configure.ac | 48 ++++++++++++++++++---------------------------- loader/Makefile.in | 2 -- server/Makefile.in | 14 ++------------ tools/makedep.c | 24 +++++++++++++++++++++++ 5 files changed, 64 insertions(+), 72 deletions(-) diff --git a/configure b/configure index 534afffe807..8cf26e4344d 100755 --- a/configure +++ b/configure @@ -7847,14 +7847,14 @@ distclean:: wine_binary="wine" test "x$enable_win64" != "xyes" || wine_binary="wine64" -loader_programs="$wine_binary wine-installed" +loader_programs="$wine_binary" libwine_soversion=`expr $libwine_version : '\([0-9]*\)\..*'` LOADER_RULES=" all: wine.inf -install install-lib:: wine-installed - \$(INSTALL_PROGRAM) wine-installed \$(DESTDIR)\$(bindir)/$wine_binary +install install-lib:: $wine_binary-installed + \$(INSTALL_PROGRAM) $wine_binary-installed \$(DESTDIR)\$(bindir)/$wine_binary uninstall:: \$(RM) \$(DESTDIR)\$(bindir)/$wine_binary @@ -8017,7 +8017,7 @@ done LIBEXT="dylib" DLLFLAGS="$DLLFLAGS -fPIC" LIBWINE_LDFLAGS="-multiply_defined suppress" - LDRPATH_INSTALL="-Wl,-rpath,@loader_path/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + LDRPATH_INSTALL="-Wl,-rpath,@loader_path/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,-rpath,@loader_path/\$(top_builddir)/libs/wine" COREFOUNDATION_LIBS="-framework CoreFoundation" @@ -8262,11 +8262,9 @@ uninstall:: as_fn_append LOADER_RULES " -$wine_binary: main.o wine_info.plist - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_LOCAL) - -wine-installed: main.o wine_info.plist - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_INSTALL) +${wine_binary}_OBJS = main.o +${wine_binary}_LDFLAGS = $LDEXECFLAGS -lwine \$(PTHREAD_LIBS) +$wine_binary $wine_binary-installed: wine_info.plist " ;; @@ -8325,7 +8323,7 @@ eval ac_res=\$$as_ac_var { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(top_builddir)/libs/wine" else as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,-R,\\$ORIGIN/../lib" | $as_tr_sh` @@ -8353,7 +8351,7 @@ eval ac_res=\$$as_ac_var { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(top_builddir)/libs/wine" fi fi @@ -8432,11 +8430,8 @@ uninstall:: as_fn_append LOADER_RULES " -$wine_binary: main.o - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_LOCAL) - -wine-installed: main.o - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_INSTALL) +${wine_binary}_OBJS = main.o +${wine_binary}_LDFLAGS = $LDEXECFLAGS -lwine \$(PTHREAD_LIBS) " ;; @@ -8599,7 +8594,7 @@ eval ac_res=\$$as_ac_var { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(top_builddir)/libs/wine" else as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,-R,\\$ORIGIN/../lib" | $as_tr_sh` @@ -8627,7 +8622,7 @@ eval ac_res=\$$as_ac_var { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(top_builddir)/libs/wine" fi fi @@ -8819,11 +8814,8 @@ uninstall:: as_fn_append LOADER_RULES " -$wine_binary: main.o - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_LOCAL) - -wine-installed: main.o - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_INSTALL) +${wine_binary}_OBJS = main.o +${wine_binary}_LDFLAGS = $LDEXECFLAGS -lwine \$(PTHREAD_LIBS) " if test -z "$with_wine64" then @@ -14950,23 +14942,21 @@ case $host_os in test "$wine_binary" = wine || wine_fn_ignore_file "loader/wine-preloader" loader_programs="$loader_programs $wine_binary-preloader" as_fn_append LOADER_RULES " -$wine_binary-preloader: preloader.o - \$(CC) -o \$@ -static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7c400000 preloader.o \$(LIBPORT) \$(LDFLAGS) +preloader_EXTRADEFS = $BUILTINFLAG +${wine_binary}_preloader_OBJS = preloader.o +${wine_binary}_preloader_LDFLAGS = -static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7c400000 install install-lib:: $wine_binary-preloader \$(INSTALL_PROGRAM) $wine_binary-preloader \$(DESTDIR)\$(bindir)/$wine_binary-preloader uninstall:: \$(RM) \$(DESTDIR)\$(bindir)/$wine_binary-preloader - -preloader_EXTRADEFS = $BUILTINFLAG " ;; esac ;; esac as_fn_append LOADER_RULES " -EXTRA_TARGETS = $loader_programs -all: $loader_programs +PROGRAMS = $loader_programs " diff --git a/configure.ac b/configure.ac index cdc68feecf7..ff74f8dfca9 100644 --- a/configure.ac +++ b/configure.ac @@ -686,14 +686,14 @@ WINE_CONFIG_HELPERS wine_binary="wine" test "x$enable_win64" != "xyes" || wine_binary="wine64" -loader_programs="$wine_binary wine-installed" +loader_programs="$wine_binary" libwine_soversion=`expr $libwine_version : '\([[0-9]]*\)\..*'` AC_SUBST(LOADER_RULES,[" all: wine.inf -install install-lib:: wine-installed - \$(INSTALL_PROGRAM) wine-installed \$(DESTDIR)\$(bindir)/$wine_binary +install install-lib:: $wine_binary-installed + \$(INSTALL_PROGRAM) $wine_binary-installed \$(DESTDIR)\$(bindir)/$wine_binary uninstall:: \$(RM) \$(DESTDIR)\$(bindir)/$wine_binary @@ -754,7 +754,7 @@ uninstall:: LIBEXT="dylib" DLLFLAGS="$DLLFLAGS -fPIC" LIBWINE_LDFLAGS="-multiply_defined suppress" - LDRPATH_INSTALL="-Wl,-rpath,@loader_path/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + LDRPATH_INSTALL="-Wl,-rpath,@loader_path/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,-rpath,@loader_path/\$(top_builddir)/libs/wine" dnl declare needed frameworks AC_SUBST(COREFOUNDATION_LIBS,"-framework CoreFoundation") @@ -891,11 +891,9 @@ uninstall:: "]) AS_VAR_APPEND([LOADER_RULES],[" -$wine_binary: main.o wine_info.plist - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_LOCAL) - -wine-installed: main.o wine_info.plist - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_INSTALL) +${wine_binary}_OBJS = main.o +${wine_binary}_LDFLAGS = $LDEXECFLAGS -lwine \$(PTHREAD_LIBS) +$wine_binary $wine_binary-installed: wine_info.plist "]) ;; @@ -907,10 +905,10 @@ wine-installed: main.o wine_info.plist WINE_TRY_CFLAGS([-fPIC -Wl,--export-dynamic], [LDEXECFLAGS="-Wl,--export-dynamic"]) WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], - [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(top_builddir)/libs/wine"], [WINE_TRY_CFLAGS([-fPIC -Wl,-R,\$ORIGIN/../lib], - [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(top_builddir)/libs/wine"])]) WINE_TRY_CFLAGS([-Wl,--enable-new-dtags], @@ -940,11 +938,8 @@ uninstall:: "]) AS_VAR_APPEND([LOADER_RULES],[" -$wine_binary: main.o - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_LOCAL) - -wine-installed: main.o - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_INSTALL) +${wine_binary}_OBJS = main.o +${wine_binary}_LDFLAGS = $LDEXECFLAGS -lwine \$(PTHREAD_LIBS) "]) ;; @@ -971,10 +966,10 @@ wine-installed: main.o [LDEXECFLAGS="-Wl,--export-dynamic"]) WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], - [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(top_builddir)/libs/wine"], [WINE_TRY_CFLAGS([-fPIC -Wl,-R,\$ORIGIN/../lib], - [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \$(bindir) \$(libdir)\`" + [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(top_builddir)/libs/wine"])]) WINE_TRY_CFLAGS([-Wl,--enable-new-dtags], @@ -1033,11 +1028,8 @@ uninstall:: "]) AS_VAR_APPEND([LOADER_RULES],[" -$wine_binary: main.o - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_LOCAL) - -wine-installed: main.o - \$(CC) -o \$@ $LDEXECFLAGS main.o \$(LIBWINE) \$(LIBPORT) \$(EXTRALIBS) \$(LDFLAGS) \$(LDRPATH_INSTALL) +${wine_binary}_OBJS = main.o +${wine_binary}_LDFLAGS = $LDEXECFLAGS -lwine \$(PTHREAD_LIBS) "]) if test -z "$with_wine64" then @@ -2044,23 +2036,21 @@ case $host_os in test "$wine_binary" = wine || WINE_IGNORE_FILE("loader/wine-preloader") loader_programs="$loader_programs $wine_binary-preloader" AS_VAR_APPEND([LOADER_RULES],[" -$wine_binary-preloader: preloader.o - \$(CC) -o \$@ -static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7c400000 preloader.o \$(LIBPORT) \$(LDFLAGS) +preloader_EXTRADEFS = $BUILTINFLAG +${wine_binary}_preloader_OBJS = preloader.o +${wine_binary}_preloader_LDFLAGS = -static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7c400000 install install-lib:: $wine_binary-preloader \$(INSTALL_PROGRAM) $wine_binary-preloader \$(DESTDIR)\$(bindir)/$wine_binary-preloader uninstall:: \$(RM) \$(DESTDIR)\$(bindir)/$wine_binary-preloader - -preloader_EXTRADEFS = $BUILTINFLAG "]) ;; esac ;; esac AS_VAR_APPEND([LOADER_RULES],[" -EXTRA_TARGETS = $loader_programs -all: $loader_programs +PROGRAMS = $loader_programs "]) dnl **** Check for functions **** diff --git a/loader/Makefile.in b/loader/Makefile.in index 95e4798a89d..7719801d499 100644 --- a/loader/Makefile.in +++ b/loader/Makefile.in @@ -1,5 +1,3 @@ -EXTRALIBS = $(PTHREAD_LIBS) - C_SRCS = \ main.c \ preloader.c diff --git a/server/Makefile.in b/server/Makefile.in index e7fb6030575..7a1ac11489b 100644 --- a/server/Makefile.in +++ b/server/Makefile.in @@ -1,4 +1,4 @@ -EXTRALIBS = $(POLL_LIBS) $(RT_LIBS) +PROGRAMS = wineserver C_SRCS = \ async.c \ @@ -45,22 +45,12 @@ C_SRCS = \ window.c \ winstation.c -EXTRA_TARGETS = wineserver wineserver-installed - MANPAGES = \ wineserver.de.UTF-8.man.in \ wineserver.fr.UTF-8.man.in \ wineserver.man.in -OBJS = $(C_SRCS:.c=.o) - -all: $(EXTRA_TARGETS) - -wineserver: $(OBJS) - $(CC) -o $@ $(OBJS) $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(EXTRALIBS) $(LIBS) $(LDRPATH_LOCAL) - -wineserver-installed: $(OBJS) - $(CC) -o $@ $(OBJS) $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(EXTRALIBS) $(LIBS) $(LDRPATH_INSTALL) +EXTRALIBS = -lwine $(POLL_LIBS) $(RT_LIBS) .PHONY: install install-lib uninstall diff --git a/tools/makedep.c b/tools/makedep.c index 8c5abde2940..295e5e8386f 100644 --- a/tools/makedep.c +++ b/tools/makedep.c @@ -1778,6 +1778,8 @@ static struct strarray output_sources( struct makefile *make, struct strarray *t struct strarray subdirs = empty_strarray; struct strarray phony_targets = empty_strarray; struct strarray all_targets = empty_strarray; + char *ldrpath_local = get_expanded_make_variable( make, "LDRPATH_LOCAL" ); + char *ldrpath_install = get_expanded_make_variable( make, "LDRPATH_INSTALL" ); for (i = 0; i < linguas.count; i++) strarray_add( &mo_files, strmake( "%s/%s.mo", top_obj_dir_path( make, "po" ), linguas.str[i] )); @@ -2381,6 +2383,28 @@ static struct strarray output_sources( struct makefile *make, struct strarray *t strarray_addall( &all_libs, libs ); strarray_addall( &all_libs, get_expanded_make_var_array( make, file_local_var( make->programs.str[i], "LDFLAGS" ))); + + if (strarray_exists( &all_libs, "-lwine" )) + { + strarray_add( &all_libs, strmake( "-L%s", top_obj_dir_path( make, "libs/wine" ))); + if (ldrpath_local && ldrpath_install) + { + char *program_installed = strmake( "%s-installed%s", make->programs.str[i], exe_ext ); + + output_filename( ldrpath_local ); + output_filenames( all_libs ); + output_filename( "$(LDFLAGS)" ); + output( "\n" ); + output( "%s:", obj_dir_path( make, program_installed ) ); + output_filenames_obj_dir( make, objs ); + output( "\n" ); + output( "\t$(CC) -o $@" ); + output_filenames_obj_dir( make, objs ); + output_filename( ldrpath_install ); + strarray_add( &all_targets, program_installed ); + } + } + output_filenames( all_libs ); output_filename( "$(LDFLAGS)" ); output( "\n" );