Forgot a help fix: Drag a dock's title bar, not divider, to reposition
[supercollider.git] / CMakeLists.txt
blobbcaea5b02fa02fc8a1f6d88212243a3ab5c69b52
1 cmake_minimum_required (VERSION 2.8)
2 project (SuperCollider)
4 include("SCVersion.txt")
5 set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}${PROJECT_VERSION_PATCH}")
6 message(STATUS "SuperCollider Version: ${PROJECT_VERSION}")
8 include(CTest)
9 enable_testing()
11 include (cmake_modules/FinalFile.cmake)
13 if (NOT CMAKE_BUILD_TYPE)
14         message(STATUS "Build type defaulting to \"RelWithDebInfo\"")
15         set(CMAKE_BUILD_TYPE "RelWithDebInfo")
16 endif()
18 if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
19         message(WARNING "WARNING: IN-PLACE BUILDS ARE NOT RECOMMENDED - PLEASE USE A BUILD DIRECTORY")
20 endif()
23 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules
24                       ${CMAKE_MODULE_PATH})
26 CONFIGURE_FILE(
27   "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/cmake_uninstall.cmake.in"
28   "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
29   IMMEDIATE @ONLY)
31 ADD_CUSTOM_TARGET(uninstall
32   "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
34 if(APPLE)
35         STRING(REGEX REPLACE "^.*MacOSX10.([0-9]+).*$" "\\1" MAC_OSX_SDK_VERSION  "${CMAKE_OSX_SYSROOT}")
37         if(CMAKE_OSX_DEPLOYMENT_TARGET)
38                 if (CMAKE_OSX_DEPLOYMENT_TARGET GREATER 10.4)
39                         set(HID_UTIL_DIR "HID_Utilities")
40                 else()
41                         set(HID_UTIL_DIR "HID_Utilities_10_4")
42                 endif()
43         else()
44                 if (${MAC_OSX_SDK_VERSION} GREATER 4)
45                         set(HID_UTIL_DIR "HID_Utilities")
46                 else()
47                         set(HID_UTIL_DIR "HID_Utilities_10_4")
48                 endif()
49         endif()
50         MESSAGE( STATUS "Using HID Utilities from folder '${HID_UTIL_DIR}'")
51 endif()
53 if (CMAKE_SYSTEM_NAME MATCHES "Linux")
54         set(LINUX 1)
55 endif()
57 #############################################
58 # Compiler flags etc
60 if (${CMAKE_COMPILER_IS_GNUCXX})
61         exec_program(${CMAKE_CXX_COMPILER} ARGS -dumpversion OUTPUT_VARIABLE _gcc_version)
63         add_definitions("-fschedule-insns2" "-fomit-frame-pointer")
65         add_definitions("-Wreturn-type")
67 #       disabled for now: -ffast-math breaks avx intrinsics and -fsigned-zeros/-fno-associative-math are not available in some versions
68 #       if (${_gcc_version} VERSION_GREATER 4.0.99)
69 #               add_definitions("-ffast-math -fsigned-zeros -fno-associative-math")
70 #       endif()
72         option(DSO_VISIBILITY "DSO visibility support for gcc" OFF)
74         if (DSO_VISIBILITY)
75                 add_definitions(-fvisibility=hidden)
76         endif()
78         if(APPLE)
79                 exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
80                 if ("${_gcc_version_info}" MATCHES "Apple")
81                         add_definitions("-fpascal-strings")
82                 endif()
83                 add_definitions("-D_REENTRANT")
84         elseif(NOT (WIN32 AND NOT CYGWIN))
85                 add_definitions("-pthread")
86         endif()
87 endif ()
89 if (${CMAKE_CXX_COMPILER} MATCHES icpc)
90         set(CMAKE_COMPILER_IS_INTEL 1)
91         add_definitions(-Wno-unknown-pragmas)
92         add_definitions(-simd)
93 endif()
95 if (${CMAKE_CXX_COMPILER} MATCHES clang)
96         option(DSO_VISIBILITY "DSO visibility support for clang" OFF)
98         if (DSO_VISIBILITY)
99                 add_definitions(-fvisibility=hidden)
100         endif()
102         set(CMAKE_COMPILER_IS_CLANG 1)
103 endif()
105 if(APPLE)
106         set_property(DIRECTORY
107                 APPEND
108                 PROPERTY COMPILE_DEFINITIONS SC_DARWIN)
109 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
110         add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
111 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
112         add_definitions("-DSC_FREEBSD")
113         add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
114 endif()
116 if(WIN32)
117     set_property(DIRECTORY
118                  APPEND
119                  PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WIN32_WINNT=0x0500)
121     add_definitions(-DWIN32_LEAN_AND_MEAN)
123     if(MSVC)
124         SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
125         SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
126     endif()
128     # correctly link the static Boost Thread library:
129     add_definitions(-DBOOST_THREAD_USE_LIB)
130         #avoid unnecesary autolink
131         add_definitions(-DBOOST_DATE_TIME_NO_LIB)
133     add_definitions(-DBOOST_CHRONO_HEADER_ONLY)
134 endif()
137 #############################################
138 # Options
139 option(NOVA_SIMD "Build with nova-simd support." ON)
140 option(FINAL_BUILD "Build as single source file." OFF)
142 option(CURL "Build with curl for remote file download." ON)
144 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
146 option(SSE "Compile with support for SSE instructions.")
147 option(SSE41 "Compile with support for SSE4.1 instructions.")
148 option(SSE42 "Compile with support for SSE4.2 instructions.")
150 set(AUDIOAPI "default" CACHE STRING "Audio API to use (one of {default,coreaudio,jack,portaudio})")
151 option(LIBSCSYNTH "Compile libscsynth as shared library" OFF)
153 option(INSTALL_HELP "Install help docs and examples along with the software" ON)
154 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
155 option(SC_IDE "Build Qt IDE." ON)
157 option(ENABLE_TESTSUITE "Compile testsuite." ON)
159 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
160     option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
161 elseif()
162     option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
163 endif()
165 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
166 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
167 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
169 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
171 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
173 option(SCLANG_SERVER "Build with internal server." ON)
175 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
176         option(SC_WII "Build sclang with WII support" ON)
177 endif()
179 option(SC_QT "Build SuperCollider with Qt GUI" ON)
180 if (SC_QT)
181   message( STATUS "Compiling with Qt GUI" )
182 endif (SC_QT)
184 if(WIN32)
185     option(SC_WIN_DEP_DIRS
186         "A list of directories where dependencies will be searched for when packaging.")
187 endif()
189 if(CMAKE_COMPILER_IS_GNUCXX)
190     option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
191     option(LTO "Use GCC's link time optimizer' (experimental).")
192 endif()
194 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
195 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
197 option(SYSTEM_BOOST "Use boost libraries from system" OFF)
199 #############################################
200 # some default libraries
202 find_package(Pthreads)
204 if (NOT PTHREADS_FOUND)
205     message(SEND_ERROR "cannot find libpthreads")
206 endif()
207 include_directories(${PTHREADS_INCLUDE_DIR})
209 if (MSVC OR MINGW)
210     set(MATH_LIBRARY "")
211 else()
212     find_library(MATH_LIBRARY m)
213 endif()
215 if(CURL)
216         find_package(CURL)
217         if(CURL_FOUND)
218                 add_definitions("-DHAVE_LIBCURL")
219                 include_directories(${CURL_INCLUDE_DIRS})
220         endif()
221 endif()
223 if (SYSTEM_BOOST)
224   set(Boost_USE_MULTITHREADED      ON)
225   find_package( Boost 1.48.0 COMPONENTS thread system filesystem program_options regex test )
227   if (SC_OX)
228           set(Boost_FOUND OFF) # boost 1.48 does not like c++11
229   endif()
230 endif()
232 if (Boost_FOUND)
233         link_directories(${Boost_LIBRARY_DIRS})
234 else()
235         message("building boost libraries manually")
236 endif()
240 #############################################
241 # some preprocessor flags
242 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
243         if (SSE)
244                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
245                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
246         endif()
247         if (SSE41)
248                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
249                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
250         endif()
251         if (SSE42)
252                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
253                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
254         endif()
255         if (NATIVE)
256                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
257                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
258         endif()
260         if (SC_OX)
261                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
262         endif()
263 endif()
265 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
266         if (SSE42)
267                 add_definitions(-xSSE4.2)
268         elseif (SSE41)
269                 add_definitions(-xSSE4.1)
270         elseif (SSE)
271                 add_definitions(-mia32)
272         endif()
273         if (SC_OX)
274                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
275         endif()
277         # disable warnings
278         add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
279         add_definitions(-diag-disable 279) # controlling expression is constant
281 endif()
283 if (SC_MEMORY_DEBUGGING)
284         add_definitions(-DDISABLE_MEMORY_POOLS)
285 endif()
287 #############################################
288 # subdirectories
289 add_subdirectory(external_libraries)
290 add_subdirectory(server)
291 add_subdirectory(lang)
292 add_subdirectory(editors)
293 add_subdirectory(platform)
295 if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
296     install(DIRECTORY include/common include/plugin_interface include/server include/lang
297         DESTINATION ${CMAKE_INSTALL_PREFIX}/include/SuperCollider
298         FILES_MATCHING PATTERN "*.h"
299     )
300 endif()
302 if(APPLE)
303         # determines the app name and app install location (scappbundlename, scappdir):
304         include (cmake_modules/MacAppFolder.cmake)
306         set(auxresourcesdir ${scappauxresourcesdir})
308         # Some aux files which go in the app's folder
309         install(FILES README.txt ChangeLog COPYING AUTHORS platform/mac/MOVED_STUFF.txt
310                 DESTINATION ${scappbundlename}
311         )
312 elseif (WIN32)
313         set(auxresourcesdir "SuperCollider")
314 else()
315         set(auxresourcesdir "share/SuperCollider")
316 endif()
318 set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
320 if(NOT SC_QT)
321         set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|QtCollider")
322 endif()
324 if(WIN32)
325         set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}")
326 endif()
329 if(APPLE)
331         if(SC_SYMLINK_CLASSLIB)
333                 #if there are folders inside SCCLassLibrary abort cmake.
334                 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
335                 foreach(onedirectory ${classlibraryfolders})
336                         message( "${onedirectory}" )
337                         if(NOT IS_SYMLINK "${onedirectory}")
338                                 message(FATAL_ERROR "Symlinking will fail ! SCClassLibrary folder already exists and has directories inside, please delete it first." )
339                         endif()
340                 endforeach(onedirectory)
342                 message(STATUS "Will create symlink of SCClassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary" )
343                 if(NOT EXISTS "{CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
344                         install( CODE "EXECUTE_PROCESS(COMMAND mkdir ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary)" )
345                 endif()
346                 #symlink the folders inside SCCLassLibrary. Check if QtCollider folder should be symlinked or not.
347                 file(GLOB classlibraryfolders RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary" "SCClassLibrary/[^.]*")
348                 foreach(onedirectory ${classlibraryfolders})
349                         if(NOT "${onedirectory}" MATCHES "${SCCLASSLIB_EXCLUDE_REGEX}")
350                                 install( CODE
351                                         "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
352                         endif()
353                 endforeach(onedirectory)
354         else()
355                 message(STATUS "Will copy SCCLassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
357                 #if directory contains symlinks, unlink them.
358                 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
359                         file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
360                         foreach(onedirectory ${classlibraryfolders})
361                                 if(IS_SYMLINK "${onedirectory}")
362                                         message(STATUS "Unlinking ${onedirectory}")
363                                         install( CODE "EXECUTE_PROCESS(COMMAND unlink ${onedirectory} )" )
364                                 endif()
365                         endforeach(onedirectory)
366                 endif()
368                 install(DIRECTORY SCClassLibrary
369                         DESTINATION ${auxresourcesdir}
370                         REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
371                 )
372         endif()
373 else()
374         install(DIRECTORY SCClassLibrary
375                 DESTINATION ${auxresourcesdir}
376                 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
377                 PATTERN "*~" EXCLUDE
378                 PATTERN "*#" EXCLUDE
379         )
380 endif()
382 configure_file(platform/SCVersion.sc.in SCVersion/SCVersion.sc)
383 install(DIRECTORY "${CMAKE_BINARY_DIR}/SCVersion" DESTINATION "${auxresourcesdir}/SCClassLibrary")
385 install(DIRECTORY sounds
386         DESTINATION ${auxresourcesdir}
389 if(APPLE AND ("${standalone}" STREQUAL ""))
390         set(exampledir "${scappbundlename}")
391 else()
392         set(exampledir "${auxresourcesdir}")
393 endif()
395 install(DIRECTORY examples
396         DESTINATION ${exampledir}
397         PATTERN "*~" EXCLUDE
398         PATTERN "*#" EXCLUDE
401 if(INSTALL_HELP)
402         if(SC_SYMLINK_CLASSLIB AND APPLE)
403                 message(STATUS "Will create symlink of HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
404                 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
405                         message(FATAL_ERROR "Symlinking will fail ! HelpSource folder already exists, please delete it first." )
406                 endif()
407                 install( CODE
408                                         "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
409         else()
410                 message(STATUS "Will copy HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
411                 if(APPLE)
412                         if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
413                                 if(IS_SYMLINK "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
414                                         message(STATUS "Unlinking ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
415                                         install( CODE "EXECUTE_PROCESS(COMMAND unlink ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
416                                 endif()
417                         endif()
418                 endif()
419                 install(DIRECTORY HelpSource
420                         DESTINATION ${auxresourcesdir}
421                         PATTERN "*~" EXCLUDE
422                         PATTERN "*#" EXCLUDE
423                 )
424         endif()
425 endif()
427 #############################################
429 # build scdoc help files
431 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
432 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
433 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
434 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
435 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
436 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
438 # this folder has an extension to Platform that disables the loadStartupFiles method
439 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
441 foreach(arg ${BUILD_CLASSLIBRARIES})
442         set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
443 endforeach()
445 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
447 if(SC_DOC_RENDER)
448         file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
449         file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
451         add_custom_target(doc ALL
452                                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
453                                                         -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
454                                                         platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
455                                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
456                                         DEPENDS sclang ${SCDocSources} ${SCDocClasses})
458 endif()
460 set_directory_properties(
461         PROPERTIES
462         ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
464 #############################################
466 # testsuite
468 if(ENABLE_TESTSUITE)
469   add_subdirectory(testsuite)
470 endif()
472 #############################################
473 # CPack support
475 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
476 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
477 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
479 if(APPLE)
480         set(CPACK_GENERATOR "DragNDrop")
481         set(CPACK_DMG_FORMAT "UDBZ")
482         set(CPACK_DMG_VOLUME_NAME "${scappbundlename}")
483         set(CPACK_SYSTEM_NAME "OSX")
484 #       set(CPACK_PACKAGE_FILE_NAME "${scappbundlename}-${PROJECT_VERSION}")
485         set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/package/ds_store")
486         set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/package/background.png")
487         set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/platform/mac/Resources/SCcube.icns")
488 endif()
490 if(NOT WIN32) # We define a custom 'package' target in platform/windows/CMakeLists.txt
491     include(CPack)
492 endif()
494 #############################################
495 # hide advanced variables
496 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
497 mark_as_advanced(DL)
498 mark_as_advanced(EMACS_EXECUTABLE)
499 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
500 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
501 mark_as_advanced(MATH_LIBRARY)
502 mark_as_advanced(QT_QMAKE_EXECUTABLE)
503 mark_as_advanced(SNDFILE)