chiark / gitweb /
Add matlab bindings
authorJulien Schueller <schueller@phimeca.com>
Thu, 14 Jul 2016 09:02:44 +0000 (11:02 +0200)
committerJulien Schueller <schueller@phimeca.com>
Thu, 14 Jul 2016 09:02:44 +0000 (11:02 +0200)
CMakeLists.txt
octave/CMakeLists.txt
test/t_octave.m

index 1cf877f9684476d04fa2c73823d5ea6fd642aa5b..3fa727cc02c0057fe0c39103aa7498458303bf10 100644 (file)
@@ -26,6 +26,7 @@ option (WITH_CXX "enable cxx routines" OFF)
 option (BUILD_SHARED_LIBS "Build NLOPT as a shared library" ON)\r
 option (BUILD_PYTHON "build python bindings" ON)\r
 option (BUILD_OCTAVE "build octave bindings" ON)\r
+option (BUILD_MATLAB "build matlab bindings" OFF)\r
 option (BUILD_GUILE "build guile bindings" ON)\r
 option (USE_SWIG "use SWIG to build bindings" ON)\r
 \r
@@ -272,7 +273,12 @@ if (BUILD_OCTAVE)
   find_package (Octave)\r
 endif ()\r
 \r
-if (OCTAVE_FOUND)\r
+if (BUILD_MATLAB)\r
+  cmake_minimum_required (VERSION 3.3) # for the matlab_add_mex macro\r
+  find_package (Matlab)\r
+endif ()\r
+\r
+if (OCTAVE_FOUND OR Matlab_FOUND)\r
   add_subdirectory (octave)\r
 endif ()\r
 \r
index 54534623c26f52578f828f70ec9732a100976a16..0c8e6f3d3d87efd023d986903147a255c21542ed 100644 (file)
@@ -1,25 +1,31 @@
 
-file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "#define NLOPT_OPTIMIZE_USAGE \\\n")
-file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt_optimize.m INPUT_LINES)
-foreach (INPUT_LINE ${INPUT_LINES})
-  string (REGEX REPLACE "^% " "" INPUT_LINE ${INPUT_LINE})
-  string (REGEX REPLACE "^%" "" INPUT_LINE ${INPUT_LINE})
-  foreach (repl_expr "tolerance" "help NLOPT_LN_SBPLX" "population")
-    string (REGEX REPLACE "\"${repl_expr}\"" "${repl_expr}" INPUT_LINE "${INPUT_LINE}")
+if (OCTAVE_FOUND)
+  file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "#define NLOPT_OPTIMIZE_USAGE \\\n")
+  file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt_optimize.m INPUT_LINES)
+  foreach (INPUT_LINE ${INPUT_LINES})
+    string (REGEX REPLACE "^% " "" INPUT_LINE ${INPUT_LINE})
+    string (REGEX REPLACE "^%" "" INPUT_LINE ${INPUT_LINE})
+    foreach (repl_expr "tolerance" "help NLOPT_LN_SBPLX" "population")
+      string (REGEX REPLACE "\"${repl_expr}\"" "${repl_expr}" INPUT_LINE "${INPUT_LINE}")
+    endforeach ()
+    file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "\"${INPUT_LINE}\\n\" \\\n")
   endforeach ()
-  file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "\"${INPUT_LINE}\\n\" \\\n")
-endforeach ()
-file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "\n")
+  file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "\n")
 
-include_directories (${OCTAVE_INCLUDE_DIRS})
-include_directories (${CMAKE_CURRENT_BINARY_DIR})
-octave_add_oct (nlopt_optimize SOURCES nlopt_optimize-oct.cc ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h LINK_LIBRARIES ${nlopt_lib})
+  include_directories (${OCTAVE_INCLUDE_DIRS})
+  include_directories (${CMAKE_CURRENT_BINARY_DIR})
+  octave_add_oct (nlopt_optimize SOURCES nlopt_optimize-oct.cc ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h LINK_LIBRARIES ${nlopt_lib})
 
-file (RELATIVE_PATH PKG_OCTAVE_OCT_SITE_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_OCT_SITE_DIR})
-install (TARGETS nlopt_optimize DESTINATION ${PKG_OCTAVE_OCT_SITE_DIR})
+  file (RELATIVE_PATH PKG_OCTAVE_OCT_SITE_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_OCT_SITE_DIR})
+  install (TARGETS nlopt_optimize DESTINATION ${PKG_OCTAVE_OCT_SITE_DIR})
 
-set (MFILES NLOPT_GN_DIRECT.m NLOPT_GN_DIRECT_L.m NLOPT_GN_DIRECT_L_RAND.m NLOPT_GN_DIRECT_NOSCAL.m NLOPT_GN_DIRECT_L_NOSCAL.m NLOPT_GN_DIRECT_L_RAND_NOSCAL.m NLOPT_GN_ORIG_DIRECT.m NLOPT_GN_ORIG_DIRECT_L.m NLOPT_GD_STOGO.m NLOPT_GD_STOGO_RAND.m NLOPT_LD_LBFGS_NOCEDAL.m NLOPT_LD_LBFGS.m NLOPT_LN_PRAXIS.m NLOPT_LD_VAR1.m NLOPT_LD_VAR2.m NLOPT_LD_TNEWTON.m NLOPT_LD_TNEWTON_RESTART.m NLOPT_LD_TNEWTON_PRECOND.m NLOPT_LD_TNEWTON_PRECOND_RESTART.m NLOPT_GN_CRS2_LM.m NLOPT_GN_MLSL.m NLOPT_GD_MLSL.m NLOPT_GN_MLSL_LDS.m NLOPT_GD_MLSL_LDS.m NLOPT_LD_MMA.m NLOPT_LN_COBYLA.m NLOPT_LN_NEWUOA.m NLOPT_LN_NEWUOA_BOUND.m NLOPT_LN_NELDERMEAD.m NLOPT_LN_SBPLX.m NLOPT_LN_AUGLAG.m NLOPT_LD_AUGLAG.m NLOPT_LN_AUGLAG_EQ.m NLOPT_LD_AUGLAG_EQ.m NLOPT_LN_BOBYQA.m NLOPT_GN_ISRES.m NLOPT_AUGLAG.m NLOPT_AUGLAG_EQ.m NLOPT_G_MLSL.m NLOPT_G_MLSL_LDS.m NLOPT_LD_SLSQP.m NLOPT_LD_CCSAQ.m NLOPT_GN_ESCH.m)
-set (M_DATA ${MFILES} nlopt_minimize.m nlopt_minimize_constrained.m nlopt_optimize.m)
+  set (MFILES NLOPT_GN_DIRECT.m NLOPT_GN_DIRECT_L.m NLOPT_GN_DIRECT_L_RAND.m NLOPT_GN_DIRECT_NOSCAL.m NLOPT_GN_DIRECT_L_NOSCAL.m NLOPT_GN_DIRECT_L_RAND_NOSCAL.m NLOPT_GN_ORIG_DIRECT.m NLOPT_GN_ORIG_DIRECT_L.m NLOPT_GD_STOGO.m NLOPT_GD_STOGO_RAND.m NLOPT_LD_LBFGS_NOCEDAL.m NLOPT_LD_LBFGS.m NLOPT_LN_PRAXIS.m NLOPT_LD_VAR1.m NLOPT_LD_VAR2.m NLOPT_LD_TNEWTON.m NLOPT_LD_TNEWTON_RESTART.m NLOPT_LD_TNEWTON_PRECOND.m NLOPT_LD_TNEWTON_PRECOND_RESTART.m NLOPT_GN_CRS2_LM.m NLOPT_GN_MLSL.m NLOPT_GD_MLSL.m NLOPT_GN_MLSL_LDS.m NLOPT_GD_MLSL_LDS.m NLOPT_LD_MMA.m NLOPT_LN_COBYLA.m NLOPT_LN_NEWUOA.m NLOPT_LN_NEWUOA_BOUND.m NLOPT_LN_NELDERMEAD.m NLOPT_LN_SBPLX.m NLOPT_LN_AUGLAG.m NLOPT_LD_AUGLAG.m NLOPT_LN_AUGLAG_EQ.m NLOPT_LD_AUGLAG_EQ.m NLOPT_LN_BOBYQA.m NLOPT_GN_ISRES.m NLOPT_AUGLAG.m NLOPT_AUGLAG_EQ.m NLOPT_G_MLSL.m NLOPT_G_MLSL_LDS.m NLOPT_LD_SLSQP.m NLOPT_LD_CCSAQ.m NLOPT_GN_ESCH.m)
+  set (M_DATA ${MFILES} nlopt_minimize.m nlopt_minimize_constrained.m nlopt_optimize.m)
 
-file (RELATIVE_PATH PKG_OCTAVE_M_SITE_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_M_SITE_DIR})
-install (FILES ${M_DATA} DESTINATION ${PKG_OCTAVE_M_SITE_DIR})
+  file (RELATIVE_PATH PKG_OCTAVE_M_SITE_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_M_SITE_DIR})
+  install (FILES ${M_DATA} DESTINATION ${PKG_OCTAVE_M_SITE_DIR})
+endif ()
+
+if (Matlab_FOUND)
+  matlab_add_mex (NAME nlopt_optimize-mex SRC nlopt_optimize-mex.c OUTPUT_NAME nlopt_optimize LINK_TO ${nlopt_lib})
+endif ()
index 8beac50266911ccd689bc935f0b620c6311d0850..f9d863b819b7386fa96352a7a639eb60876c9b02 100644 (file)
@@ -2,7 +2,7 @@
 arg_list = argv ();
 for i = 1:nargin
     loadpath = arg_list{i};
-    printf ("-- adding path: %s\n", loadpath);
+    printf ('-- adding path: %s\n', loadpath);
     addpath (loadpath);
 endfor