chiark / gitweb /
Merge pull request #16 from xantares/install-target
[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} )
156
157 INSTALL ( TARGETS nlopt
158           RUNTIME DESTINATION bin
159           LIBRARY DESTINATION lib${LIB_SUFFIX}
160           ARCHIVE DESTINATION lib${LIB_SUFFIX}
161         )
162
163 \r
164