chiark / gitweb /
Parse configure.ac for lib version
[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]+\"" NLOPT_VERSION_INFO_LINE "${CONFIG_AUTOMAKE}") \r
159 SET (NLOPT_INFO_SOVERSION 0)\r
160 IF (NLOPT_VERSION_INFO_LINE)\r
161   STRING( REGEX REPLACE "SHARED_VERSION_INFO=\"([0-9]+):([0-9]+):[0-9]+\"" "${NLOPT_INFO_SOVERSION}.\\1.\\2" NLOPT_INFO_VERSION "${NLOPT_VERSION_INFO_LINE}") \r
162 ENDIF ()\r
163 SET_TARGET_PROPERTIES(nlopt PROPERTIES SOVERSION ${NLOPT_INFO_SOVERSION})\r
164 IF (WIN32)\r
165   SET_TARGET_PROPERTIES(nlopt PROPERTIES SUFFIX -${NLOPT_INFO_SOVERSION}.dll)\r
166 ENDIF ()\r
167 IF (NLOPT_INFO_VERSION)\r
168   SET_TARGET_PROPERTIES(nlopt PROPERTIES VERSION ${NLOPT_INFO_VERSION} )\r
169 ENDIF ()\r
170 \r
171 INSTALL ( TARGETS nlopt\r
172           RUNTIME DESTINATION bin\r
173           LIBRARY DESTINATION lib${LIB_SUFFIX}\r
174           ARCHIVE DESTINATION lib${LIB_SUFFIX}\r
175         )\r
176 \r
177 \r
178     \r