[graphics/krita] /: Perl: fix deployment and environment setup

L. E. Segovia null at kde.org
Fri Jan 6 20:38:36 GMT 2023


Git commit fa8e6f701568067c3c78d73c1490dacb3f625ab6 by L. E. Segovia.
Committed on 06/01/2023 at 20:30.
Pushed by lsegovia into branch 'master'.

Perl: fix deployment and environment setup

The path_list_append that was attempted for cmake -E env is a CMake 3.25
feature, while we only require 3.20 as a baseline.

Moreover, the usage of FindPerl meant that we had four separate
variables (PERL_EXECUTABLE, KRITA_PERL_EXECUTABLE,
KRITA_PERL_PATH_INTERNAL, and KRITA_PERL_PATH) for specifying something
that is already designated in the PATH
through PERL_BIN.

This commit removes all of them, uses a single point of truth (the PATH
in our build scripts), deploys Strawberry Perl (if required) to that
location, and checks that the PATH has been correctly carved out before
allowing the build to proceed.

CCMAIL: kimageshop at kde.org

M  +19   -3    3rdparty/CMakeLists.txt
M  +2    -2    3rdparty/ext_heif/CMakeLists.txt
M  +25   -25   3rdparty/ext_perl/CMakeLists.txt [INFRASTRUCTURE]
M  +4    -9    3rdparty/ext_qt/CMakeLists.txt
M  +7    -0    build-tools/windows/build-msvc.cmd
M  +7    -1    build-tools/windows/build.cmd

https://invent.kde.org/graphics/krita/commit/fa8e6f701568067c3c78d73c1490dacb3f625ab6

diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt
index 9f084c5c3f..7263c2a268 100644
--- a/3rdparty/CMakeLists.txt
+++ b/3rdparty/CMakeLists.txt
@@ -99,7 +99,22 @@ option(QT_ENABLE_DEBUG_INFO "Build Qt with full debug info included" OFF)
 option(QT_ENABLE_ASAN "Build Qt with ASAN" OFF)
 endif()
 
-find_package(Perl)
+include(FeatureSummary)
+
+if (WIN32)
+    set(_is_perl_required)
+    set(_perl_type OPTIONAL)
+else()
+    set(_is_perl_required REQUIRED)
+    set(_perl_type REQUIRED)
+endif()
+find_package(Perl ${_is_perl_required})
+set_package_properties(Perl PROPERTIES
+    URL "https://www.perl.org/"
+    DESCRIPTION "Perl is a highly capable, feature-rich programming language with over 30 years of development."
+    TYPE ${_perl_type}
+    PURPOSE "Needed for building Qt from source."
+)
 
 if (WIN32)
     option(ENABLE_MSYS2_FIXES "Enable patches that are needed for MSYS2+Clang Krita build" OFF)
@@ -390,8 +405,9 @@ if(WIN32)
     add_subdirectory(ext_googleangle)
 endif()
 
-# perl is required by Qt built from source
-add_subdirectory( ext_perl )
+if (WIN32 AND NOT PERL_FOUND)
+    add_subdirectory( ext_perl )
+endif()
 add_subdirectory( ext_qt )
 add_subdirectory( ext_libraw )
 if (ANDROID)
diff --git a/3rdparty/ext_heif/CMakeLists.txt b/3rdparty/ext_heif/CMakeLists.txt
index c7058eb635..0ce67601a7 100644
--- a/3rdparty/ext_heif/CMakeLists.txt
+++ b/3rdparty/ext_heif/CMakeLists.txt
@@ -52,8 +52,8 @@ if (USE_STRAWBERRYPERL)
     set(LIBAOM_STRAWBERRYPERL_DEP ext_strawberryperl)
 endif()
 
-if(WIN32 AND KRITA_PERL_EXECUTABLE)
-    set(LIBAOM_EXTRA_CMAKE_ARGS -DPERL_EXECUTABLE=${KRITA_PERL_EXECUTABLE})
+if(WIN32 AND PERL_EXECUTABLE)
+    set(LIBAOM_EXTRA_CMAKE_ARGS -DPERL_EXECUTABLE=${PERL_EXECUTABLE})
 elseif (NOT WIN32)
     set(LIBAOM_EXTRA_CMAKE_ARGS -DCONFIG_PIC=1)
 endif()
diff --git a/3rdparty/ext_perl/CMakeLists.txt b/3rdparty/ext_perl/CMakeLists.txt
index 5dc2672430..9968768214 100644
--- a/3rdparty/ext_perl/CMakeLists.txt
+++ b/3rdparty/ext_perl/CMakeLists.txt
@@ -1,28 +1,28 @@
-if(NOT PERL_FOUND AND WIN32)
-    ExternalProject_Add(
-        ext_strawberryperl
-        DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
-        # From https://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-32bit-portable.zip
-        URL https://files.kde.org/krita/build/dependencies/strawberry-perl-5.32.1.1-32bit-portable.zip
-        URL_HASH SHA1=28bca91cadd6651c2b2463db8587c170bf17f2fa
+set(EXTPREFIX_perl "${EXTPREFIX}")
 
-        BUILD_COMMAND ${CMAKE_COMMAND} -E echo Deploying Strawberry Perl portable
-        CONFIGURE_COMMAND ""
-        INSTALL_COMMAND ""
-        UPDATE_COMMAND ""
+ExternalProject_Add(
+    ext_strawberryperl
+    DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
+    # From https://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-32bit-portable.zip
+    URL https://files.kde.org/krita/build/dependencies/strawberry-perl-5.32.1.1-32bit-portable.zip
+    URL_HASH SHA1=28bca91cadd6651c2b2463db8587c170bf17f2fa
 
-        SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/Strawberry"
-    )
-    
-    set(USE_STRAWBERRYPERL ON CACHE BOOL "Krita will use its own package of strawberryperl" FORCE)    
-    set(KRITA_PERL_EXECUTABLE ${CMAKE_CURRENT_BINARY_DIR}/Strawberry/perl/bin/perl.exe CACHE FILEPATH "Path to our own perl executable" FORCE)
-elseif (PERL_EXECUTABLE) 
-    set(KRITA_PERL_EXECUTABLE ${PERL_EXECUTABLE} CACHE FILEPATH "Path to the found perl executable" FORCE)
-elseif(NOT PERL_FOUND)
-    message(FATAL_ERROR "Perl is not found and it is needed for building of Qt!")
-endif()
+    BUILD_COMMAND ${CMAKE_COMMAND} -E echo Deploying Strawberry Perl portable
+    CONFIGURE_COMMAND ""
+    INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Deploying Strawberry Perl"
+        COMMAND ${CMAKE_COMMAND} -E copy_directory
+            ${CMAKE_CURRENT_BINARY_DIR}/Strawberry
+            ${EXTPREFIX_perl}/Strawberry
+    UPDATE_COMMAND ""
+
+    SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/Strawberry"
+)
 
-if (KRITA_PERL_EXECUTABLE) 
-    cmake_path(GET KRITA_PERL_EXECUTABLE PARENT_PATH KRITA_PERL_PATH_INTERNAL)
-    set(KRITA_PERL_PATH ${KRITA_PERL_PATH_INTERNAL} CACHE PATH "Path to a directory containing perl executable" FORCE)
-endif()
\ No newline at end of file
+set(USE_STRAWBERRYPERL ON CACHE BOOL "Krita will use its own package of strawberryperl" FORCE)    
+set(PERL_EXECUTABLE ${EXTPREFIX}/Strawberry/perl/bin/perl.exe CACHE FILEPATH "Path to our own perl executable" FORCE)
+string(TOLOWER "$ENV{PATH}" _path)
+if (NOT _path MATCHES "strawberry")
+    message(FATAL_ERROR "Please add the following directories to PATH: ${EXTPREFIX}\\Strawberry\\perl\\bin")
+else()
+    message(STATUS "Perl not found, using Strawberry Perl as a fallback.")
+endif()
diff --git a/3rdparty/ext_qt/CMakeLists.txt b/3rdparty/ext_qt/CMakeLists.txt
index f957dc7665..5ff8312f48 100644
--- a/3rdparty/ext_qt/CMakeLists.txt
+++ b/3rdparty/ext_qt/CMakeLists.txt
@@ -121,15 +121,10 @@ if (WIN32)
     endif ()
     list(APPEND _QT_conf -opengl dynamic)
 
-    if (USE_STRAWBERRYPERL)
+    if (NOT PERL_FOUND) # Implies strawberry perl
       list(APPEND QT_EXTRA_DEPS ext_strawberryperl)
     endif()
 
-    if (KRITA_PERL_PATH) 
-      list(APPEND QT_ENV_ARGS --modify PATH=path_list_append:${KRITA_PERL_PATH})
-    else()
-      message(WARNING "KRITA_PERL_PATH is not set. Most probably, Qt will fail to configure!")
-    endif()
 
   ExternalProject_Add(
       ext_qt
@@ -143,11 +138,11 @@ if (WIN32)
       GIT_REMOTE_UPDATE_STRATEGY REBASE
 
       INSTALL_DIR ${EXTPREFIX_qt}
-      CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${QT_ENV_ARGS} <SOURCE_DIR>/configure.bat ${_QT_conf}
+      CONFIGURE_COMMAND <SOURCE_DIR>/configure.bat ${_QT_conf}
 
-      BUILD_COMMAND ${CMAKE_COMMAND} -E env ${QT_ENV_ARGS} ${QT_BUILD_COMMAND}
+      BUILD_COMMAND ${QT_BUILD_COMMAND}
 
-      INSTALL_COMMAND ${CMAKE_COMMAND} -E env ${QT_ENV_ARGS} ${QT_INSTALL_COMMAND}
+      INSTALL_COMMAND ${QT_INSTALL_COMMAND}
       UPDATE_COMMAND ""
       # Use a short name to reduce the chance of exceeding path length limit
       SOURCE_DIR s
diff --git a/build-tools/windows/build-msvc.cmd b/build-tools/windows/build-msvc.cmd
index 358e11eb12..e61a02e217 100644
--- a/build-tools/windows/build-msvc.cmd
+++ b/build-tools/windows/build-msvc.cmd
@@ -829,6 +829,13 @@ if not "%GETTEXT_SEARCH_PATH%" == "" (
     set PATH=!PATH!;!GETTEXT_SEARCH_PATH!
 )
 
+
+if not "%PERL_DIR%" == "" (
+    set "PATH=%PATH%;%PERL_DIR%"
+) else (
+    set "PATH=%PATH%;%DEPS_INSTALL_DIR%\Strawberry\perl\bin"
+)
+
 :: Prepare the CMake command lines
 set CMDLINE_CMAKE_DEPS="%CMAKE_EXE%" "%KRITA_SRC_DIR%\3rdparty" ^
     -DSUBMAKE_JOBS=%PARALLEL_JOBS% ^
diff --git a/build-tools/windows/build.cmd b/build-tools/windows/build.cmd
index 558389e609..6034d5baaa 100644
--- a/build-tools/windows/build.cmd
+++ b/build-tools/windows/build.cmd
@@ -857,6 +857,12 @@ if not "%GETTEXT_SEARCH_PATH%" == "" (
     set "PATH=%PATH%;%GETTEXT_SEARCH_PATH%"
 )
 
+if not "%PERL_DIR%" == "" (
+    set "PATH=%PATH%;%PERL_DIR%"
+) else (
+    set "PATH=%PATH%;%DEPS_INSTALL_DIR%\Strawberry\perl\bin"
+)
+
 :: Prepare the CMake command lines
 set CMDLINE_CMAKE_DEPS="%CMAKE_EXE%" "%KRITA_SRC_DIR%\3rdparty" ^
     -DSUBMAKE_JOBS=%PARALLEL_JOBS% ^
@@ -865,7 +871,7 @@ set CMDLINE_CMAKE_DEPS="%CMAKE_EXE%" "%KRITA_SRC_DIR%\3rdparty" ^
     -DPERL_EXECUTABLE=%PERL_EXECUTABLE% ^
     -DEXTERNALS_DOWNLOAD_DIR=%BUILDDIR_DOWNLOAD_CMAKE% ^
     -DINSTALL_ROOT=%BUILDDIR_DEPS_INSTALL_CMAKE% ^
-    -G "MinGW Makefiles" ^
+    -G "%KRITA_GENERATOR%" ^
     -DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%
     
 set CMDLINE_CMAKE_KRITA="%CMAKE_EXE%" "%KRITA_SRC_DIR%\." ^



More information about the kimageshop mailing list