diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2002-04-04 16:53:37 -0500 |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2002-04-04 16:53:37 -0500 |
commit | e4dce08591ef28e03d3aba3492aff6f27388ec1d (patch) | |
tree | 60ba18eaa34ae4212d54c5985c5d1be0211f3a7d /Source/cmCreateTestSourceList.cxx | |
parent | 04d53a38659ca8baa893f3c6c8715c0d150eaddf (diff) | |
download | cmake-e4dce08591ef28e03d3aba3492aff6f27388ec1d.tar.gz |
ENH: add the ability to process command line arguments in the test driver before the test driver gets them
Diffstat (limited to 'Source/cmCreateTestSourceList.cxx')
-rw-r--r-- | Source/cmCreateTestSourceList.cxx | 62 |
1 files changed, 55 insertions, 7 deletions
diff --git a/Source/cmCreateTestSourceList.cxx b/Source/cmCreateTestSourceList.cxx index 1f7246ef02..5fc64b7cd3 100644 --- a/Source/cmCreateTestSourceList.cxx +++ b/Source/cmCreateTestSourceList.cxx @@ -30,7 +30,39 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn) cmSystemTools::ExpandListArguments(argsIn, args); std::vector<std::string>::iterator i = args.begin(); - + std::string extraInclude; + std::string function; + std::vector<std::string> tests; + // extract extra include and function ot + for(; i != args.end(); i++) + { + if(*i == "EXTRA_INCLUDE") + { + ++i; + if(i == args.end()) + { + this->SetError("incorrect arguments to EXTRA_INCLUDE"); + return false; + } + extraInclude = *i; + } + else if(*i == "FUNCTION") + { + ++i; + if(i == args.end()) + { + this->SetError("incorrect arguments to FUNCTION"); + return false; + } + function = *i; + } + else + { + tests.push_back(*i); + } + } + i = tests.begin(); + // Name of the source list const char* sourceList = i->c_str(); @@ -59,8 +91,13 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn) fout << "#include <ctype.h>\n" "#include <stdio.h>\n" - "#include <string.h>\n" - + "#include <string.h>\n"; + if(extraInclude.size()) + { + fout << "#include \"" << extraInclude << "\"\n"; + } + + fout << "\n" "// Forward declare test functions\n" "\n"; @@ -75,8 +112,12 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn) // For the moment: // - replace spaces ' ', ':' and '/' with underscores '_' - for(i = testsBegin; i != args.end(); ++i) + for(i = testsBegin; i != tests.end(); ++i) { + if(*i == "EXTRA_INCLUDE") + { + break; + } std::string func_name = *i; cmSystemTools::ConvertToUnixSlashes(func_name); cmSystemTools::ReplaceString(func_name, " ", "_"); @@ -101,7 +142,7 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn) int numTests = 0; std::vector<std::string>::iterator j; - for(i = testsBegin, j = tests_func_name.begin(); i != args.end(); ++i, ++j) + for(i = testsBegin, j = tests_func_name.begin(); i != tests.end(); ++i, ++j) { fout << " {\n" @@ -138,7 +179,14 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn) " int NumTests = " << numTests << ";\n" " int i;\n" " \n" - " // If no test name was given\n" + " // If no test name was given\n"; + if(function.size()) + { + fout << " // process command line with user function\n" + << " " << function << "(&ac, &av);\n"; + } + + fout << " if (ac < 2)\n" " {\n" " // If there is only one test, then run it with the arguments\n" @@ -218,7 +266,7 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn) false); m_Makefile->AddSource(cfile, sourceList); - for(i = testsBegin; i != args.end(); ++i) + for(i = testsBegin; i != tests.end(); ++i) { cmSourceFile cfile; cfile.SetIsAnAbstractClass(false); |