00001 /* 00002 00003 This file is part of OpenFLUID software 00004 Copyright(c) 2007, INRA - Montpellier SupAgro 00005 00006 00007 == GNU General Public License Usage == 00008 00009 OpenFLUID is free software: you can redistribute it and/or modify 00010 it under the terms of the GNU General Public License as published by 00011 the Free Software Foundation, either version 3 of the License, or 00012 (at your option) any later version. 00013 00014 OpenFLUID is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 GNU General Public License for more details. 00018 00019 You should have received a copy of the GNU General Public License 00020 along with OpenFLUID. If not, see <http://www.gnu.org/licenses/>. 00021 00022 00023 == Other Usage == 00024 00025 Other Usage means a use of OpenFLUID that is inconsistent with the GPL 00026 license, and requires a written agreement between You and INRA. 00027 Licensees for Other Usage of OpenFLUID may use this file in accordance 00028 with the terms contained in the written agreement between You and INRA. 00029 00030 */ 00031 00032 00033 /** 00034 \file ExternalProgram.hpp 00035 \brief Header of ... 00036 00037 \author Jean-Christophe FABRE <fabrejc@supagro.inra.fr> 00038 */ 00039 00040 00041 #ifndef __EXTERNALPROGRAM_HPP__ 00042 #define __EXTERNALPROGRAM_HPP__ 00043 00044 #include <openfluid/dllexport.hpp> 00045 00046 #include <QStringList> 00047 00048 00049 namespace openfluid { namespace tools { 00050 00051 /** 00052 Management of external programs 00053 */ 00054 class DLLEXPORT ExternalProgram 00055 { 00056 private: 00057 00058 QString m_Program; 00059 00060 QString m_FullProgramPath; 00061 00062 QStringList m_SearchPaths; 00063 00064 bool m_UsePathEnv; 00065 00066 00067 public: 00068 00069 /** 00070 List of pre-registered external programs 00071 */ 00072 enum RegisteredPrograms { CMakeProgram, ZipProgram, SevenZipProgram, 00073 GnuplotProgram, GoogleEarthProgram, GccProgram, 00074 PdfLatexProgram, BibTexProgram, Latex2HTMLProgram }; 00075 00076 /** 00077 Constructor for a given external programs. Automatically searches for the program at construction 00078 @param[in] Program The program to find 00079 @param[in] SearchPaths The list of paths to search. Default value is an empty list 00080 @param[in] UsePathEnv Enable the use of PATH environment variable to search for the program. Default value is true. 00081 */ 00082 ExternalProgram(const QString& Program, 00083 const QStringList& SearchPaths = QStringList(), 00084 bool UsePathEnv = true); 00085 00086 ~ExternalProgram(); 00087 00088 /** 00089 Returns an ExternalProgram object initialized with the registered program to find 00090 @param[in] Prog The registered program to find 00091 @param[in] SearchPaths The list of paths to search. Default value is an empty list 00092 @param[in] UsePathEnv Enable the use of PATH environment variable to search for the registered program. Default value is true. 00093 @return An ExternalProgram object initialized with the registered program to find 00094 */ 00095 static ExternalProgram getRegisteredProgram(RegisteredPrograms Prog, 00096 const QStringList& SearchPaths = QStringList(), 00097 bool UsePathEnv = true); 00098 00099 /** 00100 Finds a program using the PATH environment variable 00101 @param[in] Program The command of the program to find 00102 @return The full path of the first found program 00103 */ 00104 static QString findUsingPATHEnvVar(const QString& Program); 00105 00106 /** 00107 Finds a program using a given paths list 00108 @param[in] Program The program to find 00109 @param[in] PathsList The list of paths to search 00110 @return The full path of the first found program 00111 */ 00112 static QString findUsingPathsList(const QString& Program, const QStringList& PathsList); 00113 00114 /** 00115 Returns true if the current program has been found 00116 @return true if the current program has been found 00117 */ 00118 bool isFound() const { return !m_FullProgramPath.isEmpty(); }; 00119 00120 /** 00121 Searches for the program 00122 */ 00123 void searchForProgram(); 00124 00125 /** 00126 Returns the full path of the program 00127 @return the full path of the program if it has been found, otherwise an empty string 00128 */ 00129 QString getFullProgramPath() const { return m_FullProgramPath; }; 00130 00131 }; 00132 00133 00134 } } // namespaces 00135 00136 #endif /* __EXTERNALPROGRAM_HPP__ */