From d48b3242941ffb2fc0aa4baf7433dfe5df150c18 Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Wed, 5 Nov 2008 10:11:30 +0000 Subject: [PATCH] When building on Windows for Linux target with gcc, don't try to create import libraries and allow linking executables to shared libraries. [SVN r49596] --- src/build/generators.jam | 15 ++++++++-- src/tools/gcc.jam | 62 ++++++++++++++++++++++------------------ 2 files changed, 47 insertions(+), 30 deletions(-) diff --git a/src/build/generators.jam b/src/build/generators.jam index 0df66fc3d..de1424e09 100644 --- a/src/build/generators.jam +++ b/src/build/generators.jam @@ -203,6 +203,7 @@ class generator ) { self.id = $(id) ; + self.rule-name = $(id) ; self.composing = $(composing) ; self.source-types = $(source-types) ; self.target-types-and-names = $(target-types-and-names) ; @@ -260,7 +261,17 @@ class generator { return $(self.requirements) ; } - + + rule set-rule-name ( rule-name ) + { + self.rule-name = $(rule-name) ; + } + + rule rule-name ( ) + { + return $(self.rule-name) ; + } + # Returns a true value if the generator can be run with the specified # properties. # @@ -506,7 +517,7 @@ class generator # Assign an action for each target. local action = [ action-class ] ; - local a = [ class.new $(action) $(sources) : $(self.id) : + local a = [ class.new $(action) $(sources) : $(self.rule-name) : $(property-set) ] ; # Create generated target for each target type. diff --git a/src/tools/gcc.jam b/src/tools/gcc.jam index ee92f0564..356b0b4c1 100644 --- a/src/tools/gcc.jam +++ b/src/tools/gcc.jam @@ -504,34 +504,38 @@ class gcc-linking-generator : unix-linking-generator } } -.IMPLIB-COMMAND = ; -if [ os.on-windows ] -{ - .IMPLIB-COMMAND = "-Wl,--out-implib," ; - generators.register - [ new gcc-linking-generator gcc.link - : OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB - : EXE - : gcc ] ; - generators.register - [ new gcc-linking-generator gcc.link.dll - : OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB - : IMPORT_LIB SHARED_LIB - : gcc ] ; -} -else -{ - generators.register - [ new gcc-linking-generator gcc.link - : LIB OBJ - : EXE - : gcc ] ; - generators.register - [ new gcc-linking-generator gcc.link.dll - : LIB OBJ - : SHARED_LIB - : gcc ] ; -} +# The set of permissible input types is different on mingw. +# So, define two sets of generators, with mingw generators +# selected when target-os=windows. + +local g ; +g = [ new gcc-linking-generator gcc.mingw.link + : OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB + : EXE + : gcc windows ] ; +$(g).set-rule-name gcc.link ; +generators.register $(g) ; + +g = [ new gcc-linking-generator gcc.mingw.link.dll + : OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB + : IMPORT_LIB SHARED_LIB + : gcc windows ] ; +$(g).set-rule-name gcc.link.dll ; +generators.register $(g) ; + +generators.register + [ new gcc-linking-generator gcc.link + : LIB OBJ + : EXE + : gcc ] ; +generators.register + [ new gcc-linking-generator gcc.link.dll + : LIB OBJ + : SHARED_LIB + : gcc ] ; + +generators.override gcc.mingw.link : gcc.link ; +generators.override gcc.mingw.link.dll : gcc.link.dll ; # Declare flags for linking. # First, the common flags. @@ -543,6 +547,8 @@ toolset.flags gcc.link FINDLIBS-ST ; toolset.flags gcc.link FINDLIBS-SA ; toolset.flags gcc.link LIBRARIES ; +toolset.flags gcc.link.dll .IMPLIB-COMMAND windows : "-Wl,--out-implib," ; + # For static we made sure there are no dynamic libraries in the # link. On HP-UX not all system libraries exist as archived libraries (for # example, there is no libunwind.a), so, on this platform, the -static option