Warning, /graphics/krita/3rdparty/KritaExternalProject.cmake is written in an unsupported language. File is not indexed.

0001 # SPDX-FileCopyrightText: 2023 Ivan Santa Maria <ghevan@gmail.com>
0002 # SPDX-License-Ref: BSD-3-Clause
0003 
0004 include(ExternalProject)
0005 
0006 set(KRITA_MACOS_EXTERNAL_PACKAGE_NAME "package_build_fat.tar.gz")
0007 # used always for stepped universal or non universal builds.
0008 set(PARENT_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR})
0009 set(KRITA_MACOS_CONSOLIDATE_SCRIPT ${PARENT_CMAKE_SOURCE_DIR}/tools/macos_consolidate.sh)
0010 
0011 set(kis_ONE_VALUE_ARGS URL URL_HASH DOWNLOAD_DIR WORKING_DIRECTORY
0012     GIT_REPOSITORY GIT_TAG GIT_REMOTE_UPDATE_STRATEGY GIT_SUBMODULES_RECURSE GIT_PROGRESS
0013     INSTALL_DIR
0014     )
0015 set(kis_MULTI_VALUE_ARGS PATCH_COMMAND CONFIGURE_ARGS CMAKE_ARGS DEPENDS
0016     GIT_SUBMODULES
0017     CONFIGURE_COMMAND BUILD_COMMAND INSTALL_COMMAND UPDATE_COMMAND
0018     )
0019 
0020 
0021 # If APPLE call the muti build arch macro
0022 #    in other case pass args to ExternalProject_Add
0023 #    or if MESON given, make use of kis_ExternalProject_Add_meson
0024 macro(kis_ExternalProject_Add_with_separate_builds_apple)
0025 
0026     if(APPLE)
0027         kis_ExternalProject_Add_macos(${ARGN})
0028     else()
0029         set(options MESON AUTOMAKE)
0030         cmake_parse_arguments(EXT "${options}" "" "" ${ARGN})
0031         
0032         if(${EXT_MESON})
0033             kis_ExternalProject_Add_meson(${EXT_UNPARSED_ARGUMENTS})
0034         else()
0035             # parsed arguments will not pass to child macro
0036             set(oneValueArgs WORKING_DIRECTORY)
0037             set(multiValueArgs CONFIGURE_ARGS)
0038             cmake_parse_arguments(EXT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
0039 
0040             ExternalProject_Add(${EXT_UNPARSED_ARGUMENTS})
0041         endif()
0042     endif()
0043 endmacro()
0044 
0045 
0046 # Convenience macro to set all common MESON configuration
0047 macro(kis_ExternalProject_Add_meson EXT_NAME)
0048     set(onValueArgs "${kis_ONE_VALUE_ARGS}")
0049     set(multiValueArgs "${kis_MULTI_VALUE_ARGS}")
0050     cmake_parse_arguments(EXT "${options}" "${onValueArgs}" "${multiValueArgs}" ${ARGN})
0051 
0052     ExternalProject_Add(
0053         ${EXT_NAME}
0054         DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0055         URL ${EXT_URL}
0056         URL_HASH ${EXT_URL_HASH}
0057         GIT_REPOSITORY ${EXT_GIT_REPOSITORY}
0058         GIT_TAG ${EXT_GIT_TAG}
0059 
0060         PATCH_COMMAND ${EXT_PATCH_COMMAND}
0061 
0062         CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env
0063             PYTHONPATH=${_krita_pythonpath}
0064             PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1
0065             ${MESON_BINARY_PATH} setup <BINARY_DIR> <SOURCE_DIR>
0066                 --libdir=lib
0067                 -Dbuildtype=$<IF:$<CONFIG:Debug>,debug,debugoptimized>
0068                 ${EXT_CONFIGURE_ARGS}
0069 
0070         BUILD_COMMAND ${CMAKE_COMMAND} -E env
0071             PYTHONPATH=${_krita_pythonpath}
0072             ${MESON_BINARY_PATH} compile -C <BINARY_DIR> -j${SUBMAKE_JOBS}
0073 
0074         INSTALL_COMMAND ${CMAKE_COMMAND} -E env
0075             PYTHONPATH=${_krita_pythonpath}
0076             ${MESON_BINARY_PATH} install -C <BINARY_DIR>
0077 
0078         UPDATE_COMMAND ""
0079 
0080         DEPENDS ${EXT_DEPENDS}
0081     )
0082 endmacro()
0083 
0084 
0085 # simplifies double arch compile con macos for external libraries not
0086 # supporting one step universal build
0087 # only define CONFIGURE, BUILD, INSTALL for custom build steps
0088 macro(kis_ExternalProject_Add_macos EXT_NAME)
0089     set(options MESON AUTOMAKE)
0090     set(onValueArgs URL URL_HASH DOWNLOAD_DIR WORKING_DIRECTORY
0091         GIT_REPOSITORY GIT_TAG GIT_REMOTE_UPDATE_STRATEGY GIT_SUBMODULES_RECURSE GIT_PROGRESS
0092         INSTALL_DIR
0093     )
0094     set(multiValueArgs PATCH_COMMAND CONFIGURE_ARGS CMAKE_ARGS DEPENDS
0095         GIT_SUBMODULES
0096         CONFIGURE_COMMAND BUILD_COMMAND INSTALL_COMMAND UPDATE_COMMAND
0097     )
0098     cmake_parse_arguments(EXT "${options}" "${onValueArgs}" "${multiValueArgs}" ${ARGN})
0099 
0100 
0101     macro(compile_arch ARCH DEPENDEES EXT_MESON)
0102         # Some packages need special configure to set architecture
0103         string(REPLACE "@ARCH@" ${ARCH} EXT_CONFIGURE_COMMAND_ARCH "${EXT_CONFIGURE_COMMAND}")
0104         string(REPLACE "@ARCH@" ${ARCH} EXT_WORKING_DIRECTORY_ARCH "${EXT_WORKING_DIRECTORY}")
0105 
0106         if(NOT EXT_WORKING_DIRECTORY_ARCH)
0107             set(EXT_WORKING_DIRECTORY_ARCH <BINARY_DIR>)
0108         endif()
0109 
0110         # CMake variant
0111         set(MAC_CONFIGURE_COMMAND
0112             arch -${ARCH} ${CMAKE_COMMAND} -S <SOURCE_DIR> -B <BINARY_DIR>-${ARCH}
0113             ${EXT_CONFIGURE_ARGS}
0114             ${EXT_CMAKE_ARGS}
0115             -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH}
0116         )
0117         set(MAC_BUILD_COMMAND
0118             arch -${ARCH} ${CMAKE_COMMAND} --build <BINARY_DIR>-${ARCH} -j${SUBMAKE_JOBS}
0119         )
0120         set(MAC_INSTALL_COMMAND
0121             DESTDIR=<TMP_DIR>/build-${ARCH} ${CMAKE_COMMAND} --install <BINARY_DIR>-${ARCH}
0122         )
0123         # Meson variant
0124         if(${EXT_MESON})
0125             set(MAC_CONFIGURE_COMMAND
0126                 ${CMAKE_COMMAND} -E env
0127                 PYTHONPATH=${_krita_pythonpath}
0128                 PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1
0129                 arch -${ARCH} ${MESON_BINARY_PATH} setup <BINARY_DIR>-${ARCH} <SOURCE_DIR>
0130                     --libdir=lib
0131                     -Dbuildtype=$<IF:$<CONFIG:Debug>,debug,debugoptimized>
0132                     ${EXT_CONFIGURE_ARGS}
0133                     ${EXT_CMAKE_ARGS}
0134                     --native-file=${CMAKE_CURRENT_BINARY_DIR}/../meson-compiler_${ARCH}.ini
0135             )
0136             set(MAC_BUILD_COMMAND
0137                 ${CMAKE_COMMAND} -E env
0138                 PYTHONPATH=${_krita_pythonpath}
0139                 arch -${ARCH} ${MESON_BINARY_PATH} compile -C <BINARY_DIR>-${ARCH} -j${SUBMAKE_JOBS}
0140             )
0141             set(MAC_INSTALL_COMMAND
0142                 ${CMAKE_COMMAND} -E env
0143                 PYTHONPATH=${_krita_pythonpath}
0144                 DESTDIR=<TMP_DIR>/build-${ARCH}
0145                 ${MESON_BINARY_PATH} install -C <BINARY_DIR>-${ARCH}
0146             )
0147         endif()
0148 
0149         if(${EXT_AUTOMAKE} OR EXT_BUILD_COMMAND)
0150             set(MAC_CONFIGURE_COMMAND
0151                 arch -${ARCH}
0152                 -e "CFLAGS+=-arch ${ARCH}" -e "CXXFLAGS+=-arch ${ARCH}"
0153                 <SOURCE_DIR>/configure
0154                 ${EXT_CONFIGURE_ARGS}
0155                 ${EXT_CMAKE_ARGS}
0156             )
0157             set(MAC_BUILD_COMMAND
0158                 make clean COMMAND arch -${ARCH} make -j${SUBMAKE_JOBS}
0159             )
0160             set(MAC_INSTALL_COMMAND
0161                 make install DESTDIR=<TMP_DIR>/build-${ARCH} INSTALL_ROOT=<TMP_DIR>/build-${ARCH}
0162             )
0163         endif()
0164 
0165         if(EXT_CONFIGURE_COMMAND AND NOT EXT_CONFIGURE_ARGS)
0166             set(MAC_CONFIGURE_COMMAND arch -${ARCH} ${EXT_CONFIGURE_COMMAND_ARCH})
0167         endif()
0168         if(EXT_BUILD_COMMAND)
0169             set(MAC_BUILD_COMMAND arch -${ARCH} ${EXT_BUILD_COMMAND})
0170         endif()
0171         if(EXT_INSTALL_COMMAND)
0172             # HACK: be over paranoid about DESTDIR 
0173             set(MAC_INSTALL_COMMAND arch -${ARCH} -e DESTDIR=<TMP_DIR>/build-${ARCH}
0174                 -e INSTALL_ROOT=<TMP_DIR>/build-${ARCH}
0175                 ${EXT_INSTALL_COMMAND}
0176                 DESTDIR=<TMP_DIR>/build-${ARCH} INSTALL_ROOT=<TMP_DIR>/build-${ARCH}
0177                 )
0178         endif()
0179 
0180         ExternalProject_Add_Step( ${EXT_NAME} build-${ARCH}
0181             # newline space is important
0182             COMMENT "Building ${EXT_NAME} ${ARCH}"
0183 
0184             WORKING_DIRECTORY ${EXT_WORKING_DIRECTORY_ARCH}
0185             # Configure arch variant
0186             COMMAND ${MAC_CONFIGURE_COMMAND}
0187             # build
0188             COMMAND ${MAC_BUILD_COMMAND} 
0189             # install in tmp creating fat-bin
0190             COMMAND ${MAC_INSTALL_COMMAND}
0191 
0192             DEPENDEES ${DEPENDEES}
0193             DEPENDERS build
0194         )
0195     endmacro()
0196 
0197     if(NOT EXT_GIT_REPOSITORY)
0198         ExternalProject_Add( ${EXT_NAME}
0199             DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0200             URL ${EXT_URL}
0201             URL_HASH ${EXT_URL_HASH}
0202 
0203             PATCH_COMMAND ${EXT_PATCH_COMMAND}
0204 
0205             CONFIGURE_COMMAND ""
0206             BUILD_COMMAND ${CMAKE_COMMAND} -E env ${KRITA_MACOS_CONSOLIDATE_SCRIPT} <TMP_DIR>
0207             INSTALL_COMMAND tar -xzf <TMP_DIR>/${KRITA_MACOS_EXTERNAL_PACKAGE_NAME} -C "/"
0208             UPDATE_COMMAND ""
0209 
0210             DEPENDS ${EXT_DEPENDS}
0211         )
0212     else()
0213         ExternalProject_Add( ${EXT_NAME}
0214             DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0215             GIT_REPOSITORY ${EXT_GIT_REPOSITORY}
0216             GIT_TAG ${EXT_GIT_TAG}
0217             GIT_SUBMODULES  ${EXT_GIT_SUBMODULES}
0218             GIT_SUBMODULES_RECURSE ${EXT_GIT_SUBMODULES_RECURSE}
0219             GIT_PROGRESS ${EXT_GIT_PROGRESS}
0220             GIT_REMOTE_UPDATE_STRATEGY ${EXT_GIT_REMOTE_UPDATE_STRATEGY}
0221 
0222             PATCH_COMMAND ${EXT_PATCH_COMMAND}
0223 
0224             CONFIGURE_COMMAND ""
0225             BUILD_COMMAND ${CMAKE_COMMAND} -E env ${KRITA_MACOS_CONSOLIDATE_SCRIPT} <TMP_DIR>
0226             INSTALL_COMMAND tar -xzf <TMP_DIR>/${KRITA_MACOS_EXTERNAL_PACKAGE_NAME} -C "/"
0227             UPDATE_COMMAND ""
0228 
0229             DEPENDS ${EXT_DEPENDS}
0230         )
0231     endif()
0232 
0233     set(step_depend configure)
0234     foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
0235         compile_arch(${ARCH} ${step_depend} ${EXT_MESON})
0236         set(step_depend build-${ARCH})
0237     endforeach()
0238 endmacro()
0239 
0240 macro(mkdir_build_arch_dir ARCH)
0241 ExternalProject_Add_Step(ext_qt mkdir-build-${ARCH}
0242     COMMAND ${CMAKE_COMMAND} -E make_directory <BINARY_DIR>-${ARCH}
0243     DEPENDERS configure
0244 )
0245 endmacro()