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>
This commit is contained in:
Adam Wilson 2024-10-25 17:49:41 -07:00 committed by GitHub
parent 03c4998e85
commit 2852e84aa9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 147 additions and 20 deletions

7
.gitignore vendored
View file

@ -27,3 +27,10 @@ libphobos_*
source/
tools/ucd*
# Build specific exclusions
*.o
*.a
*.obj
*.exe
unittest

140
build_v3.d Executable file
View file

@ -0,0 +1,140 @@
#!/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;
}

20
dub.sdl
View file

@ -1,20 +0,0 @@
name "phobos"
license "BSL-1.0"
description "D Standard Library"
authors "DLang Community"
copyright "Copyright © 1999-2024, The D Language Foundation"
configuration "library" {
targetType "staticLibrary"
sourcePaths "phobos"
targetPath "generated-lib"
#excludedSourceFiles "unittest.d" "test/**" "std/**" "tools/**" "etc/**"
}
configuration "unittest" {
dflags "-main"
targetType "executable"
sourcePaths "phobos"
targetPath "generated-lib"
#excludedSourceFiles "unittest.d" "test/**" "std/**" "tools/**" "etc/**"
}