chiark / gitweb /
Merge pull request #46 from jschueller/travis
[nlopt.git] / CMakeLists.txt
1 PROJECT(NLOPT)\r
2 \r
3 #==============================================================================\r
4 # NLOPT CMake file\r
5\r
6 # NLopt is a free/open-source library for nonlinear optimization, providing \r
7 # a common interface for a number of different free optimization routines \r
8 # available online as well as original implementations of various other \r
9 # algorithms\r
10 # WEBSITE: http://ab-initio.mit.edu/wiki/index.php/NLopt \r
11 # AUTHOR: Steven G. Johnson\r
12 #\r
13 # This CMakeLists.txt file was created to compile NLOPT with the CMAKE utility.\r
14 # Benoit Scherrer, 2010 CRL, Harvard Medical School\r
15 # Copyright (c) 2008-2009 Children's Hospital Boston \r
16 #==============================================================================\r
17 \r
18 \r
19 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)\r
20 INCLUDE(CheckIncludeFiles)\r
21 INCLUDE(CheckFunctionExists)\r
22 INCLUDE(CheckTypeSize)\r
23 \r
24 \r
25 #==============================================================================\r
26 # COMPILATION CHECKINGS and CONFIGURATION GENERATION\r
27 #==============================================================================\r
28 CHECK_INCLUDE_FILES( unistd.h HAVE_UNISTD_H)\r
29 CHECK_INCLUDE_FILES( string.h HAVE_STRING_H)\r
30 CHECK_INCLUDE_FILES( strings.h HAVE_STRINGS_H)\r
31 CHECK_INCLUDE_FILES( sys/stat.h HAVE_SYS_STAT_H)\r
32 CHECK_INCLUDE_FILES( inttypes.h HAVE_INTTYPES_H)\r
33 CHECK_INCLUDE_FILES( memory.h HAVE_MEMORY_H)\r
34 CHECK_INCLUDE_FILES( stdlib.h HAVE_STDLIB_H)\r
35 CHECK_INCLUDE_FILES( stdint.h HAVE_STDINT_H)\r
36 \r
37 CHECK_INCLUDE_FILES( sys/types.h HAVE_SYS_TYPES_H)\r
38 CHECK_INCLUDE_FILES( sys/types.h HAVE_SYS_TYPES_H)\r
39 CHECK_INCLUDE_FILES( sys/types.h HAVE_SYS_TYPES_H)\r
40 \r
41 CHECK_FUNCTION_EXISTS( isinf HAVE_ISINF)\r
42 CHECK_FUNCTION_EXISTS( isinf HAVE_ISNAN)\r
43 CHECK_FUNCTION_EXISTS( gettimeofday HAVE_GETTIMEOFDAY)\r
44 CHECK_FUNCTION_EXISTS( qsort_r HAVE_QSORT_R)\r
45 CHECK_FUNCTION_EXISTS( time HAVE_TIME)\r
46 CHECK_FUNCTION_EXISTS( copysign HAVE_COPYSIGN)\r
47 \r
48 CHECK_TYPE_SIZE(uint32_t    UINT32_T)\r
49 IF(NOT HAVE_UINT32_T)\r
50   IF(MSVC)\r
51     SET(uint32_t "unsigned int")\r
52     SET(SIZEOF_UNSIGNED_INT 4)\r
53   ENDIF(MSVC)\r
54 ENDIF(NOT HAVE_UINT32_T)\r
55 \r
56 #==============================================================================\r
57 # LOOK FOR THE VERSION NUMBER IN configure.ac\r
58 #==============================================================================\r
59 \r
60 FILE( READ configure.ac CONFIG_AUTOMAKE )\r
61 \r
62 STRING( REGEX MATCH "AC_INIT\\(nlopt, ([0-9]+\\.[0-9]+\\.?[0-9]*)" NLOPT_AUTOMAKE_LINE_VERSION "${CONFIG_AUTOMAKE}") \r
63 \r
64 #---------------------------------\r
65 # If version matches 'X.X.X'\r
66 #---------------------------------\r
67 IF(${NLOPT_AUTOMAKE_LINE_VERSION} MATCHES ".*[0-9]+\\.[0-9]+\\.[0-9]+")\r
68     STRING( REGEX REPLACE ".*([0-9]+)\\.[0-9]+\\.[0-9]*.*" "\\1" NLOPT_MAJOR_VERSION "${NLOPT_AUTOMAKE_LINE_VERSION}") \r
69     STRING( REGEX REPLACE ".*[0-9]+\\.([0-9]+)\\.[0-9]*.*" "\\1" NLOPT_MINOR_VERSION "${NLOPT_AUTOMAKE_LINE_VERSION}") \r
70     STRING( REGEX REPLACE ".*[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" NLOPT_BUGFIX_VERSION "${NLOPT_AUTOMAKE_LINE_VERSION}") \r
71 #---------------------------------\r
72 # Else (consider that version matches 'X.X')\r
73 #---------------------------------\r
74 ELSE(${NLOPT_AUTOMAKE_LINE_VERSION} MATCHES ".*[0-9]+\\.[0-9]+\\.[0-9]+")\r
75     STRING( REGEX REPLACE ".*([0-9]+)\\.[0-9]+.*" "\\1" NLOPT_MAJOR_VERSION "${NLOPT_AUTOMAKE_LINE_VERSION}") \r
76     STRING( REGEX REPLACE ".*[0-9]+\\.([0-9]+).*" "\\1" NLOPT_MINOR_VERSION "${NLOPT_AUTOMAKE_LINE_VERSION}") \r
77     SET (NLOPT_BUGFIX_VERSION "0")\r
78 ENDIF(${NLOPT_AUTOMAKE_LINE_VERSION} MATCHES ".*[0-9]+\\.[0-9]+\\.[0-9]+")\r
79 \r
80 MESSAGE(STATUS "NLOPT: Version number ${NLOPT_MAJOR_VERSION}.${NLOPT_MINOR_VERSION}.${NLOPT_BUGFIX_VERSION} found in configure.ac" )\r
81 \r
82 \r
83 #==============================================================================\r
84 # CREATE config.h\r
85 #==============================================================================\r
86 \r
87 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.cmake.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h IMMEDIATE )\r
88 \r
89 \r
90 #==============================================================================\r
91 # INCLUDE DIRECTORIES\r
92 #==============================================================================\r
93 SET(${INCLUDE_DIRECTORIES} "")\r
94 INCLUDE_DIRECTORIES (\r
95         ${CMAKE_CURRENT_SOURCE_DIR}\r
96         ${CMAKE_CURRENT_BINARY_DIR}\r
97         stogo \r
98         util \r
99         direct \r
100         cdirect \r
101         praxis \r
102         luksan \r
103         crs \r
104         mlsl \r
105         mma \r
106         cobyla \r
107         newuoa \r
108         neldermead \r
109         auglag \r
110         bobyqa \r
111         isres \r
112         slsqp\r
113         esch\r
114         api   )\r
115 \r
116 \r
117 #==============================================================================\r
118 # nlopt LIBRARY TARGET (SHARED OR STATIC)\r
119 #==============================================================================\r
120 \r
121 SET ( NLOPT_HEADERS \r
122   api/nlopt.h api/nlopt.hpp api/nlopt.f\r
123 )\r
124 \r
125 SET ( NLOPT_SOURCES   \r
126         direct/DIRect.c direct/direct_wrap.c direct/DIRserial.c direct/DIRsubrout.c direct/direct-internal.h direct/direct.h\r
127         cdirect/cdirect.c cdirect/hybrid.c cdirect/cdirect.h\r
128         praxis/praxis.c praxis/praxis.h\r
129         luksan/plis.c luksan/plip.c luksan/pnet.c luksan/mssubs.c luksan/pssubs.c luksan/luksan.h\r
130         crs/crs.c crs/crs.h\r
131         mlsl/mlsl.c mlsl/mlsl.h\r
132         mma/mma.c mma/mma.h mma/ccsa_quadratic.c\r
133         cobyla/cobyla.c cobyla/cobyla.h\r
134         newuoa/newuoa.c newuoa/newuoa.h \r
135         neldermead/nldrmd.c neldermead/neldermead.h neldermead/sbplx.c   \r
136         auglag/auglag.c auglag/auglag.h\r
137         bobyqa/bobyqa.c bobyqa/bobyqa.h\r
138         isres/isres.c isres/isres.h \r
139         slsqp/slsqp.c slsqp/slsqp.h \r
140         esch/esch.c esch/esch.h\r
141         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\r
142         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 \r
143         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 \r
144         )\r
145 \r
146 OPTION(BUILD_SHARED_LIBS "Build NLOPT as a shared library" OFF )\r
147 \r
148 if (BUILD_SHARED_LIBS)\r
149   ADD_DEFINITIONS(-DNLOPT_DLL)\r
150   ADD_DEFINITIONS(-DNLOPT_DLL_EXPORT )\r
151   \r
152   if (NOT CMAKE_INSTALL_PREFIX MATCHES "^/usr")\r
153     set (CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})\r
154     set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)\r
155   endif ()\r
156 endif ()\r
157 \r
158 INSTALL ( FILES ${NLOPT_HEADERS} DESTINATION include )\r
159 \r
160 ADD_LIBRARY (nlopt ${NLOPT_SOURCES} )\r
161 \r
162 # parse configure.ac for lib version\r
163 STRING( REGEX MATCH "SHARED_VERSION_INFO=\"[0-9]+:[0-9]+:[0-9]+\"" _VERSION_INFO_LINE "${CONFIG_AUTOMAKE}") \r
164 IF (_VERSION_INFO_LINE)\r
165   STRING( REGEX REPLACE "SHARED_VERSION_INFO=\"([0-9]+):[0-9]+:[0-9]+\"" "\\1" _VERSION_INFO_CURRENT "${_VERSION_INFO_LINE}") \r
166   STRING( REGEX REPLACE "SHARED_VERSION_INFO=\"[0-9]+:([0-9]+):[0-9]+\"" "\\1" _VERSION_INFO_REVISION "${_VERSION_INFO_LINE}") \r
167   STRING( REGEX REPLACE "SHARED_VERSION_INFO=\"[0-9]+:[0-9]+:([0-9]+)\"" "\\1" _VERSION_INFO_AGE "${_VERSION_INFO_LINE}") \r
168   MATH(EXPR _INFO_SOVERSION "${_VERSION_INFO_CURRENT} - ${_VERSION_INFO_AGE} ")\r
169   SET(_INFO_VERSION "${_INFO_SOVERSION}.${_VERSION_INFO_AGE}.${_VERSION_INFO_REVISION}")\r
170   SET_TARGET_PROPERTIES(nlopt PROPERTIES SOVERSION ${_INFO_SOVERSION})\r
171   SET_TARGET_PROPERTIES(nlopt PROPERTIES VERSION ${_INFO_VERSION} )\r
172 ENDIF ()\r
173 \r
174 INSTALL ( TARGETS nlopt\r
175           RUNTIME DESTINATION bin\r
176           LIBRARY DESTINATION lib${LIB_SUFFIX}\r
177           ARCHIVE DESTINATION lib${LIB_SUFFIX}\r
178         )\r
179 \r
180 add_subdirectory (swig)\r