chiark / gitweb /
CMake: Set CPACK variables in cache
[nlopt.git] / CMakeLists.txt
index 8aa596edb5c3a17cc7b929518b36509f7c54cbfb..0e40a8b1e244656172bbaeb9d969cfe28ee5fc1c 100644 (file)
@@ -12,7 +12,7 @@
 # Benoit Scherrer, 2010 CRL, Harvard Medical School
 # Copyright (c) 2008-2009 Children's Hospital Boston
 #==============================================================================
-cmake_minimum_required (VERSION 3.0)
+cmake_minimum_required (VERSION 2.8.11)
 
 if (NOT DEFINED CMAKE_BUILD_TYPE)
   set (CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
@@ -20,19 +20,40 @@ endif ()
 
 project (nlopt)
 
+#==============================================================================
+# version
+set (NLOPT_MAJOR_VERSION "2")
+set (NLOPT_MINOR_VERSION "5")
+set (NLOPT_BUGFIX_VERSION "0")
+set (NLOPT_VERSION_STRING ${NLOPT_MAJOR_VERSION}.${NLOPT_MINOR_VERSION}.${NLOPT_BUGFIX_VERSION})
+message (STATUS "NLopt version ${NLOPT_VERSION_STRING}")
+
+# This is the ABI version number, which differes from the API version above
+# (it indicates ABI compatibility), but they are typically incremented together.
+set(SO_MAJOR 0)
+set(SO_MINOR 9)
+set(SO_PATCH 0)
+#==============================================================================
+
 list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
 
-option (WITH_CXX "enable cxx routines" OFF)
+option (NLOPT_CXX "enable cxx routines" ON)
+option (NLOPT_FORTRAN "enable fortran tests" OFF)
 option (BUILD_SHARED_LIBS "Build NLopt as a shared library" ON)
-option (BUILD_PYTHON "build python bindings" ON)
-option (BUILD_OCTAVE "build octave bindings" ON)
-option (BUILD_MATLAB "build matlab bindings" ON)
-option (BUILD_GUILE "build guile bindings" ON)
-option (USE_SWIG "use SWIG to build bindings" ON)
-
-set (NLOPT_SUFFIX)
-if (WITH_CXX)
-  set (NLOPT_SUFFIX _cxx)
+option (NLOPT_PYTHON "build python bindings" ON)
+option (NLOPT_OCTAVE "build octave bindings" ON)
+option (NLOPT_MATLAB "build matlab bindings" ON)
+option (NLOPT_GUILE "build guile bindings" ON)
+option (NLOPT_SWIG "use SWIG to build bindings" ON)
+
+if (CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
+  option (NLOPT_TESTS "build unit tests" ON)
+else ()
+  option (NLOPT_TESTS "build unit tests" OFF)
+endif ()
+
+if (NLOPT_FORTRAN)
+  enable_language (Fortran)
 endif ()
 
 include (GNUInstallDirs)
@@ -121,7 +142,7 @@ if (NOT DEFINED HAVE_FPCLASSIFY)
 endif ()
 
 option (WITH_THREADLOCAL "check thread local keyword" ON)
-if (WITH_THREADLOCAL AND NOT DEFINED HAVE_THREAD_LOCAL_STORAGE)
+if (WITH_THREADLOCAL AND NOT DEFINED THREADLOCAL)
   foreach (_THREADLOCAL_KEY "__thread" "__declspec(thread)")
     unset (HAVE_THREAD_LOCAL_STORAGE CACHE)
     check_c_source_compiles("
@@ -130,31 +151,28 @@ if (WITH_THREADLOCAL AND NOT DEFINED HAVE_THREAD_LOCAL_STORAGE)
     int main(void) {
         return 0;
     }" HAVE_THREAD_LOCAL_STORAGE)
-    if (${HAVE_THREAD_LOCAL_STORAGE})
-      set (THREADLOCAL ${_THREADLOCAL_KEY})
+    if (HAVE_THREAD_LOCAL_STORAGE)
+      set (THREADLOCAL ${_THREADLOCAL_KEY} CACHE STRING "Thread local keyword")
     endif ()
   endforeach()
 endif ()
 
-if (WITH_CXX OR BUILD_PYTHON OR BUILD_GUILE OR BUILD_OCTAVE)
-  check_cxx_symbol_exists (_LIBCPP_VERSION string SYSTEM_HAS_LIBCPP)
-  if (SYSTEM_HAS_LIBCPP)
+
+if (NLOPT_CXX OR NLOPT_PYTHON OR NLOPT_GUILE OR NLOPT_OCTAVE)
+  check_cxx_symbol_exists (__cplusplus ciso646 SYSTEM_HAS_CXX)
+  if (SYSTEM_HAS_CXX)
     check_cxx_compiler_flag ("-std=c++11" SUPPORTS_STDCXX11)
     if (SUPPORTS_STDCXX11)
       set (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
+      if (NLOPT_CXX)
+        set (NLOPT_CXX11 ON)
+      endif ()
     endif ()
+  else()
+    message (FATAL_ERROR "The compiler doesn't support CXX.")
   endif ()
 endif ()
 
-#==============================================================================
-# version
-#==============================================================================
-set (NLOPT_MAJOR_VERSION "2")
-set (NLOPT_MINOR_VERSION "5")
-set (NLOPT_BUGFIX_VERSION "0")
-set (NLOPT_VERSION_STRING ${NLOPT_MAJOR_VERSION}.${NLOPT_MINOR_VERSION}.${NLOPT_BUGFIX_VERSION})
-message (STATUS "NLopt version ${NLOPT_VERSION_STRING}")
-
 #==============================================================================
 # CREATE nlopt_config.h
 #==============================================================================
@@ -171,76 +189,82 @@ endif ()
 # nlopt LIBRARY TARGET (SHARED OR STATIC)
 #==============================================================================
 
-configure_file (api/nlopt.h ${PROJECT_BINARY_DIR}/api/nlopt.h COPYONLY)
+configure_file (src/api/nlopt.h ${PROJECT_BINARY_DIR}/src/api/nlopt.h COPYONLY)
 
 set (NLOPT_HEADERS
-  ${PROJECT_BINARY_DIR}/api/nlopt.h ${PROJECT_BINARY_DIR}/api/nlopt.hpp ${PROJECT_BINARY_DIR}/api/nlopt.f
+  ${PROJECT_BINARY_DIR}/src/api/nlopt.h ${PROJECT_BINARY_DIR}/src/api/nlopt.hpp ${PROJECT_BINARY_DIR}/src/api/nlopt.f
 )
 
 set (NLOPT_SOURCES
-  direct/DIRect.c direct/direct_wrap.c direct/DIRserial.c direct/DIRsubrout.c direct/direct-internal.h direct/direct.h
-  cdirect/cdirect.c cdirect/hybrid.c cdirect/cdirect.h
-  praxis/praxis.c praxis/praxis.h
-  luksan/plis.c luksan/plip.c luksan/pnet.c luksan/mssubs.c luksan/pssubs.c luksan/luksan.h
-  crs/crs.c crs/crs.h
-  mlsl/mlsl.c mlsl/mlsl.h
-  mma/mma.c mma/mma.h mma/ccsa_quadratic.c
-  cobyla/cobyla.c cobyla/cobyla.h
-  newuoa/newuoa.c newuoa/newuoa.h
-  neldermead/nldrmd.c neldermead/neldermead.h neldermead/sbplx.c
-  auglag/auglag.c auglag/auglag.h
-  bobyqa/bobyqa.c bobyqa/bobyqa.h
-  isres/isres.c isres/isres.h
-  slsqp/slsqp.c slsqp/slsqp.h
-  esch/esch.c esch/esch.h
-  api/general.c api/options.c api/optimize.c api/deprecated.c api/nlopt-internal.h api/nlopt.h api/f77api.c api/f77funcs.h api/f77funcs_.h api/nlopt.hpp api/nlopt-in.hpp
-  util/mt19937ar.c util/sobolseq.c util/soboldata.h util/timer.c util/stop.c util/nlopt-util.h util/redblack.c util/redblack.h util/qsort_r.c util/rescale.c
+  src/algs/direct/DIRect.c src/algs/direct/direct_wrap.c src/algs/direct/DIRserial.c src/algs/direct/DIRsubrout.c src/algs/direct/direct-internal.h src/algs/direct/direct.h
+  src/algs/cdirect/cdirect.c src/algs/cdirect/hybrid.c src/algs/cdirect/cdirect.h
+  src/algs/praxis/praxis.c src/algs/praxis/praxis.h
+  src/algs/luksan/plis.c src/algs/luksan/plip.c src/algs/luksan/pnet.c src/algs/luksan/mssubs.c src/algs/luksan/pssubs.c src/algs/luksan/luksan.h
+  src/algs/crs/crs.c src/algs/crs/crs.h
+  src/algs/mlsl/mlsl.c src/algs/mlsl/mlsl.h
+  src/algs/mma/mma.c src/algs/mma/mma.h src/algs/mma/ccsa_quadratic.c
+  src/algs/cobyla/cobyla.c src/algs/cobyla/cobyla.h
+  src/algs/newuoa/newuoa.c src/algs/newuoa/newuoa.h
+  src/algs/neldermead/nldrmd.c src/algs/neldermead/neldermead.h src/algs/neldermead/sbplx.c
+  src/algs/auglag/auglag.c src/algs/auglag/auglag.h
+  src/algs/bobyqa/bobyqa.c src/algs/bobyqa/bobyqa.h
+  src/algs/isres/isres.c src/algs/isres/isres.h
+  src/algs/slsqp/slsqp.c src/algs/slsqp/slsqp.h
+  src/algs/esch/esch.c src/algs/esch/esch.h
+  src/api/general.c src/api/options.c src/api/optimize.c src/api/deprecated.c src/api/nlopt-internal.h src/api/nlopt.h src/api/f77api.c src/api/f77funcs.h src/api/f77funcs_.h src/api/nlopt.hpp src/api/nlopt-in.hpp
+  src/util/mt19937ar.c src/util/sobolseq.c src/util/soboldata.h src/util/timer.c src/util/stop.c src/util/nlopt-util.h src/util/redblack.c src/util/redblack.h src/util/qsort_r.c src/util/rescale.c
 )
 
-if (WITH_CXX)
-  list (APPEND NLOPT_SOURCES stogo/global.cc stogo/linalg.cc stogo/local.cc stogo/stogo.cc stogo/tools.cc stogo/global.h stogo/linalg.h stogo/local.h stogo/stogo_config.h stogo/stogo.h stogo/tools.h)
+if (NLOPT_CXX)
+  list (APPEND NLOPT_SOURCES src/algs/stogo/global.cc src/algs/stogo/linalg.cc src/algs/stogo/local.cc src/algs/stogo/stogo.cc src/algs/stogo/tools.cc
+        src/algs/stogo/global.h src/algs/stogo/linalg.h src/algs/stogo/local.h src/algs/stogo/stogo_config.h src/algs/stogo/stogo.h src/algs/stogo/tools.h)
+endif ()
+if (NLOPT_CXX11)
+  list (APPEND NLOPT_SOURCES src/algs/ags/data_types.hpp src/algs/ags/evolvent.hpp src/algs/ags/evolvent.cc src/algs/ags/solver.hpp src/algs/ags/solver.cc
+  src/algs/ags/local_optimizer.hpp src/algs/ags/local_optimizer.cc src/algs/ags/ags.h src/algs/ags/ags.cc)
 endif ()
 
-install (FILES ${NLOPT_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR})
+install (FILES ${NLOPT_HEADERS} DESTINATION ${RELATIVE_INSTALL_INCLUDE_DIR})
 
-set (nlopt_lib nlopt${NLOPT_SUFFIX})
+set (nlopt_lib nlopt)
 add_library (${nlopt_lib} ${NLOPT_SOURCES})
 target_link_libraries (${nlopt_lib} ${M_LIBRARY})
 
-set_target_properties (${nlopt_lib} PROPERTIES SOVERSION 0)
-set_target_properties (${nlopt_lib} PROPERTIES VERSION 0.9.0)
+set_target_properties (${nlopt_lib} PROPERTIES SOVERSION ${SO_MAJOR})
+set_target_properties (${nlopt_lib} PROPERTIES VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_PATCH}")
 
 #==============================================================================
 # INCLUDE DIRECTORIES
 #==============================================================================
 target_include_directories (${nlopt_lib} PRIVATE
-  ${PROJECT_BINARY_DIR}/api
+  ${PROJECT_BINARY_DIR}/src/api
   ${PROJECT_BINARY_DIR}
-  stogo
-  util
-  direct
-  cdirect
-  praxis
-  luksan
-  crs
-  mlsl
-  mma
-  cobyla
-  newuoa
-  neldermead
-  auglag
-  bobyqa
-  isres
-  slsqp
-  esch
-  api)
+  src/algs/stogo
+  src/algs/ags
+  src/util
+  src/algs/direct
+  src/algs/cdirect
+  src/algs/praxis
+  src/algs/luksan
+  src/algs/crs
+  src/algs/mlsl
+  src/algs/mma
+  src/algs/cobyla
+  src/algs/newuoa
+  src/algs/neldermead
+  src/algs/auglag
+  src/algs/bobyqa
+  src/algs/isres
+  src/algs/slsqp
+  src/algs/esch
+  src/api)
 
 get_target_property (NLOPT_PRIVATE_INCLUDE_DIRS ${nlopt_lib} INCLUDE_DIRECTORIES)
-target_include_directories (${nlopt_lib} INTERFACE "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/api>" "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
+target_include_directories (${nlopt_lib} INTERFACE "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src/api>" "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
 
 if (BUILD_SHARED_LIBS)
-  target_compile_definitions (${nlopt_lib} PUBLIC -DNLOPT_DLL)
-  target_compile_definitions (${nlopt_lib} PRIVATE -DNLOPT_DLL_EXPORT)
+  target_compile_definitions (${nlopt_lib} PUBLIC NLOPT_DLL)
+  target_compile_definitions (${nlopt_lib} PRIVATE NLOPT_DLL_EXPORT)
 endif ()
 
 # pass -fPIC in case swig module is built with static library
@@ -263,9 +287,9 @@ if (MSVC AND BUILD_SHARED_LIBS AND NOT CMAKE_VERSION VERSION_LESS 3.1)
   install (FILES $<TARGET_PDB_FILE:${nlopt_lib}> DESTINATION ${RELATIVE_INSTALL_BIN_DIR} CONFIGURATIONS Debug RelWithDebInfo COMPONENT Debug)
 endif ()
 
-add_subdirectory (api)
+add_subdirectory (src/api)
 
-if (BUILD_PYTHON)
+if (NLOPT_PYTHON)
   find_package (PythonInterp)
   find_package (PythonLibs)
   find_package (NumPy)
@@ -283,40 +307,43 @@ if (NOT DEFINED INSTALL_PYTHON_DIR AND PYTHONINTERP_FOUND)
 
 endif ()
 
-if (BUILD_GUILE)
+if (NLOPT_GUILE)
   find_package (Guile)
 endif ()
 
-if (USE_SWIG)
+if (NLOPT_SWIG)
   find_package (SWIG)
+  if (SWIG_FOUND)
+    add_subdirectory (src/swig)
+  endif ()
 endif ()
 
-add_subdirectory (swig)
-
-if (BUILD_OCTAVE)
+if (NLOPT_OCTAVE)
   find_package (Octave)
 endif ()
 
-if (BUILD_MATLAB)
-  find_package (Matlab)
+if (NLOPT_MATLAB)
+  find_package (Matlab COMPONENTS MX_LIBRARY)
 endif ()
 
 if (OCTAVE_FOUND OR Matlab_FOUND)
-  add_subdirectory (octave)
+  add_subdirectory (src/octave)
 endif ()
 
-enable_testing ()
-add_subdirectory (test)
+if (NLOPT_TESTS)
+  enable_testing ()
+  add_subdirectory (test)
+endif ()
 
 set (CPACK_PACKAGE_NAME          "${CMAKE_PROJECT_NAME}")
 set (CPACK_PACKAGE_VERSION_MAJOR "${NLOPT_MAJOR_VERSION}")
 set (CPACK_PACKAGE_VERSION_MINOR "${NLOPT_MINOR_VERSION}")
 set (CPACK_PACKAGE_VERSION_PATCH "${NLOPT_BUGFIX_VERSION}")
 set (CPACK_SOURCE_GENERATOR      "TBZ2;TGZ"    )
-set (CPACK_BINARY_STGZ           "OFF"        )
-set (CPACK_BINARY_TBZ2           "ON"         )
-set (CPACK_BINARY_TGZ            "ON"         )
-set (CPACK_BINARY_TZ             "OFF"        )
+set (CPACK_BINARY_STGZ           OFF CACHE BOOL "STGZ")
+set (CPACK_BINARY_TBZ2           ON  CACHE BOOL "TBZ2")
+set (CPACK_BINARY_TGZ            ON  CACHE BOOL "TGZ")
+set (CPACK_BINARY_TZ             OFF CACHE BOOL "TZ")
 set (CPACK_SOURCE_IGNORE_FILES ".git;/build;.*~;${CPACK_SOURCE_IGNORE_FILES}")
 
 set (CPACK_SOURCE_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${NLOPT_VERSION_STRING})
@@ -350,4 +377,3 @@ install (FILES
           ${CMAKE_CURRENT_BINARY_DIR}/NLoptConfigVersion.cmake
          DESTINATION ${RELATIVE_INSTALL_CMAKE_DIR}
          COMPONENT Development)
-