phobos/build_v3.d
Adam Wilson 2852e84aa9
Remove Phobos 3 dub.sdl and replace it with the build_v3.d build script. (#9069)
* Remove Phobos 3 dub.sdl and replace it with the build_v3.d buid script.

* Add environment bang to the build script.

* Fix the Phobos v3 build script so that unit tests work on POSIX.

---------

Co-authored-by: Jonathan M Davis <jmdavis@jmdavisprog.com>
2024-10-25 17:49:41 -07:00

140 lines
3 KiB
D
Executable file

#!/usr/bin/env rdmd
/**
Phobos V3 Build Script
Usage:
./build_v3.d [debug,release,unittest]
*/
import std.conv;
import std.datetime;
import std.file;
import std.path;
import std.process;
import std.stdio;
import std.string;
int main(string[] args)
{
int result = 0;
bool buildUnittest = false;
bool buildRelease = false;
if (args.length > 1)
{
buildUnittest = args[1] == "unittest";
buildRelease = args[1] == "release";
}
string argFilePath = buildNormalizedPath(getcwd(), "phobosbuildargs.txt");
auto dFiles = dirEntries(buildNormalizedPath(getcwd(), "phobos"), "*.d", SpanMode.breadth);
auto argFile = File(argFilePath, "w");
version(Windows)
{
string unittestExecutable = buildNormalizedPath(getcwd(), "unittest.exe");
}
else
{
string unittestExecutable = buildNormalizedPath(getcwd(), "unittest");
}
scope(exit)
{
argFile.close();
remove(argFilePath);
if (exists(unittestExecutable)) remove(unittestExecutable);
}
result = runCommand("dmd --version", getcwd());
if (result != 0)
{
writeln("Compiler Failure.");
return result;
}
writeln("Source files:");
//Add source file list to args file.
foreach(dFile; dFiles)
{
if (dFile.isDir()) continue;
argFile.writeln(dFile.name);
writeln(dFile.name);
}
//Add appropriate DMD arguments to the args file.
argFile.writeln("-od=./lib");
if (buildUnittest)
{
argFile.writeln("-main");
argFile.writeln("-unittest");
argFile.writeln("-debug");
version(Windows)
{
argFile.writeln("-of=unittest.exe");
}
else
{
argFile.writeln("-of=unittest");
}
}
else if (buildRelease)
{
argFile.writeln("-release -O");
argFile.writeln("-lib");
argFile.writeln("-of=libphobos3");
}
else
{
argFile.writeln("-debug");
argFile.writeln("-lib");
argFile.writeln("-of=libphobos3-debug");
}
argFile.flush();
argFile.close();
//Run the build.
result = runCommand("dmd @\"" ~ argFilePath ~ "\"", getcwd());
if (result != 0)
{
writeln("Build failed.");
return result;
}
else
{
writeln("Build successful.");
writeln();
}
//Run unittests if built.
if (buildUnittest)
{
writeln("Running tests...");
result = runCommand(unittestExecutable, getcwd());
if (result != 0)
{
writeln("Tests failed.");
return result;
}
else
{
writeln("Tests successful.");
}
}
return result;
}
private int runCommand(string command, string workDir)
{
auto pid = pipeShell(command, Redirect.all, null, Config.none, workDir);
int result = wait(pid.pid);
foreach (line; pid.stdout.byLine) writeln(line);
foreach (line; pid.stderr.byLine) writeln(line);
writeln();
return result;
}