BASIS  r3148
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