include(${QT_USE_FILE})

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
include(Qt4WrapTs)

include_directories(
		command
		gui
		gui/fit
		gui/main
		gui/opt
		gui/opt/style
		gui/opt/terminal
		gui/plot
		opt
		opt/style
		opt/terminal
)

set(cueplot_SRC
		command/Fit.cpp
		command/FitModifier.cpp
		command/FitRange.cpp
		command/Plot.cpp
		command/PlotModifier.cpp
		command/PlotRange.cpp
		command/PlotStyle.cpp
		command/PlotTitle.cpp
		command/Splot.cpp
		gui/ConfigDialog.cpp
		gui/ConsoleDialog.cpp
		gui/FileLineEdit.cpp
		gui/FitDialog.cpp
		gui/MainWindow.cpp
		gui/OptionDialog.cpp
		gui/PlotOptionDialog.cpp
		gui/Process.cpp
		gui/RawCommandDialog.cpp
		gui/fit/FitBasicWidget.cpp
		gui/fit/FitModifierWidget.cpp
		gui/fit/FitOthersWidget.cpp
		gui/fit/FitRangeWidget.cpp
		gui/main/PlotDataWidget.cpp
		gui/main/PlotInputWidget.cpp
		gui/main/PlotListModel.cpp
		gui/main/PlotListView.cpp
		gui/opt/AnglesOptionWidget.cpp
		gui/opt/AxisDataOptionWidget.cpp
		gui/opt/AxisLabelOptionWidget.cpp
		gui/opt/AxisOptionWidget.cpp
		gui/opt/AxisRangeOptionWidget.cpp
		gui/opt/AxisTicsOptionWidget.cpp
		gui/opt/BarOptionWidget.cpp
		gui/opt/BoxWidthOptionWidget.cpp
		gui/opt/DummyOptionWidget.cpp
		gui/opt/EncodingOptionWidget.cpp
		gui/opt/FormatOptionWidget.cpp
		gui/opt/GridOptionWidget.cpp
		gui/opt/KeyOptionWidget.cpp
		gui/opt/LogScaleOptionWidget.cpp
		gui/opt/MAxisTicsOptionWidget.cpp
		gui/opt/MappingOptionWidget.cpp
		gui/opt/OutputOptionWidget.cpp
		gui/opt/ParametricOptionWidget.cpp
		gui/opt/SamplesOptionWidget.cpp
		gui/opt/SizeOptionWidget.cpp
		gui/opt/StyleOptionWidget.cpp
		gui/opt/TerminalOptionWidget.cpp
		gui/opt/TitleOptionWidget.cpp
		gui/opt/ViewOptionWidget.cpp
		gui/opt/style/StyleDataOptionWidget.cpp
		gui/opt/style/StyleFillOptionWidget.cpp
		gui/opt/style/StyleFunctionOptionWidget.cpp
		gui/opt/terminal/TerminalEmtexOptionWidget.cpp
		gui/opt/terminal/TerminalLatexEmtexOptionWidget.cpp
		gui/opt/terminal/TerminalLatexOptionWidget.cpp
		gui/opt/terminal/TerminalPbmOptionWidget.cpp
		gui/opt/terminal/TerminalPostScriptOptionWidget.cpp
		gui/plot/PlotModifierWidget.cpp
		gui/plot/PlotOthersWidget.cpp
		gui/plot/PlotStyleWidget.cpp
		gui/plot/PlotTitleWidget.cpp
		main.cpp
		opt/Angles.cpp
		opt/AxisData.cpp
		opt/AxisLabel.cpp
		opt/AxisRange.cpp
		opt/AxisTics.cpp
		opt/Bar.cpp
		opt/BoxWidth.cpp
		opt/Dummy.cpp
		opt/Encoding.cpp
		opt/Format.cpp
		opt/Grid.cpp
		opt/Key.cpp
		opt/LogScale.cpp
		opt/MAxisTics.cpp
		opt/Mapping.cpp
		opt/Output.cpp
		opt/Parametric.cpp
		opt/Samples.cpp
		opt/Size.cpp
		opt/Terminal.cpp
		opt/Title.cpp
		opt/View.cpp
		opt/style/StyleData.cpp
		opt/style/StyleFill.cpp
		opt/style/StyleFunction.cpp
		opt/terminal/TerminalLatexEmtex.cpp
		opt/terminal/TerminalPbm.cpp
		opt/terminal/TerminalPostScript.cpp
)

set(cueplot_MOC_HEADER
		gui/ConfigDialog.h
		gui/ConsoleDialog.h
		gui/FileLineEdit.h
		gui/FitDialog.h
		gui/MainWindow.h
		gui/OptionDialog.h
		gui/PlotOptionDialog.h
		gui/Process.h
		gui/RawCommandDialog.h
		gui/fit/FitBasicWidget.h
		gui/fit/FitModifierWidget.h
		gui/fit/FitOthersWidget.h
		gui/fit/FitRangeWidget.h
		gui/main/PlotDataWidget.h
		gui/main/PlotInputWidget.h
		gui/main/PlotListModel.h
		gui/main/PlotListView.h
		gui/opt/AnglesOptionWidget.h
		gui/opt/AxisDataOptionWidget.h
		gui/opt/AxisLabelOptionWidget.h
		gui/opt/AxisOptionWidget.h
		gui/opt/AxisRangeOptionWidget.h
		gui/opt/AxisTicsOptionWidget.h
		gui/opt/BarOptionWidget.h
		gui/opt/BoxWidthOptionWidget.h
		gui/opt/DummyOptionWidget.h
		gui/opt/EncodingOptionWidget.h
		gui/opt/FormatOptionWidget.h
		gui/opt/GridOptionWidget.h
		gui/opt/KeyOptionWidget.h
		gui/opt/LogScaleOptionWidget.h
		gui/opt/MAxisTicsOptionWidget.h
		gui/opt/MappingOptionWidget.h
		gui/opt/OptionWidget.h
		gui/opt/OutputOptionWidget.h
		gui/opt/ParametricOptionWidget.h
		gui/opt/SamplesOptionWidget.h
		gui/opt/SizeOptionWidget.h
		gui/opt/StyleOptionWidget.h
		gui/opt/TerminalOptionWidget.h
		gui/opt/TitleOptionWidget.h
		gui/opt/ViewOptionWidget.h
		gui/opt/style/StyleDataOptionWidget.h
		gui/opt/style/StyleFillOptionWidget.h
		gui/opt/style/StyleFunctionOptionWidget.h
		gui/opt/terminal/TerminalEmtexOptionWidget.h
		gui/opt/terminal/TerminalLatexEmtexOptionWidget.h
		gui/opt/terminal/TerminalLatexOptionWidget.h
		gui/opt/terminal/TerminalPbmOptionWidget.h
		gui/opt/terminal/TerminalPostScriptOptionWidget.h
		gui/plot/PlotModifierWidget.h
		gui/plot/PlotOptionWidget.h
		gui/plot/PlotOthersWidget.h
		gui/plot/PlotStyleWidget.h
		gui/plot/PlotTitleWidget.h
)

if (APPLE)
	set(cueplot_MOC_HEADER ${cueplot_MOC_HEADER} Translator.h)
endif (APPLE)

set(cueplot_TS 
		lang/cueplot_ja_JP.ts
# Qt 4.2 and below doesn't contain Japanese translation (qt_ja_jp.qm).
		lang/qt_ja_JP.ts
)

qt4_add_resources(cueplot_QRC cueplot.qrc)
qt4_automoc(${cueplot_SRC})

qt4_wrap_cpp(cueplot_MOC_SRC ${cueplot_MOC_HEADER})
qt4_wrap_ts(cueplot_QM ${cueplot_TS})

# SET_DIR(var value comment)
# set a directory.
# a default directory of ${var} is ${value}.
macro(SET_DIR var value comment)
	set(predefinedvalue "${value}")
	if (NOT DEFINED ${var})
		set(${var} ${predefinedvalue})
	else (NOT DEFINED ${var})
		set(${var} "${${predefinedvalue}}" CACHE PATH "${comment}")
	endif (NOT DEFINED ${var})
endmacro(SET_DIR)

# Mac OS X
if (APPLE)
	set(cueplot_PLIST lang/locversion.plist)
	set(cueplot_LPROJ lang/ja_JP.lproj)
	add_executable(Cueplot MACOSX_BUNDLE ${cueplot_PLIST}
		${cueplot_QM} ${cueplot_SRC} ${cueplot_MOC_SRC} ${cueplot_QRC})
	set_source_files_properties(${cueplot_QM} PROPERTIES 
		MACOSX_PACKAGE_LOCATION MacOS)
	set_source_files_properties(${cueplot_PLIST} PROPERTIES 
		MACOSX_PACKAGE_LOCATION Resources)

	# need more options?
	set_target_properties(Cueplot PROPERTIES LINK_FLAGS 
		"-framework AppKit -liconv")
	
	target_link_libraries(Cueplot ${QT_LIBRARIES})

	# set install dir
	set_dir(BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/Applications"
			"The install dir for executables (default is ${CMAKE_INSTALL_PREFIX}/Applications)")

	file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${cueplot_LPROJ})

	install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Cueplot.app 
		DESTINATION ${BIN_INSTALL_DIR}
		# "Cueplot" file is executable
		REGEX "Cueplot.app$|Contents$|MacOS$|Resources$|Cueplot$"
		# rwxrwxr-x
		PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
		GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
		REGEX "qm$|plist$"
		# rw-rw-r--
		PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE WORLD_READ)
	install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${cueplot_LPROJ} 
		DESTINATION ${BIN_INSTALL_DIR}/Cueplot.app/Contents/Resources
		PATTERN "*.lproj"
		# rwxrwxr-x
		PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
		GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
		PATTERN svn EXCLUDE)

else (APPLE)
	add_executable(cueplot 
		${cueplot_QM} ${cueplot_SRC} ${cueplot_MOC_SRC} ${cueplot_QRC})
	target_link_libraries(cueplot ${QT_LIBRARIES})
	# Unix-like OSes except for Mac OS X
	if (UNIX)
		# set install dir
		set_dir(BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin"
			"The install dir for executables (default is ${CMAKE_INSTALL_PREFIX}/bin)")
		set_dir(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib" 
			"The install dir for libraries (default is ${CMAKE_INSTALL_PREFIX}/lib)")
		set_dir(XDG_APPS_INSTALL_DIR
			"${CMAKE_INSTALL_PREFIX}/share/applications" "The XDG apps dir")

		install(FILES ${cueplot_QM} DESTINATION ${LIB_INSTALL_DIR}/cueplot)
		install(FILES cueplot.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
		install(TARGETS cueplot RUNTIME DESTINATION ${LIB_INSTALL_DIR}/cueplot)
		# file(MAKE_DIRECTORY "$ENV{DESTDIR}/usr/bin")
		install(SCRIPT CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}${BIN_INSTALL_DIR}\")")
		# exec_program(/usr/bin/cmake ARGS -E create_symlink 
		# 		/usr/lib/cueplot/cueplot "$ENV{DESTDIR}/usr/bin/cueplot")
		install(SCRIPT CODE "exec_program(${CMAKE_COMMAND} ARGS -E create_symlink ${LIB_INSTALL_DIR}/cueplot/cueplot \"\$ENV{DESTDIR}${BIN_INSTALL_DIR}/cueplot\")")
	endif (UNIX)
endif (APPLE)
