CMakeLists.txt 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7)
  2. PROJECT(lmms)
  3. SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH})
  4. IF(COMMAND CMAKE_POLICY)
  5. CMAKE_POLICY(SET CMP0005 NEW)
  6. CMAKE_POLICY(SET CMP0003 NEW)
  7. IF (CMAKE_MAJOR_VERSION GREATER 2)
  8. CMAKE_POLICY(SET CMP0026 OLD)
  9. CMAKE_POLICY(SET CMP0050 OLD)
  10. ENDIF()
  11. ENDIF(COMMAND CMAKE_POLICY)
  12. INCLUDE(AddFileDependencies)
  13. INCLUDE(CheckIncludeFiles)
  14. INCLUDE(FindPkgConfig)
  15. STRING(TOUPPER "${CMAKE_PROJECT_NAME}" PROJECT_NAME_UCASE)
  16. # Updated by maintenance tasks
  17. SET(PROJECT_YEAR 2015)
  18. SET(PROJECT_AUTHOR "LMMS Developers")
  19. SET(PROJECT_URL "https://lmms.io")
  20. SET(PROJECT_EMAIL "lmms-devel@lists.sourceforge.net")
  21. SET(PROJECT_DESCRIPTION "${PROJECT_NAME_UCASE} - Free music production software")
  22. SET(PROJECT_COPYRIGHT "2008-${PROJECT_YEAR} ${PROJECT_AUTHOR}")
  23. SET(VERSION_MAJOR "1")
  24. SET(VERSION_MINOR "2")
  25. SET(VERSION_RELEASE "0")
  26. SET(VERSION_STAGE "rc3")
  27. SET(VERSION_BUILD "0")
  28. SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}")
  29. IF(VERSION_STAGE)
  30. SET(VERSION "${VERSION}-${VERSION_STAGE}")
  31. ENDIF()
  32. IF(VERSION_BUILD)
  33. SET(VERSION "${VERSION}.${VERSION_BUILD}")
  34. ENDIF()
  35. # Override version information for non-base builds
  36. INCLUDE(VersionInfo)
  37. INCLUDE(DetectMachine)
  38. OPTION(WANT_ALSA "Include ALSA (Advanced Linux Sound Architecture) support" ON)
  39. OPTION(WANT_CALF "Include CALF LADSPA plugins" ON)
  40. OPTION(WANT_CAPS "Include C* Audio Plugin Suite (LADSPA plugins)" ON)
  41. OPTION(WANT_CARLA "Include Carla plugin" ON)
  42. OPTION(WANT_CMT "Include Computer Music Toolkit LADSPA plugins" ON)
  43. OPTION(WANT_JACK "Include JACK (Jack Audio Connection Kit) support" ON)
  44. OPTION(WANT_OGGVORBIS "Include OGG/Vorbis support" ON)
  45. OPTION(WANT_PULSEAUDIO "Include PulseAudio support" ON)
  46. OPTION(WANT_PORTAUDIO "Include PortAudio support" ON)
  47. OPTION(WANT_SOUNDIO "Include libsoundio support" ON)
  48. OPTION(WANT_SDL "Include SDL (Simple DirectMedia Layer) support" ON)
  49. OPTION(WANT_SF2 "Include SoundFont2 player plugin" ON)
  50. OPTION(WANT_GIG "Include GIG player plugin" ON)
  51. OPTION(WANT_STK "Include Stk (Synthesis Toolkit) support" ON)
  52. OPTION(WANT_SWH "Include Steve Harris's LADSPA plugins" ON)
  53. OPTION(WANT_TAP "Include Tom's Audio Processing LADSPA plugins" ON)
  54. OPTION(WANT_VST "Include VST support" ON)
  55. OPTION(WANT_VST_NOWINE "Include partial VST support (without wine)" OFF)
  56. OPTION(WANT_WINMM "Include WinMM MIDI support" OFF)
  57. OPTION(WANT_QT5 "Build with Qt5" OFF)
  58. IF(LMMS_BUILD_APPLE)
  59. SET(WANT_ALSA OFF)
  60. SET(WANT_PULSEAUDIO OFF)
  61. SET(WANT_VST OFF)
  62. SET(STATUS_ALSA "<not supported on this platform>")
  63. SET(STATUS_PULSEAUDIO "<not supported on this platform>")
  64. SET(STATUS_APPLEMIDI "OK")
  65. ELSE(LMMS_BUILD_APPLE)
  66. SET(STATUS_APPLEMIDI "<not supported on this platform>")
  67. ENDIF(LMMS_BUILD_APPLE)
  68. IF(LMMS_BUILD_WIN32)
  69. SET(WANT_ALSA OFF)
  70. SET(WANT_JACK OFF)
  71. SET(WANT_PULSEAUDIO OFF)
  72. SET(WANT_SOUNDIO OFF)
  73. SET(WANT_WINMM ON)
  74. SET(LMMS_HAVE_WINMM TRUE)
  75. SET(STATUS_ALSA "<not supported on this platform>")
  76. SET(STATUS_JACK "<not supported on this platform>")
  77. SET(STATUS_PULSEAUDIO "<not supported on this platform>")
  78. SET(STATUS_SOUNDIO "<disabled in this release>")
  79. SET(STATUS_WINMM "OK")
  80. SET(STATUS_APPLEMIDI "<not supported on this platform>")
  81. ELSE(LMMS_BUILD_WIN32)
  82. SET(STATUS_WINMM "<not supported on this platform>")
  83. ENDIF(LMMS_BUILD_WIN32)
  84. # TODO: Fix linking issues with msys debug builds
  85. IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
  86. SET(WANT_GIG OFF)
  87. SET(WANT_STK OFF)
  88. SET(WANT_SWH OFF)
  89. SET(STATUS_GIG "not built as requested")
  90. SET(STATUS_STK "not built as requested")
  91. ENDIF()
  92. CHECK_INCLUDE_FILES(stdint.h LMMS_HAVE_STDINT_H)
  93. CHECK_INCLUDE_FILES(stdlib.h LMMS_HAVE_STDLIB_H)
  94. CHECK_INCLUDE_FILES(pthread.h LMMS_HAVE_PTHREAD_H)
  95. CHECK_INCLUDE_FILES(semaphore.h LMMS_HAVE_SEMAPHORE_H)
  96. CHECK_INCLUDE_FILES(unistd.h LMMS_HAVE_UNISTD_H)
  97. CHECK_INCLUDE_FILES(sys/types.h LMMS_HAVE_SYS_TYPES_H)
  98. CHECK_INCLUDE_FILES(sys/ipc.h LMMS_HAVE_SYS_IPC_H)
  99. CHECK_INCLUDE_FILES(sys/shm.h LMMS_HAVE_SYS_SHM_H)
  100. CHECK_INCLUDE_FILES(sys/time.h LMMS_HAVE_SYS_TIME_H)
  101. CHECK_INCLUDE_FILES(sched.h LMMS_HAVE_SCHED_H)
  102. CHECK_INCLUDE_FILES(sys/soundcard.h LMMS_HAVE_SYS_SOUNDCARD_H)
  103. CHECK_INCLUDE_FILES(soundcard.h LMMS_HAVE_SOUNDCARD_H)
  104. CHECK_INCLUDE_FILES(fcntl.h LMMS_HAVE_FCNTL_H)
  105. CHECK_INCLUDE_FILES(sys/ioctl.h LMMS_HAVE_SYS_IOCTL_H)
  106. CHECK_INCLUDE_FILES(ctype.h LMMS_HAVE_CTYPE_H)
  107. CHECK_INCLUDE_FILES(string.h LMMS_HAVE_STRING_H)
  108. CHECK_INCLUDE_FILES(process.h LMMS_HAVE_PROCESS_H)
  109. CHECK_INCLUDE_FILES(locale.h LMMS_HAVE_LOCALE_H)
  110. LIST(APPEND CMAKE_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}")
  111. IF(WANT_QT5)
  112. SET(QT5 TRUE)
  113. FIND_PACKAGE(Qt5Core REQUIRED)
  114. FIND_PACKAGE(Qt5Gui REQUIRED)
  115. FIND_PACKAGE(Qt5LinguistTools)
  116. FIND_PACKAGE(Qt5Widgets REQUIRED)
  117. FIND_PACKAGE(Qt5Xml REQUIRED)
  118. INCLUDE_DIRECTORIES(
  119. ${Qt5Core_INCLUDE_DIRS}
  120. ${Qt5Gui_INCLUDE_DIRS}
  121. ${Qt5Widgets_INCLUDE_DIRS}
  122. ${Qt5Xml_INCLUDE_DIRS}
  123. )
  124. SET(QT_LIBRARIES
  125. Qt5::Core
  126. Qt5::Gui
  127. Qt5::Widgets
  128. Qt5::Xml
  129. )
  130. FIND_PACKAGE(Qt5Test)
  131. SET(QT_QTTEST_LIBRARY Qt5::Test)
  132. ELSE()
  133. SET(QT5 FALSE)
  134. # check for Qt4
  135. SET(QT_MIN_VERSION "4.6.0" COMPONENTS QtCore QtGui QtXml)
  136. FIND_PACKAGE(Qt4 REQUIRED)
  137. SET(QT_USE_QTXML 1)
  138. IF(WIN32)
  139. SET(QT_TRANSLATIONS_DIR "${MINGW_PREFIX}/share/qt4/translations/")
  140. ENDIF(WIN32)
  141. IF(EXISTS "${QT_TRANSLATIONS_DIR}")
  142. MESSAGE("-- Found Qt translations in ${QT_TRANSLATIONS_DIR}")
  143. ADD_DEFINITIONS(-D'QT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}"')
  144. ENDIF()
  145. IF(NOT WIN32)
  146. STRING(REPLACE "-DQT_DLL" "" QT_DEFINITIONS "${QT_DEFINITIONS}")
  147. ENDIF()
  148. INCLUDE("${QT_USE_FILE}")
  149. ENDIF()
  150. # check for libsndfile
  151. PKG_CHECK_MODULES(SNDFILE REQUIRED sndfile>=1.0.11)
  152. IF(NOT SNDFILE_FOUND)
  153. MESSAGE(FATAL_ERROR "LMMS requires libsndfile1 and libsndfile1-dev >= 1.0.11 - please install, remove CMakeCache.txt and try again!")
  154. ENDIF(NOT SNDFILE_FOUND)
  155. IF(WANT_CALF)
  156. SET(LMMS_HAVE_CALF TRUE)
  157. SET(STATUS_CALF "OK")
  158. ELSE(WANT_CALF)
  159. SET(STATUS_CALF "not built as requested")
  160. ENDIF(WANT_CALF)
  161. IF(WANT_CAPS)
  162. SET(LMMS_HAVE_CAPS TRUE)
  163. SET(STATUS_CAPS "OK")
  164. ELSE(WANT_CAPS)
  165. SET(STATUS_CAPS "not built as requested")
  166. ENDIF(WANT_CAPS)
  167. IF(WANT_CMT)
  168. SET(LMMS_HAVE_CMT TRUE)
  169. SET(STATUS_CMT "OK")
  170. ELSE(WANT_CMT)
  171. SET(STATUS_CMT "not built as requested")
  172. ENDIF(WANT_CMT)
  173. IF(WANT_SWH)
  174. SET(LMMS_HAVE_SWH TRUE)
  175. SET(STATUS_SWH "OK")
  176. ELSE(WANT_SWH)
  177. SET(STATUS_SWH "not built as requested")
  178. ENDIF(WANT_SWH)
  179. IF(WANT_TAP)
  180. SET(LMMS_HAVE_TAP TRUE)
  181. SET(STATUS_TAP "OK")
  182. ELSE(WANT_TAP)
  183. SET(STATUS_TAP "not built as requested")
  184. ENDIF(WANT_TAP)
  185. # check for CARLA
  186. IF(WANT_CARLA)
  187. PKG_CHECK_MODULES(CARLA carla-standalone>=1.9.5)
  188. IF(CARLA_FOUND)
  189. SET(LMMS_HAVE_CARLA TRUE)
  190. SET(STATUS_CARLA "OK")
  191. ELSE(CARLA_FOUND)
  192. SET(STATUS_CARLA "not found, please install the latest carla")
  193. ENDIF(CARLA_FOUND)
  194. ENDIF(WANT_CARLA)
  195. # check for SDL
  196. IF(WANT_SDL)
  197. SET(SDL_BUILDING_LIBRARY TRUE)
  198. FIND_PACKAGE(SDL)
  199. IF(SDL_FOUND)
  200. SET(LMMS_HAVE_SDL TRUE)
  201. SET(STATUS_SDL "OK")
  202. ELSE(SDL_FOUND)
  203. SET(STATUS_SDL "not found, please install libsdl1.2-dev (or similar) "
  204. "if you require SDL support")
  205. ENDIF(SDL_FOUND)
  206. ENDIF(WANT_SDL)
  207. IF(NOT LMMS_HAVE_SDL)
  208. SET(SDL_INCLUDE_DIR "")
  209. ELSE(NOT LMMS_HAVE_SDL)
  210. IF(NOT SDL_INCLUDE_DIR)
  211. SET(SDL_INCLUDE_DIR "${CMAKE_FIND_ROOT_PATH}/include")
  212. ENDIF(NOT SDL_INCLUDE_DIR)
  213. ENDIF(NOT LMMS_HAVE_SDL)
  214. # check for Stk
  215. IF(WANT_STK)
  216. FIND_PACKAGE(STK)
  217. IF(STK_FOUND)
  218. SET(LMMS_HAVE_STK TRUE)
  219. SET(STATUS_STK "OK")
  220. ELSE(STK_FOUND)
  221. SET(STK_INCLUDE_DIR "")
  222. SET(STATUS_STK "not found, please install libstk0-dev (or similar) "
  223. "if you require the Mallets instrument")
  224. ENDIF(STK_FOUND)
  225. ENDIF(WANT_STK)
  226. # check for PortAudio
  227. IF(WANT_PORTAUDIO)
  228. FIND_PACKAGE(Portaudio)
  229. IF(PORTAUDIO_FOUND)
  230. SET(LMMS_HAVE_PORTAUDIO TRUE)
  231. SET(STATUS_PORTAUDIO "OK")
  232. ELSE(PORTAUDIO_FOUND)
  233. SET(STATUS_PORTAUDIO "not found, please install portaudio19-dev (or similar, version >= 1.9) "
  234. "if you require PortAudio support")
  235. ENDIF(PORTAUDIO_FOUND)
  236. ENDIF(WANT_PORTAUDIO)
  237. # check for libsoundio
  238. IF(WANT_SOUNDIO)
  239. FIND_PACKAGE(SoundIo)
  240. IF(SOUNDIO_FOUND)
  241. SET(LMMS_HAVE_SOUNDIO TRUE)
  242. SET(STATUS_SOUNDIO "OK")
  243. INCLUDE_DIRECTORIES("${SOUNDIO_INCLUDE_DIR}")
  244. ELSE(SOUNDIO_FOUND)
  245. SET(SOUNDIO_INCLUDE_DIR "")
  246. SET(STATUS_SOUNDIO "not found, please install libsoundio if you require libsoundio support")
  247. SET(SOUNDIO_LIBRARY "")
  248. ENDIF(SOUNDIO_FOUND)
  249. ENDIF(WANT_SOUNDIO)
  250. # check for PulseAudio
  251. IF(WANT_PULSEAUDIO)
  252. FIND_PACKAGE(PulseAudio)
  253. IF(PULSEAUDIO_FOUND)
  254. SET(LMMS_HAVE_PULSEAUDIO TRUE)
  255. SET(STATUS_PULSEAUDIO "OK")
  256. ELSE(PULSEAUDIO_FOUND)
  257. SET(STATUS_PULSEAUDIO "not found, please install libpulse-dev (or similar) "
  258. "if you require PulseAudio support")
  259. ENDIF(PULSEAUDIO_FOUND)
  260. ENDIF(WANT_PULSEAUDIO)
  261. IF(NOT LMMS_HAVE_PULSEAUDIO)
  262. SET(PULSEAUDIO_INCLUDE_DIR "")
  263. SET(PULSEAUDIO_LIBRARIES "")
  264. ENDIF(NOT LMMS_HAVE_PULSEAUDIO)
  265. # check for OGG/Vorbis-libraries
  266. IF(WANT_OGGVORBIS)
  267. FIND_PACKAGE(OggVorbis)
  268. IF(OGGVORBIS_FOUND)
  269. SET(LMMS_HAVE_OGGVORBIS TRUE)
  270. SET(STATUS_OGGVORBIS "OK")
  271. ELSE(OGGVORBIS_FOUND)
  272. SET(STATUS_OGGVORBIS "not found, libogg-dev and libvorbis-dev (or similar) "
  273. "is highly recommended")
  274. ENDIF(OGGVORBIS_FOUND)
  275. ENDIF(WANT_OGGVORBIS)
  276. # check whether to enable OSS-support
  277. IF(LMMS_HAVE_SOUNDCARD_H OR LMMS_HAVE_SYS_SOUNDCARD_H)
  278. SET(LMMS_HAVE_OSS TRUE)
  279. SET(STATUS_OSS "OK")
  280. ELSE(LMMS_HAVE_SOUNDCARD_H OR LMMS_HAVE_SYS_SOUNDCARD_H)
  281. SET(STATUS_OSS "<not found or not supported on this platform>")
  282. ENDIF(LMMS_HAVE_SOUNDCARD_H OR LMMS_HAVE_SYS_SOUNDCARD_H)
  283. # check for ALSA
  284. IF(WANT_ALSA)
  285. FIND_PACKAGE(Alsa)
  286. IF(ALSA_FOUND)
  287. SET(LMMS_HAVE_ALSA TRUE)
  288. SET(STATUS_ALSA "OK")
  289. ELSE(ALSA_FOUND)
  290. SET(STATUS_ALSA "not found, please install libasound2-dev (or similar) "
  291. "if you require ALSA support")
  292. ENDIF(ALSA_FOUND)
  293. ENDIF(WANT_ALSA)
  294. IF(NOT LMMS_HAVE_ALSA)
  295. SET(ASOUND_LIBRARY "")
  296. ENDIF(NOT LMMS_HAVE_ALSA)
  297. # check for JACK
  298. IF(WANT_JACK)
  299. PKG_CHECK_MODULES(JACK jack>=0.77)
  300. IF(JACK_FOUND)
  301. SET(LMMS_HAVE_JACK TRUE)
  302. SET(STATUS_JACK "OK")
  303. ELSE(JACK_FOUND)
  304. SET(STATUS_JACK "not found, please install libjack0.100.0-dev (or similar) "
  305. "if you require JACK support")
  306. ENDIF(JACK_FOUND)
  307. ENDIF(WANT_JACK)
  308. # check for FFTW3F-library
  309. PKG_CHECK_MODULES(FFTW3F REQUIRED fftw3f>=3.0.0)
  310. # check for FLTK
  311. FIND_PACKAGE(FLTK)
  312. # check for Fluidsynth
  313. IF(WANT_SF2)
  314. PKG_CHECK_MODULES(FLUIDSYNTH fluidsynth>=1.0.7)
  315. IF(FLUIDSYNTH_FOUND)
  316. SET(LMMS_HAVE_FLUIDSYNTH TRUE)
  317. SET(STATUS_FLUIDSYNTH "OK")
  318. ELSE(FLUIDSYNTH_FOUND)
  319. SET(STATUS_FLUIDSYNTH "not found, libfluidsynth-dev (or similar)"
  320. "is highly recommended")
  321. ENDIF(FLUIDSYNTH_FOUND)
  322. ENDIF(WANT_SF2)
  323. # check for libgig
  324. If(WANT_GIG)
  325. PKG_CHECK_MODULES(GIG gig)
  326. IF(GIG_FOUND)
  327. SET(LMMS_HAVE_GIG TRUE)
  328. SET(STATUS_GIG "OK")
  329. ELSE(GIG_FOUND)
  330. SET(STATUS_GIG "not found, libgig needed for decoding .gig files")
  331. ENDIF(GIG_FOUND)
  332. ENDIF(WANT_GIG)
  333. # check for pthreads
  334. IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD)
  335. FIND_PACKAGE(Threads)
  336. ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD)
  337. IF(LMMS_BUILD_OPENBSD)
  338. FIND_PACKAGE(Sndio)
  339. IF(SNDIO_FOUND)
  340. SET(LMMS_HAVE_SNDIO TRUE)
  341. SET(STATUS_SNDIO "OK")
  342. ELSE()
  343. SET(STATUS_SNDIO "<not found or not supported on this platform>")
  344. ENDIF(SNDIO_FOUND)
  345. ENDIF(LMMS_BUILD_OPENBSD)
  346. # check for WINE
  347. IF(WANT_VST)
  348. FIND_PACKAGE(Wine)
  349. IF(WINE_FOUND)
  350. SET(LMMS_SUPPORT_VST TRUE)
  351. SET(STATUS_VST "OK")
  352. ELSEIF(WANT_VST_NOWINE)
  353. SET(LMMS_SUPPORT_VST TRUE)
  354. SET(STATUS_VST "OK")
  355. ELSE(WINE_FOUND)
  356. SET(STATUS_VST "not found, please install (lib)wine-dev (or similar) - 64 bit systems additionally need gcc-multilib and g++-multilib")
  357. ENDIF(WINE_FOUND)
  358. ENDIF(WANT_VST)
  359. IF(LMMS_BUILD_WIN32)
  360. SET(LMMS_SUPPORT_VST TRUE)
  361. SET(STATUS_VST "OK")
  362. ENDIF(LMMS_BUILD_WIN32)
  363. # check for libsamplerate
  364. PKG_CHECK_MODULES(SAMPLERATE REQUIRED samplerate>=0.1.8)
  365. # set compiler flags
  366. SET(WERROR_FLAGS "-Wall -Werror=unused-function -Wno-sign-compare -Wno-strict-overflow")
  367. OPTION(USE_WERROR "Add -werror to the build flags. Stops the build on warnings" OFF)
  368. IF(${USE_WERROR})
  369. SET(WERROR_FLAGS "${WERROR_FLAGS} -Werror")
  370. ENDIF()
  371. # Due to a regression in gcc-4.8.X, we need to disable array-bounds check
  372. IF (CMAKE_COMPILER_IS_GNUCXX AND ((CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "4.8.0") OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.8.0") OR LMMS_BUILD_WIN32))
  373. SET(WERROR_FLAGS "${WERROR_FLAGS} -Wno-array-bounds")
  374. ENDIF()
  375. IF(NOT CMAKE_BUILD_TYPE)
  376. message(STATUS "Setting build type to 'Release' as none was specified.")
  377. set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
  378. # Set the possible values of build type for cmake-gui
  379. SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
  380. "MinSizeRel" "RelWithDebInfo")
  381. ENDIF()
  382. SET(CMAKE_C_FLAGS "${WERROR_FLAGS} ${CMAKE_C_FLAGS}")
  383. SET(CMAKE_CXX_FLAGS "-fno-exceptions ${WERROR_FLAGS} ${CMAKE_CXX_FLAGS}")
  384. SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DLMMS_DEBUG")
  385. SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DLMMS_DEBUG")
  386. # people simply updating git will still have this and mess up build with it
  387. FILE(REMOVE include/lmmsconfig.h)
  388. FILE(GLOB LMMS_INCLUDES "${CMAKE_SOURCE_DIR}/include/*.h")
  389. LIST(SORT LMMS_INCLUDES)
  390. # embedded resources stuff
  391. IF(WIN32 OR WIN64)
  392. # compile buildtools native
  393. SET(BIN2RES_CPP "${CMAKE_SOURCE_DIR}/buildtools/bin2res.cpp")
  394. SET(BIN2RES "${CMAKE_BINARY_DIR}/bin2res")
  395. ADD_CUSTOM_TARGET(bin2res COMMAND g++ "\"${BIN2RES_CPP}\"" -o "\"${BIN2RES}\"" DEPENDS "${BIN2RES_CPP}")
  396. ELSE(WIN32 OR WIN64)
  397. ADD_EXECUTABLE(bin2res buildtools/bin2res.cpp)
  398. GET_TARGET_PROPERTY(BIN2RES bin2res LOCATION)
  399. ENDIF(WIN32 OR WIN64)
  400. # we somehow have to make LMMS-binary depend on MOC-files
  401. ADD_FILE_DEPENDENCIES("${CMAKE_BINARY_DIR}/lmmsconfig.h")
  402. IF(WIN32)
  403. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes")
  404. ELSE(WIN32)
  405. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC")
  406. ENDIF(WIN32)
  407. # use ccache
  408. OPTION(USE_CCACHE "Use ccache for compilation" OFF)
  409. IF(USE_CCACHE)
  410. FIND_PROGRAM(CCACHE ccache)
  411. IF (CCACHE)
  412. MESSAGE(STATUS "Using ccache found in PATH")
  413. SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
  414. SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
  415. ELSE()
  416. MESSAGE(WARNING "USE_CCACHE enabled, but no ccache found")
  417. ENDIF()
  418. ENDIF()
  419. # make sub-directories
  420. ADD_SUBDIRECTORY(cmake)
  421. ADD_SUBDIRECTORY(src)
  422. ADD_SUBDIRECTORY(plugins)
  423. ADD_SUBDIRECTORY(tests)
  424. ADD_SUBDIRECTORY(data)
  425. ADD_SUBDIRECTORY(doc)
  426. # post-install tasks
  427. ADD_SUBDIRECTORY(cmake/postinstall)
  428. ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_BINARY_DIR}/lmms.1.gz"
  429. COMMAND gzip -c ${CMAKE_SOURCE_DIR}/doc/lmms.1 > ${CMAKE_BINARY_DIR}/lmms.1.gz
  430. DEPENDS "${CMAKE_SOURCE_DIR}/doc/lmms.1"
  431. COMMENT "Generating lmms.1.gz"
  432. VERBATIM)
  433. ADD_CUSTOM_TARGET(manpage ALL
  434. DEPENDS "${CMAKE_BINARY_DIR}/lmms.1.gz")
  435. # install headers
  436. IF(LMMS_BUILD_LINUX)
  437. INSTALL(FILES ${LMMS_INCLUDES}
  438. "${CMAKE_BINARY_DIR}/lmmsconfig.h"
  439. "${CMAKE_BINARY_DIR}/lmmsversion.h"
  440. "${CMAKE_SOURCE_DIR}/src/gui/embed.cpp"
  441. DESTINATION "${CMAKE_INSTALL_PREFIX}/include/lmms/")
  442. ENDIF(LMMS_BUILD_LINUX)
  443. # package ZynAddSubFX into win32 build
  444. IF(LMMS_BUILD_WIN32)
  445. IF(EXISTS "${CMAKE_SOURCE_DIR}/extras")
  446. ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/extras/data/presets")
  447. FILE(GLOB ZASF_BINARIES
  448. "${CMAKE_SOURCE_DIR}/extras/plugins/zynaddsubfx/zynaddsubfx.dll"
  449. "${CMAKE_SOURCE_DIR}/extras/plugins/zynaddsubfx/remote_zynaddsubfx.exe")
  450. LIST(SORT ZASF_BINARIES)
  451. INSTALL(FILES "${ZASF_BINARIES}" DESTINATION "${PLUGIN_DIR}")
  452. ENDIF(EXISTS "${CMAKE_SOURCE_DIR}/extras")
  453. ENDIF(LMMS_BUILD_WIN32)
  454. #
  455. # add distclean-target
  456. #
  457. ADD_CUSTOM_TARGET(distclean
  458. COMMAND make clean
  459. COMMAND rm -rf `find -name cmake_install.cmake` `find -name Makefile` `find -type d -name CMakeFiles` CMakeCache.txt lmmsconfig.h lmms.1.gz)
  460. #
  461. # add tarball-target
  462. #
  463. SET(TMP "lmms-${VERSION}")
  464. ADD_CUSTOM_TARGET(dist
  465. COMMAND make clean
  466. COMMAND rm -rf "${TMP}"
  467. COMMAND mkdir -p "${TMP}"
  468. COMMAND cp CMakeLists.txt LICENSE.txt INSTALL.txt README.md "${TMP}"
  469. COMMAND cp -r buildtools cmake data doc include plugins src "${TMP}"
  470. COMMAND rm -rf `find "${TMP}" -name cmake_install.cmake` `find "${TMP}" -name Makefile` `find "${TMP}" -type d -name CMakeFiles` "${TMP}/CMakeCache.txt"
  471. COMMAND tar cjf lmms-${VERSION}-src.tar.bz2 "${TMP}"
  472. COMMAND rm -rf "${TMP}")
  473. #
  474. # display configuration information
  475. #
  476. MESSAGE("\n"
  477. "Installation Summary\n"
  478. "--------------------\n"
  479. "* Install Directory : ${CMAKE_INSTALL_PREFIX}\n"
  480. )
  481. MESSAGE(
  482. "Supported audio interfaces\n"
  483. "--------------------------\n"
  484. "* ALSA : ${STATUS_ALSA}\n"
  485. "* JACK : ${STATUS_JACK}\n"
  486. "* OSS : ${STATUS_OSS}\n"
  487. "* Sndio : ${STATUS_SNDIO}\n"
  488. "* PortAudio : ${STATUS_PORTAUDIO}\n"
  489. "* libsoundio : ${STATUS_SOUNDIO}\n"
  490. "* PulseAudio : ${STATUS_PULSEAUDIO}\n"
  491. "* SDL : ${STATUS_SDL}\n"
  492. )
  493. MESSAGE(
  494. "Supported MIDI interfaces\n"
  495. "-------------------------\n"
  496. "* ALSA : ${STATUS_ALSA}\n"
  497. "* OSS : ${STATUS_OSS}\n"
  498. "* Sndio : ${STATUS_SNDIO}\n"
  499. "* JACK : ${STATUS_JACK}\n"
  500. "* WinMM : ${STATUS_WINMM}\n"
  501. "* AppleMidi : ${STATUS_APPLEMIDI}\n"
  502. )
  503. MESSAGE(
  504. "Supported file formats for project export\n"
  505. "-----------------------------------------\n"
  506. "* WAVE : OK\n"
  507. "* OGG/VORBIS : ${STATUS_OGGVORBIS}\n"
  508. )
  509. MESSAGE(
  510. "Optional plugins\n"
  511. "----------------\n"
  512. "* Carla Patchbay & Rack : ${STATUS_CARLA}\n"
  513. "* SoundFont2 player : ${STATUS_FLUIDSYNTH}\n"
  514. "* Stk Mallets : ${STATUS_STK}\n"
  515. "* VST-instrument hoster : ${STATUS_VST}\n"
  516. "* VST-effect hoster : ${STATUS_VST}\n"
  517. "* CALF LADSPA plugins : ${STATUS_CALF}\n"
  518. "* CAPS LADSPA plugins : ${STATUS_CAPS}\n"
  519. "* CMT LADSPA plugins : ${STATUS_CMT}\n"
  520. "* TAP LADSPA plugins : ${STATUS_TAP}\n"
  521. "* SWH LADSPA plugins : ${STATUS_SWH}\n"
  522. "* GIG player : ${STATUS_GIG}\n"
  523. )
  524. MESSAGE(
  525. "\n"
  526. "-----------------------------------------------------------------\n"
  527. "IMPORTANT:\n"
  528. "after installing missing packages, remove CMakeCache.txt before\n"
  529. "running cmake again!\n"
  530. "-----------------------------------------------------------------\n"
  531. "\n\n")
  532. INCLUDE(InstallRequiredSystemLibraries)