mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
54 lines
2 KiB
D
54 lines
2 KiB
D
import dshell;
|
|
import std.algorithm : find;
|
|
|
|
int main()
|
|
{
|
|
if (OS == "windows")
|
|
{
|
|
writefln("Skipping test6952.d for %s.", OS);
|
|
return DISABLED;
|
|
}
|
|
|
|
auto cmd = shellExpand("$DMD"
|
|
~ " -m$MODEL -of$OUTPUT_BASE/main$EXE -conf= -fPIC -g -v"
|
|
~ " -I$EXTRA_FILES/test6952/ -defaultlib="
|
|
~ " -Xcc=-nostartfiles -Xcc=-nostdlib -Xcc=-nodefaultlibs $EXTRA_FILES/test6952/main.d");
|
|
|
|
// Remove DFLAGS environment variable. Everything we need is explicitly stated in
|
|
// the command line above.
|
|
string[string] e;
|
|
e["DFLAGS"] = "";
|
|
// Use our custom linker wrapper in order not to depend on the platform's CC
|
|
const ccWrapper = shellExpand("$OUTPUT_BASE/test6952.fakeLinker.sh");
|
|
e["CC"] = ccWrapper;
|
|
|
|
// And make this explicit
|
|
const outputFile = shellExpand("$OUTPUT_BASE/test6952.last_test_output.txt");
|
|
// Write the wrapper script...
|
|
std.file.write(ccWrapper, "#!/usr/bin/env bash\nset -e\necho \"$@\" > " ~ outputFile ~ "\n");
|
|
run("chmod +x " ~ ccWrapper);
|
|
|
|
// Compile the D code
|
|
run(cmd, std.stdio.stdout, std.stdio.stderr, e);
|
|
|
|
// This test used to parse the compiler output (using `-v`),
|
|
// but that turned out to be quite brittle.
|
|
// Instead, just provide a wrapper script via CC and write the arguments
|
|
// to a file, and inspect what has been written.
|
|
const result = readText(outputFile);
|
|
immutable lines = result.split("\n");
|
|
if (!lines.length || !lines[0].length)
|
|
assert(0, "The CC wrapper didn't write to " ~ outputFile ~ ":\n" ~ result);
|
|
auto line = lines[0];
|
|
|
|
// The arguments prefixed with `-Xcc` should not have an
|
|
// additional `-Xlinker` prepended to them
|
|
assert(line.find("-Xlinker -nostartfiles") == "");
|
|
assert(line.find("-Xlinker -nostdlib") == "");
|
|
assert(line.find("-Xlinker -nodefaultlibs") == "");
|
|
|
|
// This is the way it should look
|
|
assert(line.find("-nostartfiles -nostdlib -nodefaultlibs") != "");
|
|
|
|
return 0;
|
|
}
|