chiark / gitweb /
Do not install guile 2.2 until supported in swig
[nlopt.git] / CMakeLists.txt
index e6b63c7b8058d274dbe0afefdb51277125eaf6ae..97a152fa857b0bd134aa66816e76bfee356ca3de 100644 (file)
 cmake_minimum_required (VERSION 2.8.5)\r
 \r
 if (NOT DEFINED CMAKE_BUILD_TYPE)\r
-  set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type")\r
+  set (CMAKE_BUILD_TYPE Release CACHE STRING "Build type")\r
 endif ()\r
 \r
-project (nlopt C)\r
+project (nlopt)\r
 \r
 list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)\r
 \r
 option (WITH_CXX "enable cxx routines" OFF)\r
-option (BUILD_SHARED_LIBS "Build NLOPT as a shared library" ON)\r
+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" ON)\r
@@ -35,10 +35,6 @@ if (WITH_CXX)
   set (NLOPT_SUFFIX _cxx)\r
 endif ()\r
 \r
-if (WITH_CXX OR BUILD_PYTHON)\r
-  enable_language (CXX)\r
-endif ()\r
-\r
 include (GNUInstallDirs)\r
 \r
 # Offer the user the choice of overriding the installation directories\r
@@ -70,6 +66,9 @@ include (CheckIncludeFiles)
 include (CheckFunctionExists)\r
 include (CheckTypeSize)\r
 include (CheckCCompilerFlag)\r
+include (CheckCXXSymbolExists)\r
+include (CheckCXXCompilerFlag)\r
+include (CheckLibraryExists)\r
 \r
 #==============================================================================\r
 # COMPILATION CHECKINGS and CONFIGURATION GENERATION\r
@@ -103,15 +102,20 @@ set (HAVE_UINT32_T ${SIZEOF_UINT32_T})
 check_type_size ("unsigned int" SIZEOF_UNSIGNED_INT)\r
 check_type_size ("unsigned long" SIZEOF_UNSIGNED_LONG)\r
 \r
+check_library_exists ("m" sqrt "" HAVE_LIBM)\r
+if (HAVE_LIBM)\r
+  set (M_LIBRARY m)\r
+endif()\r
+\r
 if (NOT DEFINED HAVE_FPCLASSIFY)\r
   message(STATUS "Looking for fpclassify")\r
-  file (WRITE ${CMAKE_BINARY_DIR}/fpclassify.c "#include <math.h>\n")\r
-  file (APPEND ${CMAKE_BINARY_DIR}/fpclassify.c "int main(void) {\n")\r
-  file (APPEND ${CMAKE_BINARY_DIR}/fpclassify.c "if (!fpclassify(3.14159)) fpclassify(2.7183);\n")\r
-  file (APPEND ${CMAKE_BINARY_DIR}/fpclassify.c "  return 0; }\n")\r
+  file (WRITE ${PROJECT_BINARY_DIR}/fpclassify.c "#include <math.h>\n")\r
+  file (APPEND ${PROJECT_BINARY_DIR}/fpclassify.c "int main(void) {\n")\r
+  file (APPEND ${PROJECT_BINARY_DIR}/fpclassify.c "if (!fpclassify(3.14159)) fpclassify(2.7183);\n")\r
+  file (APPEND ${PROJECT_BINARY_DIR}/fpclassify.c "  return 0; }\n")\r
   try_compile (HAVE_FPCLASSIFY\r
-  ${CMAKE_BINARY_DIR}/build_fpclassify\r
-  ${CMAKE_BINARY_DIR}/fpclassify.c\r
+  ${PROJECT_BINARY_DIR}/build_fpclassify\r
+  ${PROJECT_BINARY_DIR}/fpclassify.c\r
   CMAKE_FLAGS -DLINK_LIBRARIES=m)\r
   message(STATUS "Looking for fpclassify - ${HAVE_FPCLASSIFY}")\r
 endif ()\r
@@ -132,6 +136,16 @@ if (WITH_THREADLOCAL AND NOT DEFINED HAVE_THREAD_LOCAL_STORAGE)
   endforeach()\r
 endif ()\r
 \r
+if (WITH_CXX OR BUILD_PYTHON OR BUILD_GUILE OR BUILD_OCTAVE)\r
+  check_cxx_symbol_exists (_LIBCPP_VERSION string SYSTEM_HAS_LIBCPP)\r
+  if (SYSTEM_HAS_LIBCPP)\r
+    check_cxx_compiler_flag ("-std=c++11" SUPPORTS_STDCXX11)\r
+    if (SUPPORTS_STDCXX11)\r
+      set (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")\r
+    endif ()\r
+  endif ()\r
+endif ()\r
+\r
 #==============================================================================\r
 # version\r
 #==============================================================================\r
@@ -158,8 +172,8 @@ endif ()
 #==============================================================================\r
 set (${INCLUDE_DIRECTORIES} "")\r
 include_directories (\r
-  ${CMAKE_BINARY_DIR}/api\r
-  ${CMAKE_BINARY_DIR}\r
+  ${PROJECT_BINARY_DIR}/api\r
+  ${PROJECT_BINARY_DIR}\r
   stogo\r
   util\r
   direct\r
@@ -185,7 +199,7 @@ include_directories (
 #==============================================================================\r
 \r
 set (NLOPT_HEADERS \r
-  api/nlopt.h ${CMAKE_BINARY_DIR}/api/nlopt.hpp ${CMAKE_BINARY_DIR}/api/nlopt.f\r
+  api/nlopt.h ${PROJECT_BINARY_DIR}/api/nlopt.hpp ${PROJECT_BINARY_DIR}/api/nlopt.f\r
 )\r
 \r
 set (NLOPT_SOURCES   \r
@@ -222,6 +236,8 @@ install (FILES ${NLOPT_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR})
 \r
 set (nlopt_lib nlopt${NLOPT_SUFFIX})\r
 add_library (${nlopt_lib} ${NLOPT_SOURCES})\r
+target_link_libraries (${nlopt_lib} ${M_LIBRARY})\r
+\r
 set_target_properties (${nlopt_lib} PROPERTIES SOVERSION 0)\r
 set_target_properties (${nlopt_lib} PROPERTIES VERSION 0.9.0)\r
 \r
@@ -249,7 +265,7 @@ if (BUILD_PYTHON)
   find_package (NumPy)\r
 endif ()\r
 \r
-if (PYTHONINTERP_FOUND)\r
+if (NOT DEFINED INSTALL_PYTHON_DIR AND PYTHONINTERP_FOUND)\r
   execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}'))"\r
                     OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH\r
                     OUTPUT_STRIP_TRAILING_WHITESPACE )\r
@@ -257,7 +273,7 @@ if (PYTHONINTERP_FOUND)
   get_filename_component (_ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE)\r
   file (RELATIVE_PATH _REL_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH})\r
 \r
-  set (PYTHON_MODULE_PATH ${_REL_PYTHON_MODULE_PATH})\r
+  set (INSTALL_PYTHON_DIR ${_REL_PYTHON_MODULE_PATH})\r
 \r
 endif ()\r
 \r