BASIS  version 1.2.3 (revision 2104)
ExecutableTargetInfo.cxx
Go to the documentation of this file.
00001 /**
00002  * @file  ExecutableTargetInfo.cxx
00003  * @brief Implementation of ExecutableTargetInfo module.
00004  *
00005  * @note The file ExecutableTargetInfo.cxx is automatically generated by BASIS
00006  *       from the template file ExecutableTargetInfo.cxx.in which is part of BASIS.
00007  *
00008  * Copyright (c) 2011 University of Pennsylvania. All rights reserved.<br />
00009  * See https://www.cbica.upenn.edu/sbia/software/license.html or COPYING file.
00010  *
00011  * Contact: SBIA Group <sbia-software at uphs.upenn.edu>
00012  */
00013 
00014 
00015 #include <sbia/basis/path.h>
00016 #include <sbia/basis/config.h> // cLibexecPathPrefix, cRuntimePathPrefix
00017 
00018 #include "ExecutableTargetInfo.h"
00019 
00020 
00021 // acceptable in .cxx file
00022 using namespace std;
00023 
00024 
00025 namespace sbia
00026 {
00027 
00028 namespace basis
00029 {
00030 
00031 
00032 // ===========================================================================
00033 // construction / destruction
00034 // ===========================================================================
00035 
00036 ExecutableTargetInfo::ExecutableTargetInfo()
00037 {
00038     // the following code was automatically generated by the BASIS
00039     // CMake function basis_configure_ExecutableTargetInfo()
00040 
00041     // basisproject
00042     _exec_names  ["sbia.basis.basisproject"] = "basisproject";
00043     _build_dirs  ["sbia.basis.basisproject"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/bin";
00044     _install_dirs["sbia.basis.basisproject"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/bin";
00045 
00046     // which
00047     _exec_names  ["sbia.basis.which"] = "which";
00048     _build_dirs  ["sbia.basis.which"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/bin";
00049     _install_dirs["sbia.basis.which"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/bin";
00050 
00051     // doxyfilter
00052     _exec_names  ["sbia.basis.doxyfilter"] = "doxyfilter";
00053     _build_dirs  ["sbia.basis.doxyfilter"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/lib";
00054     _install_dirs["sbia.basis.doxyfilter"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/lib";
00055 
00056     // doxyfilter-matlab
00057     _exec_names  ["sbia.basis.doxyfilter-matlab"] = "doxyfilter-matlab";
00058     _build_dirs  ["sbia.basis.doxyfilter-matlab"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/lib";
00059     _install_dirs["sbia.basis.doxyfilter-matlab"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/lib";
00060 
00061     // doxyfilter-bash
00062     _exec_names  ["sbia.basis.doxyfilter-bash"] = "doxyfilter-bash";
00063     _build_dirs  ["sbia.basis.doxyfilter-bash"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/lib";
00064     _install_dirs["sbia.basis.doxyfilter-bash"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/lib";
00065 
00066     // doxyfilter-cmake
00067     _exec_names  ["sbia.basis.doxyfilter-cmake"] = "doxyfilter-cmake";
00068     _build_dirs  ["sbia.basis.doxyfilter-cmake"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/lib";
00069     _install_dirs["sbia.basis.doxyfilter-cmake"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/lib";
00070 
00071     // doxyfilter-python
00072     _exec_names  ["sbia.basis.doxyfilter-python"] = "doxyfilter-python";
00073     _build_dirs  ["sbia.basis.doxyfilter-python"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/lib";
00074     _install_dirs["sbia.basis.doxyfilter-python"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/lib";
00075 
00076     // testdriver
00077     _exec_names  ["sbia.basis.testdriver"] = "basistest-driver";
00078     _build_dirs  ["sbia.basis.testdriver"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/bin";
00079     _install_dirs["sbia.basis.testdriver"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/bin";
00080 
00081     // basistest-svn
00082     _exec_names  ["sbia.basis.basistest-svn"] = "basistest-svn";
00083     _build_dirs  ["sbia.basis.basistest-svn"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/bin";
00084     _install_dirs["sbia.basis.basistest-svn"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/bin";
00085 
00086     // basistest-slave
00087     _exec_names  ["sbia.basis.basistest-slave"] = "basistest-slave";
00088     _build_dirs  ["sbia.basis.basistest-slave"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/bin";
00089     _install_dirs["sbia.basis.basistest-slave"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/bin";
00090 
00091     // basistest-master
00092     _exec_names  ["sbia.basis.basistest-master"] = "basistest-master";
00093     _build_dirs  ["sbia.basis.basistest-master"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/bin";
00094     _install_dirs["sbia.basis.basistest-master"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/bin";
00095 
00096     // basistest-cron
00097     _exec_names  ["sbia.basis.basistest-cron"] = "basistest-cron";
00098     _build_dirs  ["sbia.basis.basistest-cron"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/bin";
00099     _install_dirs["sbia.basis.basistest-cron"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/bin";
00100 
00101     // basistest
00102     _exec_names  ["sbia.basis.basistest"] = "basistest";
00103     _build_dirs  ["sbia.basis.basistest"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/bin";
00104     _install_dirs["sbia.basis.basistest"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/bin";
00105 
00106     // make_html_verbatim
00107     _exec_names  ["sbia.basis.make_html_verbatim"] = "make_html_verbatim";
00108     _build_dirs  ["sbia.basis.make_html_verbatim"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/bin";
00109     _install_dirs["sbia.basis.make_html_verbatim"] = "/sbia/sbiasfw/lab/basis/1.2.3/centos5/bin";
00110 
00111     // dummy_command
00112     _exec_names  ["sbia.basis.dummy_command"] = "dummy_command";
00113     _build_dirs  ["sbia.basis.dummy_command"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00114     _install_dirs["sbia.basis.dummy_command"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00115 
00116     // test_matlabtools
00117     _exec_names  ["sbia.basis.test_matlabtools"] = "test_matlabtools";
00118     _build_dirs  ["sbia.basis.test_matlabtools"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00119     _install_dirs["sbia.basis.test_matlabtools"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00120 
00121     // test_basisproject
00122     _exec_names  ["sbia.basis.test_basisproject"] = "test_basisproject";
00123     _build_dirs  ["sbia.basis.test_basisproject"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00124     _install_dirs["sbia.basis.test_basisproject"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00125 
00126     // test_path
00127     _exec_names  ["sbia.basis.test_path"] = "test_path";
00128     _build_dirs  ["sbia.basis.test_path"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00129     _install_dirs["sbia.basis.test_path"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00130 
00131     // test_subprocess
00132     _exec_names  ["sbia.basis.test_subprocess"] = "test_subprocess";
00133     _build_dirs  ["sbia.basis.test_subprocess"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00134     _install_dirs["sbia.basis.test_subprocess"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00135 
00136     // test_core
00137     _exec_names  ["sbia.basis.test_core"] = "test_core";
00138     _build_dirs  ["sbia.basis.test_core"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00139     _install_dirs["sbia.basis.test_core"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00140 
00141     // test_shtap
00142     _exec_names  ["sbia.basis.test_shtap"] = "test_shtap";
00143     _build_dirs  ["sbia.basis.test_shtap"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00144     _install_dirs["sbia.basis.test_shtap"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00145 
00146     // parseargs
00147     _exec_names  ["sbia.basis.parseargs"] = "parseargs";
00148     _build_dirs  ["sbia.basis.parseargs"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00149     _install_dirs["sbia.basis.parseargs"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00150 
00151     // test_utilities
00152     _exec_names  ["sbia.basis.test_utilities"] = "test_utilities";
00153     _build_dirs  ["sbia.basis.test_utilities"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00154     _install_dirs["sbia.basis.test_utilities"] = "/sbia/home/schuha/sandbox/build/basis-1.2.3/Testing/bin";
00155 }
00156 
00157 ExecutableTargetInfo::~ExecutableTargetInfo()
00158 {
00159 }
00160 
00161 // ===========================================================================
00162 // public interface
00163 // ===========================================================================
00164 
00165 // ---------------------------------------------------------------------------
00166 const ExecutableTargetInfo& ExecutableTargetInfo::instance()
00167 {
00168     static ExecutableTargetInfo instance;
00169     return instance;
00170 }
00171 
00172 // ---------------------------------------------------------------------------
00173 string ExecutableTargetInfo::get_target_uid(const string& target) const
00174 {
00175     // empty(, invalid) target name remains unchanged
00176     if (target.empty()) return "";
00177     // in case of a leading namespace separator, do not modify target name
00178     if (target[0] == '.') return target;
00179     // project namespace
00180     string prefix = string("sbia.basis");
00181     // try prepending namespace or parts of it until target is known
00182     for (;;) {
00183         if (_exec_names.find(prefix + "." + target) != _exec_names.end()) {
00184             return prefix + "." + target;
00185         }
00186         string::size_type pos = prefix.rfind('.');
00187         if (pos == string::npos) break;
00188         prefix = prefix.substr(0, pos);
00189     }
00190     // otherwise, return target name unchanged
00191     return target;
00192 }
00193 
00194 // ---------------------------------------------------------------------------
00195 bool ExecutableTargetInfo::is_known_target(const string& target) const
00196 {
00197     if (target.empty()) return false;
00198     string uid;
00199     if (target[0] == '.') uid = target.substr(1);
00200     else uid = get_target_uid(target);
00201     return _exec_names.find(uid) != _exec_names.end();
00202 }
00203 
00204 // ---------------------------------------------------------------------------
00205 string ExecutableTargetInfo::get_executable_name(const string& target) const
00206 {
00207     if (target.empty()) return "";
00208     string uid;
00209     if (target[0] == '.') uid = target.substr(1);
00210     else uid = get_target_uid(target);
00211     MapIterator it = _exec_names.find(uid);
00212     if (it == _exec_names.end ()) return "";
00213     return it->second;
00214 }
00215 
00216 // ---------------------------------------------------------------------------
00217 string ExecutableTargetInfo::get_build_directory(const string& target) const
00218 {
00219     if (target.empty()) return "";
00220     string uid;
00221     if (target[0] == '.') uid = target.substr(1);
00222     else uid = get_target_uid(target);
00223     MapIterator it = _build_dirs.find(uid);
00224     if (it == _build_dirs.end()) return "";
00225 #if defined CMAKE_INTDIR
00226     // this subdirectory is used by CMake generators for IDEs such as Visual Studio
00227     return join_paths(it->second, CMAKE_INTDIR);
00228 #else
00229     return it->second;
00230 #endif
00231 }
00232 
00233 // ---------------------------------------------------------------------------
00234 string ExecutableTargetInfo::get_installation_directory(const string& target) const
00235 {
00236     if (target.empty()) return "";
00237     string uid;
00238     if (target[0] == '.') uid = target.substr(1);
00239     else uid = get_target_uid(target);
00240     MapIterator it = _install_dirs.find(uid);
00241     if (it == _install_dirs.end()) return "";
00242 #ifdef LIBEXEC
00243     return join_paths(join_paths(get_executable_directory(), cLibexecPathPrefix), it->second);
00244 #else
00245     return join_paths(join_paths(get_executable_directory(), cRuntimePathPrefix), it->second);
00246 #endif
00247 }
00248 
00249 
00250 } // namespace basis
00251 
00252 } // namespace sbia