qt gui: QView: never propagate drop event to the widget implementation
[supercollider.git] / CMakeLists.txt
blob63978d808adc60f843fc0ef3b14f6142705030e7
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         if (${_gcc_version} VERSION_GREATER 4.0.99)
72                 add_definitions("-ffast-math")
73         endif()
75         option(DSO_VISIBILITY "DSO visibility support for gcc" OFF)
77         if (DSO_VISIBILITY)
78                 add_definitions(-fvisibility=hidden)
79         endif()
81         if(APPLE)
82                 exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
84                 if ("${_gcc_version_info}" MATCHES "darwin10-llvm-g..-4.2")
85                         message(FATAL_ERROR "llvm-gcc-4.2 was reported to be broken. please use another compiler.")
86                 endif()
87                 if ("${_gcc_version_info}" MATCHES "Apple")
88                         add_definitions("-fpascal-strings")
89                 endif()
90                 add_definitions("-D_REENTRANT")
91         elseif(NOT (WIN32 AND NOT CYGWIN))
92                 add_definitions("-pthread")
93         endif()
94 endif ()
96 if (${CMAKE_CXX_COMPILER} MATCHES icpc)
97         set(CMAKE_COMPILER_IS_INTEL 1)
98         add_definitions(-Wno-unknown-pragmas)
99         add_definitions(-simd)
100 endif()
102 if (${CMAKE_CXX_COMPILER} MATCHES clang)
103         set(CMAKE_COMPILER_IS_CLANG 1)
104 endif()
106 if(APPLE)
107         set_property(DIRECTORY
108                 APPEND
109                 PROPERTY COMPILE_DEFINITIONS SC_DARWIN)
110 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
111         add_definitions("-DSC_LINUX")
112         add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
113 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
114         add_definitions("-DSC_FREEBSD")
115         add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
116 endif()
118 if(WIN32)
119     set_property(DIRECTORY
120                  APPEND
121                  PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WINSOCKAPI_)
123     if(MSVC)
124         SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd")
125         SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
126     endif()
127 endif()
130 #############################################
131 # some default libraries
133 find_package(Pthreads)
135 if (NOT PTHREADS_FOUND)
136     message(SEND_ERROR "cannot find libpthreads")
137 endif()
138 include_directories(${PTHREADS_INCLUDE_DIR})
140 if (MSVC OR MINGW)
141     set(MATH_LIBRARY "")
142 else()
143     find_library(MATH_LIBRARY m)
144 endif()
146 if(CURL)
147         find_package(CURL)
148         if(CURL_FOUND)
149                 add_definitions("-DHAVE_LIBCURL")
150                 include_directories(${CURL_INCLUDE_DIRS})
151         endif()
152 endif()
154 #############################################
155 # Options
156 option(NOVA_SIMD "Build with nova-simd support." ON)
157 option(FINAL_BUILD "Build as single source file." OFF)
159 option(CURL "Build with curl for remote file download." ON)
161 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
162 mark_as_advanced(FFT_GREEN)
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(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
172 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
173     option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
174 elseif()
175     option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
176 endif()
178 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
179 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
180 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
182 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
183 mark_as_advanced(NO_LIBSNDFILE)
185 if(NOT WIN32)
186         option(SCLANG_SERVER "Build with internal server." ON)
187 endif()
189 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
190         option(SC_WII "Build sclang with WII support" ON)
191 endif()
193 option(SC_QT "Build SuperCollider with Qt GUI" ON)
195 if(WIN32)
196         option(SC_PSYCOLLIDER "Build PsyCollider" ON)
197 else()
198         option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
199 endif()
201 if(CMAKE_COMPILER_IS_GNUCXX)
202     option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
203     option(LTO "Use GCC's link time optimizer' (experimental).")
204 endif()
206 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
207 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
209 #############################################
210 # some preprocessor flags
211 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
212         if (SSE)
213                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
214                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
215         endif()
216         if (SSE41)
217                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
218                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
219         endif()
220         if (SSE42)
221                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
222                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
223         endif()
224         if (NATIVE)
225                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
226                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
227         endif()
229         if (SC_OX)
230                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
231         endif()
232 endif()
234 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
235         if (SSE42)
236                 add_definitions(-xSSE4.2)
237         elseif (SSE41)
238                 add_definitions(-xSSE4.1)
239         elseif (SSE)
240                 add_definitions(-mia32)
241         endif()
242         if (SC_OX)
243                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
244         endif()
246         # disable warnings
247         add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
248         add_definitions(-diag-disable 279) # controlling expression is constant
250 endif()
252 if (SC_MEMORY_DEBUGGING)
253         add_definitions(-DDISABLE_MEMORY_POOLS)
254 endif()
256 #############################################
257 # subdirectories
258 add_subdirectory(external_libraries)
259 add_subdirectory(server)
260 add_subdirectory(lang)
261 add_subdirectory(bindings)
262 add_subdirectory(platform)
263 add_subdirectory(editors)
265 if (SC_QT)
266   message( STATUS "Compiling with Qt GUI" )
267   add_subdirectory(QtCollider)
268 endif (SC_QT)
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         )
347 endif()
350 install(DIRECTORY sounds
351         DESTINATION ${auxresourcesdir}
353 if(INSTALL_HELP)
354         install(DIRECTORY Help examples HelpSource
355                 DESTINATION ${auxresourcesdir}
356         )
357 endif()
359 #############################################
361 # build scdoc help files
363 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
364 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
365 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
366 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
367 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
368 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
370 # this folder has an extension to Platform that disables the loadStartupFiles method
371 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
373 foreach(arg ${BUILD_CLASSLIBRARIES})
374         set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
375 endforeach()
377 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
379 if(SC_DOC_RENDER)
380         file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
381         file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
383         add_custom_target(doc ALL
384                                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
385                                                         -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
386                                                         platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
387                                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
388                                         DEPENDS sclang ${SCDocSources} ${SCDocClasses})
390 endif()
392 set_directory_properties(
393         PROPERTIES
394         ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
396 #############################################
398 # testsuite
400 add_subdirectory(testsuite)
402 #############################################
403 # win32 install support
405 if(WIN32)
406         install(FILES ${FFTW3F_LIBRARY} ${SNDFILE_LIBRARY} ${PTHREADS_LIBRARY} ${PORTAUDIO_LIBRARIES}
407                 DESTINATION "SuperCollider"
408                 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
409 endif()
411 #############################################
412 # CPack support
414 set(CPACK_PACKAGE_VERSION_MAJOR 3)
415 set(CPACK_PACKAGE_VERSION_MINOR 5)
416 set(CPACK_PACKAGE_VERSION_PATCH dev)
417 include(CPack)
418 if(WIN32)
419         set(CPACK_MONOLITHIC_INSTALL 1)
420 endif()
422 #############################################
423 # hide advanced variables
424 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
425 mark_as_advanced(DL)
426 mark_as_advanced(EMACS_EXECUTABLE)
427 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
428 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
429 mark_as_advanced(MATH_LIBRARY)
430 mark_as_advanced(QT_QMAKE_EXECUTABLE)
431 mark_as_advanced(SNDFILE)