chiark / gitweb /
Merge pull request #20 from xantares/soversion
[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 ENDIF(BUILD_SHARED_LIBS)\r
152 \r
153 INSTALL ( FILES ${NLOPT_HEADERS} DESTINATION include )\r
154 \r
155 ADD_LIBRARY (nlopt ${NLOPT_SOURCES} )\r
156 \r
157 # parse configure.ac for lib version\r
158 STRING( REGEX MATCH "SHARED_VERSION_INFO=\"[0-9]+:[0-9]+:[0-9]+\"" _VERSION_INFO_LINE "${CONFIG_AUTOMAKE}") \r
159 IF (_VERSION_INFO_LINE)\r
160   STRING( REGEX REPLACE "SHARED_VERSION_INFO=\"([0-9]+):[0-9]+:[0-9]+\"" "\\1" _VERSION_INFO_CURRENT "${_VERSION_INFO_LINE}") \r
161   STRING( REGEX REPLACE "SHARED_VERSION_INFO=\"[0-9]+:([0-9]+):[0-9]+\"" "\\1" _VERSION_INFO_REVISION "${_VERSION_INFO_LINE}") \r
162   STRING( REGEX REPLACE "SHARED_VERSION_INFO=\"[0-9]+:[0-9]+:([0-9]+)\"" "\\1" _VERSION_INFO_AGE "${_VERSION_INFO_LINE}") \r
163   MATH(EXPR _INFO_SOVERSION "${_VERSION_INFO_CURRENT} - ${_VERSION_INFO_AGE} ")\r
164   SET(_INFO_VERSION "${_INFO_SOVERSION}.${_VERSION_INFO_AGE}.${_VERSION_INFO_REVISION}")\r
165   SET_TARGET_PROPERTIES(nlopt PROPERTIES SOVERSION ${_INFO_SOVERSION})\r
166   SET_TARGET_PROPERTIES(nlopt PROPERTIES VERSION ${_INFO_VERSION} )\r
167   IF (WIN32)\r
168     SET_TARGET_PROPERTIES(nlopt PROPERTIES SUFFIX -${_INFO_SOVERSION}.dll)\r
169   ENDIF ()\r
170 ENDIF ()\r
171 \r
172 INSTALL ( TARGETS nlopt\r
173           RUNTIME DESTINATION bin\r
174           LIBRARY DESTINATION lib${LIB_SUFFIX}\r
175           ARCHIVE DESTINATION lib${LIB_SUFFIX}\r
176         )\r
177 \r
178 \r
179     \r