qt59.qtbase: carefully avoid applying Linux flags to Darwin build

This commit is contained in:
Thomas Tuegel 2017-11-12 09:44:46 -06:00
parent ded18e4f47
commit d3efa486e5
No known key found for this signature in database
GPG Key ID: 22CBF5249D4B4D59

View File

@ -31,6 +31,7 @@ assert withGtk3 -> gtk3 != null;
let let
system-x86_64 = lib.elem stdenv.system lib.platforms.x86_64; system-x86_64 = lib.elem stdenv.system lib.platforms.x86_64;
compareVersion = v: builtins.compareVersions version v;
in in
stdenv.mkDerivation { stdenv.mkDerivation {
@ -47,33 +48,36 @@ stdenv.mkDerivation {
# Image formats # Image formats
libjpeg libpng libtiff libjpeg libpng libtiff
(if compareVersion "5.9.0" >= 0 then pcre2 else pcre16)
] ]
++ (if builtins.compareVersions version "5.9.0" >= 0 ++ (
then [ pcre2 ] else [ pcre16 ]) if stdenv.isDarwin
then with darwin.apple_sdk.frameworks;
[
AGL AppKit ApplicationServices Carbon Cocoa CoreAudio CoreBluetooth
CoreLocation CoreServices DiskArbitration Foundation OpenGL
darwin.libobjc libiconv
]
else
[
dbus glib udev
++ lib.optional (mesaSupported && !stdenv.isDarwin) mesa # Text rendering
fontconfig freetype
++ lib.optionals (!stdenv.isDarwin) [ # X11 libs
dbus glib udev libX11 libXcomposite libXext libXi libXrender libxcb libxkbcommon xcbutil
xcbutilimage xcbutilkeysyms xcbutilrenderutil xcbutilwm
]
++ lib.optional mesaSupported mesa
);
# Text rendering buildInputs =
fontconfig freetype lib.optionals (!stdenv.isDarwin)
(
# X11 libs [ libinput ]
libX11 libXcomposite libXext libXi libXrender libxcb libxkbcommon xcbutil ++ lib.optional withGtk3 gtk3
xcbutilimage xcbutilkeysyms xcbutilrenderutil xcbutilwm )
]
++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
AGL AppKit ApplicationServices Carbon Cocoa
CoreAudio CoreBluetooth CoreLocation CoreServices
DiskArbitration Foundation OpenGL
darwin.libobjc libiconv
]);
buildInputs = [ ]
++ lib.optional (!stdenv.isDarwin && withGtk3) gtk3
++ lib.optional (!stdenv.isDarwin) libinput
++ lib.optional developerBuild gdb ++ lib.optional developerBuild gdb
++ lib.optional (cups != null) cups ++ lib.optional (cups != null) cups
++ lib.optional (mysql != null) mysql.lib ++ lib.optional (mysql != null) mysql.lib
@ -118,30 +122,35 @@ stdenv.mkDerivation {
sed -i '/PATHS.*NO_DEFAULT_PATH/ d' mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in sed -i '/PATHS.*NO_DEFAULT_PATH/ d' mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
'' ''
+ lib.optionalString (mesaSupported && !stdenv.isDarwin) '' + (
sed -i mkspecs/common/linux.conf \ if stdenv.isDarwin
-e "/^QMAKE_INCDIR_OPENGL/ s|$|${mesa.dev or mesa}/include|" \ then
-e "/^QMAKE_LIBDIR_OPENGL/ s|$|${mesa.out}/lib|" ''
'' sed -i \
-e 's|! /usr/bin/xcode-select --print-path >/dev/null 2>&1;|false;|' \
+ lib.optionalString stdenv.isDarwin '' -e 's|! /usr/bin/xcrun -find xcodebuild >/dev/null 2>&1;|false;|' \
sed -i \ -e 's|sysroot=$(/usr/bin/xcodebuild -sdk $sdk -version Path 2>/dev/null)|sysroot=/nonsense|' \
-e 's|! /usr/bin/xcode-select --print-path >/dev/null 2>&1;|false;|' \ -e 's|sysroot=$(/usr/bin/xcrun --sdk $sdk --show-sdk-path 2>/dev/null)|sysroot=/nonsense|' \
-e 's|! /usr/bin/xcrun -find xcodebuild >/dev/null 2>&1;|false;|' \ -e 's|QMAKE_CONF_COMPILER=`getXQMakeConf QMAKE_CXX`|QMAKE_CXX="clang++"\nQMAKE_CONF_COMPILER="clang++"|' \
-e 's|sysroot=$(/usr/bin/xcodebuild -sdk $sdk -version Path 2>/dev/null)|sysroot=/nonsense|' \ -e 's|XCRUN=`/usr/bin/xcrun -sdk macosx clang -v 2>&1`|XCRUN="clang -v 2>&1"|' \
-e 's|sysroot=$(/usr/bin/xcrun --sdk $sdk --show-sdk-path 2>/dev/null)|sysroot=/nonsense|' \ -e 's#sdk_val=$(/usr/bin/xcrun -sdk $sdk -find $(echo $val | cut -d \x27 \x27 -f 1))##' \
-e 's|QMAKE_CONF_COMPILER=`getXQMakeConf QMAKE_CXX`|QMAKE_CXX="clang++"\nQMAKE_CONF_COMPILER="clang++"|' \ -e 's#val=$(echo $sdk_val $(echo $val | cut -s -d \x27 \x27 -f 2-))##' \
-e 's|XCRUN=`/usr/bin/xcrun -sdk macosx clang -v 2>&1`|XCRUN="clang -v 2>&1"|' \ ./configure
-e 's#sdk_val=$(/usr/bin/xcrun -sdk $sdk -find $(echo $val | cut -d \x27 \x27 -f 1))##' \ substituteInPlace ./mkspecs/common/mac.conf \
-e 's#val=$(echo $sdk_val $(echo $val | cut -s -d \x27 \x27 -f 2-))##' \ --replace "/System/Library/Frameworks/OpenGL.framework/" "${darwin.apple_sdk.frameworks.OpenGL}/Library/Frameworks/OpenGL.framework/"
./configure substituteInPlace ./mkspecs/common/mac.conf \
substituteInPlace ./mkspecs/common/mac.conf \ --replace "/System/Library/Frameworks/AGL.framework/" "${darwin.apple_sdk.frameworks.AGL}/Library/Frameworks/AGL.framework/"
--replace "/System/Library/Frameworks/OpenGL.framework/" "${darwin.apple_sdk.frameworks.OpenGL}/Library/Frameworks/OpenGL.framework/" ''
substituteInPlace ./mkspecs/common/mac.conf \ # Note on the above: \x27 is a way if including a single-quote
--replace "/System/Library/Frameworks/AGL.framework/" "${darwin.apple_sdk.frameworks.AGL}/Library/Frameworks/AGL.framework/" # character in the sed string arguments.
''; else
# Note on the above: \x27 is a way if including a single-quote lib.optionalString mesaSupported
# character in the sed string arguments. ''
sed -i mkspecs/common/linux.conf \
-e "/^QMAKE_INCDIR_OPENGL/ s|$|${mesa.dev or mesa}/include|" \
-e "/^QMAKE_LIBDIR_OPENGL/ s|$|${mesa.out}/lib|"
''
);
qtPluginPrefix = "lib/qt-${qtCompatVersion}/plugins"; qtPluginPrefix = "lib/qt-${qtCompatVersion}/plugins";
qtQmlPrefix = "lib/qt-${qtCompatVersion}/qml"; qtQmlPrefix = "lib/qt-${qtCompatVersion}/qml";
@ -150,7 +159,7 @@ stdenv.mkDerivation {
setOutputFlags = false; setOutputFlags = false;
preConfigure = '' preConfigure = ''
export LD_LIBRARY_PATH="$PWD/lib:$PWD/plugins/platforms:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH="$PWD/lib:$PWD/plugins/platforms:$LD_LIBRARY_PATH"
${lib.optionalString (builtins.compareVersions version "5.9.0" < 0) '' ${lib.optionalString (compareVersion "5.9.0" < 0) ''
# We need to set LD to CXX or otherwise we get nasty compile errors # We need to set LD to CXX or otherwise we get nasty compile errors
export LD=$CXX export LD=$CXX
''} ''}
@ -189,24 +198,25 @@ stdenv.mkDerivation {
''-DNIXPKGS_LIBXCURSOR="${libXcursor.out}/lib/libXcursor"'' ''-DNIXPKGS_LIBXCURSOR="${libXcursor.out}/lib/libXcursor"''
] ]
++ lib.optional (mesaSupported && !stdenv.isDarwin) ++ (
''-DNIXPKGS_MESA_GL="${mesa.out}/lib/libGL"'' if stdenv.isDarwin
then
++ lib.optionals (!stdenv.isDarwin && withGtk3) [
[ "-Wno-missing-sysroot"
''-DNIXPKGS_QGTK3_XDG_DATA_DIRS="${gtk3}/share/gsettings-schemas/${gtk3.name}"'' "-D__MAC_OS_X_VERSION_MAX_ALLOWED=1090"
''-DNIXPKGS_QGTK3_GIO_EXTRA_MODULES="${dconf.lib}/lib/gio/modules"'' "-D__AVAILABILITY_INTERNAL__MAC_10_10=__attribute__((availability(macosx,introduced=10.10)))"
] # Note that nixpkgs's objc4 is from macOS 10.11 while the SDK is
# 10.9 which necessitates the above macro definition that mentions
++ lib.optionals stdenv.isDarwin # 10.10
[ ]
"-Wno-missing-sysroot" else
"-D__MAC_OS_X_VERSION_MAX_ALLOWED=1090" lib.optional mesaSupported ''-DNIXPKGS_MESA_GL="${mesa.out}/lib/libGL"''
"-D__AVAILABILITY_INTERNAL__MAC_10_10=__attribute__((availability(macosx,introduced=10.10)))" ++ lib.optionals withGtk3
# Note that nixpkgs's objc4 is from macOS 10.11 while the SDK is [
# 10.9 which necessitates the above macro definition that mentions ''-DNIXPKGS_QGTK3_XDG_DATA_DIRS="${gtk3}/share/gsettings-schemas/${gtk3.name}"''
# 10.10 ''-DNIXPKGS_QGTK3_GIO_EXTRA_MODULES="${dconf.lib}/lib/gio/modules"''
] ]
)
++ lib.optional decryptSslTraffic "-DQT_DECRYPT_SSL_TRAFFIC"; ++ lib.optional decryptSslTraffic "-DQT_DECRYPT_SSL_TRAFFIC";
@ -232,8 +242,15 @@ stdenv.mkDerivation {
"-strip" "-strip"
"-system-proxies" "-system-proxies"
"-pkg-config" "-pkg-config"
"-gui"
"-widgets"
"-opengl desktop"
"-qml-debug"
"-icu"
"-pch"
] ]
++ lib.optionals (builtins.compareVersions version "5.9.0" < 0) ++ lib.optionals (compareVersion "5.9.0" < 0)
[ [
"-c++11" "-c++11"
"-no-reduce-relocations" "-no-reduce-relocations"
@ -242,18 +259,11 @@ stdenv.mkDerivation {
"-developer-build" "-developer-build"
"-no-warnings-are-errors" "-no-warnings-are-errors"
] ]
++ [ ++ (
"-gui" if (!system-x86_64)
"-widgets" then [ "-no-sse2" ]
"-opengl desktop" else lib.optional (compareVersion "5.9.0" >= 0) [ "-sse2" ]
"-qml-debug" )
"-icu"
"-pch"
]
++ (if builtins.compareVersions version "5.9.0" >= 0
then [ (if system-x86_64 then "-sse2" else "-no-sse2") ]
else lib.optional (!system-x86_64) "-no-sse2")
++ [ ++ [
"-no-sse3" "-no-sse3"
"-no-ssse3" "-no-ssse3"
@ -277,46 +287,50 @@ stdenv.mkDerivation {
"-make libs" "-make libs"
"-make tools" "-make tools"
''-${lib.optionalString (buildExamples == false) "no"}make examples'' ''-${lib.optionalString (!buildExamples) "no"}make examples''
''-${lib.optionalString (buildTests == false) "no"}make tests'' ''-${lib.optionalString (!buildTests) "no"}make tests''
"-v" "-v"
] ]
++ lib.optionals (!stdenv.isDarwin) [ ++ (
"-${lib.optionalString (builtins.compareVersions version "5.9.0" < 0) "no-"}rpath" if stdenv.isDarwin
then
[
"-platform macx-clang"
"-no-use-gold-linker"
"-no-fontconfig"
"-qt-freetype"
"-qt-libpng"
]
else
[
"-${lib.optionalString (compareVersion "5.9.0" < 0) "no-"}rpath"
"-system-xcb" "-system-xcb"
"-xcb" "-xcb"
"-qpa xcb" "-qpa xcb"
"-system-xkbcommon" "-system-xkbcommon"
"-libinput" "-libinput"
"-xkbcommon-evdev" "-xkbcommon-evdev"
"-no-eglfs" "-no-eglfs"
"-no-gbm" "-no-gbm"
"-no-kms" "-no-kms"
"-no-linuxfb" "-no-linuxfb"
''-${lib.optionalString (cups == null) "no-"}cups'' ''-${lib.optionalString (cups == null) "no-"}cups''
"-dbus-linked" "-dbus-linked"
"-glib" "-glib"
"-system-libjpeg" "-system-libjpeg"
"-system-libpng" "-system-libpng"
# gold linker of binutils 2.28 generates duplicate symbols # gold linker of binutils 2.28 generates duplicate symbols
# TODO: remove for newer version of binutils # TODO: remove for newer version of binutils
"-no-use-gold-linker" "-no-use-gold-linker"
] ]
++ lib.optional withGtk3 "-gtk" ++ lib.optional withGtk3 "-gtk"
++ lib.optional (builtins.compareVersions version "5.9.0" >= 0) "-inotify" ++ lib.optional (compareVersion "5.9.0" >= 0) "-inotify"
);
++ lib.optionals stdenv.isDarwin [
"-platform macx-clang"
"-no-use-gold-linker"
"-no-fontconfig"
"-qt-freetype"
"-qt-libpng"
];
enableParallelBuilding = true; enableParallelBuilding = true;
@ -360,27 +374,31 @@ stdenv.mkDerivation {
moveToOutput bin "$dev" moveToOutput bin "$dev"
'' ''
# fixup .pc file (where to find 'moc' etc.) + (
+ lib.optionalString (!stdenv.isDarwin) '' if stdenv.isDarwin
sed -i "$dev/lib/pkgconfig/Qt5Core.pc" \ then
-e "/^host_bins=/ c host_bins=$dev/bin" ''
'' fixDarwinDylibNames_rpath() {
local flags=()
+ lib.optionalString stdenv.isDarwin '' for fn in "$@"; do
fixDarwinDylibNames_rpath() { flags+=(-change "@rpath/$fn.framework/Versions/5/$fn" "$out/lib/$fn.framework/Versions/5/$fn")
local flags=() done
for fn in "$@"; do for fn in "$@"; do
flags+=(-change "@rpath/$fn.framework/Versions/5/$fn" "$out/lib/$fn.framework/Versions/5/$fn") echo "$fn: fixing dylib"
done install_name_tool -id "$out/lib/$fn.framework/Versions/5/$fn" "''${flags[@]}" "$out/lib/$fn.framework/Versions/5/$fn"
done
for fn in "$@"; do }
echo "$fn: fixing dylib" fixDarwinDylibNames_rpath "QtConcurrent" "QtPrintSupport" "QtCore" "QtSql" "QtDBus" "QtTest" "QtGui" "QtWidgets" "QtNetwork" "QtXml" "QtOpenGL"
install_name_tool -id "$out/lib/$fn.framework/Versions/5/$fn" "''${flags[@]}" "$out/lib/$fn.framework/Versions/5/$fn" ''
done else
} # fixup .pc file (where to find 'moc' etc.)
fixDarwinDylibNames_rpath "QtConcurrent" "QtPrintSupport" "QtCore" "QtSql" "QtDBus" "QtTest" "QtGui" "QtWidgets" "QtNetwork" "QtXml" "QtOpenGL" ''
''; sed -i "$dev/lib/pkgconfig/Qt5Core.pc" \
-e "/^host_bins=/ c host_bins=$dev/bin"
''
);
setupHook = ../hooks/qtbase-setup-hook.sh; setupHook = ../hooks/qtbase-setup-hook.sh;