cmake_minimum_required(VERSION 3.14)

project(ExifRename
	VERSION 3.1.1.5
	LANGUAGES CXX
	DESCRIPTION "A tool for renaming pictures using thier metadata."
)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC_SEARCH_PATHS ui)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools)
find_package(ExtendedLog)
find_package(ExtendedLogViewer)

set(TS_FILES
	lang/ExifRename_de.ts
)

if(COMMAND qt_create_translation)
	qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
else()
	qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
endif()

set(H_FILES
	include/mainwindow.hpp
	include/progresswindow.hpp
	include/rename.hpp
	include/exif.hpp
)

set(CPP_FILES
	src/main.cpp
	src/exif.cpp
	src/mainwindow.cpp
	src/progresswindow.cpp
	src/rename.cpp
)

set(UI_FILES
	ui/mainwindow.ui
	ui/progresswindow.ui
)

set(RESOURCE_FILES
	resources/resources.qrc
)

if(WIN32)
	# we need the following to statements for the windows file-attributes configuration
	set(PROJECT_VENDOR "E W")
	set(WIN32_FILE_EXTENSION "exe")

	# path to icon of windows exe
	set(ICON_PATH resources/EXIF_Rename-32.ico)

	configure_file(
		resources/winres.rc.in
		winres.rc
		@ONLY
	)

    list(APPEND RESOURCE_FILES
		winres.rc
    )
endif()

set(PROJECT_FILES
	${UI_FILES}
	${CPP_FILES}
	${H_FILES}
	${TS_FILES}
	${QM_FILES}
	${RESOURCE_FILES}
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
	qt_add_executable(Exif-Rename
	       	MANUAL_FINALIZATION
	       	${PROJECT_FILES}
	)
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET Exif-Rename APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
	if(ANDROID)
		add_library(ExifRename SHARED
		       	${PROJECT_FILES}
		)
	# Define properties for Android with Qt 5 after find_package() calls as:
	#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
	else()
		add_executable(ExifRename
			${PROJECT_FILES}
		)
	endif()
endif()

target_include_directories(ExifRename PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> # include directory in your build tree
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

target_link_libraries(ExifRename PRIVATE
       	Qt${QT_VERSION_MAJOR}::Widgets
        ExtendedLog
        ExtendedLogViewer
)

set_target_properties(ExifRename PROPERTIES
	MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
       	MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
	MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
	MACOSX_BUNDLE TRUE
	WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)

install(TARGETS ExifRename
	BUNDLE DESTINATION .
	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

install(FILES ${QM_FILES}
	DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/i18n
)

if(QT_VERSION_MAJOR EQUAL 6)
	qt_finalize_executable(ExifRename)
endif()
