Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions source/redub/buildapi.d
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ struct BuildConfiguration
BuildConfiguration mergeLinkFlags(const ref BuildConfiguration other) const
{
BuildConfiguration ret = clone;
ret.linkFlags.exclusiveMerge(other.linkFlags);
ret.linkFlags.inclusiveMerge(other.linkFlags);
return ret;
}

Expand Down Expand Up @@ -484,8 +484,6 @@ struct BuildConfiguration
}
}



private auto save(TRange)(TRange input)
{
import std.traits:isArray;
Expand All @@ -495,6 +493,17 @@ private auto save(TRange)(TRange input)
return input.save;
}

ref string[] inclusiveMerge(StringRange)(return scope ref string[] a, StringRange b)
{
import std.array;
auto app = appender!(string[]);
scope(exit)
a ~= app.data;
foreach(bV; save(b))
app ~= bV;
return a;
}

/**
* This version is actually faster than the other one
*/
Expand All @@ -504,9 +513,8 @@ ref string[] exclusiveMerge(StringRange)(return scope ref string[] a, StringRang
import std.array;
auto app = appender!(string[]);
scope(exit)
{
a~= app.data;
}
a ~= app.data;

outer: foreach(bV; save(b))
{
if(bV.length == 0) continue;
Expand All @@ -521,7 +529,7 @@ ref string[] exclusiveMerge(StringRange)(return scope ref string[] a, StringRang
if(aV == bV)
continue outer;
}
app~= bV;
app ~= bV;
}
return a;
}
Expand Down
11 changes: 2 additions & 9 deletions source/redub/parsers/base.d
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ void addFrameworks(ref BuildRequirements req, JSONStringArray frameworks, ParseC
}
void addVersions(ref BuildRequirements req, JSONStringArray vers, ParseConfig c){req.cfg.versions.exclusiveMerge(vers);}
void addDebugVersions(ref BuildRequirements req, JSONStringArray vers, ParseConfig c){req.cfg.debugVersions.exclusiveMerge(vers);}
void addLinkFlags(ref BuildRequirements req, JSONStringArray lFlags, ParseConfig c){req.cfg.linkFlags.exclusiveMerge(lFlags, null, linkerMergeKeep);}
void addLinkFlags(ref BuildRequirements req, JSONStringArray lFlags, ParseConfig c){req.cfg.linkFlags.inclusiveMerge(lFlags);}
void addDflags(ref BuildRequirements req, JSONStringArray dFlags, ParseConfig c){req.cfg.dFlags.exclusiveMerge(dFlags);}
void addDependency(
ref BuildRequirements req,
Expand Down Expand Up @@ -213,11 +213,4 @@ void addSubConfiguration(
req.dependencies~= dependency(dependencyName, null, null, req.name, c.workingDir, BuildRequirements.Configuration(subConfigurationName, false), null, null, false);
else
req.dependencies[depIndex].subConfiguration = BuildRequirements.Configuration(subConfigurationName, false);
}

const string[] linkerMergeKeep = [
"-l",
"-framework",
"-L",
"/LIBPATH",
];
}
Loading