9bb3fccb5b
continuation of #109595 pkgconfig was aliased in 2018, however, it remained in all-packages.nix due to its wide usage. This cleans up the remaining references to pkgs.pkgsconfig and moves the entry to aliases.nix. python3Packages.pkgconfig remained unchanged because it's the canonical name of the upstream package on pypi.
245 lines
9.8 KiB
Nix
245 lines
9.8 KiB
Nix
{ stdenv, lib, fetchurl, fetchpatch, substituteAll
|
|
, libXrender, libXinerama, libXcursor, libXv, libXext
|
|
, libXfixes, libXrandr, libSM, freetype, fontconfig, zlib, libjpeg, libpng
|
|
, libmng, which, libGLU, openssl, dbus, cups, pkg-config
|
|
, libtiff, glib, icu, libmysqlclient, postgresql, sqlite, perl, coreutils, libXi
|
|
, alsaLib
|
|
, libGLSupported ? stdenv.lib.elem stdenv.hostPlatform.system stdenv.lib.platforms.mesaPlatforms
|
|
, flashplayerFix ? false, gdk-pixbuf
|
|
, gtkStyle ? stdenv.hostPlatform == stdenv.buildPlatform, gtk2
|
|
, gnomeStyle ? false, libgnomeui, GConf, gnome_vfs
|
|
, developerBuild ? false
|
|
, docs ? false
|
|
, examples ? false
|
|
, demos ? false
|
|
# darwin support
|
|
, libobjc, ApplicationServices, OpenGL, Cocoa, AGL, libcxx
|
|
}:
|
|
|
|
let
|
|
v_maj = "4.8";
|
|
v_min = "7";
|
|
vers = "${v_maj}.${v_min}";
|
|
in
|
|
|
|
# TODO:
|
|
# * move some plugins (e.g., SQL plugins) to dedicated derivations to avoid
|
|
# false build-time dependencies
|
|
|
|
stdenv.mkDerivation rec {
|
|
name = "qt-${vers}";
|
|
|
|
src = fetchurl {
|
|
url = "http://download.qt-project.org/official_releases/qt/"
|
|
+ "${v_maj}/${vers}/qt-everywhere-opensource-src-${vers}.tar.gz";
|
|
sha256 = "183fca7n7439nlhxyg1z7aky0izgbyll3iwakw4gwivy16aj5272";
|
|
};
|
|
|
|
outputs = [ "out" "dev" ];
|
|
|
|
outputInclude = "out";
|
|
|
|
setOutputFlags = false;
|
|
|
|
# The version property must be kept because it will be included into the QtSDK package name
|
|
version = vers;
|
|
|
|
prePatch = ''
|
|
substituteInPlace configure --replace /bin/pwd pwd
|
|
substituteInPlace src/corelib/global/global.pri --replace /bin/ls ${coreutils}/bin/ls
|
|
substituteInPlace src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp \
|
|
--replace 'asm volatile' 'asm'
|
|
sed -e 's@/\(usr\|opt\)/@/var/empty/@g' -i config.tests/*/*.test -i mkspecs/*/*.conf
|
|
'' + lib.optionalString stdenv.isDarwin ''
|
|
# remove impure reference to /usr/lib/libstdc++.6.dylib
|
|
# there might be more references, but this is the only one I could find
|
|
substituteInPlace tools/macdeployqt/tests/tst_deployment_mac.cpp \
|
|
--replace /usr/lib/libstdc++.6.dylib "${stdenv.cc}/lib/libstdc++.6.dylib"
|
|
'' + lib.optionalString stdenv.cc.isClang ''
|
|
substituteInPlace src/3rdparty/webkit/Source/WebCore/html/HTMLImageElement.cpp \
|
|
--replace 'optionalHeight > 0' 'optionalHeight != NULL'
|
|
|
|
substituteInPlace ./tools/linguist/linguist/messagemodel.cpp \
|
|
--replace 'm->comment()) >= 0' 'm->comment()) != NULL'
|
|
'';
|
|
|
|
patches =
|
|
lib.optionals (stdenv.hostPlatform == stdenv.buildPlatform) [
|
|
./glib-2.32.patch
|
|
./libressl.patch
|
|
./parallel-configure.patch
|
|
./clang-5-darwin.patch
|
|
./qt-4.8.7-unixmake-darwin.patch
|
|
./kill-legacy-darwin-apis.patch
|
|
(substituteAll {
|
|
src = ./dlopen-absolute-paths.diff;
|
|
cups = if cups != null then lib.getLib cups else null;
|
|
icu = icu.out;
|
|
libXfixes = libXfixes.out;
|
|
glibc = stdenv.cc.libc.out;
|
|
})
|
|
(fetchpatch {
|
|
name = "fix-medium-font.patch";
|
|
url = "https://salsa.debian.org/qt-kde-team/qt/qt4-x11/raw/"
|
|
+ "21b342d71c19e6d68b649947f913410fe6129ea4/debian/patches/kubuntu_39_fix_medium_font.diff";
|
|
sha256 = "0bli44chn03c2y70w1n8l7ss4ya0b40jqqav8yxrykayi01yf95j";
|
|
})
|
|
# Patches are no longer available from here, so vendoring it for now.
|
|
#(fetchpatch {
|
|
# name = "qt4-gcc6.patch";
|
|
# url = "https://git.archlinux.org/svntogit/packages.git/plain/trunk/qt4-gcc6.patch?h=packages/qt4&id=ca773a144f5abb244ac4f2749eeee9333cac001f";
|
|
# sha256 = "07lrva7bjh6i40p7b3ml26a2jlznri8bh7y7iyx5zmvb1gfxmj34";
|
|
#})
|
|
./qt4-gcc6.patch
|
|
./qt4-openssl-1.1.patch
|
|
(fetchpatch {
|
|
name = "gcc9-foreach.patch";
|
|
url = "https://salsa.debian.org/qt-kde-team/qt/qt4-x11/raw/"
|
|
+ "0d4a3dd61ccb156dee556c214dbe91c04d44a717/debian/patches/gcc9-qforeach.patch";
|
|
sha256 = "0dzn6qxrgxb75rvck9kmy5gspawdn970wsjw56026dhkih8cp3pg";
|
|
})
|
|
]
|
|
++ lib.optional gtkStyle (substituteAll ({
|
|
src = ./dlopen-gtkstyle.diff;
|
|
# substituteAll ignores env vars starting with capital letter
|
|
gtk = gtk2.out;
|
|
} // lib.optionalAttrs gnomeStyle {
|
|
gconf = GConf.out;
|
|
libgnomeui = libgnomeui.out;
|
|
gnome_vfs = gnome_vfs.out;
|
|
}))
|
|
++ lib.optional flashplayerFix (substituteAll {
|
|
src = ./dlopen-webkit-nsplugin.diff;
|
|
gtk = gtk2.out;
|
|
})
|
|
++ lib.optional stdenv.isAarch64 (fetchpatch {
|
|
url = "https://src.fedoraproject.org/rpms/qt/raw/ecf530486e0fb7fe31bad26805cde61115562b2b/f/qt-aarch64.patch";
|
|
sha256 = "1fbjh78nmafqmj7yk67qwjbhl3f6ylkp6x33b1dqxfw9gld8b3gl";
|
|
})
|
|
++ lib.optionals stdenv.hostPlatform.isMusl [
|
|
./qt-musl.patch
|
|
./qt-musl-iconv-no-bom.patch
|
|
./patch-qthread-stacksize.diff
|
|
./qsettings-recursive-global-mutex.patch
|
|
];
|
|
|
|
preConfigure = ''
|
|
export LD_LIBRARY_PATH="`pwd`/lib''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
|
configureFlags+="
|
|
-docdir $out/share/doc/${name}
|
|
-plugindir $out/lib/qt4/plugins
|
|
-importdir $out/lib/qt4/imports
|
|
-examplesdir $TMPDIR/share/doc/${name}/examples
|
|
-demosdir $TMPDIR/share/doc/${name}/demos
|
|
-datadir $out/share/${name}
|
|
-translationdir $out/share/${name}/translations
|
|
--jobs=$NIX_BUILD_CORES
|
|
"
|
|
unset LD # Makefile uses gcc for linking; setting LD interferes
|
|
'' + lib.optionalString stdenv.cc.isClang ''
|
|
sed -i 's/QMAKE_CC = gcc/QMAKE_CC = clang/' mkspecs/common/g++-base.conf
|
|
sed -i 's/QMAKE_CXX = g++/QMAKE_CXX = clang++/' mkspecs/common/g++-base.conf
|
|
'' + lib.optionalString stdenv.hostPlatform.isWindows ''
|
|
sed -i -e 's/ g++/ ${stdenv.cc.targetPrefix}g++/' \
|
|
-e 's/ gcc/ ${stdenv.cc.targetPrefix}gcc/' \
|
|
-e 's/ ar/ ${stdenv.cc.targetPrefix}ar/' \
|
|
-e 's/ strip/ ${stdenv.cc.targetPrefix}strip/' \
|
|
-e 's/ windres/ ${stdenv.cc.targetPrefix}windres/' \
|
|
mkspecs/win32-g++/qmake.conf
|
|
'';
|
|
|
|
prefixKey = "-prefix ";
|
|
|
|
configurePlatforms = [];
|
|
configureFlags = let
|
|
mk = cond: name: "-${lib.optionalString (!cond) "no-"}${name}";
|
|
platformFlag =
|
|
if stdenv.hostPlatform != stdenv.buildPlatform
|
|
then "-xplatform"
|
|
else "-platform";
|
|
in (if stdenv.hostPlatform != stdenv.buildPlatform then [
|
|
# I've not tried any case other than i686-pc-mingw32.
|
|
# -nomake tools: it fails linking some asian language symbols
|
|
# -no-svg: it fails to build on mingw64
|
|
"-static" "-release" "-confirm-license" "-opensource"
|
|
"-no-opengl" "-no-phonon"
|
|
"-no-svg"
|
|
"-make" "qmake" "-make" "libs" "-nomake" "tools"
|
|
] else [
|
|
"-v" "-no-separate-debug-info" "-release" "-fast" "-confirm-license" "-opensource"
|
|
|
|
(mk (!stdenv.isFreeBSD) "opengl") "-xrender" "-xrandr" "-xinerama" "-xcursor" "-xinput" "-xfixes" "-fontconfig"
|
|
"-qdbus" (mk (cups != null) "cups") "-glib" "-dbus-linked" "-openssl-linked"
|
|
|
|
"-${if libmysqlclient != null then "plugin" else "no"}-sql-mysql" "-system-sqlite"
|
|
|
|
"-exceptions" "-xmlpatterns"
|
|
|
|
"-make" "libs" "-make" "tools" "-make" "translations"
|
|
"-no-phonon" "-no-webkit" "-no-multimedia" "-audio-backend"
|
|
]) ++ [
|
|
"-${if demos then "" else "no"}make" "demos"
|
|
"-${if examples then "" else "no"}make" "examples"
|
|
"-${if docs then "" else "no"}make" "docs"
|
|
] ++ lib.optional developerBuild "-developer-build"
|
|
++ lib.optionals stdenv.hostPlatform.isDarwin [ platformFlag "unsupported/macx-clang-libc++" ]
|
|
++ lib.optionals stdenv.hostPlatform.isWindows [ platformFlag "win32-g++-4.6" ];
|
|
|
|
propagatedBuildInputs =
|
|
[ libXrender libXrandr libXinerama libXcursor libXext libXfixes libXv libXi
|
|
libSM zlib libpng openssl dbus freetype fontconfig glib ]
|
|
# Qt doesn't directly need GLU (just GL), but many apps use, it's small and doesn't remain a runtime-dep if not used
|
|
++ lib.optional libGLSupported libGLU;
|
|
|
|
# The following libraries are only used in plugins
|
|
buildInputs =
|
|
[ cups # Qt dlopen's libcups instead of linking to it
|
|
postgresql sqlite libjpeg libmng libtiff icu ]
|
|
++ lib.optionals (libmysqlclient != null) [ libmysqlclient ]
|
|
++ lib.optionals gtkStyle [ gtk2 gdk-pixbuf ]
|
|
++ lib.optionals stdenv.isDarwin [ ApplicationServices OpenGL Cocoa AGL libcxx libobjc ];
|
|
|
|
nativeBuildInputs = [ perl pkg-config which ];
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
NIX_CFLAGS_COMPILE = toString (
|
|
# with gcc7 the warnings blow the log over Hydra's limit
|
|
[ "-Wno-expansion-to-defined" "-Wno-unused-local-typedefs" ]
|
|
++ lib.optional stdenv.isLinux "-std=gnu++98" # gnu++ in (Obj)C flags is no good on Darwin
|
|
++ lib.optionals (stdenv.isFreeBSD || stdenv.isDarwin)
|
|
[ "-I${glib.dev}/include/glib-2.0" "-I${glib.out}/lib/glib-2.0/include" ]
|
|
++ lib.optional stdenv.isDarwin "-I${libcxx}/include/c++/v1");
|
|
|
|
NIX_LDFLAGS = lib.optionalString (stdenv.isFreeBSD || stdenv.isDarwin) "-lglib-2.0";
|
|
|
|
preBuild = lib.optionalString stdenv.isDarwin ''
|
|
# resolve "extra qualification on member" error
|
|
sed -i 's/struct ::TabletProximityRec;/struct TabletProximityRec;/' \
|
|
src/gui/kernel/qt_cocoa_helpers_mac_p.h
|
|
find . -name "Makefile*" | xargs sed -i 's/^\(LINK[[:space:]]* = clang++\)/\1 ${NIX_LDFLAGS}/'
|
|
sed -i 's/^\(LIBS[[:space:]]*=.*$\)/\1 -lobjc/' ./src/corelib/Makefile.Release
|
|
'';
|
|
|
|
doCheck = false; # qwebframe test fails with fontconfig errors
|
|
|
|
postInstall = ''
|
|
rm -rf $out/tests
|
|
''
|
|
# I don't know why it does not install qmake
|
|
+ lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
|
|
cp bin/qmake* $out/bin
|
|
'';
|
|
|
|
dontStrip = stdenv.hostPlatform != stdenv.buildPlatform;
|
|
|
|
meta = {
|
|
homepage = "http://qt-project.org/";
|
|
description = "A cross-platform application framework for C++";
|
|
license = lib.licenses.lgpl21Plus; # or gpl3
|
|
maintainers = with lib.maintainers; [ orivej lovek323 phreedom sander ];
|
|
platforms = lib.platforms.unix;
|
|
badPlatforms = [ "x86_64-darwin" ];
|
|
};
|
|
}
|