summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2018-11-18 02:48:26 (GMT)
committerBrad King <brad.king@kitware.com>2018-12-06 19:16:44 (GMT)
commit170bcb6fdca5942d0484042ad38c09b420554792 (patch)
treebf5798b7ff6bee823e38af4f79594861a86568bb
parent81bea69bd1d52977c3782d26560f34563394f487 (diff)
downloadCMake-170bcb6fdca5942d0484042ad38c09b420554792.zip
CMake-170bcb6fdca5942d0484042ad38c09b420554792.tar.gz
CMake-170bcb6fdca5942d0484042ad38c09b420554792.tar.bz2
FindOctave: Add module to find GNU octave
-rw-r--r--Copyright.txt2
-rw-r--r--Help/manual/cmake-modules.7.rst1
-rw-r--r--Help/module/FindOctave.rst1
-rw-r--r--Help/release/dev/FindOctave.rst4
-rw-r--r--Modules/FindOctave.cmake167
-rw-r--r--Tests/CMakeLists.txt4
-rw-r--r--Tests/FindOctave/CMakeLists.txt10
-rw-r--r--Tests/FindOctave/Test/CMakeLists.txt20
-rw-r--r--Tests/FindOctave/Test/main.cpp18
-rw-r--r--Tests/FindOctave/Test/testtrue.m1
10 files changed, 228 insertions, 0 deletions
diff --git a/Copyright.txt b/Copyright.txt
index c7a81b1..dc6deb9 100644
--- a/Copyright.txt
+++ b/Copyright.txt
@@ -63,6 +63,7 @@ The following individuals and institutions are among the Contributors:
* Ilya Lavrenov <ilya.lavrenov@itseez.com>
* Insight Software Consortium <insightsoftwareconsortium.org>
* Jan Woetzel
+* Julien Schueller
* Kelly Thompson <kgt@lanl.gov>
* Laurent Montel <montel@kde.org>
* Konstantin Podsvirov <konstantin@podsvirov.pro>
@@ -72,6 +73,7 @@ The following individuals and institutions are among the Contributors:
* Matthaeus G. Chajdas
* Matthias Kretz <kretz@kde.org>
* Matthias Maennich <matthias@maennich.net>
+* Michael Hirsch, Ph.D. <www.scivision.co>
* Michael Stürmer
* Miguel A. Figueroa-Villanueva
* Mike Jackson
diff --git a/Help/manual/cmake-modules.7.rst b/Help/manual/cmake-modules.7.rst
index cd5d1a5..2f08a04 100644
--- a/Help/manual/cmake-modules.7.rst
+++ b/Help/manual/cmake-modules.7.rst
@@ -176,6 +176,7 @@ They are normally called through the :command:`find_package` command.
/module/FindMPEG2
/module/FindMPEG
/module/FindMPI
+ /module/FindOctave
/module/FindODBC
/module/FindOpenACC
/module/FindOpenAL
diff --git a/Help/module/FindOctave.rst b/Help/module/FindOctave.rst
new file mode 100644
index 0000000..2dbcec4
--- /dev/null
+++ b/Help/module/FindOctave.rst
@@ -0,0 +1 @@
+.. cmake-module:: ../../Modules/FindOctave.cmake
diff --git a/Help/release/dev/FindOctave.rst b/Help/release/dev/FindOctave.rst
new file mode 100644
index 0000000..fe3b242
--- /dev/null
+++ b/Help/release/dev/FindOctave.rst
@@ -0,0 +1,4 @@
+FindOctave
+----------
+
+* A :module:`FindOctave` module was added to find GNU octave.
diff --git a/Modules/FindOctave.cmake b/Modules/FindOctave.cmake
new file mode 100644
index 0000000..8ae6a47
--- /dev/null
+++ b/Modules/FindOctave.cmake
@@ -0,0 +1,167 @@
+# 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
+)
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 8b5f2e9..408c941 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1441,6 +1441,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
add_subdirectory(FindODBC)
endif()
+ if(CMake_TEST_FindOctave)
+ add_subdirectory(FindOctave)
+ endif()
+
if(CMake_TEST_FindOpenCL)
add_subdirectory(FindOpenCL)
endif()
diff --git a/Tests/FindOctave/CMakeLists.txt b/Tests/FindOctave/CMakeLists.txt
new file mode 100644
index 0000000..1acc966
--- /dev/null
+++ b/Tests/FindOctave/CMakeLists.txt
@@ -0,0 +1,10 @@
+add_test(NAME FindOctave.Test COMMAND
+ ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
+ --build-and-test
+ "${CMake_SOURCE_DIR}/Tests/FindOctave/Test"
+ "${CMake_BINARY_DIR}/Tests/FindOctave/Test"
+ ${build_generator_args}
+ --build-project TestFindOctave
+ --build-options ${build_options}
+ --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
+ )
diff --git a/Tests/FindOctave/Test/CMakeLists.txt b/Tests/FindOctave/Test/CMakeLists.txt
new file mode 100644
index 0000000..ce33fcd
--- /dev/null
+++ b/Tests/FindOctave/Test/CMakeLists.txt
@@ -0,0 +1,20 @@
+cmake_minimum_required(VERSION 3.3)
+project(TestFindOctave CXX)
+enable_testing()
+
+find_package(Octave REQUIRED COMPONENTS Development Interpreter)
+
+add_definitions(-DCMAKE_EXPECTED_Octave_VERSION=${Octave_VERSION})
+
+add_executable(test_tgt main.cpp)
+target_link_libraries(test_tgt Octave::Octave)
+add_test(NAME test_tgt COMMAND test_tgt)
+
+add_test(NAME test_tgt_exe
+ COMMAND Octave::Interpreter -q --eval "runtests('.')"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+
+add_executable(test_var main.cpp)
+target_include_directories(test_var PRIVATE ${Octave_INCLUDE_DIRS})
+target_link_libraries(test_var PRIVATE ${Octave_LIBRARIES})
+add_test(NAME test_var COMMAND test_var)
diff --git a/Tests/FindOctave/Test/main.cpp b/Tests/FindOctave/Test/main.cpp
new file mode 100644
index 0000000..68270b1
--- /dev/null
+++ b/Tests/FindOctave/Test/main.cpp
@@ -0,0 +1,18 @@
+#include <iostream>
+#include <oct.h>
+
+// http://www.dm.unibo.it/~achilles/calc/octave.html/Standalone-Programs.html
+int main(void)
+{
+ int n = 2;
+ Matrix a_matrix = Matrix(n, n);
+ for (octave_idx_type i = 0; i < n; i++) {
+ for (octave_idx_type j = 0; j < n; j++) {
+ a_matrix(i, j) = (i + 1) * 10 + (j + 1);
+ }
+ }
+
+ std::cout << a_matrix << std::endl;
+
+ return EXIT_SUCCESS;
+}
diff --git a/Tests/FindOctave/Test/testtrue.m b/Tests/FindOctave/Test/testtrue.m
new file mode 100644
index 0000000..0c28a9e
--- /dev/null
+++ b/Tests/FindOctave/Test/testtrue.m
@@ -0,0 +1 @@
+%!assert(true)