@@ -60,6 +60,13 @@ auto linkBase(const ThreadBuildData data, CompilingSession session, string rootH
6060 );
6161}
6262
63+ /**
64+ * Generates a static library using archiver. FIXME: BuildRequirements should know its files.
65+ * Params:
66+ * data = The data containing project information
67+ * s = Compiling Session
68+ * command = Command for being able to print it later
69+ */
6370auto executeArchiver (const ThreadBuildData data, CompilingSession s, out string command)
6471{
6572 import std.process ;
@@ -72,17 +79,25 @@ auto executeArchiver(const ThreadBuildData data, CompilingSession s, out string
7279 string [] cmd = [a.bin];
7380 final switch (a.type) with (AcceptedArchiver)
7481 {
75- case ar, llvmAr: cmd~= " rcs" ; break ;
82+ case ar, llvmAr: cmd~= [ " rcs" ] ; break ;
7683 case libtool: cmd~= [" -static" , " -o" ]; break ;
7784 case none: break ;
7885 }
7986
80- cmd~= getOutputName (data.cfg, s.os, s.isa);
81-
82- string objExt = getObjectExtension(s.os);
83- cmd = mapAppend(cmd, data.cfg.sourceFiles, (string src) => stripExtension(src)~ objExt);
87+ cmd~= buildNormalizedPath (data.cfg.outputDirectory, getOutputName(data.cfg, s.os, s.isa));
8488
89+ putObjectFiles(cmd, data.cfg, s.os, s.compiler.compiler.gcc ? cExt : cppExt);
8590 command = cmd.join(" " );
8691
8792 return executeShell (command);
93+ }
94+
95+ private void putObjectFiles (ref string [] target, const BuildConfiguration b, OS os, scope const string [] extensions... )
96+ {
97+ import redub.command_generators.commons;
98+ import std.file ;
99+ import std.path ;
100+ string [] objectFiles;
101+ putSourceFiles(objectFiles, b.workingDir, b.sourcePaths, b.sourceFiles, b.excludeSourceFiles, extensions);
102+ target = mapAppend(target, objectFiles, (string src) => setExtension(src, getObjectExtension(os)));
88103}
0 commit comments