katie/cmake/modules/KatieMacros.cmake
Ivailo Monev 07bf092710 always use full paths for installation
now that CPack is no longer supported relative paths are no longer
required. this change also fixes the headers optimizations upon
installation since it requires full paths to work

Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
2020-03-09 00:36:36 +00:00

105 lines
4.8 KiB
CMake

# Copyright (c) 2015-2020, Ivailo Monev, <xakepa10@gmail.com>
# Redistribution and use is allowed according to the terms of the BSD license.
macro(KATIE_RESOURCES RESOURCES)
foreach(tmpres ${RESOURCES} ${ARGN})
get_filename_component(resource "${tmpres}" ABSOLUTE)
get_source_file_property(skip "${resource}" SKIP_RESOURCE)
if(NOT skip)
get_filename_component(rscext "${resource}" EXT)
get_filename_component(rscname "${resource}" NAME_WE)
get_filename_component(rscpath "${resource}" PATH)
string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" rscpath "${rscpath}")
if("${rscext}" STREQUAL ".ui")
set(rscout "${rscpath}/ui_${rscname}.h")
make_directory("${rscpath}")
include_directories("${rscpath}")
add_custom_command(
COMMAND "${KATIE_UIC}" "${resource}" -o "${rscout}"
OUTPUT "${rscout}"
MAIN_DEPENDENCY "${resource}"
)
elseif("${rscext}" STREQUAL ".qrc")
set(rscout "${rscpath}/qrc_${rscname}.cpp")
make_directory("${rscpath}")
include_directories("${rscpath}")
add_custom_command(
COMMAND "${KATIE_RCC}" "${resource}" -o "${rscout}" -name "${rscname}"
OUTPUT "${rscout}"
MAIN_DEPENDENCY ${resource}
)
set_property(SOURCE "${resource}" APPEND PROPERTY OBJECT_DEPENDS "${rscout}")
elseif("${rscext}" MATCHES "(.h|.hpp|.cc|.cpp)")
file(READ "${resource}" rsccontent)
# this can be simpler if continue() was supported by old CMake versions
if("${rsccontent}" MATCHES "(Q_OBJECT|Q_OBJECT_FAKE|Q_GADGET)")
set(rscout "${rscpath}/moc_${rscname}${rscext}")
get_directory_property(dirdefs COMPILE_DEFINITIONS)
get_directory_property(dirincs INCLUDE_DIRECTORIES)
set(mocargs)
# COMPILE_DEFINITIONS does not include undefine definitions
foreach(ddef ${dirdefs})
set(mocargs ${mocargs} -D${ddef})
endforeach()
foreach(incdir ${dirincs})
set(mocargs ${mocargs} -I${incdir})
endforeach()
make_directory("${rscpath}")
include_directories("${rscpath}")
add_custom_command(
COMMAND "${KATIE_MOC}" -nw "${resource}" -o "${rscout}" ${mocargs}
OUTPUT "${rscout}"
)
set_property(SOURCE "${resource}" APPEND PROPERTY OBJECT_DEPENDS "${rscout}")
endif()
endif()
endif()
endforeach()
endmacro()
macro(KATIE_DBUS_ADAPTOR SRCDEP SRCIN OUTNAME)
get_filename_component(resource "${SRCIN}" ABSOLUTE)
set(rscout "${CMAKE_CURRENT_BINARY_DIR}/${OUTNAME}.h")
set(mocout "${CMAKE_CURRENT_BINARY_DIR}/${OUTNAME}.moc")
add_custom_command(
COMMAND "${KATIE_QDBUSXML2CPP}" -m "${resource}" -a "${rscout}" -p "${OUTNAME}" ${ARGN}
COMMAND "${KATIE_MOC}" -nw "${rscout}" -o "${mocout}" -i
OUTPUT "${rscout}"
)
set_property(SOURCE ${SRCDEP} APPEND PROPERTY OBJECT_DEPENDS ${rscout})
endmacro()
macro(KATIE_DBUS_INTERFACE SRCIN)
string(REGEX MATCH ".*\\.(.*)\\.xml" ${SRCIN} OUTNAME)
string(TOLOWER "${SRCIN}" SRCIN)
set(rscout "${CMAKE_CURRENT_BINARY_DIR}/${OUTNAME}interface.h")
add_custom_command(
COMMAND "${KATIE_QDBUSXML2CPP}" -m "${SRCIN}" -a "${rscout}" -p "${OUTNAME}interface" ${ARGN}
OUTPUT "${rscout}"
)
set_property(SOURCE "${SRCIN}" APPEND PROPERTY OBJECT_DEPENDS "${rscout}")
endmacro()
macro(KATIE_TRANSLATIONS TRANSLATIONS)
if(NOT KATIE_TRANSLATIONS_PATH)
message(SEND_ERROR "Directory where the translation should be installed is not set")
endif()
foreach(translation ${TRANSLATIONS} ${ARGN})
get_filename_component(trname "${translation}" NAME_WE)
get_filename_component(trdir "${translation}" DIRECTORY)
string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" trdir ${trdir})
make_directory("${trdir}")
set(trout "${trdir}/${trname}.qm")
add_custom_target(
${trname}_translation ALL
COMMAND "${KATIE_LRELEASE}" "${translation}" -qm "${trout}"
)
set_source_files_properties(${trout} PROPERTIES GENERATED TRUE)
install(FILES "${trout}" DESTINATION "${KATIE_TRANSLATIONS_PATH}")
endforeach()
endmacro()
macro(KATIE_DEFINITION DEF)
set(KATIE_DEFINITIONS ${KATIE_DEFINITIONS} ${DEF} ${ARGN})
add_definitions(${DEF} ${ARGN})
endmacro()