CMakeUserFindOctave

From KitwarePublic
Revision as of 18:04, 20 April 2018 by Brad.king (talk | contribs) (Add explicit preformat markup)
Jump to navigationJump to search

Back


 # - Find Octave
 # GNU Octave is a high-level interpreted language, primarily intended for numerical computations.
 # available at http://www.gnu.org/software/octave/
 #
 # This module defines: 
 #  OCTAVE_EXECUTABLE           - octave interpreter
 #  OCTAVE_INCLUDE_DIRS         - include path for mex.h, mexproto.h
 #  OCTAVE_LIBRARIES            - required libraries: octinterp, octave, cruft
 #  OCTAVE_OCTINTERP_LIBRARY    - path to the library octinterp
 #  OCTAVE_OCTAVE_LIBRARY       - path to the library octave
 #  OCTAVE_CRUFT_LIBRARY        - path to the library cruft
 #  OCTAVE_VERSION_STRING       - octave version string
 #  OCTAVE_MAJOR_VERSION        - major version
 #  OCTAVE_MINOR_VERSION        - minor version
 #  OCTAVE_PATCH_VERSION        - patch version
 #  OCTAVE_OCT_FILE_DIR         - object files that will be dynamically loaded
 #  OCTAVE_OCT_LIB_DIR          - oct libraries
 #  OCTAVE_ROOT_DIR             - octave prefix
 #
 # The macro octave_add_oct allows to create compiled modules.
 # octave_add_oct ( target_name
 #         [SOURCES] source1 [source2 ...]
 #         [LINK_LIBRARIES  lib1 [lib2 ...]]
 #         [EXTENSION ext]
 # )
 #
 # To install it, you can the use the variable OCTAVE_OCT_FILE_DIR as follow:
 #  file ( RELATIVE_PATH PKG_OCTAVE_OCT_FILE_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_OCT_FILE_DIR} )                   
 #  install (
 #    TARGETS target_name
 #    DESTINATION ${PKG_OCTAVE_OCT_FILE_DIR}
 #  ) 
 
 #=============================================================================
 # Copyright 2013, Julien Schueller
 # All rights reserved.
 # 
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met: 
 # 
 # 1. Redistributions of source code must retain the above copyright notice, this
 #    list of conditions and the following disclaimer. 
 # 2. Redistributions in binary form must reproduce the above copyright notice,
 #    this list of conditions and the following disclaimer in the documentation
 #    and/or other materials provided with the distribution. 
 #
 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 # The views and conclusions contained in the software and documentation are those
 # of the authors and should not be interpreted as representing official policies, 
 # either expressed or implied, of the FreeBSD Project.
 #=============================================================================
 
 find_program( OCTAVE_CONFIG_EXECUTABLE
               NAMES octave-config 
             )
 
 if ( OCTAVE_CONFIG_EXECUTABLE )
 
   execute_process ( COMMAND ${OCTAVE_CONFIG_EXECUTABLE} -p PREFIX
                     OUTPUT_VARIABLE OCTAVE_ROOT_DIR
                     OUTPUT_STRIP_TRAILING_WHITESPACE )        
                     
   execute_process ( COMMAND ${OCTAVE_CONFIG_EXECUTABLE} -p BINDIR
                     OUTPUT_VARIABLE OCTAVE_BIN_PATHS
                     OUTPUT_STRIP_TRAILING_WHITESPACE )        
                     
   execute_process ( COMMAND ${OCTAVE_CONFIG_EXECUTABLE} -p OCTINCLUDEDIR
                     OUTPUT_VARIABLE OCTAVE_INCLUDE_PATHS
                     OUTPUT_STRIP_TRAILING_WHITESPACE )                
                     
   execute_process ( COMMAND ${OCTAVE_CONFIG_EXECUTABLE} -p OCTLIBDIR
                     OUTPUT_VARIABLE OCTAVE_LIBRARIES_PATHS
                     OUTPUT_STRIP_TRAILING_WHITESPACE )                
               
   execute_process ( COMMAND ${OCTAVE_CONFIG_EXECUTABLE} -p OCTFILEDIR
                     OUTPUT_VARIABLE OCTAVE_OCT_FILE_DIR
                     OUTPUT_STRIP_TRAILING_WHITESPACE )
                               
   execute_process ( COMMAND ${OCTAVE_CONFIG_EXECUTABLE} -p OCTLIBDIR
                     OUTPUT_VARIABLE OCTAVE_OCT_LIB_DIR
                     OUTPUT_STRIP_TRAILING_WHITESPACE )
                     
   execute_process ( COMMAND ${OCTAVE_CONFIG_EXECUTABLE} -v
                     OUTPUT_VARIABLE OCTAVE_VERSION_STRING
                     OUTPUT_STRIP_TRAILING_WHITESPACE )    
                     
   if ( OCTAVE_VERSION_STRING )                 
     string ( REGEX REPLACE "([0-9]+)\\..*" "\\1" OCTAVE_MAJOR_VERSION ${OCTAVE_VERSION_STRING} )
     string ( REGEX REPLACE "[0-9]+\\.([0-9]+).*" "\\1" OCTAVE_MINOR_VERSION ${OCTAVE_VERSION_STRING} )
     string ( REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" OCTAVE_PATCH_VERSION ${OCTAVE_VERSION_STRING} )               
   endif ()                  
 endif ()
 
 find_program( OCTAVE_EXECUTABLE
               HINTS ${OCTAVE_BIN_PATHS}
               NAMES octave
             )
 
 find_library( OCTAVE_OCTINTERP_LIBRARY
               NAMES octinterp liboctinterp
               HINTS ${OCTAVE_LIBRARIES_PATHS}
             )
 find_library( OCTAVE_OCTAVE_LIBRARY
               NAMES octave liboctave
               HINTS ${OCTAVE_LIBRARIES_PATHS}
             )
 find_library( OCTAVE_CRUFT_LIBRARY
               NAMES cruft libcruft
               HINTS ${OCTAVE_LIBRARIES_PATHS}
             )
     
 set ( OCTAVE_LIBRARIES ${OCTAVE_OCTINTERP_LIBRARY} )
 list ( APPEND OCTAVE_LIBRARIES ${OCTAVE_OCTAVE_LIBRARY} ) 
 list ( APPEND OCTAVE_LIBRARIES ${OCTAVE_CRUFT_LIBRARY} ) 
     
 find_path ( OCTAVE_INCLUDE_DIR 
             NAMES mex.h
             HINTS ${OCTAVE_INCLUDE_PATHS}
           )
     
 set ( OCTAVE_INCLUDE_DIRS ${OCTAVE_INCLUDE_DIR} )
 
 macro ( octave_add_oct FUNCTIONNAME )
   set ( _CMD SOURCES )
   set ( _SOURCES )
   set ( _LINK_LIBRARIES )
   set ( _EXTENSION )
   set ( _OCT_EXTENSION oct )
   foreach ( _ARG ${ARGN})
     if ( ${_ARG} MATCHES SOURCES )
       set ( _CMD SOURCES )
     elseif ( ${_ARG} MATCHES LINK_LIBRARIES  )
       set ( _CMD LINK_LIBRARIES  )
     elseif ( ${_ARG} MATCHES EXTENSION )
       set ( _CMD EXTENSION )
     else ()
       if ( ${_CMD} MATCHES SOURCES )
         list ( APPEND _SOURCES "${_ARG}" )
       elseif ( ${_CMD} MATCHES LINK_LIBRARIES  )
         list ( APPEND _LINK_LIBRARIES "${_ARG}" )
       elseif ( ${_CMD} MATCHES EXTENSION )
         set ( _OCT_EXTENSION ${_ARG} )
       endif ()
     endif ()
   endforeach ()
   add_library ( ${FUNCTIONNAME} SHARED ${_SOURCES} )
   target_link_libraries ( ${FUNCTIONNAME} ${OCTAVE_LIBRARIES} ${_LINK_LIBRARIES} )
   set_target_properties ( ${FUNCTIONNAME} PROPERTIES
     PREFIX ""
     SUFFIX  ".${_OCT_EXTENSION}"
   )
 endmacro ()
 
 # handle REQUIRED and QUIET options
 include ( FindPackageHandleStandardArgs )
 if ( CMAKE_VERSION LESS 2.8.3 )
   find_package_handle_standard_args ( Octave DEFAULT_MSG OCTAVE_EXECUTABLE OCTAVE_ROOT_DIR OCTAVE_INCLUDE_DIRS OCTAVE_LIBRARIES OCTAVE_VERSION_STRING )
 else ()
   find_package_handle_standard_args ( Octave REQUIRED_VARS OCTAVE_EXECUTABLE OCTAVE_ROOT_DIR OCTAVE_INCLUDE_DIRS OCTAVE_LIBRARIES VERSION_VAR OCTAVE_VERSION_STRING )
 endif ()
 
 mark_as_advanced (
   OCTAVE_OCT_FILE_DIR
   OCTAVE_OCT_LIB_DIR
   OCTAVE_OCTINTERP_LIBRARY
   OCTAVE_OCTAVE_LIBRARY
   OCTAVE_CRUFT_LIBRARY
   OCTAVE_LIBRARIES
   OCTAVE_INCLUDE_DIR
   OCTAVE_INCLUDE_DIRS
   OCTAVE_ROOT_DIR
   OCTAVE_VERSION_STRING
   OCTAVE_MAJOR_VERSION
   OCTAVE_MINOR_VERSION
   OCTAVE_PATCH_VERSION
 )

Back



CMake: [Welcome | Site Map]