From 8cffe6b50891e2e4e28df9fd0d357fbfe7e33578 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Wed, 9 Nov 2005 13:56:41 +0000 Subject: [PATCH] Fixes for QT4, DEF files, etc. from Reece Dunn. [SVN r31607] --- src/tools/common.jam | 28 ++++++++++++++++++++++++++++ src/tools/cw.jam | 35 +++++++++++++++++++++++++++++------ src/tools/msvc.jam | 32 ++++++++++++++++++++++++++------ 3 files changed, 83 insertions(+), 12 deletions(-) diff --git a/src/tools/common.jam b/src/tools/common.jam index 7a6c15135..4f2d4026b 100644 --- a/src/tools/common.jam +++ b/src/tools/common.jam @@ -447,6 +447,34 @@ rule prepend-path-variable-command ( variable : paths * ) } +# Returns the list of libraries from the property +# in their actualized form. +rule resolve-library-files ( properties * ) +{ + local libraries ; + + for local p in $(properties) + { + if $(p:G) = && + ! [ type.is-derived [ $(p:G=).type ] SHARED_LIB ] + { + libraries += $(p:G=) ; + } + } + + # Get real jam targets + + local xlibraries ; + + for local l in $(libraries) + { + xlibraries += [ $(l).actualize ] ; + } + + return $(xlibraries) ; +} + + # Return a command which can create a file. If 'r' is result of invocation, # then # r foobar diff --git a/src/tools/cw.jam b/src/tools/cw.jam index 27d975268..90bfa6a8c 100644 --- a/src/tools/cw.jam +++ b/src/tools/cw.jam @@ -171,15 +171,38 @@ flags cw LINKFLAGS auto : -subsystem auto ; flags cw LINKFLAGS LIB/static : -library ; flags cw LINKFLAGS LIB/shared : -shared ; -toolset.flags cw.link USER_LINKFLAGS ; -toolset.flags cw.link LINKPATH ; +flags cw.link USER_LINKFLAGS ; +flags cw.link LINKPATH ; + +flags cw.link FINDLIBS_ST ; +flags cw.link FINDLIBS_SA ; +flags cw.link LIBRARY_OPTION cw : "" : unchecked ; + +rule archive ( targets + : sources * : properties * ) +{ + flags cw.link LIBRARIES + [ common.resolve-library-files properties ] ; +} + +rule link ( targets + : sources * : properties * ) +{ + flags cw.link LIBRARIES + [ common.resolve-library-files properties ] ; +} + +rule link.dll ( targets + : sources * : properties * ) +{ + flags cw.link LIBRARIES + [ common.resolve-library-files properties ] ; + DEPENDS $(<) : [ on $(<) return $(DEF_FILE) ] ; +} if [ os.name ] in NT { actions archive bind { if exist "$(<[1])" DEL "$(<[1])" - $(.LD) -library -o "$(<[1])" @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" + $(.LD) -library -o "$(<[1])" @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST:S=.lib)" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA:S=.lib)")" } } else # cygwin @@ -190,17 +213,17 @@ else # cygwin if test -f "$_bbv2_out_" ; then _bbv2_existing_="$(<:W)" fi - $(.LD) -library -o "$(<:W)" $_bbv2_existing_ @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" + $(.LD) -library -o "$(<:W)" $_bbv2_existing_ @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST:S=.lib)" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA:S=.lib)")" } } actions link bind DEF_FILE { - $(.LD) -o "$(<[1]:W)" -L"$(LINKPATH)" $(LINKFLAGS) $(USER_LINKFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" + $(.LD) -o "$(<[1]:W)" -L"$(LINKPATH)" $(LINKFLAGS) $(USER_LINKFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST:S=.lib)" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA:S=.lib)")" } actions link.dll bind DEF_FILE { - $(.LD) -o "$(<[1]:W)" -implib "$(<[2]:W)" -L"$(LINKPATH)" $(LINKFLAGS) -f "$(DEF_FILE)" $(USER_LINKFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" + $(.LD) -o "$(<[1]:W)" -implib "$(<[2]:W)" -L"$(LINKPATH)" $(LINKFLAGS) -f "$(DEF_FILE)" $(USER_LINKFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST:S=.lib)" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA:S=.lib)")" } diff --git a/src/tools/msvc.jam b/src/tools/msvc.jam index bbe6b0c61..34b282108 100644 --- a/src/tools/msvc.jam +++ b/src/tools/msvc.jam @@ -538,11 +538,12 @@ flags msvc.compile UNDEFS ; flags msvc.compile INCLUDES ; # The actions differ only by explicit selection of input language -actions compile.c bind RSP +actions compile.c bind { $(.CC) /Zm800 -nologo -TC -U$(UNDEFS) $(CFLAGS) $(USER_CFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)-D$(DEFINES) $(nl)"-I$(INCLUDES)")" -c -Fo"$(<[1]:W)" } -actions compile.c++ bind RSP + +actions compile.c++ bind { $(.CC) /Zm800 -nologo -TP -U$(UNDEFS) $(CFLAGS) $(C++FLAGS) $(USER_CFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)-D$(DEFINES) $(nl)"-I$(INCLUDES)")" -c -Fo"$(<[1]:W)" } @@ -594,6 +595,25 @@ flags msvc.link FINDLIBS_SA ; flags msvc.link LIBRARY_OPTION msvc : "" : unchecked ; +rule archive ( targets + : sources * : properties * ) +{ + flags msvc.link LIBRARIES + [ common.resolve-library-files properties ] ; +} + +rule link ( targets + : sources * : properties * ) +{ + flags msvc.link LIBRARIES + [ common.resolve-library-files properties ] ; +} + +rule link.dll ( targets + : sources * : properties * ) +{ + flags msvc.link LIBRARIES + [ common.resolve-library-files properties ] ; + DEPENDS $(<) : [ on $(<) return $(DEF_FILE) ] ; +} + # Declare action for creating static libraries # If library exists, remove it before adding files. See # http://article.gmane.org/gmane.comp.lib.boost.build/4241 @@ -605,7 +625,7 @@ if [ os.name ] in NT actions archive bind { if exist "$(<[1])" DEL "$(<[1])" - $(.LD) /lib /NOLOGO /out:"$(<[1])" @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" + $(.LD) /lib /NOLOGO /out:"$(<[1])" @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST:S=.lib)" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA:S=.lib)")" } } else @@ -613,7 +633,7 @@ else actions archive bind { $(RM) "$(<[1])" - $(.LD) /lib /NOLOGO /out:"$(<[1])" @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" + $(.LD) /lib /NOLOGO /out:"$(<[1])" @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST:S=.lib)" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA:S=.lib)")" } } @@ -631,13 +651,13 @@ else actions link bind DEF_FILE { - $(.LD) /NOLOGO $(LINKFLAGS) /out:"$(<[1]:W)" /INCREMENTAL:NO /LIBPATH:"$(LINKPATH:W)" $(USER_LINKFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" + $(.LD) /NOLOGO $(LINKFLAGS) /out:"$(<[1]:W)" /INCREMENTAL:NO /LIBPATH:"$(LINKPATH:W)" $(USER_LINKFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST:S=.lib)" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA:S=.lib)")" $(MANIFEST)$(<[1]).manifest $(OUTPUTRESOURCE)$(<[1]);#2 } actions link.dll bind DEF_FILE { - $(.LD) /NOLOGO $(LINKFLAGS) /out:"$(<[1]:W)" /INCREMENTAL:NO /IMPLIB:"$(<[2]:W)" /LIBPATH:"$(LINKPATH:W)" /def:$(DEF_FILE) $(USER_LINKFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" + $(.LD) /NOLOGO $(LINKFLAGS) /out:"$(<[1]:W)" /INCREMENTAL:NO /IMPLIB:"$(<[2]:W)" /LIBPATH:"$(LINKPATH:W)" /def:$(DEF_FILE) $(USER_LINKFLAGS) @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST:S=.lib)" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA:S=.lib)")" $(MANIFEST)$(<[1]).manifest $(OUTPUTRESOURCE)$(<[1]);#2 }