1 cmake_minimum_required(VERSION 2.6)
2 include(CheckFunctionExists)
3 include(CheckIncludeFile)
4 include(CheckIncludeFiles)
5 include(CheckLibraryExists)
11 if(IS_DIRECTORY ${PROJECT_DIRECTORY}/.svn)
12 find_file(SVN ".svn" ${PROJECT_DIRECTORY})
13 exec_program("svnversion" OUTPUT_VARIABLE "SVN_VERSION")
14 message("SVN_VERSION ${SVN_VERSION}")
15 endif(IS_DIRECTORY ${PROJECT_DIRECTORY}/.svn)
17 if(IS_DIRECTORY ${PROJECT_DIRECTORY}/.git)
18 find_file(GIT ".git" ${PROJECT_DIRECTORY})
19 exec_program("git log --oneline -1 | sed 's| .*||'" OUTPUT_VARIABLE "GIT_VERSION")
20 message("GIT_VERSION ${GIT_VERSION}")
21 endif(IS_DIRECTORY ${PROJECT_DIRECTORY}/.git)
23 #--------------------------------------------------------------------------------------------------
24 ### Initialize of CONTEXT JAVA
30 find_path(JAR NAMES jar PATHS NO_DEFAULT_PATHS )
31 if(JAVA_RUNTIME AND JAVA_COMPILE AND JAR AND JAVA_INCLUDE_PATH)
33 else(JAVA_RUNTIME AND JAVA_COMPILE AND JAR AND JAVA_INCLUDE_PATH)
35 endif(JAVA_RUNTIME AND JAVA_COMPILE AND JAR AND JAVA_INCLUDE_PATH)
36 endif(${disable_java})
37 message("HAVE_JAVA ${HAVE_JAVA}")
39 #--------------------------------------------------------------------------------------------------
40 ### Initialize of CONTEXT GTNETS
43 else(${disable_gtnets})
44 set(GTNETS_LDFLAGS "-lgtnets -L${gtnets_path}/lib")
45 set(GTNETS_CPPFLAGS "-I${gtnets_path}/include -I${gtnets_path}/include/gtnets")
46 try_compile(COMPILE_GTNETS_VAR
48 ${PROJECT_DIRECTORY}/src/tmp/prog_gtnets.c
49 CMAKE_FLAGS ${GTNETS_CPPFLAGS}
50 COMPILE_DEFINITIONS ${GTNETS_LDFLAGS}
51 OUTPUT_VARIABLE GETLINE_OUTPUT
53 if(COMPILE_GTNETS_VAR MATCHES "FALSE")
55 else(COMPILE_GTNETS_VAR MATCHES "FALSE")
61 add_definitions(${GTNETS_LDFLAGS})
62 endif(COMPILE_GTNETS_VAR MATCHES "FALSE")
63 endif(${disable_gtnets})
64 message("HAVE_GTNETS ${HAVE_GTNETS}")
66 ###################################
67 ## SimGrid and GRAS specific checks
70 CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
71 CHECK_LIBRARY_EXISTS(pthread pthread_create NO_DEFAULT_PATHS HAVE_pthread_create)
73 if(HAVE_pthread_create)
75 CHECK_LIBRARY_EXISTS(pthread sem_init NO_DEFAULT_PATHS HAVE_SEM_INIT_LIB)
77 try_compile(HAVE_SEM_INIT_run
79 ${PROJECT_DIRECTORY}/src/tmp/prog_sem_init.c
83 message("HAVE_SEM_INIT ${HAVE_SEM_INIT}")
84 endif(HAVE_SEM_INIT_run)
85 endif(HAVE_SEM_INIT_LIB)
87 ### HAVE_SEM_TIMEDWAIT
88 CHECK_LIBRARY_EXISTS(pthread sem_timedwait NO_DEFAULT_PATHS HAVE_SEM_TIMEDWAIT_LIB)
89 if(HAVE_SEM_TIMEDWAIT_LIB)
90 try_compile(HAVE_SEM_TIMEDWAIT_run
92 ${PROJECT_DIRECTORY}/src/tmp/prog_sem_timedwait.c
94 if(HAVE_SEM_TIMEDWAIT_run)
95 set(HAVE_SEM_TIMEDWAIT 1)
96 message("HAVE_SEM_TIMEDWAIT ${HAVE_SEM_TIMEDWAIT}")
97 endif(HAVE_SEM_TIMEDWAIT_run)
98 endif(HAVE_SEM_TIMEDWAIT_LIB)
100 ### HAVE_MUTEX_TIMEDLOCK
101 CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock NO_DEFAULT_PATHS HAVE_MUTEX_TIMEDLOCK_LIB)
102 if(HAVE_MUTEX_TIMEDLOCK_LIB)
103 try_compile(HAVE_MUTEX_TIMEDLOCK_run
105 ${PROJECT_DIRECTORY}/src/tmp/prog_mutex_timedlock.c
107 if(HAVE_MUTEX_TIMEDLOCK_run)
108 set(HAVE_MUTEX_TIMEDLOCK 1)
109 message("HAVE_MUTEX_TIMEDLOCK ${HAVE_MUTEX_TIMEDLOCK}")
110 endif(HAVE_MUTEX_TIMEDLOCK_run)
111 endif(HAVE_MUTEX_TIMEDLOCK_LIB)
113 endif(HAVE_pthread_create)
115 #--------------------------------------------------------------------------------------------------
116 ### Initialize of CONTEXT THREADS
117 if(${disable_context_threads})
118 SET(CONTEXT_THREADS 0)
119 else(${disable_context_threads})
120 SET(CONTEXT_THREADS 1)
121 endif(${disable_context_threads})
122 message("CONTEXT_THREADS ${CONTEXT_THREADS}")
124 CHECK_FUNCTION_EXISTS(makecontext HAVE_FCT_makecontext)
125 message("HAVE_FCT_makecontext ${HAVE_FCT_makecontext}")
127 if(HAVE_FCT_makecontext)
129 set(makecontext_CPPFLAGS "-DTEST_makecontext")
130 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
132 ${PROJECT_DIRECTORY}/src/tmp/prog_stacksetup.c
133 COMPILE_DEFINITIONS ${makecontext_CPPFLAGS}
135 find_program(CAT_EXE NAMES cat)
136 exec_program("${CAT_EXE}" ARGS "${PROJECT_SOURCE_DIRECTORY}/conftestval" OUTPUT_VARIABLE "ac_cv_stacksetup_makecontext")
138 if(COMPILE_makecontext_VAR)
139 set(makecontext_type "ok")
140 elseif(COMPILE_makecontext_VAR)
141 set(makecontext_type "guessed")
142 endif(COMPILE_makecontext_VAR)
144 find_program(SED_EXE NAMES sed)
145 exec_program("${SED_EXE}" ARGS "-e 's;,.*$;;' ${PROJECT_SOURCE_DIRECTORY}/conftestval" OUTPUT_VARIABLE "makecontext_addr")
146 exec_program("${SED_EXE}" ARGS "-e 's;^.*,;;' ${PROJECT_SOURCE_DIRECTORY}/conftestval" OUTPUT_VARIABLE "makecontext_size")
148 set(pth_skaddr_makecontext "#define pth_skaddr_makecontext(skaddr,sksize) (${makecontext_addr})")
149 set(pth_sksize_makecontext "#define pth_sksize_makecontext(skaddr,sksize) (${makecontext_size})")
151 endif(HAVE_FCT_makecontext)
153 configure_file(${PROJECT_DIRECTORY}/src/context_sysv_config.h.in ${PROJECT_DIRECTORY}/src/context_sysv_config.h)
155 #--------------------------------------------------------------------------------------------------
161 #SG_CONFIGURE_PART([System checks...])
162 #AC_PROG_CC(xlC gcc cc) -auto
163 #AM_SANITY_CHECK -auto
166 find_program(SET_MAKE NAMES make)
169 try_run(RUN_PRINTF_NULL_VAR COMPILE_PRINTF_NULL_VAR
171 ${PROJECT_DIRECTORY}/src/tmp/prog_printf_null.c
174 if(RUN_PRINTF_NULL_VAR MATCHES "FAILED_TO_RUN")
175 SET(PRINTF_NULL_WORKING "0")
176 else(RUN_PRINTF_NULL_VAR MATCHES "FAILED_TO_RUN")
177 SET(PRINTF_NULL_WORKING "1")
178 endif(RUN_PRINTF_NULL_VAR MATCHES "FAILED_TO_RUN")
179 message("PRINTF_NULL_WORKING ${PRINTF_NULL_WORKING}")
183 # Checks for header files.
185 CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
186 CHECK_INCLUDE_FILES("time.h;sys/time.h" TIME_WITH_SYS_TIME)
188 message("STDC_HEADERS ${STDC_HEADERS}")
189 message("TIME_WITH_SYS_TIME ${TIME_WITH_SYS_TIME}")
191 CHECK_INCLUDE_FILE(sys/socket.h HAVE_SOCKET_H)
192 CHECK_INCLUDE_FILE(sys/stat.h HAVE_STAT_H)
193 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H)
194 CHECK_INCLUDE_FILE(winsock.h HAVE_WINSOCK_H)
195 CHECK_INCLUDE_FILE(winsock2.h HAVE_WINSOCK2_H)
196 CHECK_INCLUDE_FILE(sys/time.h HAVE_TIME_H)
197 CHECK_INCLUDE_FILE(errno.h HAVE_ERRNO_H)
198 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
199 CHECK_INCLUDE_FILE(execinfo.h HAVE_EXECINFO_H)
200 CHECK_INCLUDE_FILE(signal.h HAVE_SIGNAL_H)
202 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_gettimeofday)
203 CHECK_FUNCTION_EXISTS(usleep HAVE_usleep)
204 CHECK_FUNCTION_EXISTS(getdtablesize HAVE_getdtablesize)
205 CHECK_FUNCTION_EXISTS(sysconf HAVE_sysconf)
206 CHECK_FUNCTION_EXISTS(readv HAVE_readv)
207 CHECK_FUNCTION_EXISTS(popen HAVE_popen)
208 CHECK_FUNCTION_EXISTS(signal HAVE_signal)
210 #--------------------------------------------------------------------------------------------------
211 ### Try execut getline command
212 try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
214 ${PROJECT_DIRECTORY}/src/tmp/prog_getline.c
215 OUTPUT_VARIABLE GETLINE_OUTPUT
218 if(RUN_RESULT_VAR MATCHES "FAILED_TO_RUN")
220 else(RUN_RESULT_VAR MATCHES "FAILED_TO_RUN")
221 SET(need_getline "#define SIMGRID_NEED_GETLINE 1")
222 endif(RUN_RESULT_VAR MATCHES "FAILED_TO_RUN")
224 ### check for a working snprintf
225 CHECK_FUNCTION_EXISTS(snprintf SNPRINTF_FUNC)
226 CHECK_FUNCTION_EXISTS(vsnprintf VSNPRINTF_FUNC)
227 if(SNPRINTF_FUNC AND VSNPRINTF_FUNC)
229 try_run(RUN_SNPRINTF_FUNC_VAR COMPILE_SNPRINTF_FUNC_VAR
231 ${PROJECT_DIRECTORY}/src/tmp/prog_snprintf.c
233 if(CMAKE_CROSSCOMPILING)
234 message("SNPRINTF_FUNC CROSSCOMPILING")
235 set(RUN_SNPRINTF_FUNC "cross")
236 endif(CMAKE_CROSSCOMPILING)
238 try_run(RUN_VSNPRINTF_FUNC_VAR COMPILE_VSNPRINTF_FUNC_VAR
240 ${PROJECT_DIRECTORY}/src/tmp/prog_vsnprintf.c
242 if(CMAKE_CROSSCOMPILING)
243 message("VSNPRINTF_FUNC CROSSCOMPILING")
244 set(RUN_VSNPRINTF_FUNC "cross")
245 endif(CMAKE_CROSSCOMPILING)
247 if(RUN_VSNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN" AND RUN_SNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN")
248 else(RUN_VSNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN" AND RUN_SNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN")
249 set(PREFER_PORTABLE_SNPRINTF 1)
250 message("PREFER_PORTABLE_SNPRINTF ${PREFER_PORTABLE_SNPRINTF}")
251 endif(RUN_VSNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN" AND RUN_SNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN")
252 endif(SNPRINTF_FUNC AND VSNPRINTF_FUNC)
254 ### check for asprintf function familly
255 CHECK_FUNCTION_EXISTS(asprintf ASPRINTF_FUNC)
257 SET(need_asprintf "")
259 SET(need_asprintf "#define SIMGRID_NEED_ASPRINTF 1")
261 CHECK_FUNCTION_EXISTS(vasprintf VASPRINTF_FUNC)
263 SET(need_vasprintf "")
265 SET(need_vasprintf "#define SIMGRID_NEED_VASPRINTF 1")
266 endif(VASPRINTF_FUNC)
268 configure_file(${PROJECT_DIRECTORY}/include/simgrid_config.h.in ${PROJECT_DIRECTORY}/include/simgrid_config.h)