CMake/Modules/FindOctave.cmake
2018-12-06 14:16:44 -05:00

168 lines
4.9 KiB
CMake

# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindOctave
----------
Finds GNU Octave interpreter, libraries and compilers.
Imported targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` targets:
``Octave::Interpreter``
Octave interpreter (the main program)
``Octave::Octave``
include directories and libraries
If no ``COMPONENTS`` are specified, ``Interpreter`` is assumed.
Result Variables
^^^^^^^^^^^^^^^^
``Octave_FOUND``
Octave interpreter and/or libraries were found
``Octave_<component>_FOUND``
Octave <component> specified was found
``Octave_EXECUTABLE``
Octave interpreter
``Octave_INCLUDE_DIRS``
include path for mex.h
``Octave_LIBRARIES``
octinterp, octave libraries
Cache variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``Octave_INTERP_LIBRARY``
path to the library octinterp
``Octave_OCTAVE_LIBRARY``
path to the liboctave library
#]=======================================================================]
cmake_policy(VERSION 3.3)
unset(Octave_REQUIRED_VARS)
unset(Octave_Development_FOUND)
unset(Octave_Interpreter_FOUND)
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME Interpreter)
if(Development IN_LIST Octave_FIND_COMPONENTS)
find_program(Octave_CONFIG_EXECUTABLE
NAMES octave-config)
if(Octave_CONFIG_EXECUTABLE)
execute_process(COMMAND ${Octave_CONFIG_EXECUTABLE} -p BINDIR
OUTPUT_VARIABLE Octave_BINARY_DIR
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${Octave_CONFIG_EXECUTABLE} -p OCTINCLUDEDIR
OUTPUT_VARIABLE Octave_INCLUDE_DIR
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
list(APPEND Octave_REQUIRED_VARS ${Octave_INCLUDE_DIR})
execute_process(COMMAND ${Octave_CONFIG_EXECUTABLE} -p OCTLIBDIR
OUTPUT_VARIABLE Octave_LIB1
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${Octave_CONFIG_EXECUTABLE} -p LIBDIR
OUTPUT_VARIABLE Octave_LIB2
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
find_library(Octave_INTERP_LIBRARY
NAMES octinterp
PATHS ${Octave_LIB1} ${Octave_LIB2}
NO_DEFAULT_PATH
)
find_library(Octave_OCTAVE_LIBRARY
NAMES octave
PATHS ${Octave_LIB1} ${Octave_LIB2}
NO_DEFAULT_PATH
)
list(APPEND Octave_REQUIRED_VARS ${Octave_OCTAVE_LIBRARY} ${Octave_INTERP_LIBRARY})
if(Octave_REQUIRED_VARS)
set(Octave_Development_FOUND true)
endif()
endif(Octave_CONFIG_EXECUTABLE)
endif()
if(Interpreter IN_LIST Octave_FIND_COMPONENTS)
find_program(Octave_EXECUTABLE
NAMES octave)
list(APPEND Octave_REQUIRED_VARS ${Octave_EXECUTABLE})
endif()
if(Octave_EXECUTABLE)
execute_process(COMMAND ${Octave_EXECUTABLE} -v
OUTPUT_VARIABLE Octave_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REGEX REPLACE "GNU Octave, version ([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" Octave_VERSION_MAJOR ${Octave_VERSION})
string(REGEX REPLACE "GNU Octave, version [0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" Octave_VERSION_MINOR ${Octave_VERSION})
string(REGEX REPLACE "GNU Octave, version [0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" Octave_VERSION_PATCH ${Octave_VERSION})
set(Octave_VERSION ${Octave_VERSION_MAJOR}.${Octave_VERSION_MINOR}.${Octave_VERSION_PATCH})
set(Octave_Interpreter_FOUND true)
endif(Octave_EXECUTABLE)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Octave
REQUIRED_VARS Octave_REQUIRED_VARS
VERSION_VAR Octave_VERSION
HANDLE_COMPONENTS)
if(Octave_Development_FOUND)
set(Octave_LIBRARIES ${Octave_INTERP_LIBRARY} ${Octave_OCTAVE_LIBRARY})
set(Octave_INCLUDE_DIRS ${Octave_INCLUDE_DIR})
if(NOT TARGET Octave::Octave)
add_library(Octave::Octave UNKNOWN IMPORTED)
set_target_properties(Octave::Octave PROPERTIES
IMPORTED_LOCATION ${Octave_OCTAVE_LIBRARY}
INTERFACE_INCLUDE_DIRECTORIES ${Octave_INCLUDE_DIR}
)
endif()
endif()
if(Octave_Interpreter_FOUND)
if(NOT TARGET Octave::Interpreter)
add_executable(Octave::Interpreter IMPORTED)
set_target_properties(Octave::Interpreter PROPERTIES
IMPORTED_LOCATION ${Octave_EXECUTABLE}
VERSION ${Octave_VERSION})
endif()
endif()
mark_as_advanced(
Octave_CONFIG_EXECUTABLE
Octave_INTERP_LIBRARY
Octave_OCTAVE_LIBRARY
Octave_INCLUDE_DIR
Octave_VERSION_MAJOR
Octave_VERSION_MINOR
Octave_VERSION_PATCH
)