diff options
author | Reid Kleckner <reid@kleckner.net> | 2013-04-22 20:23:41 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2013-04-22 20:23:41 +0000 |
commit | 21a8c2f361e01d96ca8a5e476f7a7cfdc0ab34c4 (patch) | |
tree | 820840ed5c7b538535bf2f9fe8002c16dc947458 /llvm/unittests/Support/ProgramTest.cpp | |
parent | d8fb032cff5db393952efcc3451ab90c0973092b (diff) | |
download | bcm5719-llvm-21a8c2f361e01d96ca8a5e476f7a7cfdc0ab34c4.tar.gz bcm5719-llvm-21a8c2f361e01d96ca8a5e476f7a7cfdc0ab34c4.zip |
[Support] Propagate the environment into the test child process
Should fix the dragonegg bootstrap builder, which reasonably needs
LD_LIBRARY_PATH to be set.
llvm-svn: 180041
Diffstat (limited to 'llvm/unittests/Support/ProgramTest.cpp')
-rwxr-xr-x | llvm/unittests/Support/ProgramTest.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/llvm/unittests/Support/ProgramTest.cpp b/llvm/unittests/Support/ProgramTest.cpp index 03083aa68bf..479b6b57ec2 100755 --- a/llvm/unittests/Support/ProgramTest.cpp +++ b/llvm/unittests/Support/ProgramTest.cpp @@ -24,6 +24,15 @@ ProgramTestStringArg1("program-test-string-arg1"); static cl::opt<std::string> ProgramTestStringArg2("program-test-string-arg2"); +static void CopyEnvironment(std::vector<const char *> out) { + // environ appears to be pretty portable. + char **envp = environ; + while (*envp != 0) { + out.push_back(*envp); + ++envp; + } +} + TEST(ProgramTest, CreateProcessTrailingSlash) { if (getenv("LLVM_PROGRAM_TEST_CHILD")) { if (ProgramTestStringArg1 == "has\\\\ trailing\\" && @@ -43,7 +52,13 @@ TEST(ProgramTest, CreateProcessTrailingSlash) { "-program-test-string-arg2", "has\\\\ trailing\\", 0 }; - const char *envp[] = { "LLVM_PROGRAM_TEST_CHILD=1", 0 }; + + // Add LLVM_PROGRAM_TEST_CHILD to the environment of the child. + std::vector<const char *> envp; + CopyEnvironment(envp); + envp.push_back("LLVM_PROGRAM_TEST_CHILD=1"); + envp.push_back(0); + std::string error; bool ExecutionFailed; // Redirect stdout and stdin to NUL, but let stderr through. @@ -53,7 +68,7 @@ TEST(ProgramTest, CreateProcessTrailingSlash) { Path nul("/dev/null"); #endif const Path *redirects[] = { &nul, &nul, 0 }; - int rc = Program::ExecuteAndWait(my_exe, argv, envp, redirects, + int rc = Program::ExecuteAndWait(my_exe, argv, &envp[0], redirects, /*secondsToWait=*/10, /*memoryLimit=*/0, &error, &ExecutionFailed); EXPECT_FALSE(ExecutionFailed) << error; |