28b6fb61e6
This is done for the sake of Yosemite, which does not have gcc, and yet this change is also compatible with Linux.
186 lines
6.8 KiB
Nix
186 lines
6.8 KiB
Nix
{ stdenv, fetchurl, fetchpatch, substituteAll
|
|
, libXrender, libXinerama, libXcursor, libXmu, libXv, libXext
|
|
, libXfixes, libXrandr, libSM, freetype, fontconfig, zlib, libjpeg, libpng
|
|
, libmng, which, mesaSupported, mesa, mesa_glu, openssl, dbus, cups, pkgconfig
|
|
, libtiff, glib, icu, mysql, postgresql, sqlite, perl, coreutils, libXi
|
|
, buildMultimedia ? stdenv.isLinux, alsaLib, gstreamer, gst_plugins_base
|
|
, buildWebkit ? stdenv.isLinux
|
|
, flashplayerFix ? false, gdk_pixbuf
|
|
, gtkStyle ? false, libgnomeui, gtk, GConf, gnome_vfs
|
|
, developerBuild ? false
|
|
, docs ? false
|
|
, examples ? false
|
|
, demos ? false
|
|
}:
|
|
|
|
with stdenv.lib;
|
|
|
|
let
|
|
v_maj = "4.8";
|
|
v_min = "6";
|
|
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 = "0b036iqgmbbv37dgwwfihw3mihjbnw3kb5kaisdy0qi8nn8xs54b";
|
|
};
|
|
|
|
# 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
|
|
sed -e 's@/\(usr\|opt\)/@/var/empty/@g' -i config.tests/*/*.test -i mkspecs/*/*.conf
|
|
'' + stdenv.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"
|
|
'';
|
|
|
|
patches =
|
|
[ ./glib-2.32.patch
|
|
(substituteAll {
|
|
src = ./dlopen-absolute-paths.diff;
|
|
inherit cups icu libXfixes;
|
|
glibc = stdenv.cc.libc;
|
|
openglDriver = if mesaSupported then mesa.driverLink else "/no-such-path";
|
|
})
|
|
] ++ stdenv.lib.optional gtkStyle (substituteAll {
|
|
src = ./dlopen-gtkstyle.diff;
|
|
# substituteAll ignores env vars starting with capital letter
|
|
gconf = GConf;
|
|
inherit gnome_vfs libgnomeui gtk;
|
|
})
|
|
++ stdenv.lib.optional flashplayerFix (substituteAll {
|
|
src = ./dlopen-webkit-nsplugin.diff;
|
|
inherit gtk gdk_pixbuf;
|
|
})
|
|
++ [(fetchpatch {
|
|
name = "fix-medium-font.patch";
|
|
url = "http://anonscm.debian.org/cgit/pkg-kde/qt/qt4-x11.git/plain/debian/patches/"
|
|
+ "kubuntu_39_fix_medium_font.diff?id=21b342d71c19e6d68b649947f913410fe6129ea4";
|
|
sha256 = "0bli44chn03c2y70w1n8l7ss4ya0b40jqqav8yxrykayi01yf95j";
|
|
})];
|
|
|
|
preConfigure = ''
|
|
export LD_LIBRARY_PATH="`pwd`/lib:$LD_LIBRARY_PATH"
|
|
configureFlags+="
|
|
-docdir $out/share/doc/${name}
|
|
-plugindir $out/lib/qt4/plugins
|
|
-importdir $out/lib/qt4/imports
|
|
-examplesdir $out/share/doc/${name}/examples
|
|
-demosdir $out/share/doc/${name}/demos
|
|
-datadir $out/share/${name}
|
|
-translationdir $out/share/${name}/translations
|
|
"
|
|
'' + optionalString stdenv.isDarwin ''
|
|
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
|
|
'';
|
|
|
|
prefixKey = "-prefix ";
|
|
configureFlags =
|
|
''
|
|
-v -no-separate-debug-info -release -no-fast -confirm-license -opensource
|
|
|
|
-opengl -xrender -xrandr -xinerama -xcursor -xinput -xfixes -fontconfig
|
|
-qdbus -${if cups == null then "no-" else ""}cups -glib -dbus-linked -openssl-linked
|
|
|
|
${if mysql != null then "-plugin" else "-no"}-sql-mysql -system-sqlite
|
|
|
|
-exceptions -xmlpatterns
|
|
|
|
-make libs -make tools -make translations
|
|
-${if demos then "" else "no"}make demos
|
|
-${if examples then "" else "no"}make examples
|
|
-${if docs then "" else "no"}make docs
|
|
|
|
-no-phonon ${if buildWebkit then "" else "-no"}-webkit ${if buildMultimedia then "" else "-no"}-multimedia -audio-backend
|
|
${if developerBuild then "-developer-build" else ""}
|
|
'';
|
|
|
|
propagatedBuildInputs =
|
|
[ libXrender libXrandr libXinerama libXcursor libXext libXfixes libXv libXi
|
|
libSM zlib libpng openssl dbus.libs 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
|
|
++ optional mesaSupported mesa_glu
|
|
++ optional ((buildWebkit || buildMultimedia) && stdenv.isLinux ) alsaLib
|
|
++ optionals (buildWebkit || buildMultimedia) [ gstreamer gst_plugins_base ];
|
|
|
|
# The following libraries are only used in plugins
|
|
buildInputs =
|
|
[ cups # Qt dlopen's libcups instead of linking to it
|
|
mysql postgresql sqlite libjpeg libmng libtiff icu ]
|
|
++ optionals gtkStyle [ gtk gdk_pixbuf ];
|
|
|
|
nativeBuildInputs = [ perl pkgconfig which ];
|
|
|
|
# occasional build problems if one has too many cores (like on Hydra)
|
|
# @vcunat has been unable to find a *reliable* fix
|
|
enableParallelBuilding = false;
|
|
|
|
NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin
|
|
"-I${glib}/include/glib-2.0 -I${glib}/lib/glib-2.0/include";
|
|
|
|
NIX_LDFLAGS = optionalString stdenv.isDarwin
|
|
"-lglib-2.0";
|
|
|
|
preBuild = 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
|
|
'';
|
|
|
|
crossAttrs = let
|
|
isMingw = stdenv.cross.libc == "msvcrt";
|
|
in {
|
|
# 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
|
|
configureFlags = ''
|
|
-static -release -confirm-license -opensource
|
|
-no-opengl -no-phonon
|
|
-no-svg
|
|
-make qmake -make libs -nomake tools
|
|
-nomake demos -nomake examples -nomake docs
|
|
'' + optionalString isMingw " -xplatform win32-g++-4.6";
|
|
patches = [];
|
|
preConfigure = ''
|
|
sed -i -e 's/ g++/ ${stdenv.cross.config}-g++/' \
|
|
-e 's/ gcc/ ${stdenv.cross.config}-gcc/' \
|
|
-e 's/ ar/ ${stdenv.cross.config}-ar/' \
|
|
-e 's/ strip/ ${stdenv.cross.config}-strip/' \
|
|
-e 's/ windres/ ${stdenv.cross.config}-windres/' \
|
|
mkspecs/win32-g++/qmake.conf
|
|
'';
|
|
|
|
# I don't know why it does not install qmake
|
|
postInstall = ''
|
|
cp bin/qmake* $out/bin
|
|
'';
|
|
dontSetConfigureCross = true;
|
|
dontStrip = true;
|
|
} // optionalAttrs isMingw {
|
|
propagatedBuildInputs = [ ];
|
|
};
|
|
|
|
meta = {
|
|
homepage = http://qt-project.org/;
|
|
description = "A cross-platform application framework for C++";
|
|
license = licenses.lgpl21Plus; # or gpl3
|
|
maintainers = with maintainers; [ lovek323 phreedom sander urkud ];
|
|
platforms = platforms.linux;
|
|
};
|
|
}
|