Ver Fonte

Merge topic 'gnu-octave'

170bcb6fdc FindOctave: Add module to find GNU octave

Acked-by: Kitware Robot <[email protected]>
Merge-request: !2630
Brad King há 6 anos atrás
pai
commit
ce1ac9b92d

+ 2 - 0
Copyright.txt

@@ -63,6 +63,7 @@ The following individuals and institutions are among the Contributors:
 * Ilya Lavrenov <[email protected]>
 * Insight Software Consortium <insightsoftwareconsortium.org>
 * Jan Woetzel
+* Julien Schueller
 * Kelly Thompson <[email protected]>
 * Laurent Montel <[email protected]>
 * Konstantin Podsvirov <[email protected]>
@@ -72,6 +73,7 @@ The following individuals and institutions are among the Contributors:
 * Matthaeus G. Chajdas
 * Matthias Kretz <[email protected]>
 * Matthias Maennich <[email protected]>
+* Michael Hirsch, Ph.D. <www.scivision.co>
 * Michael Stürmer
 * Miguel A. Figueroa-Villanueva
 * Mike Jackson

+ 1 - 0
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

+ 1 - 0
Help/module/FindOctave.rst

@@ -0,0 +1 @@
+.. cmake-module:: ../../Modules/FindOctave.cmake

+ 4 - 0
Help/release/dev/FindOctave.rst

@@ -0,0 +1,4 @@
+FindOctave
+----------
+
+* A :module:`FindOctave` module was added to find GNU octave.

+ 167 - 0
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
+)

+ 4 - 0
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()

+ 10 - 0
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>
+  )

+ 20 - 0
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)

+ 18 - 0
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;
+}

+ 1 - 0
Tests/FindOctave/Test/testtrue.m

@@ -0,0 +1 @@
+%!assert(true)