chiark / gitweb /
Use BUILD_SHARED_LIBS var
[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_SOURCES   \r
122         direct/DIRect.c direct/direct_wrap.c direct/DIRserial.c direct/DIRsubrout.c direct/direct-internal.h direct/direct.h\r
123         cdirect/cdirect.c cdirect/hybrid.c cdirect/cdirect.h\r
124         praxis/praxis.c praxis/praxis.h\r
125         luksan/plis.c luksan/plip.c luksan/pnet.c luksan/mssubs.c luksan/pssubs.c luksan/luksan.h\r
126         crs/crs.c crs/crs.h\r
127         mlsl/mlsl.c mlsl/mlsl.h\r
128         mma/mma.c mma/mma.h mma/ccsa_quadratic.c\r
129         cobyla/cobyla.c cobyla/cobyla.h\r
130         newuoa/newuoa.c newuoa/newuoa.h \r
131         neldermead/nldrmd.c neldermead/neldermead.h neldermead/sbplx.c   \r
132         auglag/auglag.c auglag/auglag.h\r
133         bobyqa/bobyqa.c bobyqa/bobyqa.h\r
134         isres/isres.c isres/isres.h \r
135         slsqp/slsqp.c slsqp/slsqp.h \r
136         esch/esch.c esch/esch.h\r
137         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
138         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
139         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
140         )\r
141 \r
142 OPTION(BUILD_SHARED_LIBS "Build NLOPT as a shared library" OFF )\r
143 \r
144 IF(BUILD_SHARED_LIBS)\r
145   ADD_DEFINITIONS(-DNLOPT_DLL)\r
146   ADD_DEFINITIONS(-DNLOPT_DLL_EXPORT )\r
147 ENDIF(BUILD_SHARED_LIBS)\r
148 \r
149 ADD_LIBRARY (nlopt ${NLOPT_SOURCES} )\r
150