split out HelpBrowser.getOldWrapUrl from HelpBrowser-goTo
[supercollider.git] / CMakeLists.txt
blobc121404897a3e2f5aeb5df7e8ebb6c2bf660b67d
1 cmake_minimum_required (VERSION 2.8)
2 project (SuperCollider)
4 include(CTest)
5 enable_testing()
7 include (cmake_modules/FinalFile.cmake)
9 if (NOT CMAKE_BUILD_TYPE)
10         message(STATUS "Build type defaulting to \"Release\"")
11         set(CMAKE_BUILD_TYPE "Release")
12 endif()
14 if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
15         message(WARNING "WARNING: IN-PLACE BUILDS ARE NOT RECOMMENDED - PLEASE USE A BUILD DIRECTORY")
16 endif()
19 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules
20                       ${CMAKE_MODULE_PATH})
22 CONFIGURE_FILE(
23   "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/cmake_uninstall.cmake.in"
24   "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
25   IMMEDIATE @ONLY)
27 ADD_CUSTOM_TARGET(uninstall
28   "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
30 if(NOT WIN32)
31         ADD_CUSTOM_TARGET(setMainVersion ALL
32                 sh ${CMAKE_CURRENT_SOURCE_DIR}/setMainVersion.sh
33                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
34                 VERBATIM
35                 )
36 endif()
38 if(APPLE)
39         STRING(REGEX REPLACE "^.*MacOSX10.([0-9]+).*$" "\\1" MAC_OSX_SDK_VERSION  "${CMAKE_OSX_SYSROOT}")
41         if(CMAKE_OSX_DEPLOYMENT_TARGET)
42                 if (CMAKE_OSX_DEPLOYMENT_TARGET GREATER 10.4)
43                         set(HID_UTIL_DIR "HID_Utilities")
44                 else()
45                         set(HID_UTIL_DIR "HID_Utilities_10_4")
46                 endif()
47         else()
48                 if (${MAC_OSX_SDK_VERSION} GREATER 4)
49                         set(HID_UTIL_DIR "HID_Utilities")
50                 else()
51                         set(HID_UTIL_DIR "HID_Utilities_10_4")
52                 endif()
53         endif()
54         MESSAGE( STATUS "Using HID Utilities from folder '${HID_UTIL_DIR}'")
55 endif()
57 if (CMAKE_SYSTEM_NAME MATCHES "Linux")
58         set(LINUX 1)
59 endif()
61 #############################################
62 # Compiler flags etc
64 if (${CMAKE_COMPILER_IS_GNUCXX})
65         exec_program(${CMAKE_CXX_COMPILER} ARGS -dumpversion OUTPUT_VARIABLE _gcc_version)
67         add_definitions("-fschedule-insns2" "-fomit-frame-pointer")
69         add_definitions("-Wreturn-type")
71 #       disabled for now: -ffast-math breaks avx intrinsics and -fsigned-zeros/-fno-associative-math are not available in some versions
72 #       if (${_gcc_version} VERSION_GREATER 4.0.99)
73 #               add_definitions("-ffast-math -fsigned-zeros -fno-associative-math")
74 #       endif()
76         option(DSO_VISIBILITY "DSO visibility support for gcc" OFF)
78         if (DSO_VISIBILITY)
79                 add_definitions(-fvisibility=hidden)
80         endif()
82         if(APPLE)
83                 exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
85                 if ("${_gcc_version_info}" MATCHES "darwin10-llvm-g..-4.2")
86                         message(FATAL_ERROR "llvm-gcc-4.2 was reported to be broken. please use another compiler.")
87                 endif()
88                 if ("${_gcc_version_info}" MATCHES "Apple")
89                         add_definitions("-fpascal-strings")
90                 endif()
91                 add_definitions("-D_REENTRANT")
92         elseif(NOT (WIN32 AND NOT CYGWIN))
93                 add_definitions("-pthread")
94         endif()
95 endif ()
97 if (${CMAKE_CXX_COMPILER} MATCHES icpc)
98         set(CMAKE_COMPILER_IS_INTEL 1)
99         add_definitions(-Wno-unknown-pragmas)
100         add_definitions(-simd)
101 endif()
103 if (${CMAKE_CXX_COMPILER} MATCHES clang)
104         set(CMAKE_COMPILER_IS_CLANG 1)
105 endif()
107 if(APPLE)
108         set_property(DIRECTORY
109                 APPEND
110                 PROPERTY COMPILE_DEFINITIONS SC_DARWIN)
111 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
112         add_definitions("-DSC_LINUX")
113         add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
114 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
115         add_definitions("-DSC_FREEBSD")
116         add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
117 endif()
119 if(WIN32)
120     set_property(DIRECTORY
121                  APPEND
122                  PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WINSOCKAPI_)
124     if(MSVC)
125         SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd")
126         SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
127     endif()
128 endif()
131 #############################################
132 # some default libraries
134 find_package(Pthreads)
136 if (NOT PTHREADS_FOUND)
137     message(SEND_ERROR "cannot find libpthreads")
138 endif()
139 include_directories(${PTHREADS_INCLUDE_DIR})
141 if (MSVC OR MINGW)
142     set(MATH_LIBRARY "")
143 else()
144     find_library(MATH_LIBRARY m)
145 endif()
147 if(CURL)
148         find_package(CURL)
149         if(CURL_FOUND)
150                 add_definitions("-DHAVE_LIBCURL")
151                 include_directories(${CURL_INCLUDE_DIRS})
152         endif()
153 endif()
155 #############################################
156 # Options
157 option(NOVA_SIMD "Build with nova-simd support." ON)
158 option(FINAL_BUILD "Build as single source file." OFF)
160 option(CURL "Build with curl for remote file download." ON)
162 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
164 option(SSE "Compile with support for SSE instructions.")
165 option(SSE41 "Compile with support for SSE4.1 instructions.")
166 option(SSE42 "Compile with support for SSE4.2 instructions.")
169 option(INSTALL_HELP "Install help docs and examples along with the software" ON)
170 option(INSTALL_OLD_HELP "Install old and deprecated help files" ON)
171 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
173 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
174     option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
175 elseif()
176     option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
177 endif()
179 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
180 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
181 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
183 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
185 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
187 if(NOT WIN32)
188         option(SCLANG_SERVER "Build with internal server." ON)
189 endif()
191 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
192         option(SC_WII "Build sclang with WII support" ON)
193 endif()
195 option(SC_QT "Build SuperCollider with Qt GUI" ON)
196 if (SC_QT)
197   message( STATUS "Compiling with Qt GUI" )
198 endif (SC_QT)
200 if(WIN32)
201         option(SC_PSYCOLLIDER "Build PsyCollider" ON)
202 else()
203         option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
204 endif()
206 if(CMAKE_COMPILER_IS_GNUCXX)
207     option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
208     option(LTO "Use GCC's link time optimizer' (experimental).")
209 endif()
211 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
212 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
214 #############################################
215 # some preprocessor flags
216 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
217         if (SSE)
218                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
219                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
220         endif()
221         if (SSE41)
222                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
223                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
224         endif()
225         if (SSE42)
226                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
227                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
228         endif()
229         if (NATIVE)
230                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
231                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
232         endif()
234         if (SC_OX)
235                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
236         endif()
237 endif()
239 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
240         if (SSE42)
241                 add_definitions(-xSSE4.2)
242         elseif (SSE41)
243                 add_definitions(-xSSE4.1)
244         elseif (SSE)
245                 add_definitions(-mia32)
246         endif()
247         if (SC_OX)
248                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
249         endif()
251         # disable warnings
252         add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
253         add_definitions(-diag-disable 279) # controlling expression is constant
255 endif()
257 if (SC_MEMORY_DEBUGGING)
258         add_definitions(-DDISABLE_MEMORY_POOLS)
259 endif()
261 #############################################
262 # subdirectories
263 add_subdirectory(external_libraries)
264 add_subdirectory(server)
265 add_subdirectory(lang)
266 add_subdirectory(bindings)
267 add_subdirectory(platform)
268 add_subdirectory(editors)
270 if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
271     install(DIRECTORY include/common include/plugin_interface include/server include/lang
272         DESTINATION ${CMAKE_INSTALL_PREFIX}/include/SuperCollider
273         FILES_MATCHING PATTERN "*.h"
274     )
275 endif()
277 if(APPLE)
278         # determines the app name and app install location (scappbundlename, scappdir):
279         include (cmake_modules/MacAppFolder.cmake)
281         set(auxresourcesdir ${scappauxresourcesdir})
283         # Some aux files which go in the app's folder
284         install(FILES README.txt ChangeLog
285                 DESTINATION ${auxresourcesdir}
286         )
287         install(FILES COPYING AUTHORS
288                 DESTINATION ${scappdir}
289         )
290 elseif (WIN32)
291         set(auxresourcesdir "SuperCollider")
292 else()
293         set(auxresourcesdir "share/SuperCollider")
294 endif()
296 if(NOT SC_QT)
297         set(SCCLASSLIB_EXCLUDE_REGEX "QtCollider")
298 else()
299         set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
300 endif()
302 if(APPLE)
303         #if directory contains symlinks, unlink them.
304         if(EXISTS "${auxresourcesdir}/SCClassLibrary")
305                 file(GLOB classlibraryfolders "${auxresourcesdir}/SCClassLibrary/[^.]*")
306                 foreach(onedirectory ${classlibraryfolders})
307                         if(IS_SYMLINK "${onedirectory}")
308                                 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${onedirectory} )" )
309                         endif()
310                 endforeach(onedirectory)
311         endif()
313         if(SC_SYMLINK_CLASSLIB)
315                 #if there are folders inside SCCLassLibrary abort cmake.
316                 file(GLOB classlibraryfolders "${auxresourcesdir}/SCClassLibrary/[^.]*")
317                 foreach(onedirectory ${classlibraryfolders})
318                         if(NOT IS_SYMLINK "${onedirectory}")
319                                 message(FATAL_ERROR "Symlinking will fail ! SCClassLibrary folder already exists and has directories inside, please delete it first." )
320                         endif()
321                 endforeach(onedirectory)
323                 message(STATUS "Will create symlink of SCClassLibrary to ${auxresourcesdir}/SCClassLibrary" )
324                 if(NOT EXISTS "${auxresourcesdir}/SCClassLibrary")
325                         install( CODE "EXECUTE_PROCESS(COMMAND mkdir ${auxresourcesdir}/SCClassLibrary)" )
326                 endif()
327                 #symlink the folders inside SCCLassLibrary. Check if QtCollider folder should be symlinked or not.
328                 file(GLOB classlibraryfolders RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary" "SCClassLibrary/[^.]*")
329                 foreach(onedirectory ${classlibraryfolders})
330                         if(NOT "${onedirectory}" MATCHES "${SCCLASSLIB_EXCLUDE_REGEX}")
331                                 install( CODE
332                                         "EXECUTE_PROCESS(COMMAND ln -s ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
333                         endif()
334                 endforeach(onedirectory)
335         else()
336                 message(STATUS "Will copy SCCLassLibrary to ${auxresourcesdir}")
337                 install(DIRECTORY SCClassLibrary
338                         DESTINATION ${auxresourcesdir}
339                         REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
340                 )
341         endif()
342 else()
343         install(DIRECTORY SCClassLibrary
344                 DESTINATION ${auxresourcesdir}
345                 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
346                 PATTERN "*~" EXCLUDE
347                 PATTERN "*#" EXCLUDE
348         )
349 endif()
352 install(DIRECTORY sounds
353         DESTINATION ${auxresourcesdir}
356 if(INSTALL_OLD_HELP)
357         install(DIRECTORY Help
358                 DESTINATION ${auxresourcesdir}
359         )
360 endif()
362 if(INSTALL_HELP)
363         install(DIRECTORY examples HelpSource
364                 DESTINATION ${auxresourcesdir}
365                 PATTERN "*~" EXCLUDE
366                 PATTERN "*#" EXCLUDE
367         )
368 endif()
370 #############################################
372 # build scdoc help files
374 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
375 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
376 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
377 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
378 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
379 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
381 # this folder has an extension to Platform that disables the loadStartupFiles method
382 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
384 foreach(arg ${BUILD_CLASSLIBRARIES})
385         set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
386 endforeach()
388 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
390 if(SC_DOC_RENDER)
391         file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
392         file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
394         add_custom_target(doc ALL
395                                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
396                                                         -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
397                                                         platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
398                                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
399                                         DEPENDS sclang ${SCDocSources} ${SCDocClasses})
401 endif()
403 set_directory_properties(
404         PROPERTIES
405         ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
407 #############################################
409 # testsuite
411 add_subdirectory(testsuite)
413 #############################################
414 # win32 install support
416 if(WIN32)
417         install(FILES ${FFTW3F_LIBRARY} ${SNDFILE_LIBRARY} ${PTHREADS_LIBRARY} ${PORTAUDIO_LIBRARIES}
418                 DESTINATION "SuperCollider"
419                 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
420 endif()
422 #############################################
423 # CPack support
425 set(CPACK_PACKAGE_VERSION_MAJOR 3)
426 set(CPACK_PACKAGE_VERSION_MINOR 5)
427 set(CPACK_PACKAGE_VERSION_PATCH dev)
428 include(CPack)
429 if(WIN32)
430         set(CPACK_MONOLITHIC_INSTALL 1)
431 endif()
433 #############################################
434 # hide advanced variables
435 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
436 mark_as_advanced(DL)
437 mark_as_advanced(EMACS_EXECUTABLE)
438 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
439 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
440 mark_as_advanced(MATH_LIBRARY)
441 mark_as_advanced(QT_QMAKE_EXECUTABLE)
442 mark_as_advanced(SNDFILE)