#============================================================================= # MusE # Linux Music Editor # $Id:$ # # Copyright (C) 1999-2011 by Werner Schweer and others # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #============================================================================= include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) set (SubDirs widgets mplugins components arranger cliplist ctrl driver function_dialogs instruments liste marker master midiedit mixer waveedit ) if(LV2_SUPPORT) if(HAVE_GTK2) set ( SubDirs ${SubDirs} lv2Gtk2Support ) endif(HAVE_GTK2) endif(LV2_SUPPORT) if (PYTHON_SUPPORT) set ( REM_LIB remote ) set ( SubDirs ${SubDirs} remote ) endif (PYTHON_SUPPORT) # subdirs (${SubDirs}) ## ## Expand Qt macros in source files ## QT5_WRAP_CPP ( muse_moc_headers app.h cobject.h conf.h midieditor.h midi_editor_layout.h plugin.h rasterizer.h scripts.h song.h transport.h value.h steprec.h vst_native.h ) QT5_WRAP_CPP ( wavepreview_moc_headers wavepreview.h ) ## ## Resource files ## QT5_ADD_RESOURCES (muse_qrc_files # muse.qrc ../resources.qrc ) file (GLOB core_source_files app.cpp audio.cpp audio_fifo.cpp audioprefetch.cpp audiotrack.cpp cobject.cpp conf.cpp controlfifo.cpp ctrl.cpp dialogs.cpp dssihost.cpp event.cpp eventlist.cpp event_tag_list.cpp exportmidi.cpp functions.cpp gconfig.cpp globals.cpp help.cpp helper.cpp importmidi.cpp key.cpp keyevent.cpp metronome_class.cpp midi.cpp midictrl.cpp mididev.cpp midieditor.cpp midi_editor_layout.cpp midievent.cpp midifile.cpp midiport.cpp midiseq.cpp mtc.cpp name_factory.cpp node.cpp operations.cpp osc.cpp part.cpp plugin.cpp pluglist.cpp pos.cpp rasterizer.cpp route.cpp scripts.cpp seqmsg.cpp shortcuts.cpp sig.cpp song.cpp songfile.cpp songfile_discovery.cpp stringparam.cpp sync.cpp synth.cpp tempo.cpp thread.cpp ticksynth.cpp track.cpp transport.cpp transport_obj.cpp undo.cpp value.cpp vst.cpp vst_native.cpp wave_helper.cpp waveevent.cpp wavetrack.cpp steprec.cpp value_units.cpp xml_statistics.cpp ) file (GLOB main_source_files main.cpp ) file (GLOB icons_source_files icons.cpp ) file (GLOB latency_compensator_source_files latency_info.cpp latency_compensator.cpp ) file (GLOB wavepreview_source_files wavepreview.cpp ) ## ## Define target ## add_library ( latency_compensator_module SHARED ${latency_compensator_source_files} ) add_library ( wavepreview_module SHARED ${wavepreview_moc_headers} ${wavepreview_source_files} ) add_library ( core ${MODULES_BUILD} ${muse_moc_headers} ${core_source_files} ) add_executable ( muse ${main_source_files} ${muse_qrc_files} ) add_library ( icons ${MODULES_BUILD} ${icons_source_files} ) set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${main_source_files} ${core_source_files} CACHE INTERNAL "" ) ## ## Directories that will be passed to the compiler with -I flag ## include_directories ( arranger cliplist components driver function_dialogs instruments liste midiedit mixer mplugins remote waveedit widgets lv2Support ) # Make sure to include the uic generated headers paths. include_directories( ${CMAKE_CURRENT_BINARY_DIR}/arranger ${CMAKE_CURRENT_BINARY_DIR}/cliplist ${CMAKE_CURRENT_BINARY_DIR}/driver ${CMAKE_CURRENT_BINARY_DIR}/instruments ${CMAKE_CURRENT_BINARY_DIR}/liste ${CMAKE_CURRENT_BINARY_DIR}/midiedit ${CMAKE_CURRENT_BINARY_DIR}/mixer ${CMAKE_CURRENT_BINARY_DIR}/mplugins ${CMAKE_CURRENT_BINARY_DIR}/remote ${CMAKE_CURRENT_BINARY_DIR}/waveedit ${CMAKE_CURRENT_BINARY_DIR}/widgets ${CMAKE_CURRENT_BINARY_DIR}/components ${CMAKE_CURRENT_BINARY_DIR}/function_dialogs ) ## ## Compilation flags and target name ## set_target_properties( core PROPERTIES COMPILE_FLAGS "${VST_SDK_QUIRK}" OUTPUT_NAME muse_core ) set_target_properties( muse PROPERTIES OUTPUT_NAME ${MusE_EXEC_NAME} ) set_target_properties( icons PROPERTIES OUTPUT_NAME muse_icons ) set_target_properties( latency_compensator_module PROPERTIES OUTPUT_NAME muse_latency_compensator_module ) set_target_properties( wavepreview_module PROPERTIES OUTPUT_NAME muse_wavepreview_module ) ## ## Linkage ## target_link_libraries(wavepreview_module ${QT_LIBRARIES} ${SNDFILE_LIBRARIES} ${SAMPLERATE_LIBRARIES} ) target_link_libraries(core al arranger audio_converter_plugin cliplist ctrl driver evdata_module file_module icons instruments latency_compensator_module liste marker master memory_module midiedit midi_controller_module mixer mpevent_module mplugins muse_string plugin_scan_module plugin_cache_writer_module Threads::Threads synti sysex_helper_module time_stretch_module wave_module waveedit wavepreview_module widgets components widgets_functiondialogs xml_module ${QT_LIBRARIES} ## Bring in the dssi alsa compatibility libraries if required ${DSSI_ALSA_COMPAT_LIBRARIES} ${SNDFILE_LIBRARIES} # Note that this also appears in the audio_convert/src_resampler shared library. ${SAMPLERATE_LIBRARIES} ${REM_LIB} ${FST_LIB} dl ) if(NOT LV2_USE_PLUGIN_CACHE) target_link_libraries(core plugin_cache_reader_module) endif(NOT LV2_USE_PLUGIN_CACHE) if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) message("Warning: HAVE_CXX_ATOMICS_WITHOUT_LIB or HAVE_CXX_ATOMICS64_WITHOUT_LIB are false. Linking core with required libatomic.") target_link_libraries(core atomic) endif(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) if(HAVE_LASH) target_link_libraries(core ${LASH_LIBRARIES}) endif(HAVE_LASH) if(OSC_SUPPORT) target_link_libraries(core ${LIBLO_LIBRARIES}) endif(OSC_SUPPORT) if(MIDNAM_SUPPORT) target_link_libraries(core midnam_module) endif(MIDNAM_SUPPORT) # Certain warnings in lv2 headers are causing errors with recent gcc. # It seems there's no way to suppress -Werror from within code. # The slightest warning in some header file can now trigger an error. # Gcc help warns that only some warnings can be suppressed. # 'pragma GCC diagnostic ignored "-Wparentheses"' didn't work. # Looks like no choice but to make the lv2host a module with separate flags. # if(LV2_SUPPORT) ## ## Expand Qt macros in source files ## QT5_WRAP_CPP ( lv2host_moc_headers lv2host.h ) file (GLOB lv2host_source_files lv2host.cpp ) add_library ( lv2host_module ${MODULES_BUILD} ${lv2host_moc_headers} ${lv2host_source_files} ) set_target_properties( lv2host_module # Avoid treating warnings as errors here, unlike the rest of the app. PROPERTIES COMPILE_FLAGS "-Wno-error" OUTPUT_NAME muse_lv2host_module ) target_link_libraries(lv2host_module ${LILV_LIBRARIES}) target_link_libraries(lv2host_module ${SORD_LIBRARIES}) target_link_libraries(lv2host_module ${LV2_LIBRARIES}) target_link_libraries(lv2host_module ${SERD_LIBRARIES}) if(HAVE_GTK2) target_link_libraries(lv2host_module lv2_gtk2_support) endif(HAVE_GTK2) target_link_libraries(lv2host_module ${QT_LIBRARIES}) if(MIDNAM_SUPPORT) target_link_libraries(lv2host_module midnam_module) endif(MIDNAM_SUPPORT) target_link_libraries(lv2host_module midi_controller_module) target_link_libraries(core lv2host_module) endif(LV2_SUPPORT) target_link_libraries(muse midiedit core # Note that this also appears in the fluidsynth MESS shared library. ${INSTPATCH_LIBRARIES} ) target_link_libraries(icons ${QT_LIBRARIES} ) ## ## Install location ## install( TARGETS muse RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/ ) install(TARGETS latency_compensator_module wavepreview_module DESTINATION ${MusE_MODULES_DIR} ) if ( ${MODULES_BUILD} STREQUAL SHARED ) install(TARGETS core icons # latency_compensator_module DESTINATION ${MusE_MODULES_DIR} ) # This conditional fixes an error when LV2_SUPPORT is false: # "install TARGETS given target "lv2host_module" which does not exist." if (LV2_SUPPORT) install ( TARGETS lv2host_module DESTINATION ${MusE_MODULES_DIR} ) endif (LV2_SUPPORT) endif ( ${MODULES_BUILD} STREQUAL SHARED ) foreach(subdir ${SubDirs}) # MESSAGE( STATUS "Adding subdir " ${subdir} ) ADD_SUBDIRECTORY(${subdir}) endforeach()