add_subdirectory(tests)

find_package(Threads REQUIRED)
include(GenerateCppResourceFile)

set(UPDATER_SOURCES
 AppInfo.cpp
 AppInfo.h
 DirIterator.cpp
 DirIterator.h
 FileUtils.cpp
 FileUtils.h
 Log.cpp
 Log.h
 ProcessUtils.cpp
 ProcessUtils.h
 StandardDirs.cpp
 StandardDirs.h
 UpdateDialog.cpp
 UpdateInstaller.cpp
 UpdateInstaller.h
 UpdateScript.cpp
 UpdateScript.h
 UpdaterOptions.cpp
 UpdaterOptions.h
)

add_definitions(-DTIXML_USE_STL)

if(WIN32)
	set(UPDATER_SOURCES ${UPDATER_SOURCES} UpdateDialogWin32.cpp UpdateDialogWin32.h)
endif()

if(UNIX)
	set(UPDATER_SOURCES ${UPDATER_SOURCES} UpdateDialogAscii.cpp UpdateDialogAscii.h)
	add_definitions(-Wall -Wconversion)
	if(APPLE)
		set(MAC_DOCK_ICON_CPP_FILE ${CMAKE_CURRENT_BINARY_DIR}/mac_dock_icon.cpp)
		set(MAC_INFO_PLIST_FILE ${CMAKE_CURRENT_BINARY_DIR}/mac_info_plist.cpp)
		generate_cpp_resource_file(resource_macdockicon ${CMAKE_CURRENT_SOURCE_DIR}/resources/mac.icns ${MAC_DOCK_ICON_CPP_FILE})
		generate_cpp_resource_file(resource_macplist ${CMAKE_CURRENT_SOURCE_DIR}/resources/Info.plist ${MAC_INFO_PLIST_FILE})
		set(UPDATER_SOURCES ${UPDATER_SOURCES}
		 MacBundle.h
		 MacBundle.cpp
		 StandardDirs.mm
		 StlSymbolsLeopard.cpp
		 UpdateDialogCocoa.mm
		 UpdateDialogCocoa.h
		 mac_dock_icon.cpp
		 mac_info_plist.cpp
		)
	else() # linuxes and other similar systems
		find_package(GTK2 REQUIRED gtk)
		include_directories(${GTK2_INCLUDE_DIRS})
		add_library(updatergtk SHARED UpdateDialogGtk.cpp UpdateDialogGtk.h)
		target_link_libraries(updatergtk ${GTK2_LIBRARIES})

		# embed the GTK helper library into the updater binary.
		# At runtime it will be extracted and loaded if the
		# GTK libraries are available
		get_property(GTK_UPDATER_LIB TARGET updatergtk PROPERTY LOCATION)
		set(GTK_BIN_CPP_FILE ${CMAKE_CURRENT_BINARY_DIR}/libupdatergtk.cpp)
		generate_cpp_resource_file(resource_updatergtk ${GTK_UPDATER_LIB} ${GTK_BIN_CPP_FILE})
		add_dependencies(resource_updatergtk updatergtk)

		set(UPDATER_SOURCES ${UPDATER_SOURCES} UpdateDialogGtkFactory.cpp UpdateDialogGtkFactory.h ${GTK_BIN_CPP_FILE})
	endif()
endif()

add_library(updatershared STATIC ${UPDATER_SOURCES})

target_link_libraries(updatershared anyoption tinyxml)

if(UNIX)
	if(APPLE)
		find_library(COCOA_LIBRARY Cocoa)
		find_library(SECURITY_LIBRARY Security)
		target_link_libraries(updatershared ${SECURITY_LIBRARY} ${COCOA_LIBRARY})
	else()
		add_dependencies(updatershared resource_updatergtk)
	endif()
	target_link_libraries(updatershared pthread dl)
endif()

if(WIN32)
	set(EXE_FLAGS WIN32 resources/updater.rc)
endif()

add_executable(updater ${EXE_FLAGS} main.cpp)

target_link_libraries(updater updatershared)


#### Updater Executable ####
if(WIN32)
	install(TARGETS updater
	 BUNDLE DESTINATION . COMPONENT Runtime
	 LIBRARY DESTINATION . COMPONENT Runtime
	 RUNTIME DESTINATION . COMPONENT Runtime
	)
endif()
if(UNIX)
	if(APPLE)
		install(TARGETS updater
		 BUNDLE DESTINATION . COMPONENT Runtime
		 RUNTIME DESTINATION MultiMC.app/Contents/MacOS COMPONENT Runtime
		)
	else()
		install(TARGETS updater
		 BUNDLE DESTINATION . COMPONENT Runtime
		 RUNTIME DESTINATION bin COMPONENT Runtime
		)
	endif()
endif()