Try to fix ProgramTest on FreeBSD
authorReid Kleckner <reid@kleckner.net>
Tue, 30 Apr 2013 04:30:41 +0000 (04:30 +0000)
committerReid Kleckner <reid@kleckner.net>
Tue, 30 Apr 2013 04:30:41 +0000 (04:30 +0000)
This seemed like the cleanest way to find the test executable.  Also fix
the file mode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180770 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/Support/ProgramTest.cpp [changed mode: 0755->0644]
utils/unittest/UnitTestMain/TestMain.cpp

old mode 100755 (executable)
new mode 100644 (file)
index 279e2e8..6cbb054
@@ -20,6 +20,9 @@
 extern char **environ;
 #endif
 
+// From TestMain.cpp.
+extern const char *TestMainArgv0;
+
 namespace {
 
 using namespace llvm;
@@ -52,9 +55,7 @@ TEST(ProgramTest, CreateProcessTrailingSlash) {
     exit(1);
   }
 
-  // FIXME: Hardcoding argv0 here since I don't know a good cross-platform way
-  // to get it.  Maybe ParseCommandLineOptions() should save it?
-  Path my_exe = Path::GetMainExecutable("SupportTests", &ProgramTestStringArg1);
+  Path my_exe = Path::GetMainExecutable(TestMainArgv0, &ProgramTestStringArg1);
   const char *argv[] = {
     my_exe.c_str(),
     "--gtest_filter=ProgramTest.CreateProcessTrailingSlashChild",
index ce32b7380f22a1f3cae47f31eb1e03fe6f995440..5387512e6fb54546aba2c82c0e000d344fc9714b 100644 (file)
 # endif
 #endif
 
+const char *TestMainArgv0;
+
 int main(int argc, char **argv) {
   llvm::sys::PrintStackTraceOnErrorSignal();
   testing::InitGoogleTest(&argc, argv);
   llvm::cl::ParseCommandLineOptions(argc, argv);
 
+  // Make it easy for a test to re-execute itself by saving argv[0].
+  TestMainArgv0 = argv[0];
+
 # if defined(LLVM_ON_WIN32)
   // Disable all of the possible ways Windows conspires to make automated
   // testing impossible.