[PATCH] CMake: add support for GNU/Hurd
authorPino Toscano <toscano.pino@tiscali.it>
Sun, 21 Nov 2021 07:59:56 +0000 (08:59 +0100)
committerPatrick Franz <deltaone@debian.org>
Sat, 1 Oct 2022 16:58:47 +0000 (17:58 +0100)
Add a "HURD" CMake platform specification, so it can be properly
checked in the build system.

Set QT_DEFAULT_MKSPEC to the existing hurd-g++ mkspec.

Hurd supports $ORIGIN in RPATH, so enable it.

Hurd uses X11, so add it to the X11_SUPPORTED list.

Enable few more feature checks that apply to Hurd as well: either
because they are provided by GNU libc itself, or because they are
implemented on Hurd.

Check and set the ELF interpreter, as it is a common functionality of
the GNU toolchain.

Change-Id: Id347033560bbc5a2a4e2c3abb493c948c002b40e
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Gbp-Pq: Name upstream_CMake-add-support-for-GNU-Hurd.patch

cmake/QtBuild.cmake
cmake/QtPlatformSupport.cmake
cmake/QtRpathHelpers.cmake
src/corelib/CMakeLists.txt
src/corelib/configure.cmake
src/gui/configure.cmake

index 7ee320e5d62d0aef41247f0a820effe191b586a4..7db868069a071dd0cc4cab05db6b7fdd9916f010 100644 (file)
@@ -367,6 +367,8 @@ elseif(SOLARIS)
              set(QT_DEFAULT_MKSPEC solaris-cc)
         endif()
     endif()
+elseif(HURD)
+    set(QT_DEFAULT_MKSPEC hurd-g++)
 endif()
 
 if(NOT QT_QMAKE_TARGET_MKSPEC)
index c8462043c9cc1524395899a650faa0f1fc93af4b..44db95d8076996de9c50ecbecd5c74cef3dd5c77 100644 (file)
@@ -18,6 +18,7 @@ qt_set01(FREEBSD CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") # FIXME: How to identify
 qt_set01(NETBSD CMAKE_SYSTEM_NAME STREQUAL "NetBSD") # FIXME: How to identify this?
 qt_set01(WASM CMAKE_SYSTEM_NAME STREQUAL "Emscripten" OR EMSCRIPTEN)
 qt_set01(SOLARIS CMAKE_SYSTEM_NAME STREQUAL "SunOS")
+qt_set01(HURD CMAKE_SYSTEM_NAME STREQUAL "GNU")
 
 # This is the only reliable way we can determine the webOS platform as the yocto recipe adds this
 # compile definition into its generated toolchain.cmake file
index 3df306d0b9e37d6a8fad0b88d9adf49d62e6726d..6b8215bfdc5d2f229c1becec2bc9b6d33680c536 100644 (file)
@@ -27,7 +27,7 @@ function(qt_compute_relative_rpath_base rpath install_location out_var)
     # needed in the .prf files, but for CMake we need to prepend them ourselves.
     if(APPLE)
         set(rpath_rel_base "@loader_path")
-    elseif(LINUX OR SOLARIS OR FREEBSD)
+    elseif(LINUX OR SOLARIS OR FREEBSD OR HURD)
         set(rpath_rel_base "$ORIGIN")
     else()
         message(WARNING "No known RPATH_REL_BASE for target platform.")
index 403654d0fcd259d1536a7564fa66204d3669c07c..7642bd777bde09c890c589c883eada18a6d1141e 100644 (file)
@@ -341,7 +341,7 @@ set_property(TARGET Core APPEND PROPERTY
     PRIVATE_HEADER "${CMAKE_CURRENT_BINARY_DIR}/global/qconfig_p.h")
 
 # Find ELF interpreter and define a macro for that:
-if (LINUX AND NOT CMAKE_CROSSCOMPILING AND BUILD_SHARED_LIBS)
+if ((LINUX OR HURD) AND NOT CMAKE_CROSSCOMPILING AND BUILD_SHARED_LIBS)
     if (NOT DEFINED ELF_INTERPRETER)
         execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C readelf -l /bin/ls
                         RESULT_VARIABLE readelf_ok
index f386a629858684ec28c5c5375eabe4811c4abd8a..4cf7d8c4f3275192f117f6081499bf99e3fca047 100644 (file)
@@ -572,7 +572,7 @@ qt_feature("glib" PUBLIC PRIVATE
 qt_feature_definition("glib" "QT_NO_GLIB" NEGATE VALUE "1")
 qt_feature("glibc" PRIVATE
     LABEL "GNU libc"
-    AUTODETECT LINUX
+    AUTODETECT ( LINUX OR HURD )
     CONDITION TEST_glibc
 )
 qt_feature("icu" PRIVATE
@@ -606,7 +606,7 @@ qt_feature("system-libb2" PRIVATE
 # Currently only used by QTemporaryFile; linkat() exists on Android, but hardlink creation fails due to security rules
 qt_feature("linkat" PRIVATE
     LABEL "linkat()"
-    AUTODETECT LINUX AND NOT ANDROID
+    AUTODETECT ( LINUX AND NOT ANDROID ) OR HURD
     CONDITION TEST_linkat
 )
 qt_feature("std-atomic64" PUBLIC
@@ -663,7 +663,7 @@ qt_feature("qqnx_pps" PRIVATE
 )
 qt_feature("renameat2" PRIVATE
     LABEL "renameat2()"
-    CONDITION LINUX AND TEST_renameat2
+    CONDITION ( LINUX OR HURD ) AND TEST_renameat2
 )
 qt_feature("slog2" PRIVATE
     LABEL "slog2"
@@ -671,7 +671,7 @@ qt_feature("slog2" PRIVATE
 )
 qt_feature("statx" PRIVATE
     LABEL "statx() in libc"
-    CONDITION LINUX AND TEST_statx
+    CONDITION ( LINUX OR HURD ) AND TEST_statx
 )
 qt_feature("syslog" PRIVATE
     LABEL "syslog"
index 42ab041f99a4e4ebe61bed275af6363182c9ce4a..f5024a8942dd639797b225cd7f19e5f5b4370d8c 100644 (file)
@@ -25,7 +25,7 @@ set_property(CACHE INPUT_libpng PROPERTY STRINGS undefined no qt system)
 
 
 #### Libraries
-qt_set01(X11_SUPPORTED LINUX OR HPUX OR FREEBSD OR NETBSD OR OPENBSD OR SOLARIS) # special case
+qt_set01(X11_SUPPORTED LINUX OR HPUX OR FREEBSD OR NETBSD OR OPENBSD OR SOLARIS OR HURD) # special case
 qt_find_package(ATSPI2 PROVIDED_TARGETS PkgConfig::ATSPI2 MODULE_NAME gui QMAKE_LIB atspi)
 qt_find_package(DirectFB PROVIDED_TARGETS PkgConfig::DirectFB MODULE_NAME gui QMAKE_LIB directfb)
 qt_find_package(Libdrm PROVIDED_TARGETS Libdrm::Libdrm MODULE_NAME gui QMAKE_LIB drm)