From cfa62ad56f92a25659810220238d4a0bf0edfd67 Mon Sep 17 00:00:00 2001 From: Jason Perkins Date: Wed, 15 May 2013 09:30:45 -0400 Subject: Fixed bug #176: Target prefix breaks GCC linking --- src/actions/make/make_cpp.lua | 2 +- src/tools/gcc.lua | 26 ++++---------------------- src/tools/snc.lua | 13 +++++++------ 3 files changed, 12 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/actions/make/make_cpp.lua b/src/actions/make/make_cpp.lua index 8f34455..99387ad 100644 --- a/src/actions/make/make_cpp.lua +++ b/src/actions/make/make_cpp.lua @@ -262,8 +262,8 @@ -- Patch #3401184 changed the order _p(' ALL_LDFLAGS += $(LDFLAGS)%s', make.list(table.join(cc.getlibdirflags(cfg), cc.getldflags(cfg), cfg.linkoptions))) - _p(' LIBS +=%s', make.list(cc.getlinkflags(cfg))) _p(' LDDEPS +=%s', make.list(_MAKE.esc(premake.getlinks(cfg, "siblings", "fullpath")))) + _p(' LIBS += $(LDDEPS)%s', make.list(cc.getlinkflags(cfg))) if cfg.kind == "StaticLib" then if cfg.platform:startswith("Universal") then diff --git a/src/tools/gcc.lua b/src/tools/gcc.lua index 6fcc88c..403f532 100644 --- a/src/tools/gcc.lua +++ b/src/tools/gcc.lua @@ -186,31 +186,13 @@ -- --- Returns a list of linker flags for library search directories and library --- names. See bug #1729227 for background on why the path must be split. +-- This is poorly named: returns a list of linker flags for external +-- (i.e. system, or non-sibling) libraries. See bug #1729227 for +-- background on why the path must be split. -- function premake.gcc.getlinkflags(cfg) - local result = { } - - for _, value in ipairs(premake.getlinks(cfg, "siblings", "object")) do - if (value.kind == "StaticLib") then - -- don't use "-lname" when linking static libraries - -- instead use path/Name.ext so as not to link with a SharedLib of the same name - -- if one is present. - local pathstyle = premake.getpathstyle(value) - local namestyle = premake.getnamestyle(value) - local linktarget = premake.gettarget(value, "link", pathstyle, namestyle, cfg.system) - local rebasedpath = path.rebase(linktarget.fullpath, value.location, cfg.location) - table.insert(result, rebasedpath) - else - --premake does not support creating frameworks so this is just a SharedLib link - --link using -lname - table.insert(result, '-l' .. _MAKE.esc(value.linktarget.basename)) - end - end - - -- "-llib" is fine for system dependencies + local result = {} for _, value in ipairs(premake.getlinks(cfg, "system", "name")) do if path.getextension(value) == ".framework" then table.insert(result, '-framework ' .. _MAKE.esc(path.getbasename(value))) diff --git a/src/tools/snc.lua b/src/tools/snc.lua index c4c7d42..e829d68 100644 --- a/src/tools/snc.lua +++ b/src/tools/snc.lua @@ -123,14 +123,15 @@ --- --- Returns a list of linker flags for library search directories and library --- names. See bug #1729227 for background on why the path must be split. --- + -- + -- This is poorly named: returns a list of linker flags for external + -- (i.e. system, or non-sibling) libraries. See bug #1729227 for + -- background on why the path must be split. + -- function premake.snc.getlinkflags(cfg) - local result = { } - for _, value in ipairs(premake.getlinks(cfg, "all", "basename")) do + local result = {} + for _, value in ipairs(premake.getlinks(cfg, "system", "name")) do table.insert(result, '-l' .. _MAKE.esc(value)) end return result -- cgit v1.2.3