# Define Sources of this Canorus directory

INCLUDE(CheckLibraryExists)
FIND_PACKAGE(Qt4)

# This module is used to resolve the file dependencies
# for QT files using an UI (User Unterface) Qt file
# created with the Qt4 designer
# INCLUDE(AddFileDependencies)

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g")

# Build universal binaries on Mac
IF(APPLE)
	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch ppc -arch i386")
	SET(DEFAULT_DATA_DIR "Canorus.app/Contents/Resources")
ENDIF(APPLE)

#######################
# Scripting detection #
#######################
# The following lines detect scripting environments (SWIG, Ruby, Python etc.)
FIND_PACKAGE(SWIG QUIET)
IF(SWIG_FOUND AND NOT NO_SWIG)
	SET(USE_SWIG True)
	MESSAGE("SWIG found, using scripting extensions.")
ELSE(SWIG_FOUND AND NOT NO_SWIG)
	MESSAGE("SWIG *not* found, disabling SWIG!")
	SET(NO_RUBY True)
	SET(NO_PYTHON True)
ENDIF(SWIG_FOUND AND NOT NO_SWIG)

FIND_PACKAGE(Ruby)	#Setup RUBY_INCLUDE_PATH and RUBY_LIBRARIES
IF(RUBY_INCLUDE_PATH AND NOT NO_RUBY)
	MESSAGE("Ruby Library and Development files found. Ruby extensions enabled.")
	SET(USE_RUBY True)
    # Create empty file as needed so build does not stop here		
	FILE(APPEND ${CMAKE_CURRENT_SOURCE_DIR}/scripting/canorusrubyRUBY_wrap.cxx "")
ELSE(RUBY_INCLUDE_PATH AND NOT NO_RUBY)
	MESSAGE("Ruby Library and Development files *not* found. Ruby extensions disabled!")
	SET(RUBY_LIBRARY "")
ENDIF(RUBY_INCLUDE_PATH AND NOT NO_RUBY)

FIND_PACKAGE(PythonLibs)
IF(PYTHON_INCLUDE_PATH AND NOT NO_PYTHON)
	MESSAGE("Python Library and Development files found. Python extensions enabled.")
	# PYTHON_LIBRARY points to C:\PythonXY\pythonXY.dll
	# PYTHON_LIB should point to C:\PythonXY\Lib
	STRING(REGEX REPLACE "([^ ]+)[/\\].*" "\\1" PYTHON_LIB "${PYTHON_LIBRARY}") # remove pythonXY.dll
	STRING(REGEX REPLACE "\\\\" "/" PYTHON_LIB "${PYTHON_LIB}")  # Replace back slashes to slashes
	SET( PYTHON_LIB "${PYTHON_LIB}/Lib/" ) # add /Lib/

	# Needed on some Linux distros (SuSE, Gentoo) to prevent linking issues (openpty, forkpty) 
	CHECK_LIBRARY_EXISTS(util openpty "" HAVE_OPENPTY)
	IF("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
		IF (HAVE_OPENPTY)
			SET(PYTHON_LIBRARY ${PYTHON_LIBRARY} util)
		ENDIF (HAVE_OPENPTY)
	ENDIF("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
	
	SET(USE_PYTHON True)
ELSE(PYTHON_INCLUDE_PATH AND NOT NO_PYTHON)
	MESSAGE("Python Library and Development files *not* found. Python extensions disabled!")
	SET(PYTHON_LIBRARY "")
ENDIF(PYTHON_INCLUDE_PATH AND NOT NO_PYTHON)

##################################
# Poppler detection for printing #
##################################
#FIND_PATH(POPPLER_INCLUDE_PATH 
#	NAMES	poppler-config.h
#	PATH_SUFFIXES poppler
# )
#FIND_LIBRARY(POPPLER_LIBRARY NAMES poppler )
#FIND_LIBRARY(POPPLERQT4_LIBRARY NAMES poppler-qt4)
#IF(POPPLER_INCLUDE_PATH AND POPPLER_LIBRARY AND POPPLERQT4_LIBRARY)
#	MESSAGE("Poppler Libraries found. Printing enabled.")
#	MESSAGE("Include path: ${POPPLER_INCLUDE_PATH}" )
#	SET(USE_POPPLER True)
#	SET(POPPLER_SOURCE control/printctl.cpp)
#	SET(POPPLER_HEADER control/printctl.h)
#ELSE(POPPLER_INCLUDE_PATH AND POPPLER_LIBRARY AND POPPLERQT4_LIBRARY)
#	MESSAGE("Poppler Library and Development files *not* found. Printing disabled!")
#	MESSAGE("Path ${POPPLER_INCLUDE_PATH}, Lib ${POPPLER_LIBRARIES}")
#	SET(POPPLER_LIBRARY "")
#	SET(POPPLER_INCLUDE_PATH "")
#	SET(POPPLERQT4_LIBRARY "")
#	SET(POPPLER_SOURCE "")
#	SET(POPPLER_HEADER "")
#ENDIF(POPPLER_INCLUDE_PATH AND POPPLER_LIBRARY AND POPPLERQT4_LIBRARY)

# Set ZLib sources on windows
FILE(GLOB ZLIB_Srcs "zlib/*.c")

##############################
# List of Qt4-parsed sources #
##############################
# Define the UI source files used by Canorus
SET(Canorus_UIs		# List of .ui forms drawn by qt-designer that need to be compiled
	ui/mainwin.ui
	ui/settingsdialog.ui
	
	ui/propertiesdialog.ui
	ui/documentproperties.ui
	ui/sheetproperties.ui
	ui/staffproperties.ui
	ui/voiceproperties.ui
	ui/lyricscontextproperties.ui
	ui/functionmarkcontextproperties.ui
	
	ui/midirecorder.ui
	ui/transposeview.ui
)

# Define the MOC source files used by Canorus
SET(Canorus_Gui_MOCs	# List of classes which Qt needs to produce MOCs for them (in order for events, signals, slots and other macros to work)
	core/autorecovery.h
	
	ui/mainwin.h
	ui/settingsdialog.h
	ui/propertiesdialog.h
	ui/transposeview.h
	
	widgets/lcdnumber.h
	widgets/viewport.h
	widgets/viewportcontainer.h
	widgets/scoreviewport.h
	widgets/sourceviewport.h
	widgets/toolbutton.h
	widgets/toolbuttonpopup.h
	widgets/menutoolbutton.h
	widgets/undotoolbutton.h
	widgets/pyconsole.h
	widgets/midirecorderview.h
	widgets/resourceview.h
	widgets/helpbrowser.h
	
	control/previewctl.h
	control/printctl.h
)

SET(Canorus_Core_MOCs # MOCs compiled into scripting library as well
	import/import.h
	export/export.h
	export/pdfexport.h
	export/svgexport.h

	control/externprogram.h
	control/typesetctl.h
	
	interface/mididevice.h
	interface/playback.h
	core/midirecorder.h

	interface/pluginaction.h
)

################
# Qt4 settings #
################
# Enable needed Qt modules for Canorus
SET(QT_USE_QTXML True) # Save/Load
SET(QT_USE_QTSVG True) # Icons, Images etc.
SET(QT_USE_QTHELP True) # Inline help browser
SET(QT_USE_QTWEBKIT True) # Inline help browser

# Add all resources to Canorus_Resrcs (icons, html files etc.)
#SET(Canorus_Resrcs ui/mainwin.qrc) # not needed, all resources are loaded on-the-fly

# Add all the dependencies needed for the MainWindow
# add_file_dependencies( ui/mainwin.cpp ui/ui_mainwin.h )

# This scripts runs the resource compiler rcc.
# The result of it is stored into Canorus_Resrcs_Srcs
# variable. This has to be included later in the
# add_executable line.
QT4_ADD_RESOURCES(Canorus_Resrcs_Srcs ${Canorus_Resrcs})

# This scripts runs the user interface compiler uic.
# The result of it is stored into Canorus_UIC_Srcs
# variable. This has to be included later in the
# add_executable line.
QT4_WRAP_UI(Canorus_UIC_Srcs ${Canorus_UIs})

# This script runs the meta object compiler moc.
# The result of it is stored into Canorus_Gui_MOC_Srcs and Canorus_Core_MOC_Srcs
# variable. This has to be included later in the
# add_executable line.
QT4_WRAP_CPP(Canorus_Gui_MOC_Srcs ${Canorus_Gui_MOCs})
QT4_WRAP_CPP(Canorus_Core_MOC_Srcs ${Canorus_Core_MOCs})

#########################
# List of other sources #
#########################
SET(Canorus_Core_Srcs		# Core sources - data part of the MVC model
	core/settings.cpp
	core/undocommand.cpp
	core/undo.cpp
	core/autorecovery.cpp
	core/mimedata.cpp
	core/file.cpp
	core/fileformats.cpp
	core/typesetter.cpp
	core/tar.cpp
	core/archive.cpp
	core/resource.cpp
	core/midirecorder.cpp
	
	core/playablelength.cpp
	core/diatonicpitch.cpp
	core/interval.cpp
	core/diatonickey.cpp
	core/transpose.cpp
	
	core/document.cpp
	core/sheet.cpp
	core/context.cpp
	core/staff.cpp
	core/functionmarkcontext.cpp
	core/lyricscontext.cpp
	
	core/muselement.cpp
	core/muselementfactory.cpp
	core/voice.cpp
	core/barline.cpp
	core/clef.cpp
	core/keysignature.cpp
	core/timesignature.cpp
	core/playable.cpp
	core/note.cpp
	core/slur.cpp
	core/tuplet.cpp
	core/rest.cpp
	
	core/mark.cpp
	core/articulation.cpp
	core/fermata.cpp
	core/repeatmark.cpp
	core/tempo.cpp
	core/ritardando.cpp
	core/text.cpp
	core/bookmark.cpp
	core/fingering.cpp
	core/dynamic.cpp
	core/crescendo.cpp
	core/instrumentchange.cpp
	
	core/syllable.cpp
	
	core/functionmark.cpp
)

SET(Canorus_Scripting_Srcs	# Sources meant for bridging C++<->scripting language
	scripting/swigruby.cpp
	scripting/swigpython.cpp
)

SET(Canorus_Widget_Srcs  	# Sources for all custom widgets present in Canorus
	widgets/lcdnumber.cpp
	widgets/scoreviewport.cpp
	widgets/sourceviewport.cpp
	widgets/toolbutton.cpp
	widgets/toolbuttonpopup.cpp
	widgets/menutoolbutton.cpp
	widgets/undotoolbutton.cpp
	widgets/viewport.cpp
	widgets/viewportcontainer.cpp
	widgets/pyconsole.cpp
	widgets/midirecorderview.cpp
	widgets/resourceview.cpp
	widgets/helpbrowser.cpp
)

SET(Canorus_Ui_Srcs		# Implementations of widgets that have their own .ui qt-designer files
	ui/mainwin.cpp
	ui/settingsdialog.cpp
	ui/propertiesdialog.cpp
	ui/transposeview.cpp
)

SET(Canorus_Gui_Ctl_Srcs       # Control instances for user interface or views 
	control/previewctl.cpp
	control/printctl.cpp
	control/helpctl.cpp
)

SET(Canorus_Ctl_Srcs            # Control instances for user interface or views and core
	control/externprogram.cpp
	control/typesetctl.cpp
	control/resourcectl.cpp
)

SET(Canorus_Drawable_Srcs	# Drawable instances of the data
	drawable/drawable.cpp

	drawable/drawablecontext.cpp
	drawable/drawablestaff.cpp
	drawable/drawablelyricscontext.cpp
	drawable/drawablefunctionmarkcontext.cpp

	drawable/drawablemuselement.cpp
	drawable/drawablenote.cpp
	drawable/drawableslur.cpp
	drawable/drawabletuplet.cpp
	drawable/drawablerest.cpp
	drawable/drawableaccidental.cpp
	drawable/drawableclef.cpp
	drawable/drawablekeysignature.cpp
	drawable/drawabletimesignature.cpp
	drawable/drawablebarline.cpp
	drawable/drawablemark.cpp
	drawable/drawablesyllable.cpp
	drawable/drawablefunctionmark.cpp
)

SET(Canorus_Interface_Srcs	# Other interfaces like Engraver, Playback, Plugin manager and others belong here.
	interface/engraver.cpp
	interface/playback.cpp
	interface/rtmididevice.cpp
	interface/mididevice.cpp
	interface/pluginmanager.cpp
	interface/pluginaction.cpp
	interface/plugin.cpp
	interface/keybdinput.cpp

	interface/pyconsoleinterface.cpp
)

SET(Canorus_Export_Srcs     # Classes for exporting Canorus data to various file formats
	export/export.cpp
	export/midiexport.cpp
	export/lilypondexport.cpp
	export/canorusmlexport.cpp
	export/canexport.cpp
	export/musicxmlexport.cpp
	export/pdfexport.cpp
	export/svgexport.cpp
)

SET(Canorus_Import_Srcs     # Classes for import various file formats to Canorus data
	import/import.cpp
	import/lilypondimport.cpp
	import/midiimport.cpp
	import/canorusmlimport.cpp
	import/canimport.cpp
	import/musicxmlimport.cpp
)

SET(Canorus_RtMidi_Srcs		# RtMIDI library
	rtmidi/RtMidi.cpp
)

SET(Canorus_Srcs
	main.cpp
	canorus.cpp
	
	${Canorus_Core_Srcs}
	${Canorus_Ctl_Srcs}
	${Canorus_Gui_Ctl_Srcs}
	${Canorus_Scripting_Srcs}
	${Canorus_Drawable_Srcs}
	${Canorus_Ui_Srcs}
	${Canorus_Interface_Srcs}
	${Canorus_Export_Srcs}
	${Canorus_Import_Srcs}
	${Canorus_RtMidi_Srcs}
	${Canorus_Widget_Srcs}
)

SET(Canorus_Swig_Srcs	# Sources which Swig needs to build its Python/Ruby module.
	core/document.cpp
	core/sheet.cpp
	core/context.cpp
	core/staff.cpp
	core/lyricscontext.cpp
	core/functionmarkcontext.cpp

	core/muselement.cpp
	core/voice.cpp
	core/barline.cpp
	core/clef.cpp
	core/keysignature.cpp
	core/timesignature.cpp
	core/playable.cpp
	core/note.cpp
	core/slur.cpp
	core/tuplet.cpp
	core/rest.cpp
	
	core/playablelength.cpp
	core/diatonicpitch.cpp
	core/interval.cpp
	core/diatonickey.cpp
	core/transpose.cpp
	
	core/mark.cpp
	core/articulation.cpp
	core/fermata.cpp
	core/repeatmark.cpp
	core/tempo.cpp
	core/ritardando.cpp
	core/text.cpp
	core/bookmark.cpp
	core/fingering.cpp
	core/dynamic.cpp
	core/crescendo.cpp
	core/instrumentchange.cpp

	core/syllable.cpp
	
	core/functionmark.cpp
	
	core/settings.cpp
	core/file.cpp
	core/tar.cpp
	core/archive.cpp
	core/resource.cpp
	core/midirecorder.cpp
	core/typesetter.cpp
	${Canorus_Import_Srcs}
	${Canorus_Export_Srcs}
	${Canorus_Ctl_Srcs}
	${Canorus_RtMidi_Srcs}
	interface/rtmididevice.cpp
	interface/mididevice.cpp
	interface/playback.cpp

	interface/pyconsoleinterface.cpp
	interface/plugin.cpp
	interface/pluginaction.cpp
	interface/pluginmanager.cpp
#	interface/plugins_swig.cpp
	scripting/swigpython.cpp
	scripting/swigruby.cpp
	${Canorus_Core_MOC_Srcs}
)
IF(MINGW) # Append ZLIB srcs to Swig srcs on Windows
	SET( Canorus_Swig_Srcs ${Canorus_Swig_Srcs} ${ZLIB_Srcs} )
ENDIF(MINGW)

SET( Canorus_Scripts "scripts" ) # Official scripts shipped with Canorus.

SET( Canorus_Plugins "plugins" ) # Official plug-ins shipped with Canorus.

SET( Canorus_Images "ui/images" )

# Set translation files
FILE(GLOB Canorus_Translation_Srcs "lang/*.ts") # lang/*.ts -> Canorus_Translation_Srcs
STRING(REGEX REPLACE "\\.ts" ".qm" Canorus_Translation_Bins "${Canorus_Translation_Srcs}") # Set Canorus_Translation_Bins to same values as Canorus_Translation_Srcs with different extensions

SET(Canorus_Fonts	# Music fonts needed by Canorus
	fonts/CenturySchL-BoldItal.ttf	# Century family needed for numbers and signs
	fonts/CenturySchL-Bold.ttf
	fonts/CenturySchL-Ital.ttf
	fonts/CenturySchL-Roma.ttf
	fonts/Emmentaler-14.ttf		# LilyPond's emmentaler needed for notes, rests, clefs etc.
	fonts/FreeSans.ttf		# FreeSans needed for function markings
)

IF(APPLE)
	SET(Canorus_OSX_Icon ${CANORUS_OSX_DIR}/files/canorus.icns)
	SET(Canorus_OSX_Info ${CANORUS_OSX_DIR}/files/Info.plist)

	SET(Canorus_OSX_Qt_libs
		${QT_QTCORE_LIBRARY}/Versions/4/QtCore
		${QT_QTGUI_LIBRARY}/Versions/4/QtGui
		${QT_QTXML_LIBRARY}/Versions/4/QtXml
		${QT_QTSVG_LIBRARY}/Versions/4/QtSvg
		)
ENDIF(APPLE)

#########################
# Compiler Define flags #
#########################
# RtMidi cross-platform definitions
IF("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") #IF(LINUX) isn't supported by CMake yet
	ADD_DEFINITIONS(-D__LINUX_ALSASEQ__)
ENDIF("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
IF(APPLE)
	ADD_DEFINITIONS(-D__MACOSX_CORE__)
ENDIF(APPLE)
IF(MINGW)
	ADD_DEFINITIONS(-D__WINDOWS_MM__)
ENDIF(MINGW)

# Define default data dir, if under POSIX systems.
IF(NOT MINGW)
	IF (NOT DEFAULT_DATA_DIR)
		ADD_DEFINITIONS(-DDEFAULT_DATA_DIR=\"${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR}\")
	ELSE (NOT DEFAULT_DATA_DIR)
		ADD_DEFINITIONS(-DDEFAULT_DATA_DIR=\"${DEFAULT_DATA_DIR}\")
	ENDIF (NOT DEFAULT_DATA_DIR)
ENDIF(NOT MINGW)

IF(APPLE)
	SET(MACOSX_BUNDLE_INFO_STRING "Free music score editor")
	SET(MACOSX_BUNDLE_ICON_FILE canorus.icns) # \todo Copy this file to Applications/canorus.app/Resources when the package is created
ENDIF(APPLE)

# Define Canorus version
ADD_DEFINITIONS(-DCANORUS_VERSION=\"${CANORUS_VERSION}\")

# Define Scripting parameters
IF(USE_SWIG)
	ADD_DEFINITIONS(-DUSE_SWIG)
ENDIF(USE_SWIG)
IF(USE_RUBY)
	ADD_DEFINITIONS(-DUSE_RUBY)
ENDIF(USE_RUBY)
IF(USE_PYTHON)
	ADD_DEFINITIONS(-DUSE_PYTHON)
ENDIF(USE_PYTHON)
#IF(USE_POPPLER)
#	ADD_DEFINITIONS(-DUSE_POPPLER)
#ENDIF(USE_POPPLER)

####################################
# Include paths and set up targets #
####################################
# This needs to be added in order for #include to work inside .cpp files - it adds src/ to include path
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

# This line adds the include path of the Qt
# directory to the compiler include path
INCLUDE(${QT_USE_FILE})

IF(USE_SWIG)
	INCLUDE(${SWIG_USE_FILE})
	SET(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_SOURCE_DIR})
ENDIF(USE_SWIG)

IF(USE_RUBY)
	INCLUDE_DIRECTORIES(${RUBY_INCLUDE_PATH})
	SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/scripting/canorusruby.i PROPERTIES CPLUSPLUS ON)
			
	SET(CANORUS_RUBY_WRAP_CXX ${CMAKE_CURRENT_SOURCE_DIR}/scripting/canorusrubyRUBY_wrap.cxx)
	SET_SOURCE_FILES_PROPERTIES(${CANORUS_RUBY_WRAP_CXX} PROPERTIES GENERATED TRUE)
	
	SWIG_ADD_MODULE(CanorusRuby ruby
		${Canorus_Swig_Srcs}
		${CMAKE_CURRENT_SOURCE_DIR}/scripting/canorusruby.i
	)
	SWIG_LINK_LIBRARIES(CanorusRuby ${RUBY_LIBRARY} ${QT_LIBRARIES})
	SET_TARGET_PROPERTIES( ${SWIG_MODULE_CanorusRuby_REAL_NAME} PROPERTIES COMPILE_FLAGS "-DSWIGCPP" )
ENDIF(USE_RUBY)

IF(USE_PYTHON)
	INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
	SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/scripting/canoruspython.i PROPERTIES CPLUSPLUS ON)
	
	SET(CANORUS_PYTHON_WRAP_CXX ${CMAKE_CURRENT_SOURCE_DIR}/scripting/canoruspythonPYTHON_wrap.cxx)
	SET_SOURCE_FILES_PROPERTIES(${CANORUS_PYTHON_WRAP_CXX} PROPERTIES GENERATED TRUE)
	
	SWIG_ADD_MODULE(CanorusPython python 		# Warning! CMake renames CanorusPython automatically to _CanorusPython
		${Canorus_Swig_Srcs}
		${CMAKE_CURRENT_SOURCE_DIR}/scripting/canoruspython.i
	)
	SWIG_LINK_LIBRARIES(CanorusPython ${PYTHON_LIBRARY} ${QT_LIBRARIES})
	SET_TARGET_PROPERTIES( ${SWIG_MODULE_CanorusPython_REAL_NAME} PROPERTIES COMPILE_FLAGS "-DSWIGCPP" )
ENDIF(USE_PYTHON)

#IF(USE_POPPLER)
#	INCLUDE_DIRECTORIES(${POPPLER_INCLUDE_PATH})
#ENDIF(USE_POPPLER)

# Adds Canorus resource file under Windows (Canorus icon etc.).
IF(MINGW)
	# CMake currently doesn't support windres yet. Add command manually
	FIND_PROGRAM(
		WINDRES_PROGRAM windres.exe PATHS
		"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW;InstallLocation]/bin"
		c:/MinGW/bin /MinGW/bin
	)
	ADD_CUSTOM_COMMAND(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/canorusrc.obj
		COMMAND ${WINDRES_PROGRAM}
		-i canorusrc.rc
		-o canorusrc.obj
	)
	SET(Canorus_Srcs ${Canorus_Srcs} ${ZLIB_Srcs} canorusrc.obj)
ENDIF(MINGW)
	
# This line tells cmake to create the Canorus program.
# All dependent libraries like RtMidi must be added here.
# Attention: In contrast to Makefiles don't add "\" to separate lines
ADD_EXECUTABLE(canorus ${Canorus_UIC_Srcs}  ${Canorus_Srcs}
                       ${Canorus_Core_MOC_Srcs} ${Canorus_Gui_MOC_Srcs} ${Canorus_Resrcs_Srcs}
                       ${CANORUS_RUBY_WRAP_CXX}
                       ${CANORUS_PYTHON_WRAP_CXX}
                       ${MACOSX_BUNDLE}	# Works only under Apple - adds the application description, icon etc.
)
IF(USE_RUBY)
	ADD_DEPENDENCIES(canorus ${SWIG_MODULE_CanorusRuby_REAL_NAME}) # Build scripting modules first and then Canorus exe
ENDIF(USE_RUBY)
IF(USE_PYTHON)
	ADD_DEPENDENCIES(canorus ${SWIG_MODULE_CanorusPython_REAL_NAME}) # Build scripting modules first and then Canorus exe
ENDIF(USE_PYTHON)

# Here the needed Qt Libraries are added to the link
# command. Never remove that line :-)
# Add ${QT_QTTEST_LIBRARY} below to add the Qt Test library as well
# Add ${POPPLERQT4_LIBRARY} ${POPPLER_LIBRARY} to reactivate poppler libraries
TARGET_LINK_LIBRARIES(canorus ${QT_LIBRARIES} ${RUBY_LIBRARY} ${PYTHON_LIBRARY} )

############################
# RtMIDI Library additions #
############################
IF("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
	TARGET_LINK_LIBRARIES(canorus "asound")
	IF(USE_PYTHON)
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusPython_REAL_NAME} "asound")
	ENDIF(USE_PYTHON)
	IF(USE_RUBY)
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusRuby_REAL_NAME} "asound")
	ENDIF(USE_RUBY)
ENDIF("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
IF(APPLE)
	TARGET_LINK_LIBRARIES(canorus "-framework CoreMidi")
	TARGET_LINK_LIBRARIES(canorus "-framework CoreAudio")
	TARGET_LINK_LIBRARIES(canorus "-framework CoreFoundation")
	IF(USE_PYTHON)
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusPython_REAL_NAME} "-framework CoreMidi")
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusPython_REAL_NAME} "-framework CoreAudio")
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusPython_REAL_NAME} "-framework CoreFoundation")
	ENDIF(USE_PYTHON)
	IF(USE_RUBY)
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusRuby_REAL_NAME} "-framework CoreMidi")
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusRuby_REAL_NAME} "-framework CoreAudio")
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusRuby_REAL_NAME} "-framework CoreFoundation")
	ENDIF(USE_RUBY)
ENDIF(APPLE)
IF(MINGW)
	TARGET_LINK_LIBRARIES(canorus "winmm.lib")
	TARGET_LINK_LIBRARIES(canorus "-mwindows") # Disable console output on Windows
	IF(USE_PYTHON)
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusPython_REAL_NAME} "winmm.lib")
	ENDIF(USE_PYTHON)
	IF(USE_RUBY)
		TARGET_LINK_LIBRARIES(${SWIG_MODULE_CanorusRuby_REAL_NAME} "winmm.lib")
	ENDIF(USE_RUBY)
ENDIF(MINGW)

###############
# Translation #
###############
ADD_CUSTOM_COMMAND(
	TARGET canorus
	PRE_BUILD
	COMMAND ${QT_BINARY_DIR}/lupdate
	ARGS -noobsolete ${Canorus_UIC_Srcs} ${Canorus_Srcs} -ts ${Canorus_Translation_Srcs} lang/template.ts
)
ADD_CUSTOM_COMMAND(
	TARGET canorus
	PRE_BUILD
	COMMAND ${QT_BINARY_DIR}/lrelease
	ARGS ${Canorus_Translation_Srcs}
)

################
# Installation #
################
# Install canorus exe and CanorusRuby lib
INSTALL(TARGETS canorus
  RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_BIN_DIR}
)
IF(USE_RUBY)
	INSTALL(TARGETS ${SWIG_MODULE_CanorusRuby_REAL_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_LIB_DIR})
	INSTALL(TARGETS ${SWIG_MODULE_CanorusRuby_REAL_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR})
ENDIF(USE_RUBY)
IF(USE_PYTHON)
	INSTALL(TARGETS ${SWIG_MODULE_CanorusPython_REAL_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_LIB_DIR})
	INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CanorusPython.py DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_LIB_DIR})
	INSTALL(TARGETS ${SWIG_MODULE_CanorusPython_REAL_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR})
	INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CanorusPython.py DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR})
ENDIF(USE_PYTHON)

# Install scripts
INSTALL( DIRECTORY ${Canorus_Scripts} DESTINATION "${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR}" PATTERN ".svn" EXCLUDE )
# Install plugins
INSTALL( DIRECTORY ${Canorus_Plugins} DESTINATION "${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR}" PATTERN ".svn" EXCLUDE )
# Install data - icons, images, sounds etc.
INSTALL( DIRECTORY ${Canorus_Images} DESTINATION "${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR}" PATTERN ".svn" EXCLUDE )
# Install translations
INSTALL(FILES ${Canorus_Translation_Bins} DESTINATION "${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR}/lang")
# Install fonts
INSTALL(FILES ${Canorus_Fonts} DESTINATION "${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR}/fonts")
# Install users manual, if it exists
INSTALL(CODE "FILE(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR}/doc)")
INSTALL(CODE "FILE(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR}/doc/usersguide)")
FILE(GLOB Canorus_Usersguide RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ../doc/usersguide/*.qhc ../doc/usersguide/*.qch)
INSTALL(FILES ${Canorus_Usersguide} DESTINATION "${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR}/doc/usersguide")

IF(MINGW)
	# Install Qt libs
	INSTALL( FILES ${QT_BIN_DIR}/QtCore4.dll ${QT_BIN_DIR}/QtGui4.dll ${QT_BIN_DIR}/QtSvg4.dll ${QT_BIN_DIR}/QtXml4.dll ${QT_BIN_DIR}/QtHelp4.dll ${QT_BIN_DIR}/QtSql4.dll ${QT_BIN_DIR}/QtNetwork4.dll ${QT_BIN_DIR}/QtCLucene4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_BIN_DIR} )
	
	# Install qsvg plugin for rendering SVG icons
	INSTALL( FILES ${QT_PLUGINS_DIR}/iconengines/qsvgicon4.dll DESTINATION "${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_BIN_DIR}/iconengines" )
	
	# Install mingwm10.dll
	INSTALL( FILES ${MINGW_BIN_DIR}/mingwm10.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_BIN_DIR} )
	
	# Install Python libs
	IF(USE_PYTHON)
		INSTALL( FILES ${PYTHON_LIBRARY} DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_BIN_DIR} )             # PythonXY.dll
		INSTALL( DIRECTORY ${PYTHON_LIB} DESTINATION "${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_BIN_DIR}/pythonLib" ) # Python .py files
	ENDIF(USE_PYTHON)
	
	# Install Ruby libs
	IF(USE_RUBY)
		INSTALL( FILES ${RUBY_LIBRARY} DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_BIN_DIR} )
	ENDIF(USE_RUBY)
ENDIF(MINGW)

IF(APPLE)
	# Install icon & Info.plist
	INSTALL(FILES ${Canorus_OSX_Icon} DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_DATA_DIR})
	INSTALL(FILES ${Canorus_OSX_Info} DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_OSX_APP_DIR})
	
	# FIXME: library installations disabled for now since linking bundled libs doesn't work properly.
	# -- Sam 2007.06.09
	
	# Install Qt libs
	#INSTALL(PROGRAMS ${Canorus_OSX_Qt_libs} DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_LIB_DIR})
	
	# Install Python libs
	IF(USE_PYTHON)
		# OSX build requires a "framework" build of Python
		# in CMakeCache.txt PYTHON_LIBRARY is not a file but '-framework Python'
		#SET(OSX_PYTHON_LIB /Library/Frameworks/Python.framework/Versions/Current/Python)		
		#INSTALL(FILES ${OSX_PYTHON_LIB} DESTINATION ${CMAKE_INSTALL_PREFIX}/${CANORUS_INSTALL_LIB_DIR})
	ENDIF(USE_PYTHON)
	
	# Make a list of source libraries so the packaging script knows which symbols to change
	# Bundle Qt libs and Python with the .app, OSX comes with the correct version of Ruby already installed
	#SET(OSX_installed_libs_file ${CANORUS_OSX_DIR}/OSX_installed_libs.txt)
	#SET(OSX_installed_libs ${Canorus_OSX_Qt_libs} ${OSX_PYTHON_LIB})
	#FILE(WRITE ${OSX_installed_libs_file} "")
	#FOREACH(file ${OSX_installed_libs})
	#	FILE(APPEND ${OSX_installed_libs_file} "${file}\n")
	#ENDFOREACH(file)
ENDIF(APPLE)
