Merge pull request #227900 from amjoseph-nixpkgs/pr/qtbase/fixcross

qt5.qtbase: fix cross
This commit is contained in:
Adam Joseph 2023-08-26 21:31:39 +00:00 committed by GitHub
commit a6187bbbcb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 3 deletions

View File

@ -207,7 +207,8 @@ let
import ../qtModule.nix
{
inherit perl;
inherit lib;
inherit lib stdenv;
inherit buildPackages;
# Use a variant of mkDerivation that does not include wrapQtApplications
# to avoid cyclic dependencies between Qt modules.
mkDerivation =

View File

@ -1,4 +1,5 @@
if [[ -n "${__nix_qtbase-}" ]]; then
if [ -z "${dontWorryAboutQtMismatch-}" ]; then
# Throw an error if a different version of Qt was already set up.
if [[ "$__nix_qtbase" != "@dev@" ]]; then
echo >&2 "Error: detected mismatched Qt dependencies:"
@ -6,6 +7,7 @@ if [[ -n "${__nix_qtbase-}" ]]; then
echo >&2 " $__nix_qtbase"
exit 1
fi
fi
else # Only set up Qt once.
__nix_qtbase="@dev@"

View File

@ -28,10 +28,15 @@
, developerBuild ? false
, decryptSslTraffic ? false
, testers
, buildPackages
}:
let
debugSymbols = debug || developerBuild;
qtPlatformCross = plat: with plat;
if isLinux
then "linux-generic-g++"
else throw "Please add a qtPlatformCross entry for ${plat.config}";
in
stdenv.mkDerivation (finalAttrs: {
@ -82,6 +87,11 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [ bison flex gperf lndir perl pkg-config which ]
++ lib.optionals stdenv.isDarwin [ xcbuild ];
# `qtbase` expects to find `cc` (with no prefix) in the
# `$PATH`, so the following is needed even if
# `stdenv.buildPlatform.canExecute stdenv.hostPlatform`
depsBuildBuild = [ buildPackages.stdenv.cc ];
propagatedNativeBuildInputs = [ lndir ];
# libQt5Core links calls CoreFoundation APIs that call into the system ICU. Binaries linked
@ -161,6 +171,11 @@ stdenv.mkDerivation (finalAttrs: {
export MAKEFLAGS+=" -j$NIX_BUILD_CORES"
./bin/syncqt.pl -version $version
'' + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
# QT's configure script will refuse to use pkg-config unless these two environment variables are set
export PKG_CONFIG_SYSROOT_DIR=/
export PKG_CONFIG_LIBDIR=${lib.getLib pkg-config}/lib
echo 'QMAKE_PKG_CONFIG=''$''${CROSS_COMPILE}pkg-config' >> mkspecs/devices/${qtPlatformCross stdenv.hostPlatform}/qmake.conf
'';
postConfigure = ''
@ -208,6 +223,8 @@ stdenv.mkDerivation (finalAttrs: {
# To prevent these failures, we need to override PostgreSQL detection.
PSQL_LIBS = lib.optionalString (postgresql != null) "-L${postgresql.lib}/lib -lpq";
# do not pass --host and --build to configureFlags as QT's configure script doesn't understand them
configurePlatforms = [ ];
# TODO Remove obsolete and useless flags once the build will be totally mastered
configureFlags = [
"-plugindir $(out)/$(qtPluginPrefix)"
@ -234,6 +251,9 @@ stdenv.mkDerivation (finalAttrs: {
"-L" "${icu.out}/lib"
"-I" "${icu.dev}/include"
"-pch"
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"-device ${qtPlatformCross stdenv.hostPlatform}"
"-device-option CROSS_COMPILE=${stdenv.cc.targetPrefix}"
]
++ lib.optional debugSymbols "-debug"
++ lib.optionals developerBuild [

View File

@ -1,4 +1,8 @@
{ lib, mkDerivation, perl }:
{ lib
, stdenv
, mkDerivation, perl
, buildPackages
}:
let inherit (lib) licenses maintainers platforms; in
@ -17,7 +21,8 @@ mkDerivation (args // {
patches = (args.patches or []) ++ (patches.${pname} or []);
nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ perl self.qmake ];
propagatedBuildInputs = args.qtInputs ++ (args.propagatedBuildInputs or []);
propagatedBuildInputs = (args.qtInputs or []) ++ (args.propagatedBuildInputs or []);
depsBuildBuild = [ buildPackages.stdenv.cc ];
outputs = args.outputs or [ "out" "dev" ];
setOutputFlags = args.setOutputFlags or false;
@ -74,4 +79,7 @@ mkDerivation (args // {
maintainers = with maintainers; [ qknight ttuegel periklis bkchr ];
platforms = platforms.unix;
} // (args.meta or {});
} // lib.optionalAttrs (stdenv.hostPlatform != stdenv.buildPlatform) {
dontWorryAboutQtMismatch = true;
})