InterpTools.cmake
Go to the documentation of this file.
00001 ############################################################################## 00002 # @file InterpTools.cmake 00003 # @brief Script interpreter tools. 00004 # 00005 # Copyright (c) 2012 University of Pennsylvania. All rights reserved.<br /> 00006 # See https://www.cbica.upenn.edu/sbia/software/license.html or COPYING file. 00007 # 00008 # Contact: SBIA Group <sbia-software at uphs.upenn.edu> 00009 # 00010 # @ingroup CMakeTools 00011 ############################################################################## 00012 00013 if (__BASIS_INTERPTOOLS_INCLUDED) 00014 return () 00015 else () 00016 set (__BASIS_INTERPTOOLS_INCLUDED TRUE) 00017 endif () 00018 00019 00020 ## @addtogroup CMakeUtilities 00021 # @{ 00022 00023 00024 # ---------------------------------------------------------------------------- 00025 ## @brief Get version of Python interpreter. 00026 # 00027 # @param [out] ARGV1 If given, the named variable is set to the version string 00028 # of the Python interpreter. Otherwise, the variables 00029 # @c PYTHON_VERSION_STRING, @c PYTHON_VERSION_MAJOR, 00030 # @c PYTHON_VERSION_MINOR, and @c PYTHON_VERSION_PATCH are 00031 # set in the scope of the caller. 00032 function (basis_get_python_version) 00033 if (PYTHON_EXECUTABLE) 00034 execute_process( 00035 COMMAND "${PYTHON_EXECUTABLE}" -E -c "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" 00036 OUTPUT_VARIABLE VERSION 00037 RESULT_VARIABLE RETVAL 00038 ERROR_QUIET 00039 ) 00040 if (RETVAL EQUAL 0) 00041 string (REPLACE ";" "." VERSION_STRING "${VERSION}") 00042 list (GET VERSION 0 VERSION_MAJOR) 00043 list (GET VERSION 1 VERSION_MINOR) 00044 list (GET VERSION 2 VERSION_PATCH) 00045 if (VERSION_PATCH EQUAL 0) 00046 string (REGEX REPLACE "\\.0$" "" VERSION_STRING "${VERSION_STRING}") 00047 endif() 00048 else () 00049 # sys.version predates sys.version_info 00050 execute_process ( 00051 COMMAND "${PYTHON_EXECUTABLE}" -E -c "import sys; sys.stdout.write(sys.version)" 00052 OUTPUT_VARIABLE VERSION 00053 RESULT_VARIABLE RETVAL 00054 ERROR_QUIET 00055 ) 00056 if (RETVAL EQUAL 0) 00057 string (REGEX REPLACE " .*" "" VERSION_STRING "${VERSION}") 00058 string (REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" VERSION_MAJOR "${VERSION_STRING}") 00059 string (REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" VERSION_MINOR "${VERSION_STRING}") 00060 if (VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+.*") 00061 string (REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION_STRING}") 00062 else () 00063 set (VERSION_PATCH "0") 00064 endif() 00065 else () 00066 # sys.version was first documented for Python 1.5 00067 set (VERSION_STRING "1.4") 00068 set (VERSION_MAJOR "1") 00069 set (VERSION_MINOR "4") 00070 set (VERSION_PATCH "0") 00071 endif () 00072 endif () 00073 else () 00074 set (VERSION_STRING "0.0") 00075 set (VERSION_MAJOR "0") 00076 set (VERSION_MINOR "0") 00077 set (VERSION_PATCH "0") 00078 endif () 00079 if (ARGC EQUAL 1) 00080 set (${ARGV0} "${VERSION_STRING}" PARENT_SCOPE) 00081 else () 00082 set (PYTHON_VERSION_STRING "${VERSION_STRING}" PARENT_SCOPE) 00083 set (PYTHON_VERSION_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE) 00084 set (PYTHON_VERSION_MINOR "${VERSION_MINOR}" PARENT_SCOPE) 00085 set (PYTHON_VERSION_PATCH "${VERSION_PATCH}" PARENT_SCOPE) 00086 endif () 00087 endfunction () 00088 00089 # ---------------------------------------------------------------------------- 00090 ## @brief Get version of Jython interpreter. 00091 # 00092 # @param [out] ARGV1 If given, the named variable is set to the version string 00093 # of the Jython interpreter. Otherwise, the variables 00094 # @c JYTHON_VERSION_STRING, @c JYTHON_VERSION_MAJOR, 00095 # @c JYTHON_VERSION_MINOR, and @c JYTHON_VERSION_PATCH are 00096 # set in the scope of the caller. 00097 function (basis_get_jython_version) 00098 if (JYTHON_EXECUTABLE) 00099 execute_process( 00100 COMMAND "${JYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" 00101 OUTPUT_VARIABLE VERSION 00102 RESULT_VARIABLE RETVAL 00103 ERROR_QUIET 00104 ) 00105 if (RETVAL EQUAL 0) 00106 string (REPLACE ";" "." VERSION_STRING "${VERSION}") 00107 list (GET VERSION 0 VERSION_MAJOR) 00108 list (GET VERSION 1 VERSION_MINOR) 00109 list (GET VERSION 2 VERSION_PATCH) 00110 if (VERSION_PATCH EQUAL 0) 00111 string (REGEX REPLACE "\\.0$" "" VERSION_STRING "${VERSION_STRING}") 00112 endif() 00113 else () 00114 # sys.version predates sys.version_info 00115 execute_process ( 00116 COMMAND "${JYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(sys.version)" 00117 OUTPUT_VARIABLE VERSION 00118 RESULT_VARIABLE RETVAL 00119 ERROR_QUIET 00120 ) 00121 if (RETVAL EQUAL 0) 00122 string (REGEX REPLACE " .*" "" VERSION_STRING "${VERSION}") 00123 string (REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" VERSION_MAJOR "${VERSION_STRING}") 00124 string (REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" VERSION_MINOR "${VERSION_STRING}") 00125 if (VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+.*") 00126 string (REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION_STRING}") 00127 else () 00128 set (VERSION_PATCH "0") 00129 endif() 00130 else () 00131 set (VERSION_STRING "0.0") 00132 set (VERSION_MAJOR "0") 00133 set (VERSION_MINOR "0") 00134 set (VERSION_PATCH "0") 00135 endif () 00136 endif () 00137 else () 00138 set (VERSION_STRING "0.0") 00139 set (VERSION_MAJOR "0") 00140 set (VERSION_MINOR "0") 00141 set (VERSION_PATCH "0") 00142 endif () 00143 if (ARGC EQUAL 1) 00144 set (${ARGV0} "${VERSION_STRING}" PARENT_SCOPE) 00145 else () 00146 set (JYTHON_VERSION_STRING "${VERSION_STRING}" PARENT_SCOPE) 00147 set (JYTHON_VERSION_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE) 00148 set (JYTHON_VERSION_MINOR "${VERSION_MINOR}" PARENT_SCOPE) 00149 set (JYTHON_VERSION_PATCH "${VERSION_PATCH}" PARENT_SCOPE) 00150 endif () 00151 endfunction () 00152 00153 # ---------------------------------------------------------------------------- 00154 ## @brief Get version of Perl interpreter. 00155 # 00156 # @param [out] ARGV1 If given, the named variable is set to the version string 00157 # of the Perl interpreter. Otherwise, the variables 00158 # @c PERL_VERSION_STRING, @c PERL_VERSION_MAJOR, 00159 # @c PERL_VERSION_MINOR, and @c PERL_VERSION_PATCH are 00160 # set in the scope of the caller. 00161 function (basis_get_perl_version) 00162 if (PERL_EXECUTABLE) 00163 execute_process (COMMAND "${PERL_EXECUTABLE}" --version OUTPUT_VARIABLE VERSION) 00164 else () 00165 set (VERSION) 00166 endif () 00167 if (VERSION MATCHES "[( ]v([0-9]+)\\.([0-9]+)\\.([0-9]+)[ )]") 00168 set (VERSION_MAJOR "${CMAKE_MATCH_1}") 00169 set (VERSION_MINOR "${CMAKE_MATCH_2}") 00170 set (VERSION_PATCH "${CMAKE_MATCH_3}") 00171 set (VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") 00172 else () 00173 set (VERSION_STRING "0.0") 00174 set (VERSION_MAJOR "0") 00175 set (VERSION_MINOR "0") 00176 set (VERSION_PATCH "0") 00177 endif () 00178 if (ARGC EQUAL 1) 00179 set (${ARGV0} "${VERSION_STRING}" PARENT_SCOPE) 00180 else () 00181 set (PERL_VERSION_STRING "${VERSION_STRING}" PARENT_SCOPE) 00182 set (PERL_VERSION_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE) 00183 set (PERL_VERSION_MINOR "${VERSION_MINOR}" PARENT_SCOPE) 00184 set (PERL_VERSION_PATCH "${VERSION_PATCH}" PARENT_SCOPE) 00185 endif () 00186 endfunction () 00187 00188 # ---------------------------------------------------------------------------- 00189 ## @brief Get version of Bash interpreter. 00190 # 00191 # @param [out] ARGV1 If given, the named variable is set to the version string 00192 # of the Bash interpreter. Otherwise, the variables 00193 # @c BASH_VERSION_STRING, @c BASH_VERSION_MAJOR, 00194 # @c BASH_VERSION_MINOR, and @c BASH_VERSION_PATCH are 00195 # set in the scope of the caller. 00196 function (basis_get_bash_version) 00197 if (BASH_EXECUTABLE) 00198 execute_process (COMMAND "${BASH_EXECUTABLE}" --version OUTPUT_VARIABLE VERSION) 00199 else () 00200 set (VERSION) 00201 endif () 00202 if (VERSION MATCHES "version ([0-9]+)\\.([0-9]+)\\.([0-9]+)") 00203 set (VERSION_MAJOR "${CMAKE_MATCH_1}") 00204 set (VERSION_MINOR "${CMAKE_MATCH_2}") 00205 set (VERSION_PATCH "${CMAKE_MATCH_3}") 00206 set (VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") 00207 else () 00208 set (VERSION_STRING "0.0") 00209 set (VERSION_MAJOR "0") 00210 set (VERSION_MINOR "0") 00211 set (VERSION_PATCH "0") 00212 endif () 00213 if (ARGC EQUAL 1) 00214 set (${ARGV0} "${VERSION_STRING}" PARENT_SCOPE) 00215 else () 00216 set (BASH_VERSION_STRING "${VERSION_STRING}" PARENT_SCOPE) 00217 set (BASH_VERSION_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE) 00218 set (BASH_VERSION_MINOR "${VERSION_MINOR}" PARENT_SCOPE) 00219 set (BASH_VERSION_PATCH "${VERSION_PATCH}" PARENT_SCOPE) 00220 endif () 00221 endfunction () 00222 00223 00224 ## @} 00225 # end of Doxygen group