Skip to content
Snippets Groups Projects
CMakeLists.txt 40.2 KiB
Newer Older
# NOTE that there are a lot of places in this CMakeLists where files need to
# be explicitly listed - we not only have to add the sources and headers,
# but also the files that need to be made known to Qt and sip.

###########################################################################
# Add the source files
###########################################################################

set ( QTIPLOT_SRCS src/ApplicationWindow.cpp
                   src/ArrowMarker.cpp
                   src/AssociationsDialog.cpp
                   src/AxesDialog.cpp
                   src/AxisDetails.cpp
                   src/Bar.cpp
                   src/BoxCurve.cpp
                   src/CanvasPicker.cpp
                   src/ColorMapDialog.cpp
                   src/Cone3D.cpp
                   src/ConfigDialog.cpp
                   src/ContourLinesEditor.cpp
                   src/Convolution.cpp
                   src/Correlation.cpp
                   src/CurveRangeDialog.cpp
                   src/CurvesDialog.cpp
                   src/CustomActionDialog.cpp
                   src/DataPickerTool.cpp
                   src/DataSetDialog.cpp
                   src/Differentiation.cpp
                   src/ErrDialog.cpp
                   src/ExpDecayDialog.cpp
                   src/ExponentialFit.cpp
                   src/ExportDialog.cpp
                   src/FFT.cpp
                   src/FFTDialog.cpp
                   src/FFTFilter.cpp
                   src/Filter.cpp
                   src/FilterDialog.cpp
                   src/FindDialog.cpp
                   src/Fit.cpp
                   src/FitDialog.cpp
                   src/fit_gsl.cpp
                   src/FitModelHandler.cpp
                   src/FloatingWindow.cpp
                   src/Folder.cpp
                   src/FunctionCurve.cpp
                   src/FunctionDialog.cpp
                   src/Graph3D.cpp
                   src/Graph.cpp
                   src/Grid.cpp
                   src/GridDetails.cpp
                   src/ImageDialog.cpp
                   src/ImageExportDialog.cpp
                   src/ImageMarker.cpp
                   src/ImportASCIIDialog.cpp
                   src/importOPJ.cpp
                   src/IntDialog.cpp
                   src/Integration.cpp
                   src/Interpolation.cpp
                   src/InterpolationDialog.cpp
                   src/LayerDialog.cpp
                   src/LegendWidget.cpp
                   src/LineDialog.cpp
                   src/LineProfileTool.cpp
                   src/LogisticFit.cpp
                   src/MatrixCommand.cpp
                   src/Matrix.cpp
                   src/MatrixDialog.cpp
                   src/MatrixModel.cpp
                   src/MatrixSizeDialog.cpp
                   src/MatrixValuesDialog.cpp
                   src/MdiSubWindow.cpp
                   src/MultiLayer.cpp
                   src/MultiPeakFit.cpp
                   src/MultiPeakFitTool.cpp
                   src/muParserScript.cpp
                   src/muParserScripting.cpp
                   src/MyParser.cpp
                   src/NonLinearFit.cpp
                   src/Note.cpp
                   src/nrutil.cpp
                   src/OpenProjectDialog.cpp
                   src/Plot3DDialog.cpp
                   src/Plot.cpp
                   src/PlotCurve.cpp
                   src/PlotDialog.cpp
                   src/PlotWizard.cpp
                   src/PluginFit.cpp
                   src/PolynomFitDialog.cpp
                   src/PolynomialFit.cpp
                   src/ProjectSaveView.cpp
                   src/ProjectSerialiser.cpp
                   src/PythonScript.cpp
                   src/PythonScripting.cpp
                   src/QwtBarCurve.cpp
                   src/QwtErrorPlotCurve.cpp
                   src/QwtHistogram.cpp
                   src/QwtPieCurve.cpp
                   src/RangeSelectorTool.cpp
                   src/RenameWindowDialog.cpp
                   src/ScaleDetails.cpp
                   src/ScaleDraw.cpp
                   src/ScalePicker.cpp
                   src/ScreenPickerTool.cpp
                   src/Script.cpp
                   src/Scripted.cpp
                   src/ScriptingEnv.cpp
                   src/ScriptingLangDialog.cpp
                   src/ScriptingWindow.cpp
                   src/MultiTabScriptInterpreter.cpp
                   src/SelectionMoveResizer.cpp
                   src/SendToProgramDialog.cpp
                   src/SetColValuesDialog.cpp
                   src/SigmoidalFit.cpp
                   src/SmoothCurveDialog.cpp
                   src/SmoothFilter.cpp
                   src/SortDialog.cpp
                   src/Spectrogram.cpp
                   src/SurfaceDialog.cpp
                   src/Table.cpp
                   src/TableDialog.cpp
                   src/TableStatistics.cpp
                   src/TextDialog.cpp
                   src/TextEditor.cpp
                   src/TiledWindow.cpp
                   src/TitlePicker.cpp
                   src/TranslateCurveTool.cpp
                   src/UserFunction.cpp
                   src/VectorCurve.cpp
                   src/WindowFactory.cpp
                   src/lib/src/ColorBox.cpp
                   src/lib/src/ColorButton.cpp
                   src/lib/src/ColorMapEditor.cpp
                   src/lib/src/ExtensibleFileDialog.cpp
                   src/lib/src/LineNumberDisplay.cpp
                   src/lib/src/PatternBox.cpp
                   src/lib/src/PenStyleBox.cpp
                   src/lib/src/SymbolBox.cpp
                   src/lib/src/SymbolDialog.cpp
                   src/lib/src/TextFormatButtons.cpp
                   src/lib/3rdparty/qtcolorpicker/src/qtcolorpicker.cpp
set ( QTIPLOT_C_SRC src/zlib123/minigzip.c )

# Suppress compiler warning on file that isn't ours
if ( CMAKE_COMPILER_IS_GNUCXX )
  set_source_files_properties ( src/lib/3rdparty/qtcolorpicker/src/qtcolorpicker.cpp
                                PROPERTIES COMPILE_FLAGS -Wno-cast-qual )
endif ()

set ( MANTID_SRCS  src/Mantid/AlgorithmDockWidget.cpp
				   src/Mantid/AlgorithmMonitor.cpp
                   src/Mantid/AlgorithmHistoryWindow.cpp
                   src/Mantid/ErrorBarSettings.cpp
                   src/Mantid/FitParameterTie.cpp
                   src/Mantid/IFunctionWrapper.cpp
                   src/Mantid/ImportWorkspaceDlg.cpp
                   src/Mantid/InputHistory.cpp
				   src/Mantid/LabelToolLogValuesDialog.cpp
                   src/Mantid/ManageCustomMenus.cpp
                   src/Mantid/ManageInterfaceCategories.cpp
                   src/Mantid/MantidAbout.cpp
                   src/Mantid/MantidApplication.cpp
                   src/Mantid/MantidCurve.cpp
                   src/Mantid/MantidMatrixCurve.cpp
		   src/Mantid/MantidMatrixDxExtensionHandler.cpp
		   src/Mantid/MantidMatrixExtensionRequest.cpp
                   src/Mantid/MantidMatrixFunction.cpp
		   src/Mantid/MantidMatrixModel.cpp
                   src/Mantid/MantidMDCurve.cpp
                   src/Mantid/MantidMDCurveDialog.cpp
                   src/Mantid/MantidMatrixDialog.cpp
                   src/Mantid/MantidPlotUtilities.cpp
                   src/Mantid/MantidSampleLogDialog.cpp
                   src/Mantid/MantidSampleMaterialDialog.cpp
                   src/Mantid/MantidSurfaceContourPlotGenerator.cpp
                   src/Mantid/PeakPickerTool.cpp
                   src/Mantid/Preferences.cpp
                   src/Mantid/RemoveErrorsDialog.cpp
				   src/Mantid/SampleLogDialogBase.cpp
                   src/Mantid/UserFitFunctionDialog.cpp
                   src/Mantid/InstrumentWidget/InstrumentWindow.cpp
)

###########################################################################
# Add the headers (so they show up in Visual Studio solutions)
###########################################################################

set ( QTIPLOT_HDRS src/ApplicationWindow.h
                   src/ArrowMarker.h
                   src/AssociationsDialog.h
                   src/AxesDialog.h
                   src/AxisDetails.h
                   src/Bar.h
                   src/BoxCurve.h
                   src/CanvasPicker.h
                   src/ColorMapDialog.h
                   src/Cone3D.h
                   src/ConfigDialog.h
                   src/ContourLinesEditor.h
                   src/Convolution.h
                   src/Correlation.h
                   src/cursors.h
                   src/CurveRangeDialog.h
                   src/CurvesDialog.h
                   src/CustomActionDialog.h
                   src/customevents.h
                   src/DataPickerTool.h
                   src/DataSetDialog.h
                   src/Differentiation.h
                   src/ErrDialog.h
                   src/ExpDecayDialog.h
                   src/ExponentialFit.h
                   src/ExportDialog.h
                   src/FFTDialog.h
                   src/FFTFilter.h
                   src/FFT.h
                   src/FilterDialog.h
                   src/Filter.h
                   src/FindDialog.h
                   src/FitDialog.h
                   src/fit_gsl.h
                   src/Fit.h
                   src/FitModelHandler.h
                   src/FloatingWindow.h
                   src/Folder.h
                   src/FunctionCurve.h
                   src/FunctionDialog.h
                   src/globals.h
                   src/Graph3D.h
                   src/Graph.h
                   src/Grid.h
                   src/GridDetails.h
                   src/ImageDialog.h
                   src/ImageExportDialog.h
                   src/ImageMarker.h
                   src/ImportASCIIDialog.h
                   src/importOPJ.h
                   src/IntDialog.h
                   src/Integration.h
                   src/InterpolationDialog.h
                   src/Interpolation.h
                   src/LayerDialog.h
                   src/LegendWidget.h
                   src/LineDialog.h
                   src/LineProfileTool.h
                   src/LogisticFit.h
                   src/MatrixCommand.h
                   src/MatrixDialog.h
                   src/Matrix.h
                   src/MatrixModel.h
                   src/MatrixSizeDialog.h
                   src/MatrixValuesDialog.h
                   src/MdiSubWindow.h
                   src/MultiLayer.h
                   src/MultiPeakFit.h
                   src/MultiPeakFitTool.h
                   src/muParserScript.h
                   src/muParserScripting.h
                   src/MyParser.h
                   src/NonLinearFit.h
                   src/Note.h
                   src/nrutil.h
                   src/OpenProjectDialog.h
                   src/Plot3DDialog.h
                   src/PlotCurve.h
                   src/PlotDialog.h
                   src/Plot.h
                   src/PlotToolInterface.h
                   src/PlotWizard.h
                   src/PluginFit.h
                   src/PolynomFitDialog.h
                   src/PolynomialFit.h
                   src/ProjectSerialiser.h
                   src/ProjectSaveView.h
                   src/PythonScript.h
                   src/PythonScripting.h
                   src/QwtBarCurve.h
                   src/QwtErrorPlotCurve.h
                   src/QwtHistogram.h
                   src/QwtPieCurve.h
                   src/RangeSelectorTool.h
                   src/RenameWindowDialog.h
                   src/resource.h
                   src/ScaleDetails.h
                   src/ScaleDraw.h
                   src/ScalePicker.h
                   src/ScreenPickerTool.h
                   src/Scripted.h
                   src/Script.h
                   src/ScriptingEnv.h
                   src/ScriptingLangDialog.h
                   src/ScriptingWindow.h
                   src/MultiTabScriptInterpreter.h
                   src/ScriptOutputDisplay.h
                   src/ScriptFileInterpreter.h
                   src/SendToProgramDialog.h
                   src/SetColValuesDialog.h
                   src/SigmoidalFit.h
                   src/SmoothCurveDialog.h
                   src/SmoothFilter.h
                   src/SortDialog.h
                   src/Spectrogram.h
                   src/SurfaceDialog.h
                   src/TableDialog.h
                   src/Table.h
                   src/TableStatistics.h
                   src/TextDialog.h
                   src/TextEditor.h
                   src/TiledWindow.h
                   src/TitlePicker.h
                   src/TranslateCurveTool.h
                   src/UserFunction.h
                   src/VectorCurve.h
                   src/WindowFactory.h
                   src/analysis/fft2D.h
                   src/origin/OPJFile.h
                   src/lib/include/ColorBox.h
                   src/lib/include/ColorButton.h
                   src/lib/include/ColorMapEditor.h
                   src/lib/include/ExtensibleFileDialog.h
                   src/lib/include/LineNumberDisplay.h
                   src/lib/include/PatternBox.h
                   src/lib/include/PenStyleBox.h
                   src/lib/include/SymbolBox.h
                   src/lib/include/SymbolDialog.h
                   src/lib/include/TextFormatButtons.h
                   src/lib/3rdparty/qtcolorpicker/src/qtcolorpicker.h
set ( MANTID_HDRS  src/Mantid/AlgorithmMonitor.h
                   src/Mantid/AlgorithmHistoryWindow.h
                   src/Mantid/ErrorBarSettings.h
                   src/Mantid/FitParameterTie.h
                   src/Mantid/IFunctionWrapper.h
                   src/Mantid/ImportWorkspaceDlg.h
		   src/Mantid/IMantidMatrixExtensionHandler.h
				   src/Mantid/LabelToolLogValuesDialog.h
                   src/Mantid/ManageCustomMenus.h
                   src/Mantid/ManageInterfaceCategories.h
                   src/Mantid/MantidAbout.h
                   src/Mantid/MantidApplication.h
                   src/Mantid/MantidCurve.h
                   src/Mantid/MantidMatrixCurve.h
		   src/Mantid/MantidMatrixDxExtensionHandler.h
		   src/Mantid/MantidMatrixExtensionRequest.h
		   src/Mantid/MantidMatrixModel.h
		   src/Mantid/MantidMatrixNullExtensionHandler.h
		   src/Mantid/MantidMatrixTabExtension.h
                   src/Mantid/MantidMDCurve.h
                   src/Mantid/MantidMDCurveDialog.h
                   src/Mantid/MantidMatrixDialog.h
                   src/Mantid/MantidMatrix.h
                   src/Mantid/MantidMatrixFunction.h
                   src/Mantid/MantidPlotUtilities.h
                   src/Mantid/MantidSampleLogDialog.h
                   src/Mantid/MantidSampleMaterialDialog.h
		   src/Mantid/MantidSurfaceContourPlotGenerator.h
                   src/Mantid/PeakPickerTool.h
                   src/Mantid/Preferences.h
                   src/Mantid/RemoveErrorsDialog.h
				   src/Mantid/SampleLogDialogBase.h
                   src/Mantid/UserFitFunctionDialog.h
                   src/Mantid/InstrumentWidget/InstrumentWindow.h
###########################################################################
# Add Qt to the include path
###########################################################################

###########################################################################
###########################################################################
include_directories ( ${PYTHON_INCLUDE_PATH} )
set ( SIP_SPEC ${CMAKE_CURRENT_SOURCE_DIR}/src/qti.sip )
set ( SIP_SRC_IN ${CMAKE_CURRENT_SOURCE_DIR}/src/sipqti.cpp.in )
set ( SIP_SRC ${CMAKE_CURRENT_BINARY_DIR}/sipqti.cpp )
set ( SIP_SRC_AUTO sip_qtipart0.cpp )

# We need to manually add all the headers that are in qti.sip
# so that the dependencies are known to CMake
set ( SIP_HDRS src/MdiSubWindow.h
               src/Table.h
               src/Matrix.h
               src/ArrowMarker.h
               src/ImageMarker.h
               src/LegendWidget.h
               src/Grid.h
               src/Graph.h
               src/MultiLayer.h
               src/Note.h
               src/Graph3D.h
               src/ApplicationWindow.h
               src/PythonScripting.h
               src/PythonScript.h
               src/Folder.h
               src/plot2D/ImageSymbol.h
               src/Mantid/ErrorBarSettings.h
               src/Mantid/MantidUI.h
               src/Mantid/MantidMatrix.h
)

###########################################################################
# Sip generated files
###########################################################################

# The code generated by sip causes compiler warnings therefore the
# generated file is wrapped by ${SIP_SRC} and these warnings are
# disabled. In order for VS2010 to to this correctly the second
# custom command below is required along with the committed
# src/sipqti.cpp.rule file.
set ( MANTIDQTPYTHON_SIP_DIR  ${CMAKE_CURRENT_SOURCE_DIR}/../qt/python/mantidqtpython)
add_custom_command ( OUTPUT ${SIP_SRC_AUTO}
                          -I ${PYQT4_SIP_DIR} -I ${MANTIDQTPYTHON_SIP_DIR}  ${PYQT4_SIP_FLAGS}
                          -c ${CMAKE_CURRENT_BINARY_DIR} -j1 -w -o
                     DEPENDS src/qti.sip ${SIP_HDRS}
                     COMMENT "Generating python bindings using sip"
)

add_custom_command ( OUTPUT ${SIP_SRC}
                     COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${SIP_SRC_IN} ${SIP_SRC}
# Needed for sip.h header that can end up in a different place to to the main Python include directory
include_directories ( SYSTEM ${SIP_INCLUDE_DIR} )
# Needed for sip generated files to find includes in src
include_directories ( ${CMAKE_CURRENT_SOURCE_DIR} )

###########################################################################
# Specify the files that we need to pass to Qt macros
###########################################################################

set ( QTIPLOT_MOC_FILES src/ApplicationWindow.h
                        src/AssociationsDialog.h
                        src/AxesDialog.h
                        src/AxisDetails.h
                        src/CanvasPicker.h
                        src/ColorMapDialog.h
                        src/ConfigDialog.h
                        src/ContourLinesEditor.h
                        src/Convolution.h
                        src/Correlation.h
                        src/CurveRangeDialog.h
                        src/CurvesDialog.h
                        src/CustomActionDialog.h
                        src/DataPickerTool.h
                        src/DataSetDialog.h
                        src/Differentiation.h
                        src/ErrDialog.h
                        src/ExpDecayDialog.h
                        src/ExponentialFit.h
                        src/ExportDialog.h
                        src/FFTDialog.h
                        src/FFTFilter.h
                        src/FFT.h
                        src/FilterDialog.h
                        src/Filter.h
                        src/FindDialog.h
                        src/FitDialog.h
                        src/Fit.h
                        src/FloatingWindow.h
                        src/Folder.h
                        src/FunctionDialog.h
                        src/Graph3D.h
                        src/Graph.h
                        src/GridDetails.h
                        src/ImageDialog.h
                        src/ImageExportDialog.h
                        src/ImportASCIIDialog.h
                        src/IntDialog.h
                        src/Integration.h
                        src/InterpolationDialog.h
                        src/Interpolation.h
                        src/LayerDialog.h
                        src/LegendWidget.h
                        src/LineDialog.h
                        src/LineProfileTool.h
                        src/LogisticFit.h
                        src/MatrixDialog.h
                        src/Matrix.h
                        src/MatrixModel.h
                        src/MatrixSizeDialog.h
                        src/MatrixValuesDialog.h
                        src/MdiSubWindow.h
                        src/MultiLayer.h
                        src/MultiPeakFit.h
                        src/MultiPeakFitTool.h
                        src/muParserScript.h
                        src/muParserScripting.h
                        src/NonLinearFit.h
                        src/Note.h
                        src/OpenProjectDialog.h
                        src/Plot3DDialog.h
                        src/PlotCurve.h
                        src/PlotDialog.h
                        src/Plot.h
                        src/PlotWizard.h
                        src/PluginFit.h
                        src/PolynomFitDialog.h
                        src/PolynomialFit.h
                        src/ProjectSaveView.h
                        src/ProjectSerialiser.h
                        src/PythonScript.h
                        src/PythonScripting.h
                        src/QwtPieCurve.h
                        src/RangeSelectorTool.h
                        src/RenameWindowDialog.h
                   	src/ScaleDetails.h
                        src/ScalePicker.h
                        src/ScreenPickerTool.h
                        src/Script.h
                        src/ScriptingEnv.h
                        src/ScriptingLangDialog.h
                        src/ScriptingWindow.h
                        src/MultiTabScriptInterpreter.h
                        src/ScriptOutputDisplay.h
                        src/ScriptFileInterpreter.h
                        src/SendToProgramDialog.h
                        src/SetColValuesDialog.h
                        src/SigmoidalFit.h
                        src/SmoothCurveDialog.h
                        src/SmoothFilter.h
                        src/SortDialog.h
                        src/SurfaceDialog.h
                        src/TableDialog.h
                        src/Table.h
                        src/TableStatistics.h
                        src/TextDialog.h
                        src/TextEditor.h
                        src/TiledWindow.h
                        src/TitlePicker.h
                        src/TranslateCurveTool.h
                        src/lib/include/ColorBox.h
                        src/lib/include/ColorButton.h
                        src/lib/include/ColorMapEditor.h
                        src/lib/include/ExtensibleFileDialog.h
                        src/lib/include/LineNumberDisplay.h
                        src/lib/include/PatternBox.h
                        src/lib/include/PenStyleBox.h
                        src/lib/include/SymbolBox.h
                        src/lib/include/SymbolDialog.h
                        src/lib/include/TextFormatButtons.h
                        src/lib/3rdparty/qtcolorpicker/src/qtcolorpicker.h
set ( MANTID_MOC_FILES src/Mantid/AlgorithmDockWidget.h
					   src/Mantid/AlgorithmMonitor.h
                       src/Mantid/AlgorithmHistoryWindow.h
                       src/Mantid/ErrorBarSettings.h
                       src/Mantid/IFunctionWrapper.h
                       src/Mantid/ImportWorkspaceDlg.h
					   src/Mantid/LabelToolLogValuesDialog.h
                       src/Mantid/ManageCustomMenus.h
                       src/Mantid/ManageInterfaceCategories.h
                       src/Mantid/MantidAbout.h
                       src/Mantid/MantidApplication.h
                       src/Mantid/MantidMatrixCurve.h
                       src/Mantid/MantidMDCurve.h
                       src/Mantid/MantidMDCurveDialog.h
                       src/Mantid/MantidMatrixDialog.h
                       src/Mantid/MantidMatrix.h
                       src/Mantid/MantidMatrixFunction.h
                       src/Mantid/MantidSampleLogDialog.h
                       src/Mantid/MantidSampleMaterialDialog.h
                       src/Mantid/PeakPickerTool.h
                       src/Mantid/RemoveErrorsDialog.h
					   src/Mantid/SampleLogDialogBase.h
                       src/Mantid/UserFitFunctionDialog.h
                       src/Mantid/InstrumentWidget/InstrumentWindow.h
set ( UI_FILES src/SendToProgramDialog.ui
               src/Mantid/MantidAbout.ui
               src/Mantid/RemoveErrorsDialog.ui
               src/Mantid/ManageCustomMenus.ui
               src/Mantid/ManageInterfaceCategories.ui
               src/Mantid/MantidMDCurveDialog.ui
               src/Mantid/MantidSampleMaterialDialog.ui
qt4_wrap_cpp ( MOCCED_FILES ${QTIPLOT_MOC_FILES} ${MANTID_MOC_FILES} )
# Call separate function on third-party code that expects moc output to have certain name
qt4_generate_moc ( src/lib/3rdparty/qtcolorpicker/src/qtcolorpicker.cpp
                   ${CMAKE_CURRENT_BINARY_DIR}/qtcolorpicker.moc )
set_source_files_properties ( ${CMAKE_CURRENT_BINARY_DIR}/qtcolorpicker.moc
                             PROPERTIES HEADER_FILE_ONLY true )
set ( MOCCED_FILES ${MOCCED_FILES} ${CMAKE_CURRENT_BINARY_DIR}/qtcolorpicker.moc )
set ( SRC_FILES ${QTIPLOT_SRCS} ${MANTID_SRCS} ${SIP_SRC} )
set ( INC_FILES ${QTIPLOT_HDRS} ${MANTID_HDRS} )
if ( WIN32 )
  set ( MANIFEST_FILES MantidPlot.manifest )
endif ()

set ( ALL_SRC ${SRC_FILES} ${MOCCED_FILES} ${MANIFEST_FILES} )
# Use a precompiled header where they are supported
enable_precompiled_headers( src/PrecompiledHeader.h ALL_SRC )
qt4_wrap_ui ( UI_HDRS ${UI_FILES} )
# The generated ui headers will go here:
include_directories ( ${CMAKE_CURRENT_BINARY_DIR} )

###########################################################################
###########################################################################
qt4_add_resources ( RES_FILES ${PROJECT_SOURCE_DIR}/images/images.qrc )
qt4_add_resources ( RES_FILES ${PROJECT_SOURCE_DIR}/images/MantidWidgets.qrc )
qt4_add_resources ( RES_FILES ${PROJECT_SOURCE_DIR}/images//fonts/fonts.qrc )
qt4_add_resources ( RES_FILES ${CMAKE_CURRENT_SOURCE_DIR}/icons/icons.qrc )
###########################################################################
# Add the dependencies
###########################################################################

Hahn, Steven's avatar
Hahn, Steven committed
if(MAKE_VATES)
  include( ${PARAVIEW_USE_FILE} )
endif()

include_directories ( SYSTEM ${MUPARSER_INCLUDE_DIR} )
include_directories ( ${ZLIB_INCLUDE_DIRS} )

include_directories ( SYSTEM ${QWT_INCLUDE_DIR} )

find_package ( QwtPlot3d REQUIRED )
include_directories ( SYSTEM ${QWTPLOT3D_INCLUDE_DIR} )

find_package ( QScintilla REQUIRED )
include_directories ( ${QSCINTILLA_INCLUDE_DIR} )

###########################################################################
# Now create the target and add its dependencies and flags
###########################################################################

add_definitions ( -DSCRIPTING_MUPARSER )
add_definitions ( -DSCRIPTING_PYTHON )
add_definitions ( -DQSCINTILLA_DLL )     # Will only have an effect on Windows (as is desired)

include_directories ( src )
include_directories ( src/lib/include )
include_directories ( src/lib/3rdparty/qtcolorpicker/src )
include_directories ( ../qt/widgets/common/inc )
include_directories ( ../qt/widgets/instrumentview/inc )
include_directories ( ../qt/widgets/sliceviewer/inc )
include_directories ( ../qt/widgets/spectrumviewer/inc )
Roman Tolchenov's avatar
Roman Tolchenov committed
include_directories ( ../qt/widgets/factory/inc )
# ui_ files end up in these places
Roman Tolchenov's avatar
Roman Tolchenov committed
include_directories ( ${CMAKE_BINARY_DIR}/qt/widgets/common )
include_directories ( ${CMAKE_BINARY_DIR}/qt/widgets/sliceviewer )
###########################################################################
###########################################################################
if( WIN32 )
   set ( MANTID_RC_FILE icons/MantidPlotDesktop.rc )
   if ( CONSOLE )
     set ( WIN_CONSOLE )
   else ()
     set( WIN_CONSOLE WIN32 )
   endif( CONSOLE )
  set ( MANTID_RC_FILE ${CMAKE_SOURCE_DIR}/images/MantidPlot.icns )
  set_source_files_properties(MANTID_RC_FILE PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
endif ()

###########################################################################
# Config reset scripts
###########################################################################

Dan Nixon's avatar
Dan Nixon committed
  set ( CONFIG_RESET_SCRIPT mantid_reset_settings.bat )
Dan Nixon's avatar
Dan Nixon committed
  set ( CONFIG_RESET_SCRIPT mantid_reset_settings.sh )
copy_files_to_dir ( "${CONFIG_RESET_SCRIPT}"
                     ${CMAKE_CURRENT_SOURCE_DIR}
                     ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}
                     CONFIG_RESET_SCRIPT_FILE )

###########################################################################
# Required Python config files
###########################################################################

# Top-level python scripts
set( PY_FILES mantidplot.py mantidplotrc.py mantid_qt_settings_editor.py)
copy_files_to_dir ( "${PY_FILES}"
                            ${CMAKE_CURRENT_SOURCE_DIR}
                            ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}
# mantidplot package
set( MTDPLOTPY_FILES
copy_files_to_dir ( "${MTDPLOTPY_FILES}"
                            ${CMAKE_CURRENT_SOURCE_DIR}/pymantidplot
                            ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/pymantidplot
set( MTDPLOTPYMPL_FILES
  __init__.py
  backend_mtdqt4agg.py
)
copy_files_to_dir ( "${MTDPLOTPYMPL_FILES}"
                            ${CMAKE_CURRENT_SOURCE_DIR}/pymantidplot/mpl
                            ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/pymantidplot/mpl
                            MTDPLOTMPL_INSTALL_FILES )
set( IPY_FILES
copy_files_to_dir ( "${IPY_FILES}"
                     ${CMAKE_CURRENT_SOURCE_DIR}/ipython_widget
                     ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/ipython_widget
                     IPYTHON_INSTALL_FILES )

###########################################################################
# MantidPlot executable
###########################################################################

add_executable ( MantidPlot ${WIN_CONSOLE} MACOSX_BUNDLE ${ALL_SRC} src/main.cpp
							${INC_FILES} ${QTIPLOT_C_SRC} ${UI_HDRS}
							${RES_FILES} ${MANTID_RC_FILE}
							${PYTHON_INSTALL_FILES} ${MTDPLOT_INSTALL_FILES} ${MTDPLOTMPL_INSTALL_FILES}
                                                        ${CONFIG_RESET_SCRIPT_FILE} ${IPYTHON_INSTALL_FILES}
target_link_libraries ( MantidPlot LINK_PRIVATE ${TCMALLOC_LIBRARIES_LINKTIME}
            ${CORE_MANTIDLIBS}
            MantidQtWidgetsCommon
            MantidQtWidgetsInstrumentView
            MantidQtWidgetsSliceViewer
            MantidQtWidgetsSpectrumViewer
            ${Boost_LIBRARIES}
            ${POCO_LIBRARIES}
            ${GSL_LIBRARIES}
            ${MUPARSER_LIBRARIES}
            ${QT_LIBRARIES}
            ${QWT_LIBRARIES}
            ${QWTPLOT3D_LIBRARIES}
            ${QSCINTILLA_LIBRARIES}
            ${PYTHON_LIBRARIES}
            ${ZLIB_LIBRARIES}
            ${OPENGL_LIBRARIES}
Hahn, Steven's avatar
Hahn, Steven committed
  target_include_directories( MantidPlot SYSTEM PRIVATE ${PARAVIEW_INCLUDE_DIRS} )
  target_link_libraries ( MantidPlot LINK_PRIVATE vtkPVClientServerCoreRendering )
endif()

if (WITH_ASAN)
  target_link_libraries ( MantidPlot LINK_PRIVATE -lasan )
# Plugin dependencies
add_dependencies( MantidPlot mantidqtpython CompilePyUI )
if (OSX_VERSION VERSION_GREATER 10.8)
Hahn, Steven's avatar
Hahn, Steven committed
  set_target_properties(MantidPlot PROPERTIES INSTALL_RPATH "@executable_path;@executable_path/../Libraries")
###########################################################################
# Custom Info.plist file for OS X
###########################################################################
if( APPLE )
  # Setting the CFBundleIdentifer attribute on OS X 10.6 (SL) and before
  # causes problems with trying to install the package on the same
  # machine as it was built. It tries to relocate the package to the build directory
  # because the bundle identifiers match. Mountain Lion requires the attribute
  # to avoid crashes when accessing certain system dialogs from Qt.
  # The ideal would be to pass the --no-relocate
  # option to packagemaker but we can't control that so only set the
  # identifier for 10.7 and above
  #
  # This can disappear when if/when we move to a drag-n-drop package.
  if (OSX_VERSION VERSION_GREATER 10.7 OR OSX_VERSION VERSION_EQUAL 10.7)
    set ( MAC_BUNDLE_IDENTIFIER "org.mantidproject.MantidPlot" )
  else()
    set ( MAC_BUNDLE_IDENTIFIER "" )
  endif()

  configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/../installers/MacInstaller/Info.plist.in
                   ${CMAKE_CURRENT_BINARY_DIR}/Info.plist
                   @ONLY )

  set_target_properties( MantidPlot PROPERTIES MACOSX_BUNDLE_INFO_PLIST
                         ${CMAKE_CURRENT_BINARY_DIR}/Info.plist )
endif()
###########################################################################
# Entry point flag for Windows to ensure we always link to standard main
###########################################################################
   set_target_properties( MantidPlot PROPERTIES LINK_FLAGS "/ENTRY:mainCRTStartup" )
   if ( CONSOLE )
     set_target_properties( MantidPlot PROPERTIES COMPILE_DEFINITIONS "_CONSOLE" )
   endif ( CONSOLE )
###########################################################################
# MantidPlot Python Unit Tests
###########################################################################

# List of .py files than must be run WITHIN MantidPlot.
set ( MANTIDPLOT_TEST_PY_FILES
    MantidPlotAlgorithmDialogTest.py
    MantidPlotInstrumentViewTest.py
    MantidPlotSliceViewerTest.py
    MantidPlot1DPlotTest.py
    MantidPlot2DPlotTest.py
    MantidPlotMatplotlibTest.py
    MantidPlotProjectSerialiseTest.py
    MantidPlotProxiesTest.py
    MantidPlotPythonImportTest.py
    MantidPlotFoldersTest.py
    MantidPlotMdiSubWindowTest.py
    MantidPlotTiledWindowTest.py
    MantidPlotInputArgsCheck.py
if ( MAKE_VATES )
Hahn, Steven's avatar
Hahn, Steven committed
 list  ( APPEND MANTIDPLOT_TEST_PY_FILES MantidPlotPVPythonTest.py )
	message (STATUS "Your CMAKE_SYSTEM string is '${CMAKE_SYSTEM}'")
	message (STATUS "Your CMAKE_SYSTEM_NAME string is '${CMAKE_SYSTEM_NAME}'")
	message (STATUS "Your CMAKE_BINARY_DIR string is '${CMAKE_BINARY_DIR}'")
	message (STATUS "Your BIN_DIR string is '${BIN_DIR}'")
	message (STATUS "Your CMAKE_LIBRARY_OUTPUT_DIRECTORY string is '${CMAKE_LIBRARY_OUTPUT_DIRECTORY}'")
	message (STATUS "Your CMAKE_CFG_INTDIR string is '${CMAKE_CFG_INTDIR}'")
	message (STATUS "Your CMAKE_CURRENT_BINARY_DIR string is '${CMAKE_CURRENT_BINARY_DIR}'")
endif ()


# Check system version
if ( ${CMAKE_SYSTEM} MATCHES ".*\\.el5" )
  	# This is RHEL5. GUI tests hang on this platform for some reason
  	message ( "RHEL5 hangs on GUI tests. Disabling MantidPlot python tests." )
	# Find the path to the built MantidPlot app. Need different paths for MAC for some reason.
	set (MANTIDPLOT_PATH  "${CMAKE_BINARY_DIR}/${BIN_DIR}/MantidPlot" )
	# Screenshots destination
	if ("$ENV{WORKSPACE}" STREQUAL "")
		set (SCREENSHOTS_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/screenshots" )
		set (SCREENSHOTS_DIR "$ENV{WORKSPACE}/screenshots" )
	# Add an environment property MANTID_SOURCE so that the script can find the source of xmlrunner
	set (TEST_ENVIRONMENT "MANTID_SOURCE=${CMAKE_SOURCE_DIR};PYTHONPATH=${PYTHON_XMLRUNNER_DIR};MANTID_SCREENSHOT_REPORT=${SCREENSHOTS_DIR}" )
	if ( ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
		set (MANTIDPLOT_PATH  "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BIN_DIR}/MantidPlot" )
		# Append to the path and set MANTIDPATH for MacOS' MantidPlot to run
		set (TEST_ENVIRONMENT "PATH=$ENV{PATH}:${CMAKE_LIBRARY_OUTPUT_DIRECTORY};MANTIDPATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY};MANTID_SOURCE=${CMAKE_SOURCE_DIR};PYTHONPATH=${PYTHON_XMLRUNNER_DIR};MANTID_SCREENSHOT_REPORT=${SCREENSHOTS_DIR}" )
	# Make a ctest target for each file
	foreach  ( PYFILE ${MANTIDPLOT_TEST_PY_FILES} )
	 	# Add the test. Name of test = name of the file
		add_test ( ${PYFILE} ${MANTIDPLOT_PATH} -xq ${CMAKE_CURRENT_SOURCE_DIR}/test/${PYFILE} )
		# Set the previously-built environment
		set_tests_properties ( ${PYFILE} PROPERTIES
                           RUN_SERIAL 1
                           ENVIRONMENT "${TEST_ENVIRONMENT}"
                           TIMEOUT ${TESTING_TIMEOUT} )
	endforeach ()

    add_dependencies( GUITests MantidPlot )
###########################################################################
# Installation settings
###########################################################################

install ( TARGETS MantidPlot RUNTIME DESTINATION ${BIN_DIR}
                             BUNDLE DESTINATION .
)
# Ship required files. Explicit so some can be disabled easily if necessary
install ( FILES ${PY_FILES} DESTINATION ${BIN_DIR} )
foreach(PY_FILE ${MTDPLOTPY_FILES} )
  install ( FILES pymantidplot/${PY_FILE} DESTINATION ${BIN_DIR}/pymantidplot )
foreach(PY_FILE ${MTDPLOTPYMPL_FILES} )
  install ( FILES pymantidplot/mpl/${PY_FILE} DESTINATION ${BIN_DIR}/pymantidplot/mpl )
endforeach()
foreach(PY_FILE ${IPY_FILES} )
  install ( FILES ipython_widget/${PY_FILE} DESTINATION ${BIN_DIR}/ipython_widget )
install ( FILES ${CONFIG_RESET_SCRIPT} DESTINATION ${BIN_DIR} )
# file make_package.rb contains hard-coded path to the libraries
# this causes fail of the installation with macports
# therefore MACPORTS option is introduced
  if (OSX_VERSION VERSION_LESS 10.9)
    configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/FixBundle.cmake.in
                   ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake
    install ( SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake )
  elseif (MACPORTS)
        install ( FILES  package_python_macports.py DESTINATION MantidPlot.app/ )
        configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/FixMacportsBundle.cmake.in
                   ${CMAKE_CURRENT_BINARY_DIR}/FixMacportsBundle.cmake
                   @ONLY )
        install ( SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/FixMacportsBundle.cmake )
    configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/make_package.rb.in
                   ${CMAKE_CURRENT_BINARY_DIR}/make_package.rb
                   @ONLY )
    install ( FILES  ${CMAKE_CURRENT_BINARY_DIR}/make_package.rb DESTINATION MantidPlot.app/ )
    configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/FixMavericksBundle.cmake.in
                   ${CMAKE_CURRENT_BINARY_DIR}/FixMavericksBundle.cmake
                   @ONLY )
    install ( SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/FixMavericksBundle.cmake )
  endif ()