diff options
author | Brad King <brad.king@kitware.com> | 2015-09-01 20:25:57 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2015-09-02 14:17:22 (GMT) |
commit | 8ea7611bc3650c75c86d22a3127cb117dbcaa9be (patch) | |
tree | e04eb16f45d1b9fc463ae82c4b0184ea04fabca1 /Source | |
parent | fc1990c93384d1d2122cd4e11398a8197b006504 (diff) | |
download | CMake-8ea7611bc3650c75c86d22a3127cb117dbcaa9be.zip CMake-8ea7611bc3650c75c86d22a3127cb117dbcaa9be.tar.gz CMake-8ea7611bc3650c75c86d22a3127cb117dbcaa9be.tar.bz2 |
find_program: Optionally consider all names in each directory
When more than one value is given to the NAMES option this command by
default will consider one name at a time and search every directory for
it. Add a NAMES_PER_DIR option to tell this command to consider one
directory at a time and search for all names in it.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmFindProgramCommand.cxx | 41 | ||||
-rw-r--r-- | Source/cmFindProgramCommand.h | 3 |
2 files changed, 44 insertions, 0 deletions
diff --git a/Source/cmFindProgramCommand.cxx b/Source/cmFindProgramCommand.cxx index c9bc56d..e64ed87 100644 --- a/Source/cmFindProgramCommand.cxx +++ b/Source/cmFindProgramCommand.cxx @@ -85,6 +85,11 @@ struct cmFindProgramHelper } }; +cmFindProgramCommand::cmFindProgramCommand() +{ + this->NamesPerDirAllowed = true; +} + // cmFindProgramCommand bool cmFindProgramCommand ::InitialPass(std::vector<std::string> const& argsIn, cmExecutionStatus &) @@ -151,6 +156,42 @@ std::string cmFindProgramCommand::FindProgram() //---------------------------------------------------------------------------- std::string cmFindProgramCommand::FindNormalProgram() { + if(this->NamesPerDir) + { + return this->FindNormalProgramNamesPerDir(); + } + else + { + return this->FindNormalProgramDirsPerName(); + } +} + +//---------------------------------------------------------------------------- +std::string cmFindProgramCommand::FindNormalProgramNamesPerDir() +{ + // Search for all names in each directory. + cmFindProgramHelper helper; + for (std::vector<std::string>::const_iterator ni = this->Names.begin(); + ni != this->Names.end() ; ++ni) + { + helper.AddName(*ni); + } + // Search every directory. + for (std::vector<std::string>::const_iterator + p = this->SearchPaths.begin(); p != this->SearchPaths.end(); ++p) + { + if(helper.CheckDirectory(*p)) + { + return helper.BestPath; + } + } + // Couldn't find the program. + return ""; +} + +//---------------------------------------------------------------------------- +std::string cmFindProgramCommand::FindNormalProgramDirsPerName() +{ // Search the entire path for each name. cmFindProgramHelper helper; for (std::vector<std::string>::const_iterator ni = this->Names.begin(); diff --git a/Source/cmFindProgramCommand.h b/Source/cmFindProgramCommand.h index df39b14..f88186b 100644 --- a/Source/cmFindProgramCommand.h +++ b/Source/cmFindProgramCommand.h @@ -25,6 +25,7 @@ class cmFindProgramCommand : public cmFindBase { public: + cmFindProgramCommand(); /** * This is a virtual constructor for the command. */ @@ -55,6 +56,8 @@ public: private: std::string FindProgram(); std::string FindNormalProgram(); + std::string FindNormalProgramDirsPerName(); + std::string FindNormalProgramNamesPerDir(); std::string FindAppBundle(); std::string GetBundleExecutable(std::string bundlePath); |