diff --git a/nixos/doc/manual/release-notes/rl-1909.xml b/nixos/doc/manual/release-notes/rl-1909.xml
index 7d2d98ddfee1..37346948b289 100644
--- a/nixos/doc/manual/release-notes/rl-1909.xml
+++ b/nixos/doc/manual/release-notes/rl-1909.xml
@@ -237,6 +237,12 @@
+
+ The shibboleth-sp package has been updated to version 3.
+ It is largely backward compatible, for further information refer to the
+ release notes
+ and upgrade guide.
+
Nodejs 8 is scheduled EOL under the lifetime of 19.09 and has been dropped.
@@ -273,6 +279,11 @@
The module has been removed from nixpkgs due to lack of maintainer.
+
+
+ Squid 3 has been removed and the derivation now refers to Squid 4.
+
+
diff --git a/pkgs/applications/altcoins/bitcoin-unlimited-const-comparators.patch b/pkgs/applications/altcoins/bitcoin-unlimited-const-comparators.patch
deleted file mode 100644
index 1b74a48a84aa..000000000000
--- a/pkgs/applications/altcoins/bitcoin-unlimited-const-comparators.patch
+++ /dev/null
@@ -1,38 +0,0 @@
---- a/src/txmempool.h
-+++ b/src/txmempool.h
-@@ -204,7 +204,7 @@
- class CompareTxMemPoolEntryByDescendantScore
- {
- public:
-- bool operator()(const CTxMemPoolEntry& a, const CTxMemPoolEntry& b)
-+ bool operator()(const CTxMemPoolEntry& a, const CTxMemPoolEntry& b) const
- {
- bool fUseADescendants = UseDescendantScore(a);
- bool fUseBDescendants = UseDescendantScore(b);
-@@ -226,7 +226,7 @@
- }
-
- // Calculate which score to use for an entry (avoiding division).
-- bool UseDescendantScore(const CTxMemPoolEntry &a)
-+ bool UseDescendantScore(const CTxMemPoolEntry &a) const
- {
- double f1 = (double)a.GetModifiedFee() * a.GetSizeWithDescendants();
- double f2 = (double)a.GetModFeesWithDescendants() * a.GetTxSize();
-@@ -241,7 +241,7 @@
- class CompareTxMemPoolEntryByScore
- {
- public:
-- bool operator()(const CTxMemPoolEntry& a, const CTxMemPoolEntry& b)
-+ bool operator()(const CTxMemPoolEntry& a, const CTxMemPoolEntry& b) const
- {
- double f1 = (double)a.GetModifiedFee() * b.GetTxSize();
- double f2 = (double)b.GetModifiedFee() * a.GetTxSize();
-@@ -255,7 +255,7 @@
- class CompareTxMemPoolEntryByEntryTime
- {
- public:
-- bool operator()(const CTxMemPoolEntry& a, const CTxMemPoolEntry& b)
-+ bool operator()(const CTxMemPoolEntry& a, const CTxMemPoolEntry& b) const
- {
- return a.GetTime() < b.GetTime();
- }
diff --git a/pkgs/applications/altcoins/bitcoin-unlimited.nix b/pkgs/applications/altcoins/bitcoin-unlimited.nix
index 13ec55bb589d..a75b20b39109 100644
--- a/pkgs/applications/altcoins/bitcoin-unlimited.nix
+++ b/pkgs/applications/altcoins/bitcoin-unlimited.nix
@@ -1,34 +1,32 @@
{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook, openssl, db48, boost
-, zlib, miniupnpc, qt4, utillinux, protobuf, qrencode, libevent
-, withGui
+, zlib, miniupnpc, utillinux, protobuf, qrencode, libevent, python3
+, withGui, wrapQtAppsHook ? null, qtbase ? null, qttools ? null
, Foundation, ApplicationServices, AppKit }:
with stdenv.lib;
stdenv.mkDerivation rec {
-
name = "bitcoin" + (toString (optional (!withGui) "d")) + "-unlimited-" + version;
- version = "1.0.3.0";
+ version = "1.6.0.1";
src = fetchFromGitHub {
owner = "bitcoinunlimited";
repo = "bitcoinunlimited";
- rev = "v${version}";
- sha256 = "0l02a7h502msrp4c02wgm7f3159ap8l61k4890vas99gq7ywxkcx";
+ rev = "bucash${version}";
+ sha256 = "0f0mnal4jf8xdj7w5m4rdlcqkrkbpxi88c006m5k45lmjmj141zr";
};
- nativeBuildInputs = [ pkgconfig autoreconfHook ];
+ nativeBuildInputs = [ pkgconfig autoreconfHook python3 ]
+ ++ optionals withGui [ wrapQtAppsHook qttools ];
buildInputs = [ openssl db48 boost zlib
miniupnpc utillinux protobuf libevent ]
- ++ optionals withGui [ qt4 qrencode ]
+ ++ optionals withGui [ qtbase qttools qrencode ]
++ optionals stdenv.isDarwin [ Foundation ApplicationServices AppKit ];
- patches = [
- ./bitcoin-unlimited-const-comparators.patch
- ];
-
configureFlags = [ "--with-boost-libdir=${boost.out}/lib" ]
- ++ optionals withGui [ "--with-gui=qt4" ];
+ ++ optionals withGui [ "--with-gui=qt5"
+ "--with-qt-bindir=${qtbase.dev}/bin:${qttools.dev}/bin"
+ ];
enableParallelBuilding = true;
meta = {
diff --git a/pkgs/applications/altcoins/bitcoin-xt.nix b/pkgs/applications/altcoins/bitcoin-xt.nix
deleted file mode 100644
index 499bc4be4c83..000000000000
--- a/pkgs/applications/altcoins/bitcoin-xt.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook, openssl, db48, boost
-, zlib, miniupnpc, qt4, utillinux, protobuf, qrencode, curl, libevent
-, withGui
-, Foundation, ApplicationServices, AppKit }:
-
-with stdenv.lib;
-stdenv.mkDerivation rec{
-
- name = "bitcoin" + (toString (optional (!withGui) "d")) + "-xt-" + version;
- version = "0.11H";
-
- src = fetchFromGitHub {
- owner = "bitcoinxt";
- repo = "bitcoinxt";
- rev = "v${version}";
- sha256 = "1v43bynmidn2zdpky939km721x3ks91bzyh4200gji61qzsmyg62";
- };
-
- nativeBuildInputs = [ pkgconfig autoreconfHook ];
- buildInputs = [ openssl db48 boost zlib libevent
- miniupnpc utillinux protobuf curl ]
- ++ optionals withGui [ qt4 qrencode ]
- ++ optionals stdenv.isDarwin [ Foundation ApplicationServices AppKit ];
-
- configureFlags = [
- "--with-boost-libdir=${boost.out}/lib"
- "--with-libcurl-headers=${curl.dev}/include"
- ] ++ optionals withGui [ "--with-gui=qt4" ];
-
- enableParallelBuilding = true;
-
- meta = {
- description = "Peer-to-peer electronic cash system (XT client)";
- longDescription= ''
- Bitcoin is a free open source peer-to-peer electronic cash system that is
- completely decentralized, without the need for a central server or trusted
- parties. Users hold the crypto keys to their own money and transact directly
- with each other, with the help of a P2P network to check for double-spending.
-
- Bitcoin XT is an implementation of a Bitcoin full node, based upon the
- source code of Bitcoin Core. It is built by taking the latest stable
- Core release, applying a series of patches, and then doing deterministic
- builds so anyone can check the downloads correspond to the source code.
- '';
- homepage = https://bitcoinxt.software/;
- maintainers = with maintainers; [ jefdaj ];
- license = licenses.mit;
- broken = stdenv.isDarwin;
- platforms = platforms.unix;
- };
-}
diff --git a/pkgs/applications/altcoins/default.nix b/pkgs/applications/altcoins/default.nix
index 5293c1eefa36..5b5bfb897cf3 100644
--- a/pkgs/applications/altcoins/default.nix
+++ b/pkgs/applications/altcoins/default.nix
@@ -1,4 +1,4 @@
-{ callPackage, boost155, boost165, openssl_1_1, darwin, libsForQt5, libsForQt59, miniupnpc_2, python3, buildGo110Package }:
+{ callPackage, boost155, boost165, darwin, libsForQt5, libsForQt59, miniupnpc_2, python3, buildGo110Package }:
rec {
@@ -11,7 +11,7 @@ rec {
bitcoin-abc = libsForQt5.callPackage ./bitcoin-abc.nix { boost = boost165; withGui = true; };
bitcoind-abc = callPackage ./bitcoin-abc.nix { boost = boost165; withGui = false; };
- bitcoin-unlimited = callPackage ./bitcoin-unlimited.nix {
+ bitcoin-unlimited = libsForQt5.callPackage ./bitcoin-unlimited.nix {
inherit (darwin.apple_sdk.frameworks) Foundation ApplicationServices AppKit;
withGui = true;
};
@@ -23,15 +23,6 @@ rec {
bitcoin-classic = libsForQt5.callPackage ./bitcoin-classic.nix { boost = boost165; withGui = true; };
bitcoind-classic = callPackage ./bitcoin-classic.nix { boost = boost165; withGui = false; };
- bitcoin-xt = callPackage ./bitcoin-xt.nix {
- inherit (darwin.apple_sdk.frameworks) Foundation ApplicationServices AppKit;
- boost = boost165; withGui = true;
- };
- bitcoind-xt = callPackage ./bitcoin-xt.nix {
- inherit (darwin.apple_sdk.frameworks) Foundation ApplicationServices AppKit;
- boost = boost165; withGui = false;
- };
-
btc1 = callPackage ./btc1.nix {
inherit (darwin.apple_sdk.frameworks) AppKit;
boost = boost165;
@@ -69,9 +60,6 @@ rec {
masari = callPackage ./masari.nix { boost = boost165; };
- memorycoin = callPackage ./memorycoin.nix { boost = boost165; withGui = true; };
- memorycoind = callPackage ./memorycoin.nix { boost = boost165; withGui = false; };
-
mist = callPackage ./mist.nix { };
namecoin = callPackage ./namecoin.nix { withGui = true; };
@@ -90,7 +78,6 @@ rec {
zcash = callPackage ./zcash {
withGui = false;
- openssl = openssl_1_1;
};
parity = callPackage ./parity { };
diff --git a/pkgs/applications/altcoins/dogecoin.nix b/pkgs/applications/altcoins/dogecoin.nix
index 1332e53964b8..e5f149a0efe7 100644
--- a/pkgs/applications/altcoins/dogecoin.nix
+++ b/pkgs/applications/altcoins/dogecoin.nix
@@ -1,8 +1,8 @@
{ stdenv , fetchFromGitHub
, pkgconfig, autoreconfHook
-, db5, openssl, boost, zlib, miniupnpc
+, db5, openssl, boost, zlib, miniupnpc, libevent
, protobuf, utillinux, qt4, qrencode
-, withGui, libevent }:
+, withGui }:
with stdenv.lib;
stdenv.mkDerivation rec {
diff --git a/pkgs/applications/altcoins/freicoin.nix b/pkgs/applications/altcoins/freicoin.nix
index 78ce074eafd3..664159be2013 100644
--- a/pkgs/applications/altcoins/freicoin.nix
+++ b/pkgs/applications/altcoins/freicoin.nix
@@ -34,5 +34,8 @@ stdenv.mkDerivation rec {
license = licenses.mit;
maintainers = [ maintainers.viric ];
platforms = platforms.linux;
+
+ # upstream doesn't support newer openssl versions, use 1.0.1 for testing
+ broken = true;
};
}
diff --git a/pkgs/applications/altcoins/memorycoin.nix b/pkgs/applications/altcoins/memorycoin.nix
deleted file mode 100644
index 944c82250d47..000000000000
--- a/pkgs/applications/altcoins/memorycoin.nix
+++ /dev/null
@@ -1,56 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, openssl, db48, boost
-, zlib, qt4, qmake4Hook, utillinux, protobuf, qrencode
-, withGui }:
-
-with stdenv.lib;
-stdenv.mkDerivation rec{
-
- name = "memorycoin" + (toString (optional (!withGui) "d")) + "-" + version;
- version = "0.8.5";
-
- src = fetchurl {
- url = "https://github.com/memorycoin/memorycoin/archive/v${version}.tar.gz";
- sha256 = "1iyh6dqrg0mirwci5br5n5qw3ghp2cs23wd8ygr56bh9ml4dr1m8";
- };
-
- nativeBuildInputs = [ pkgconfig ];
- buildInputs = [ openssl db48 boost zlib utillinux protobuf ]
- ++ optionals withGui [ qt4 qmake4Hook qrencode ];
-
- qmakeFlags = ["USE_UPNP=-"];
- makeFlags = ["USE_UPNP=-"];
-
- configureFlags = [ "--with-boost-libdir=${boost.out}/lib" ]
- ++ optionals withGui [ "--with-gui=qt4" ];
-
- preBuild = "unset AR;"
- + (toString (optional (!withGui) "cd src; cp makefile.unix Makefile"));
-
- installPhase =
- if withGui
- then "install -D bitcoin-qt $out/bin/memorycoin-qt"
- else "install -D bitcoind $out/bin/memorycoind";
-
- # `make build/version.o`:
- # make: *** No rule to make target 'build/build.h', needed by 'build/version.o'. Stop.
- enableParallelBuilding = false;
-
- meta = {
- description = "Peer-to-peer, CPU-based electronic cash system";
- longDescription= ''
- Memorycoin is a cryptocurrency that aims to empower the
- economically and financially marginalized. It allows individuals
- to participate in the internet economy even when they live in
- countries where credit card companies and PayPal(R) refuse to
- operate. Individuals can store and transfer wealth with just a
- memorized pass phrase.
-
- Memorycoin is based on the Bitcoin code, but with some key
- differences.
- '';
- homepage = http://www.bitcoin.org/;
- maintainers = with maintainers; [ AndersonTorres ];
- license = licenses.mit;
- platforms = [ "x86_64-linux" ];
- };
-}
diff --git a/pkgs/applications/altcoins/pivx.nix b/pkgs/applications/altcoins/pivx.nix
index 995b8deccd95..e2cf8aa182f3 100644
--- a/pkgs/applications/altcoins/pivx.nix
+++ b/pkgs/applications/altcoins/pivx.nix
@@ -50,5 +50,12 @@ stdenv.mkDerivation rec {
homepage = https://www.dash.org;
maintainers = with maintainers; [ wucke13 ];
platforms = platforms.unix;
+
+ # upstream doesn't support newer openssl versions
+ # https://github.com/PIVX-Project/PIVX/issues/748
+ # "Your system is most probably using openssl 1.1 which is not the
+ # officialy supported version. Either use 1.0.1 or run again configure
+ # with the given option."
+ broken = true;
};
}
diff --git a/pkgs/applications/altcoins/wasabiwallet/default.nix b/pkgs/applications/altcoins/wasabiwallet/default.nix
index 9eef471adad2..7185b3510601 100644
--- a/pkgs/applications/altcoins/wasabiwallet/default.nix
+++ b/pkgs/applications/altcoins/wasabiwallet/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeDesktopItem, openssl_1_1, xorg, curl, fontconfig, krb5, zlib, dotnet-sdk }:
+{ stdenv, fetchurl, makeDesktopItem, openssl, xorg, curl, fontconfig, krb5, zlib, dotnet-sdk }:
stdenv.mkDerivation rec {
pname = "wasabiwallet";
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
cd $out/opt/${pname}
for i in $(find . -type f -name '*.so') wassabee
do
- patchelf --set-rpath ${stdenv.lib.makeLibraryPath [ openssl_1_1 stdenv.cc.cc.lib xorg.libX11 curl fontconfig.lib krb5 zlib dotnet-sdk ]} $i
+ patchelf --set-rpath ${stdenv.lib.makeLibraryPath [ openssl stdenv.cc.cc.lib xorg.libX11 curl fontconfig.lib krb5 zlib dotnet-sdk ]} $i
done
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" wassabee
ln -s $out/opt/${pname}/wassabee $out/bin/${pname}
diff --git a/pkgs/applications/misc/getxbook/default.nix b/pkgs/applications/misc/getxbook/default.nix
index a77f87f6f1f1..2fadc89c48d9 100644
--- a/pkgs/applications/misc/getxbook/default.nix
+++ b/pkgs/applications/misc/getxbook/default.nix
@@ -13,6 +13,8 @@ stdenv.mkDerivation rec {
makeFlags = [ "PREFIX=$(out)" ];
+ NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
+
meta = with stdenv.lib; {
description = "A collection of tools to download books from Google Books";
homepage = https://njw.me.uk/getxbook/;
diff --git a/pkgs/applications/misc/golden-cheetah/default.nix b/pkgs/applications/misc/golden-cheetah/default.nix
index d4ff7269987c..0af84365158e 100644
--- a/pkgs/applications/misc/golden-cheetah/default.nix
+++ b/pkgs/applications/misc/golden-cheetah/default.nix
@@ -1,5 +1,6 @@
-{ stdenv, mkDerivation, fetchurl
-, qtbase, qtsvg, qtserialport, qtwebkit, qtmultimedia, qttools, qtconnectivity
+{ stdenv, fetchFromGitHub, mkDerivation
+, qtbase, qtsvg, qtserialport, qtwebkit, qtmultimedia, qttools
+, qtconnectivity, qtcharts
, yacc, flex, zlib, qmake, makeDesktopItem, makeWrapper
}:
@@ -15,20 +16,22 @@ let
};
in mkDerivation rec {
name = "golden-cheetah-${version}";
- version = "3.4";
- src = fetchurl {
- name = "${name}.tar.gz";
- url = "https://github.com/GoldenCheetah/GoldenCheetah/archive/V${version}.tar.gz";
- sha256 = "0fiz2pj155cd357kph50lc6rjyzwp045glfv4y68qls9j7m9ayaf";
+ version = "3.5-DEV1903";
+
+ src = fetchFromGitHub {
+ owner = "GoldenCheetah";
+ repo = "GoldenCheetah";
+ rev = "v${version}";
+ sha256 = "130b0hm04i0hf97rs1xrdfhbal5vjsknj3x4cdxjh7rgbg2p1sm3";
};
+
buildInputs = [
qtbase qtsvg qtserialport qtwebkit qtmultimedia qttools zlib
- qtconnectivity
+ qtconnectivity qtcharts
];
nativeBuildInputs = [ flex makeWrapper qmake yacc ];
- NIX_LDFLAGS = [
- "-lz"
- ];
+
+ NIX_LDFLAGS = [ "-lz" ];
qtWrapperArgs = [ "--set LD_LIBRARY_PATH ${zlib.out}/lib" ];
@@ -38,6 +41,7 @@ in mkDerivation rec {
echo 'QMAKE_LRELEASE = ${qttools.dev}/bin/lrelease' >> src/gcconfig.pri
sed -i -e '21,23d' qwt/qwtconfig.pri # Removed forced installation to /usr/local
'';
+
installPhase = ''
runHook preInstall
diff --git a/pkgs/applications/networking/browsers/firefox/wrapper.nix b/pkgs/applications/networking/browsers/firefox/wrapper.nix
index bc1678335947..c643139ef3a5 100644
--- a/pkgs/applications/networking/browsers/firefox/wrapper.nix
+++ b/pkgs/applications/networking/browsers/firefox/wrapper.nix
@@ -6,7 +6,6 @@
, jrePlugin, icedtea_web
, bluejeans, djview4, adobe-reader
, google_talk_plugin, fribid, gnome3/*.gnome-shell*/
-, esteidfirefoxplugin
, browserpass, chrome-gnome-shell, uget-integrator, plasma-browser-integration, bukubrow
, tridactyl-native
, udev
@@ -61,7 +60,6 @@ let
++ lib.optional (cfg.enableGnomeExtensions or false) gnome3.gnome-shell
++ lib.optional (cfg.enableBluejeans or false) bluejeans
++ lib.optional (cfg.enableAdobeReader or false) adobe-reader
- ++ lib.optional (cfg.enableEsteid or false) esteidfirefoxplugin
++ extraPlugins
);
nativeMessagingHosts =
diff --git a/pkgs/applications/networking/browsers/mozilla-plugins/esteidfirefoxplugin/default.nix b/pkgs/applications/networking/browsers/mozilla-plugins/esteidfirefoxplugin/default.nix
deleted file mode 100644
index 48d06d644dda..000000000000
--- a/pkgs/applications/networking/browsers/mozilla-plugins/esteidfirefoxplugin/default.nix
+++ /dev/null
@@ -1,46 +0,0 @@
-{ stdenv, fetchurl, gtk2, openssl, pcsclite, pkgconfig, opensc }:
-
-stdenv.mkDerivation rec {
- version = "3.12.1.1142";
- name = "esteidfirefoxplugin-${version}";
-
- src = fetchurl {
- url = "https://installer.id.ee/media/ubuntu/pool/main/e/esteidfirefoxplugin/esteidfirefoxplugin_3.12.1.1142.orig.tar.xz";
- sha256 = "0y7759x1xr00p5r3c5wpllcqqnnxh2zi74cmy4m9m690z3ywn0fx";
- };
-
- unpackPhase = ''
- mkdir src
- tar xf $src -C src
- cd src
- '';
-
- nativeBuildInputs = [ pkgconfig ];
- buildInputs = [ gtk2 openssl pcsclite opensc ];
-
- buildPhase = ''
- sed -i "s|opensc-pkcs11.so|${opensc}/lib/pkcs11/opensc-pkcs11.so|" Makefile
- make plugin
- '';
-
- installPhase = ''
- plugins=$out/lib/mozilla/plugins
- mkdir -p $plugins
- cp -a npesteid-firefox-plugin.so $plugins/
- rp=$(patchelf --print-rpath $plugins/npesteid-firefox-plugin.so)
- patchelf --set-rpath "$rp:${opensc}/lib:${opensc}/lib/pkcs11" $plugins/npesteid-firefox-plugin.so
- '';
-
- passthru.mozillaPlugin = "/lib/mozilla/plugins";
-
- dontStrip = true;
- dontPatchELF = true;
-
- meta = with stdenv.lib; {
- description = "Firefox ID card signing plugin";
- homepage = http://www.id.ee/;
- license = licenses.lgpl2;
- platforms = platforms.linux;
- maintainers = [ maintainers.jagajaga ];
- };
-}
diff --git a/pkgs/applications/networking/cluster/hadoop/default.nix b/pkgs/applications/networking/cluster/hadoop/default.nix
index 42c043d0007f..376f8113b23a 100644
--- a/pkgs/applications/networking/cluster/hadoop/default.nix
+++ b/pkgs/applications/networking/cluster/hadoop/default.nix
@@ -1,7 +1,9 @@
-{ stdenv, fetchurl, makeWrapper, pkgconfig, which, maven, cmake, jre, bash, coreutils, glibc, protobuf2_5, fuse, snappy, zlib, bzip2, openssl }:
+{ stdenv, fetchurl, makeWrapper, pkgconfig, which, maven, cmake, jre, bash
+, coreutils, glibc, protobuf2_5, fuse, snappy, zlib, bzip2, openssl, openssl_1_0_2
+}:
let
- common = { version, sha256, dependencies-sha256, tomcat }:
+ common = { version, sha256, dependencies-sha256, tomcat, opensslPkg ? openssl }:
let
# compile the hadoop tarball from sources, it requires some patches
binary-distributon = stdenv.mkDerivation rec {
@@ -33,7 +35,7 @@ let
};
nativeBuildInputs = [ maven cmake pkgconfig ];
- buildInputs = [ fuse snappy zlib bzip2 openssl protobuf2_5 ];
+ buildInputs = [ fuse snappy zlib bzip2 opensslPkg protobuf2_5 ];
# most of the hardcoded pathes are fixed in 2.9.x and 3.0.0, this list of patched files might be reduced when 2.7.x and 2.8.x will be deprecated
postPatch = ''
for file in hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/HardLink.java \
@@ -84,7 +86,7 @@ let
mv $n $out/bin.wrapped/
makeWrapper $out/bin.wrapped/$(basename $n) $n \
--prefix PATH : "${stdenv.lib.makeBinPath [ which jre bash coreutils ]}" \
- --prefix JAVA_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ openssl snappy zlib bzip2 ]}" \
+ --prefix JAVA_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ opensslPkg snappy zlib bzip2 ]}" \
--set JAVA_HOME "${jre}" \
--set HADOOP_PREFIX "$out"
fi
@@ -127,18 +129,21 @@ in {
sha256 = "1ahv67f3lwak3kbjvnk1gncq56z6dksbajj872iqd0awdsj3p5rf";
dependencies-sha256 = "1lsr9nvrynzspxqcamb10d596zlnmnfpxhkd884gdiva0frm0b1r";
tomcat = tomcat_6_0_48;
+ opensslPkg = openssl_1_0_2;
};
hadoop_2_8 = common {
version = "2.8.4";
sha256 = "16c3ljhrzibkjn3y1bmjxdgf0kn60l23ay5hqpp7vpbnqx52x68w";
dependencies-sha256 = "1j4f461487fydgr5978nnm245ksv4xbvskfr8pbmfhcyss6b7w03";
tomcat = tomcat_6_0_48;
+ opensslPkg = openssl_1_0_2;
};
hadoop_2_9 = common {
version = "2.9.1";
sha256 = "0qgmpfbpv7f521fkjy5ldzdb4lwiblhs0hyl8qy041ws17y5x7d7";
dependencies-sha256 = "1d5i8jj5y746rrqb9lscycnd7acmxlkz64ydsiyqsh5cdqgy2x7x";
tomcat = tomcat_6_0_48;
+ opensslPkg = openssl_1_0_2;
};
hadoop_3_0 = common {
version = "3.0.3";
diff --git a/pkgs/applications/networking/instant-messengers/telegram/cutegram/default.nix b/pkgs/applications/networking/instant-messengers/telegram/cutegram/default.nix
deleted file mode 100644
index 77a8d57f8b6f..000000000000
--- a/pkgs/applications/networking/instant-messengers/telegram/cutegram/default.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{ stdenv, fetchgit
-, qtbase, qtmultimedia, qtquick1, qtquickcontrols
-, qtimageformats, qtgraphicaleffects, qtwebkit
-, telegram-qml, libqtelegram-aseman-edition
-, gst_all_1
-, makeWrapper, qmake }:
-
-stdenv.mkDerivation rec {
- name = "cutegram-${meta.version}";
-
- src = fetchgit {
- url = "https://github.com/Aseman-Land/Cutegram.git";
- rev = "1dbe2792fb5a1760339379907f906e236c09db84";
- sha256 = "146vd3ri05da2asxjjxibnqmb685lgwl2kaz7mwb7ja7vi4149f0";
- };
-
- buildInputs =
- [ qtbase qtmultimedia qtquick1 qtquickcontrols
- qtimageformats qtgraphicaleffects qtwebkit
- telegram-qml libqtelegram-aseman-edition
- ] ++ (with gst_all_1; [ gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly ]);
-
-
- enableParallelBuilding = true;
- nativeBuildInputs = [ makeWrapper qmake ];
-
- fixupPhase = ''
- wrapProgram $out/bin/cutegram \
- --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
- '';
-
- meta = with stdenv.lib; {
- version = "2.7.1";
- description = "Telegram client forked from sigram";
- homepage = http://aseman.co/en/products/cutegram/;
- license = licenses.gpl3;
- maintainers = with maintainers; [ AndersonTorres ];
- platforms = platforms.linux;
- };
-}
-#TODO: appindicator, for system tray plugin
diff --git a/pkgs/applications/networking/instant-messengers/telegram/libqtelegram-aseman-edition/default.nix b/pkgs/applications/networking/instant-messengers/telegram/libqtelegram-aseman-edition/default.nix
deleted file mode 100644
index 49368da708e9..000000000000
--- a/pkgs/applications/networking/instant-messengers/telegram/libqtelegram-aseman-edition/default.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{ stdenv, fetchFromGitHub
-, qtbase, qtmultimedia, qtquick1, qmake }:
-
-stdenv.mkDerivation rec {
- name = "libqtelegram-aseman-edition-${meta.version}";
-
- src = fetchFromGitHub {
- owner = "Aseman-Land";
- repo = "libqtelegram-aseman-edition";
- rev = "v${meta.version}-stable";
- sha256 = "1pfd4pvh51639zk9shv1s4f6pf0ympnhar8a302vhrkga9i4cbx6";
- };
-
- buildInputs = [ qtbase qtmultimedia qtquick1 ];
- enableParallelBuilding = true;
- nativeBuildInputs = [ qmake ];
-
- patchPhase = ''
- substituteInPlace libqtelegram-ae.pro --replace "/libqtelegram-ae" ""
- substituteInPlace libqtelegram-ae.pro --replace "/\$\$LIB_PATH" ""
- '';
-
- meta = with stdenv.lib; {
- version = "6.1";
- description = "A fork of libqtelegram by Aseman, using qmake";
- homepage = src.meta.homepage;
- license = licenses.gpl3;
- maintainers = [ maintainers.Profpatsch ];
- platforms = platforms.linux;
- };
-
-}
diff --git a/pkgs/applications/networking/instant-messengers/telegram/telegram-cli/default.nix b/pkgs/applications/networking/instant-messengers/telegram/telegram-cli/default.nix
deleted file mode 100644
index c0b1de893c73..000000000000
--- a/pkgs/applications/networking/instant-messengers/telegram/telegram-cli/default.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{ stdenv, fetchgit, libconfig, libevent, openssl
-, readline, zlib, lua5_2, python, pkgconfig, jansson
-, runtimeShell
-}:
-
-stdenv.mkDerivation rec {
- name = "telegram-cli-2016-03-23";
-
- src = fetchgit {
- url = "https://github.com/vysheng/tg.git";
- sha256 = "07sss5cnw2ygd7mp8f5532lmj7qm6ywqf4cjaq5g13i8igzqzwzj";
- rev = "6547c0b21b977b327b3c5e8142963f4bc246187a";
- };
-
- buildInputs = [
- libconfig libevent openssl readline zlib
- lua5_2 python pkgconfig jansson
- ];
- installPhase = ''
- mkdir -p $out/bin
- cp ./bin/telegram-cli $out/bin/telegram-wo-key
- cp ./tg-server.pub $out/
- cat > $out/bin/telegram-cli <
@@ -26,7 +27,7 @@ stdenv.mkDerivation rec {
glib libxml2 gtk3 gtk-vnc gmp libgcrypt gnupg cyrus_sasl shared-mime-info
libvirt yajl gsettings-desktop-schemas libvirt-glib
libcap_ng numactl libapparmor
- ] ++ optionals stdenv.isx86_64 [
+ ] ++ optionals xenSupport [
xen
] ++ optionals spiceSupport [
spice-gtk spice-protocol libcap gdbm
diff --git a/pkgs/desktops/enlightenment/default.nix b/pkgs/desktops/enlightenment/default.nix
index a8b5e08abd65..8d0fed6b3d85 100644
--- a/pkgs/desktops/enlightenment/default.nix
+++ b/pkgs/desktops/enlightenment/default.nix
@@ -1,7 +1,9 @@
{ callPackage, pkgs }:
rec {
#### CORE EFL
- efl = callPackage ./efl.nix { openjpeg = pkgs.openjpeg_1; };
+ efl = callPackage ./efl.nix {
+ openjpeg = pkgs.openjpeg_1;
+ };
#### WINDOW MANAGER
enlightenment = callPackage ./enlightenment.nix { };
diff --git a/pkgs/desktops/gnome-2/default.nix b/pkgs/desktops/gnome-2/default.nix
index 95e6d0f12b03..16828f08bc27 100644
--- a/pkgs/desktops/gnome-2/default.nix
+++ b/pkgs/desktops/gnome-2/default.nix
@@ -37,7 +37,9 @@ lib.makeScope pkgs.newScope (self: with self; {
gnome_python_desktop = callPackage ./bindings/gnome-python-desktop { };
- gnome_vfs = callPackage ./platform/gnome-vfs { };
+ gnome_vfs = callPackage ./platform/gnome-vfs {
+ openssl = pkgs.openssl_1_0_2;
+ };
libgnome = callPackage ./platform/libgnome { };
diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix
index 0f4157cde28e..d920baa0dafb 100644
--- a/pkgs/development/haskell-modules/configuration-common.nix
+++ b/pkgs/development/haskell-modules/configuration-common.nix
@@ -1285,4 +1285,7 @@ self: super: {
# QuickCheck >=2.3 && <2.13, hspec >=2.1 && <2.7
graphviz = dontCheck super.graphviz;
+ # https://github.com/elliottt/hsopenid/issues/15
+ openid = markBroken super.openid;
+
} // import ./configuration-tensorflow.nix {inherit pkgs haskellLib;} self super
diff --git a/pkgs/development/interpreters/python/pypy/default.nix b/pkgs/development/interpreters/python/pypy/default.nix
index 7ec476b1ea49..3e86ddef4ed4 100644
--- a/pkgs/development/interpreters/python/pypy/default.nix
+++ b/pkgs/development/interpreters/python/pypy/default.nix
@@ -1,6 +1,6 @@
{ stdenv, substituteAll, fetchurl
, zlib ? null, zlibSupport ? true, bzip2, pkgconfig, libffi
-, sqlite, openssl, ncurses, python, expat, tcl, tk, tix, xlibsWrapper, libX11
+, sqlite, openssl_1_0_2, ncurses, python, expat, tcl, tk, tix, xlibsWrapper, libX11
, self, gdbm, db, lzma
, python-setup-hook
# For the Python package set
@@ -40,7 +40,7 @@ in with passthru; stdenv.mkDerivation rec {
nativeBuildInputs = [ pkgconfig ];
buildInputs = [
- bzip2 openssl pythonForPypy libffi ncurses expat sqlite tk tcl xlibsWrapper libX11 gdbm db
+ bzip2 openssl_1_0_2 pythonForPypy libffi ncurses expat sqlite tk tcl xlibsWrapper libX11 gdbm db
] ++ optionals isPy3k [
lzma
] ++ optionals (stdenv ? cc && stdenv.cc.libc != null) [
diff --git a/pkgs/development/libraries/aacskeys/default.nix b/pkgs/development/libraries/aacskeys/default.nix
deleted file mode 100644
index 9e28bfd4fe2c..000000000000
--- a/pkgs/development/libraries/aacskeys/default.nix
+++ /dev/null
@@ -1,47 +0,0 @@
-{stdenv, fetchurl, openssl, jdk, premake3}:
-
-# Info on how to use / obtain aacs keys:
-# http://vlc-bluray.whoknowsmy.name/
-# https://wiki.archlinux.org/index.php/BluRay
-
-
-let baseName = "aacskeys";
- version = "0.4.0e";
-in
-
-stdenv.mkDerivation {
- name = "${baseName}-${version}";
-
- patchPhase = ''
- substituteInPlace "premake.lua" \
- --replace "/usr/lib/jvm/java-6-sun/include" "${jdk}/include"
- '';
-
- src = fetchurl {
- url = "http://deb-multimedia.org/pool/main/a/${baseName}/${baseName}_${version}.orig.tar.gz";
- sha256 = "0d3zvwixpkixfkkc16wj37h2xbcq5hsqqhqngzqr6pslmqr67vnr";
- };
-
- buildInputs = [openssl jdk premake3];
-
- installPhase = ''
- mkdir -p $out/{bin,lib,share/${baseName}}
-
- # Install lib
- install -Dm444 lib/linux/libaacskeys.so $out/lib
-
- # Install program
- install -Dm555 bin/linux/aacskeys $out/bin
-
- # Install resources
- install -Dm444 HostKeyCertificate.txt $out/share/${baseName}
- install -Dm444 ProcessingDeviceKeysSimple.txt $out/share/${baseName}
- '';
-
- meta = with stdenv.lib; {
- homepage = http://forum.doom9.org/showthread.php?t=123311;
- description = "A library and program to retrieve decryption keys for HD discs";
- platforms = platforms.linux;
- license = licenses.publicDomain;
- };
-}
diff --git a/pkgs/development/libraries/exosip/default.nix b/pkgs/development/libraries/exosip/default.nix
index 240f3c136ef5..332504e46b54 100644
--- a/pkgs/development/libraries/exosip/default.nix
+++ b/pkgs/development/libraries/exosip/default.nix
@@ -1,20 +1,27 @@
-{stdenv, fetchurl, libosip, openssl, pkgconfig }:
+{ stdenv, fetchurl, libosip, openssl, pkgconfig, fetchpatch }:
stdenv.mkDerivation rec {
name = "libexosip2-${version}";
version = "4.1.0";
-
+
src = fetchurl {
url = "mirror://savannah/exosip/libeXosip2-${version}.tar.gz";
sha256 = "17cna8kpc8nk1si419vgr6r42k2lda0rdk50vlxrw8rzg0xp2xrw";
};
-
+
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ libosip openssl ];
-
+
+ patches = [
+ (fetchpatch {
+ url = "https://sources.debian.net/data/main/libe/libexosip2/4.1.0-2.1/debian/patches/openssl110.patch";
+ sha256 = "01q2dax7pwh197mn18r22y38mrsky85mvs9vbkn9fpcilrdayal6";
+ })
+ ];
+
meta = with stdenv.lib; {
license = licenses.gpl2Plus;
description = "Library that hides the complexity of using the SIP protocol";
- platforms =platforms.linux;
+ platforms = platforms.linux;
};
}
diff --git a/pkgs/development/libraries/globalplatform/default.nix b/pkgs/development/libraries/globalplatform/default.nix
index 3ef279616f75..f01fb13c3c3e 100644
--- a/pkgs/development/libraries/globalplatform/default.nix
+++ b/pkgs/development/libraries/globalplatform/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, zlib, openssl, pcsclite }:
+{ stdenv, fetchurl, pkgconfig, zlib, openssl_1_0_2, pcsclite }:
stdenv.mkDerivation rec {
name = "globalplatform-${version}";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
};
nativeBuildInputs = [ pkgconfig ];
- buildInputs = [ zlib openssl pcsclite ];
+ buildInputs = [ zlib openssl_1_0_2 pcsclite ];
meta = with stdenv.lib; {
homepage = https://sourceforge.net/p/globalplatform/wiki/Home/;
diff --git a/pkgs/development/libraries/globalplatform/gppcscconnectionplugin.nix b/pkgs/development/libraries/globalplatform/gppcscconnectionplugin.nix
index 10df82196c2e..87addaa99919 100644
--- a/pkgs/development/libraries/globalplatform/gppcscconnectionplugin.nix
+++ b/pkgs/development/libraries/globalplatform/gppcscconnectionplugin.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, globalplatform, openssl, pcsclite }:
+{ stdenv, fetchurl, pkgconfig, globalplatform, openssl_1_0_2, pcsclite }:
stdenv.mkDerivation rec {
name = "gppcscconnectionplugin-${version}";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
};
nativeBuildInputs = [ pkgconfig ];
- buildInputs = [ globalplatform openssl pcsclite ];
+ buildInputs = [ globalplatform openssl_1_0_2 pcsclite ];
meta = with stdenv.lib; {
homepage = https://sourceforge.net/p/globalplatform/wiki/Home/;
diff --git a/pkgs/development/libraries/libvirt-glib/default.nix b/pkgs/development/libraries/libvirt-glib/default.nix
index 74c3d24560cd..9dd89133f4b9 100644
--- a/pkgs/development/libraries/libvirt-glib/default.nix
+++ b/pkgs/development/libraries/libvirt-glib/default.nix
@@ -1,6 +1,7 @@
{ stdenv, fetchurl, pkgconfig, libvirt, glib, libxml2, intltool, libtool, yajl
, nettle, libgcrypt, pythonPackages, gobject-introspection, libcap_ng, numactl
-, xen, libapparmor, vala
+, libapparmor, vala
+, xenSupport ? false, xen ? null
}:
let
@@ -19,7 +20,7 @@ in stdenv.mkDerivation rec {
buildInputs = [
libvirt glib libxml2 intltool libtool yajl nettle libgcrypt
python pygobject2 gobject-introspection libcap_ng numactl libapparmor
- ] ++ stdenv.lib.optionals stdenv.isx86_64 [
+ ] ++ stdenv.lib.optionals xenSupport [
xen
];
diff --git a/pkgs/development/libraries/opendkim/default.nix b/pkgs/development/libraries/opendkim/default.nix
index 3d110910b159..71885ba46f10 100644
--- a/pkgs/development/libraries/opendkim/default.nix
+++ b/pkgs/development/libraries/opendkim/default.nix
@@ -1,5 +1,5 @@
{ stdenv, fetchurl, pkgconfig, libbsd, openssl, libmilter
-, perl, makeWrapper }:
+, autoreconfHook, perl, makeWrapper }:
stdenv.mkDerivation rec {
name = "opendkim-${version}";
@@ -16,10 +16,12 @@ stdenv.mkDerivation rec {
"ac_cv_func_realloc_0_nonnull=yes"
];
- nativeBuildInputs = [ pkgconfig makeWrapper ];
+ nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper ];
buildInputs = [ libbsd openssl libmilter perl ];
+ patches = [ ./openssl-1.1.patch ];
+
postInstall = ''
wrapProgram $out/sbin/opendkim-genkey \
--prefix PATH : ${openssl.bin}/bin
diff --git a/pkgs/development/libraries/opendkim/openssl-1.1.patch b/pkgs/development/libraries/opendkim/openssl-1.1.patch
new file mode 100644
index 000000000000..c36559cf16cd
--- /dev/null
+++ b/pkgs/development/libraries/opendkim/openssl-1.1.patch
@@ -0,0 +1,81 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -864,26 +864,28 @@
+ AC_SEARCH_LIBS([ERR_peek_error], [crypto], ,
+ AC_MSG_ERROR([libcrypto not found]))
+
+- AC_SEARCH_LIBS([SSL_library_init], [ssl], ,
+- [
+- if test x"$enable_shared" = x"yes"
+- then
+- AC_MSG_ERROR([Cannot build shared opendkim
+- against static openssl libraries.
+- Configure with --disable-shared
+- to get this working or obtain a
+- shared libssl library for
+- opendkim to use.])
+- fi
+-
+- # avoid caching issue - last result of SSL_library_init
+- # shouldn't be cached for this next check
+- unset ac_cv_search_SSL_library_init
+- LIBCRYPTO_LIBS="$LIBCRYPTO_LIBS -ldl"
+- AC_SEARCH_LIBS([SSL_library_init], [ssl], ,
+- AC_MSG_ERROR([libssl not found]), [-ldl])
+- ]
+- )
++
++ AC_LINK_IFELSE(
++ [AC_LANG_PROGRAM([[#include ]],
++ [[SSL_library_init();]])],
++ [od_have_ossl="yes";],
++ [od_have_ossl="no";])
++ if test x"$od_have_ossl" = x"no"
++ then
++ if test x"$enable_shared" = x"yes"
++ then
++ AC_MSG_ERROR([Cannot build shared opendkim
++ against static openssl libraries.
++ Configure with --disable-shared
++ to get this working or obtain a
++ shared libssl library for
++ opendkim to use.])
++ fi
++
++ LIBCRYPTO_LIBS="$LIBCRYPTO_LIBS -ldl"
++ AC_SEARCH_LIBS([SSL_library_init], [ssl], ,
++ AC_MSG_ERROR([libssl not found]), [-ldl])
++ fi
+
+ AC_CHECK_DECL([SHA256_DIGEST_LENGTH],
+ AC_DEFINE([HAVE_SHA256], 1,
+--- a/opendkim/opendkim-crypto.c
++++ b/opendkim/opendkim-crypto.c
+@@ -222,7 +222,11 @@
+ {
+ assert(pthread_setspecific(id_key, ptr) == 0);
+
++#if OPENSSL_VERSION_NUMBER >= 0x10100000
++ OPENSSL_thread_stop();
++#else
+ ERR_remove_state(0);
++#endif
+
+ free(ptr);
+
+@@ -392,11 +396,15 @@
+ {
+ if (crypto_init_done)
+ {
++#if OPENSSL_VERSION_NUMBER >= 0x10100000
++ OPENSSL_thread_stop();
++#else
+ CRYPTO_cleanup_all_ex_data();
+ CONF_modules_free();
+ EVP_cleanup();
+ ERR_free_strings();
+ ERR_remove_state(0);
++#endif
+
+ if (nmutexes > 0)
+ {
diff --git a/pkgs/development/libraries/opensaml-cpp/default.nix b/pkgs/development/libraries/opensaml-cpp/default.nix
index 659c4fb7cff6..9488ef484c6f 100644
--- a/pkgs/development/libraries/opensaml-cpp/default.nix
+++ b/pkgs/development/libraries/opensaml-cpp/default.nix
@@ -1,17 +1,21 @@
-{ stdenv, fetchgit, autoreconfHook, boost, openssl, log4shib, xercesc, xml-security-c, xml-tooling-c, zlib }:
+{ stdenv, fetchgit, autoreconfHook, pkgconfig
+, boost, openssl, log4shib, xercesc, xml-security-c, xml-tooling-c, zlib
+}:
stdenv.mkDerivation rec {
name = "opensaml-cpp-${version}";
- version = "2.6.1";
+ version = "3.0.1";
src = fetchgit {
url = "https://git.shibboleth.net/git/cpp-opensaml.git";
rev = version;
- sha256 = "0wjb6jyvh4hwpy1pvhh63i821746nqijysrd4vasbirkf4h6z7nx";
+ sha256 = "0ms3sqmwqkrqb92d7jy2hqwnz5yd7cbrz73n321jik0jilrwl5w8";
};
- buildInputs = [ boost openssl log4shib xercesc xml-security-c xml-tooling-c zlib ];
- nativeBuildInputs = [ autoreconfHook ];
+ buildInputs = [
+ boost openssl log4shib xercesc xml-security-c xml-tooling-c zlib
+ ];
+ nativeBuildInputs = [ autoreconfHook pkgconfig ];
configureFlags = [ "--with-xmltooling=${xml-tooling-c}" ];
diff --git a/pkgs/development/libraries/ptlib/default.nix b/pkgs/development/libraries/ptlib/default.nix
index d1dcc5fdb97a..e7abedf31214 100644
--- a/pkgs/development/libraries/ptlib/default.nix
+++ b/pkgs/development/libraries/ptlib/default.nix
@@ -25,6 +25,11 @@ stdenv.mkDerivation rec {
(fetchpatch { url = http://sources.debian.net/data/main/p/ptlib/2.10.11~dfsg-2.1/debian/patches/no-sslv3;
sha256 = "172s1dnnrl54p9sf1nl7s475sm78rpw3p8jxi0pdx6izzl8hcdr0";
})
+ (fetchpatch {
+ name = "openssl-1.1.patch";
+ url = "https://git.archlinux.org/svntogit/packages.git/plain/trunk/openssl-1.1.0.patch?h=packages/ptlib&id=1dfa9f55e7e030d261228fca27dda82979ca7f30";
+ sha256 = "11hdgyyibycg0wf5ls0wk9hksa4jd434i86xqiccbyg17n4l6lc1";
+ })
./ptlib-2.10.11-glibc-2.26.patch
];
diff --git a/pkgs/development/libraries/qca2/default.nix b/pkgs/development/libraries/qca2/default.nix
index ec32c44a91fc..885b7b378cc3 100644
--- a/pkgs/development/libraries/qca2/default.nix
+++ b/pkgs/development/libraries/qca2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, pkgconfig, qt, darwin }:
+{ stdenv, fetchurl, openssl_1_0_2, cmake, pkgconfig, qt, darwin }:
stdenv.mkDerivation rec {
name = "qca-${version}";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
};
nativeBuildInputs = [ cmake pkgconfig ];
- buildInputs = [ qt ]
+ buildInputs = [ openssl_1_0_2 qt ]
++ stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
enableParallelBuilding = true;
diff --git a/pkgs/development/libraries/qt-4.x/4.8/default.nix b/pkgs/development/libraries/qt-4.x/4.8/default.nix
index f833d130fbba..8c1c76db8f47 100644
--- a/pkgs/development/libraries/qt-4.x/4.8/default.nix
+++ b/pkgs/development/libraries/qt-4.x/4.8/default.nix
@@ -83,13 +83,14 @@ stdenv.mkDerivation rec {
+ "21b342d71c19e6d68b649947f913410fe6129ea4/debian/patches/kubuntu_39_fix_medium_font.diff";
sha256 = "0bli44chn03c2y70w1n8l7ss4ya0b40jqqav8yxrykayi01yf95j";
})
- # Patch is no longer available from here, so vendoring it for now.
+ # 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
]
++ lib.optional gtkStyle (substituteAll ({
src = ./dlopen-gtkstyle.diff;
diff --git a/pkgs/development/libraries/qt-4.x/4.8/qt4-openssl-1.1.patch b/pkgs/development/libraries/qt-4.x/4.8/qt4-openssl-1.1.patch
new file mode 100644
index 000000000000..1931ceb0c749
--- /dev/null
+++ b/pkgs/development/libraries/qt-4.x/4.8/qt4-openssl-1.1.patch
@@ -0,0 +1,398 @@
+--- a/src/network/ssl/qsslcertificate.cpp
++++ b/src/network/ssl/qsslcertificate.cpp
+@@ -259,10 +259,10 @@
+ QByteArray QSslCertificate::version() const
+ {
+ QMutexLocker lock(QMutexPool::globalInstanceGet(d.data()));
+- if (d->versionString.isEmpty() && d->x509)
++ if (d->versionString.isEmpty() && d->x509) {
+ d->versionString =
+- QByteArray::number(qlonglong(q_ASN1_INTEGER_get(d->x509->cert_info->version)) + 1);
+-
++ QByteArray::number(qlonglong(q_X509_get_version(d->x509)) + 1);
++ }
+ return d->versionString;
+ }
+
+@@ -276,7 +276,7 @@
+ {
+ QMutexLocker lock(QMutexPool::globalInstanceGet(d.data()));
+ if (d->serialNumberString.isEmpty() && d->x509) {
+- ASN1_INTEGER *serialNumber = d->x509->cert_info->serialNumber;
++ ASN1_INTEGER *serialNumber = q_X509_get_serialNumber(d->x509);
+ // if we cannot convert to a long, just output the hexadecimal number
+ if (serialNumber->length > 4) {
+ QByteArray hexString;
+@@ -489,24 +489,33 @@
+ QSslKey key;
+
+ key.d->type = QSsl::PublicKey;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ X509_PUBKEY *xkey = d->x509->cert_info->key;
++#else
++ X509_PUBKEY *xkey = q_X509_get_X509_PUBKEY(d->x509);
++#endif
+ EVP_PKEY *pkey = q_X509_PUBKEY_get(xkey);
+ Q_ASSERT(pkey);
+
+- if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_RSA) {
++ int key_id;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++ key_id = q_EVP_PKEY_type(pkey->type);
++#else
++ key_id = q_EVP_PKEY_base_id(pkey);
++#endif
++ if (key_id == EVP_PKEY_RSA) {
+ key.d->rsa = q_EVP_PKEY_get1_RSA(pkey);
+ key.d->algorithm = QSsl::Rsa;
+ key.d->isNull = false;
+- } else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_DSA) {
++ } else if (key_id == EVP_PKEY_DSA) {
+ key.d->dsa = q_EVP_PKEY_get1_DSA(pkey);
+ key.d->algorithm = QSsl::Dsa;
+ key.d->isNull = false;
+- } else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_DH) {
++ } else if (key_id == EVP_PKEY_DH) {
+ // DH unsupported
+ } else {
+ // error?
+ }
+-
+ q_EVP_PKEY_free(pkey);
+ return key;
+ }
+--- a/src/network/ssl/qsslkey.cpp
++++ b/src/network/ssl/qsslkey.cpp
+@@ -321,8 +321,19 @@
+ {
+ if (d->isNull)
+ return -1;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ return (d->algorithm == QSsl::Rsa)
+ ? q_BN_num_bits(d->rsa->n) : q_BN_num_bits(d->dsa->p);
++#else
++ if (d->algorithm == QSsl::Rsa) {
++ return q_RSA_bits(d->rsa);
++ }else{
++ BIGNUM *p = NULL;
++ q_DSA_get0_pqg(d->dsa, &p, NULL, NULL);
++ return q_BN_num_bits(p);
++ }
++#endif
++
+ }
+
+ /*!
+--- a/src/network/ssl/qsslsocket_openssl.cpp
++++ b/src/network/ssl/qsslsocket_openssl.cpp
+@@ -93,6 +93,7 @@
+ bool QSslSocketPrivate::s_loadedCiphersAndCerts = false;
+ bool QSslSocketPrivate::s_loadRootCertsOnDemand = false;
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ /* \internal
+
+ From OpenSSL's thread(3) manual page:
+@@ -174,6 +175,8 @@
+ }
+ } // extern "C"
+
++#endif //OPENSSL_VERSION_NUMBER >= 0x10100000L
++
+ QSslSocketBackendPrivate::QSslSocketBackendPrivate()
+ : ssl(0),
+ ctx(0),
+@@ -222,9 +225,12 @@
+ ciph.d->encryptionMethod = descriptionList.at(4).mid(4);
+ ciph.d->exportable = (descriptionList.size() > 6 && descriptionList.at(6) == QLatin1String("export"));
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ ciph.d->bits = cipher->strength_bits;
+ ciph.d->supportedBits = cipher->alg_bits;
+-
++#else
++ ciph.d->bits = q_SSL_CIPHER_get_bits(cipher, &ciph.d->supportedBits);
++#endif
+ }
+ return ciph;
+ }
+@@ -367,7 +373,7 @@
+ //
+ // See also: QSslContext::fromConfiguration()
+ if (caCertificate.expiryDate() >= QDateTime::currentDateTime()) {
+- q_X509_STORE_add_cert(ctx->cert_store, (X509 *)caCertificate.handle());
++ q_X509_STORE_add_cert(q_SSL_CTX_get_cert_store(ctx), (X509 *)caCertificate.handle());
+ }
+ }
+
+@@ -504,8 +510,10 @@
+ */
+ void QSslSocketPrivate::deinitialize()
+ {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ q_CRYPTO_set_id_callback(0);
+ q_CRYPTO_set_locking_callback(0);
++#endif
+ }
+
+ /*!
+@@ -526,13 +534,17 @@
+ return false;
+
+ // Check if the library itself needs to be initialized.
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ QMutexLocker locker(openssl_locks()->initLock());
++#endif
+ if (!s_libraryLoaded) {
+ s_libraryLoaded = true;
+
+ // Initialize OpenSSL.
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ q_CRYPTO_set_id_callback(id_function);
+ q_CRYPTO_set_locking_callback(locking_function);
++#endif
+ if (q_SSL_library_init() != 1)
+ return false;
+ q_SSL_load_error_strings();
+@@ -571,7 +583,9 @@
+
+ void QSslSocketPrivate::ensureCiphersAndCertsLoaded()
+ {
+- QMutexLocker locker(openssl_locks()->initLock());
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++ QMutexLocker locker(openssl_locks()->initLock());
++#endif
+ if (s_loadedCiphersAndCerts)
+ return;
+ s_loadedCiphersAndCerts = true;
+@@ -663,13 +677,18 @@
+ STACK_OF(SSL_CIPHER) *supportedCiphers = q_SSL_get_ciphers(mySsl);
+ for (int i = 0; i < q_sk_SSL_CIPHER_num(supportedCiphers); ++i) {
+ if (SSL_CIPHER *cipher = q_sk_SSL_CIPHER_value(supportedCiphers, i)) {
+- if (cipher->valid) {
++
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++ if (cipher->valid) {
++#endif
+ QSslCipher ciph = QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(cipher);
+ if (!ciph.isNull()) {
+ if (!ciph.name().toLower().startsWith(QLatin1String("adh")))
+ ciphers << ciph;
+ }
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ }
++#endif
+ }
+ }
+
+--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp
++++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp
+@@ -290,6 +290,22 @@
+ DEFINEFUNC(void, OPENSSL_add_all_algorithms_conf, void, DUMMYARG, return, DUMMYARG)
+ DEFINEFUNC3(int, SSL_CTX_load_verify_locations, SSL_CTX *ctx, ctx, const char *CAfile, CAfile, const char *CApath, CApath, return 0, return)
+ DEFINEFUNC(long, SSLeay, void, DUMMYARG, return 0, return)
++DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *ctx, ctx, return 0, return)
++
++DEFINEFUNC(ASN1_INTEGER *, X509_get_serialNumber, X509 *x, x, return 0, return)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++DEFINEFUNC(int, EVP_PKEY_id, const EVP_PKEY *pkey, pkey, return 0, return)
++DEFINEFUNC(int, EVP_PKEY_base_id, const EVP_PKEY *pkey, pkey, return 0, return)
++DEFINEFUNC2(int, SSL_CIPHER_get_bits, const SSL_CIPHER *cipher, cipher, int *alg_bits, alg_bits, return 0, return)
++DEFINEFUNC2(long, SSL_CTX_set_options, SSL_CTX *ctx, ctx, long options, options, return 0, return)
++DEFINEFUNC(long, X509_get_version, X509 *x, x, return 0, return)
++DEFINEFUNC(X509_PUBKEY *, X509_get_X509_PUBKEY, X509 *x, x, return 0, return)
++DEFINEFUNC(int, RSA_bits, const RSA *rsa, rsa, return 0, return)
++DEFINEFUNC(int, DSA_security_bits, const DSA *dsa, dsa, return 0, return)
++DEFINEFUNC(ASN1_TIME *, X509_get_notAfter, X509 *x, x, return 0, return)
++DEFINEFUNC(ASN1_TIME *, X509_get_notBefore, X509 *x, x, return 0, return)
++DEFINEFUNC4(void, DSA_get0_pqg, const DSA *d, d, BIGNUM **p, p, BIGNUM **q, q, BIGNUM **g, g, return, return)
++#endif
+
+ #ifdef Q_OS_SYMBIAN
+ #define RESOLVEFUNC(func, ordinal, lib) \
+@@ -801,6 +817,7 @@
+ RESOLVEFUNC(SSL_CTX_use_PrivateKey)
+ RESOLVEFUNC(SSL_CTX_use_RSAPrivateKey)
+ RESOLVEFUNC(SSL_CTX_use_PrivateKey_file)
++ RESOLVEFUNC(SSL_CTX_get_cert_store)
+ RESOLVEFUNC(SSL_accept)
+ RESOLVEFUNC(SSL_clear)
+ RESOLVEFUNC(SSL_connect)
+@@ -823,6 +840,23 @@
+ RESOLVEFUNC(SSL_set_connect_state)
+ RESOLVEFUNC(SSL_shutdown)
+ RESOLVEFUNC(SSL_write)
++
++ RESOLVEFUNC(X509_get_serialNumber)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ RESOLVEFUNC(SSL_CTX_ctrl)
++ RESOLVEFUNC(EVP_PKEY_id)
++ RESOLVEFUNC(EVP_PKEY_base_id)
++ RESOLVEFUNC(SSL_CIPHER_get_bits)
++ RESOLVEFUNC(SSL_CTX_set_options)
++ RESOLVEFUNC(X509_get_version)
++ RESOLVEFUNC(X509_get_X509_PUBKEY)
++ RESOLVEFUNC(RSA_bits)
++ RESOLVEFUNC(DSA_security_bits)
++ RESOLVEFUNC(DSA_get0_pqg)
++ RESOLVEFUNC(X509_get_notAfter)
++ RESOLVEFUNC(X509_get_notBefore)
++#endif
++
+ #ifndef OPENSSL_NO_SSL2
+ RESOLVEFUNC(SSLv2_client_method)
+ #endif
+--- a/src/network/ssl/qsslsocket_openssl_symbols_p.h
++++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h
+@@ -399,7 +399,25 @@
+ PEM_ASN1_write_bio((int (*)(void*, unsigned char**))q_i2d_DSAPrivateKey,PEM_STRING_DSA,\
+ bp,(char *)x,enc,kstr,klen,cb,u)
+ #endif
++
++X509_STORE * q_SSL_CTX_get_cert_store(const SSL_CTX *ctx);
++ASN1_INTEGER * q_X509_get_serialNumber(X509 *x);
++
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ #define q_SSL_CTX_set_options(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL)
++#define q_X509_get_version(x) X509_get_version(x)
++#else
++int q_EVP_PKEY_id(const EVP_PKEY *pkey);
++int q_EVP_PKEY_base_id(const EVP_PKEY *pkey);
++int q_SSL_CIPHER_get_bits(const SSL_CIPHER *cipher, int *alg_bits);
++long q_SSL_CTX_set_options(SSL_CTX *ctx, long options);
++long q_X509_get_version(X509 *x);
++X509_PUBKEY * q_X509_get_X509_PUBKEY(X509 *x);
++int q_RSA_bits(const RSA *rsa);
++int q_DSA_security_bits(const DSA *dsa);
++void q_DSA_get0_pqg(const DSA *d, BIGNUM **p, BIGNUM **q, BIGNUM **g);
++#endif
++
+ #define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st)
+ #define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_sk_value)(st, i)
+ #define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num(GENERAL_NAME, (st))
+@@ -410,8 +428,15 @@
+ #define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i))
+ #define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \
+ q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
++
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ #define q_X509_get_notAfter(x) X509_get_notAfter(x)
+ #define q_X509_get_notBefore(x) X509_get_notBefore(x)
++#else
++ASN1_TIME *q_X509_get_notAfter(X509 *x);
++ASN1_TIME *q_X509_get_notBefore(X509 *x);
++#endif
++
+ #define q_EVP_PKEY_assign_RSA(pkey,rsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\
+ (char *)(rsa))
+ #define q_EVP_PKEY_assign_DSA(pkey,dsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslcertificate.cpp.omv~ 2017-03-15 02:27:18.143322736 +0100
++++ qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslcertificate.cpp 2017-03-15 02:29:56.215819741 +0100
+@@ -696,7 +696,7 @@
+ unsigned char *data = 0;
+ int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e));
+ info[QString::fromUtf8(obj)] = QString::fromUtf8((char*)data, size);
+- q_CRYPTO_free(data);
++ q_OPENSSL_free(data);
+ }
+ return info;
+ }
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslkey.cpp.0131~ 2017-03-15 02:22:37.053244125 +0100
++++ qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslkey.cpp 2017-03-15 02:22:37.055244057 +0100
+@@ -328,7 +328,7 @@
+ if (d->algorithm == QSsl::Rsa) {
+ return q_RSA_bits(d->rsa);
+ }else{
+- BIGNUM *p = NULL;
++ const BIGNUM *p = NULL;
+ q_DSA_get0_pqg(d->dsa, &p, NULL, NULL);
+ return q_BN_num_bits(p);
+ }
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols.cpp.0131~ 2017-03-15 02:22:37.054244091 +0100
++++ qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols.cpp 2017-03-15 02:29:41.155236836 +0100
+@@ -111,16 +111,16 @@
+ DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return);
+ DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return)
+ DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return)
+-DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return 0, return)
++DEFINEFUNC(BIO *, BIO_new, const BIO_METHOD *a, a, return 0, return)
+ DEFINEFUNC2(BIO *, BIO_new_mem_buf, void *a, a, int b, b, return 0, return)
+ DEFINEFUNC3(int, BIO_read, BIO *a, a, void *b, b, int c, c, return -1, return)
+-DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
++DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
+ DEFINEFUNC3(int, BIO_write, BIO *a, a, const void *b, b, int c, c, return -1, return)
+ DEFINEFUNC(int, BN_num_bits, const BIGNUM *a, a, return 0, return)
+ DEFINEFUNC(int, CRYPTO_num_locks, DUMMYARG, DUMMYARG, return 0, return)
+ DEFINEFUNC(void, CRYPTO_set_locking_callback, void (*a)(int, int, const char *, int), a, return, DUMMYARG)
+ DEFINEFUNC(void, CRYPTO_set_id_callback, unsigned long (*a)(), a, return, DUMMYARG)
+-DEFINEFUNC(void, CRYPTO_free, void *a, a, return, DUMMYARG)
++DEFINEFUNC(void, OPENSSL_free, void *a, a, return, DUMMYARG)
+ DEFINEFUNC(void, DSA_free, DSA *a, a, return, DUMMYARG)
+ #if OPENSSL_VERSION_NUMBER < 0x00908000L
+ DEFINEFUNC3(X509 *, d2i_X509, X509 **a, a, unsigned char **b, b, long c, c, return 0, return)
+@@ -300,7 +300,7 @@
+ DEFINEFUNC(int, DSA_security_bits, const DSA *dsa, dsa, return 0, return)
+ DEFINEFUNC(ASN1_TIME *, X509_get_notAfter, X509 *x, x, return 0, return)
+ DEFINEFUNC(ASN1_TIME *, X509_get_notBefore, X509 *x, x, return 0, return)
+-DEFINEFUNC4(void, DSA_get0_pqg, const DSA *d, d, BIGNUM **p, p, BIGNUM **q, q, BIGNUM **g, g, return, return)
++DEFINEFUNC4(void, DSA_get0_pqg, const DSA *d, d, const BIGNUM **p, p, const BIGNUM **q, q, const BIGNUM **g, g, return, return)
+ #endif
+
+ #ifdef Q_OS_SYMBIAN
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols_p.h.0131~ 2017-03-15 02:22:37.054244091 +0100
++++ qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols_p.h 2017-03-15 02:29:50.192986268 +0100
+@@ -59,6 +59,9 @@
+ QT_BEGIN_NAMESPACE
+
+ #define DUMMYARG
++#ifndef OPENSSL_NO_SSL2
++#define OPENSSL_NO_SSL2 1
++#endif
+
+ #if !defined QT_LINKED_OPENSSL
+ // **************** Shared declarations ******************
+@@ -207,16 +210,16 @@
+ int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b);
+ long q_BIO_ctrl(BIO *a, int b, long c, void *d);
+ int q_BIO_free(BIO *a);
+-BIO *q_BIO_new(BIO_METHOD *a);
++BIO *q_BIO_new(const BIO_METHOD *a);
+ BIO *q_BIO_new_mem_buf(void *a, int b);
+ int q_BIO_read(BIO *a, void *b, int c);
+-BIO_METHOD *q_BIO_s_mem();
++const BIO_METHOD *q_BIO_s_mem();
+ int q_BIO_write(BIO *a, const void *b, int c);
+ int q_BN_num_bits(const BIGNUM *a);
+ int q_CRYPTO_num_locks();
+ void q_CRYPTO_set_locking_callback(void (*a)(int, int, const char *, int));
+ void q_CRYPTO_set_id_callback(unsigned long (*a)());
+-void q_CRYPTO_free(void *a);
++void q_OPENSSL_free(void *a);
+ void q_DSA_free(DSA *a);
+ #if OPENSSL_VERSION_NUMBER >= 0x00908000L
+ // 0.9.8 broke SC and BC by changing this function's signature.
+@@ -326,7 +329,6 @@
+ void q_SSL_set_connect_state(SSL *a);
+ int q_SSL_shutdown(SSL *a);
+ #if OPENSSL_VERSION_NUMBER >= 0x10000000L
+-const SSL_METHOD *q_SSLv2_client_method();
+ const SSL_METHOD *q_SSLv3_client_method();
+ const SSL_METHOD *q_SSLv23_client_method();
+ const SSL_METHOD *q_TLSv1_client_method();
+@@ -335,7 +337,6 @@
+ const SSL_METHOD *q_SSLv23_server_method();
+ const SSL_METHOD *q_TLSv1_server_method();
+ #else
+-SSL_METHOD *q_SSLv2_client_method();
+ SSL_METHOD *q_SSLv3_client_method();
+ SSL_METHOD *q_SSLv23_client_method();
+ SSL_METHOD *q_TLSv1_client_method();
+@@ -415,7 +416,7 @@
+ X509_PUBKEY * q_X509_get_X509_PUBKEY(X509 *x);
+ int q_RSA_bits(const RSA *rsa);
+ int q_DSA_security_bits(const DSA *dsa);
+-void q_DSA_get0_pqg(const DSA *d, BIGNUM **p, BIGNUM **q, BIGNUM **g);
++void q_DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
+ #endif
+
+ #define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st)
diff --git a/pkgs/development/libraries/qt-5/5.6/default.nix b/pkgs/development/libraries/qt-5/5.6/default.nix
deleted file mode 100644
index d45b014b765e..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/default.nix
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-
-# New packages
-
-READ THIS FIRST
-
-This module is for official packages in Qt 5. All available packages are listed
-in `./srcs.nix`, although a few are not yet packaged in Nixpkgs (see below).
-
-IF YOUR PACKAGE IS NOT LISTED IN `./srcs.nix`, IT DOES NOT GO HERE.
-
-Many of the packages released upstream are not yet built in Nixpkgs due to lack
-of demand. To add a Nixpkgs build for an upstream package, copy one of the
-existing packages here and modify it as necessary.
-
-# Updates
-
-1. Update the URL in `./fetch.sh`.
-2. Run `./maintainers/scripts/fetch-kde-qt.sh pkgs/development/libraries/qt-5/$VERSION/`
- from the top of the Nixpkgs tree.
-3. Check that the new packages build correctly.
-4. Commit the changes and open a pull request.
-
-*/
-
-{
- newScope,
- stdenv, fetchurl, fetchpatch, makeSetupHook, makeWrapper,
- bison, cups ? null, harfbuzz, libGL, perl,
- gstreamer, gst-plugins-base,
-
- # options
- developerBuild ? false,
- decryptSslTraffic ? false,
- debug ? false,
-}:
-
-with stdenv.lib;
-
-let
-
- qtCompatVersion = srcs.qtbase.version;
-
- mirror = "http://download.qt.io";
- srcs = import ./srcs.nix { inherit fetchurl; inherit mirror; };
-
- patches = {
- qtbase = [
- ./qtbase.patch
- ./qtbase-fixguicmake.patch
- (fetchpatch {
- name = "CVE-2018-15518.patch";
- url = "https://codereview.qt-project.org/gitweb?p=qt/qtbase.git;a=patch;h=28a6e642af2ccb454dd019f551c2908753f76f08";
- sha256 = "0nyssg7d0br7qgzp481f1w8b4p1bj2ggv9iyfrm1mng5v9fypdd7";
- })
- (fetchpatch {
- name = "CVE-2018-19873.patch";
- url = "https://codereview.qt-project.org/gitweb?p=qt/qtbase.git;a=patch;h=c9b9f663d7243988bcb5fee9180ea9cb3a321a86";
- sha256 = "1q01cafy92c1j8cgrv4sk133mi3d48x8kbg3glbnnbijpc4k6di5";
- })
- (fetchpatch {
- name = "CVE-2018-19870.patch";
- url = "http://code.qt.io/cgit/qt/qtbase.git/patch/?id=ac0a910756f91726e03c0e6a89d213bdb4f48fec";
- sha256 = "00qb9yqwvwnp202am3lqirkjxln1cj8v4wvmlyqya6hna176lj2l";
- })
- ];
- qtdeclarative = [ ./qtdeclarative.patch ];
- qtscript = [ ./qtscript.patch ];
- qtserialport = [ ./qtserialport.patch ];
- qttools = [ ./qttools.patch ];
- qtwebengine = [ ./qtwebengine-seccomp.patch ];
- qtwebkit = [ ./qtwebkit.patch ];
- qtvirtualkeyboard = [
- (fetchpatch {
- name = "CVE-2018-19865-A.patch";
- url = "https://codereview.qt-project.org/gitweb?p=qt/qtvirtualkeyboard.git;a=patch;h=c02115db1de1f3aba81e109043766d600f886522";
- sha256 = "0ncnyl8f3ypi1kcb9z2i8j33snix111h28njrx8rb49ny01ap8x2";
- })
- (fetchpatch {
- name = "CVE-2018-19865-B.patch";
- url = "https://codereview.qt-project.org/gitweb?p=qt/qtvirtualkeyboard.git;a=patch;h=01fc537adc74d5e102c8cc93384cdf5cb08b4442";
- sha256 = "19z8kxqf2lpjqr8189ingrpadch4niviw3p5v93zgx24v7950q27";
- })
- (fetchpatch {
- name = "CVE-2018-19865-C.patch";
- url = "https://codereview.qt-project.org/gitweb?p=qt/qtvirtualkeyboard.git;a=patch;h=993a21ba03534b172d5354405cc9d50a2a822e24";
- sha256 = "1bipqxr9bvy8z402pv9kj2w1yzcsj1v03l09pg5jyg1xh6jbgiky";
- })
- ];
- qtimageformats = [
- (fetchpatch {
- name = "CVE-2018-19871.patch";
- url = "https://codereview.qt-project.org/gitweb?p=qt/qtimageformats.git;a=patch;h=9299ab07df61c56b70e047f1fe5f06b6ff541aa3";
- sha256 = "0fd3mxdlc0s405j02bc0g72fvdfvpi31a837xfwf40m5j4jbyndr";
- })
- ];
- qtsvg = [
- (fetchpatch {
- name = "CVE-2018-19869.patch";
- url = "http://code.qt.io/cgit/qt/qtsvg.git/patch/?id=c5f1dd14098d1cc2cb52448fb44f53966d331443";
- sha256 = "1kgyfsxw2f0qv5fx9y7wysjsvqikam0qc7wzhklf0406zz6rhxbl";
- })
- ];
- };
-
- qtModule =
- import ../qtModule.nix
- {
- inherit perl;
- inherit (stdenv) lib;
- # Use a variant of mkDerivation that does not include wrapQtApplications
- # to avoid cyclic dependencies between Qt modules.
- mkDerivation =
- import ../mkDerivation.nix
- { inherit (stdenv) lib; inherit debug; wrapQtAppsHook = null; }
- stdenv.mkDerivation;
- }
- { inherit self srcs patches; };
-
- addPackages = self: with self;
- let
- callPackage = self.newScope { inherit qtCompatVersion qtModule srcs; };
- in {
-
- mkDerivationWith =
- import ../mkDerivation.nix
- { inherit (stdenv) lib; inherit debug; inherit (self) wrapQtAppsHook; };
-
- mkDerivation = mkDerivationWith stdenv.mkDerivation;
-
- qtbase = callPackage ../modules/qtbase.nix {
- inherit bison cups harfbuzz libGL;
- inherit (srcs.qtbase) src version;
- patches = patches.qtbase;
- inherit developerBuild decryptSslTraffic;
- };
-
- /* qt3d = not packaged */
- /* qtactiveqt = not packaged */
- /* qtandroidextras = not packaged */
- /* qtcanvas3d = not packaged */
- qtconnectivity = callPackage ../modules/qtconnectivity.nix {};
- qtdeclarative = callPackage ../modules/qtdeclarative.nix {};
- qtdoc = callPackage ../modules/qtdoc.nix {};
- qtgraphicaleffects = callPackage ../modules/qtgraphicaleffects.nix {};
- qtimageformats = callPackage ../modules/qtimageformats.nix {};
- qtlocation = callPackage ../modules/qtlocation.nix {};
- /* qtmacextras = not packaged */
- qtmultimedia = callPackage ../modules/qtmultimedia.nix {
- inherit gstreamer gst-plugins-base;
- };
- qtquick1 = null;
- qtquickcontrols = callPackage ../modules/qtquickcontrols.nix {};
- qtquickcontrols2 = callPackage ../modules/qtquickcontrols2.nix {};
- qtscript = callPackage ../modules/qtscript.nix {};
- qtsensors = callPackage ../modules/qtsensors.nix {};
- qtserialport = callPackage ../modules/qtserialport.nix {};
- qtsvg = callPackage ../modules/qtsvg.nix {};
- qttools = callPackage ../modules/qttools.nix {};
- qttranslations = callPackage ../modules/qttranslations.nix {};
- qtwayland = callPackage ../modules/qtwayland.nix {};
- qtwebchannel = callPackage ../modules/qtwebchannel.nix {};
- qtwebengine = callPackage ../modules/qtwebengine.nix {};
- qtwebkit = callPackage ../modules/qtwebkit.nix {};
- qtwebsockets = callPackage ../modules/qtwebsockets.nix {};
- /* qtwinextras = not packaged */
- qtx11extras = callPackage ../modules/qtx11extras.nix {};
- qtxmlpatterns = callPackage ../modules/qtxmlpatterns.nix {};
- qtvirtualkeyboard = callPackage ../modules/qtvirtualkeyboard.nix {};
-
- env = callPackage ../qt-env.nix {};
- full = env "qt-full-${qtbase.version}" [
- qtconnectivity qtdeclarative qtdoc qtgraphicaleffects qtimageformats
- qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtscript
- qtsensors qtserialport qtsvg qttools qttranslations qtwayland
- qtwebchannel qtwebengine qtwebkit qtwebsockets qtx11extras qtxmlpatterns
- ];
-
- qmake = makeSetupHook {
- deps = [ self.qtbase.dev ];
- substitutions = { inherit (stdenv) isDarwin; };
- } ../hooks/qmake-hook.sh;
-
- wrapQtAppsHook = makeSetupHook {
- deps =
- [ self.qtbase.dev makeWrapper ]
- ++ optional stdenv.isLinux self.qtwayland.dev;
- } ../hooks/wrap-qt-apps-hook.sh;
- };
-
- self = makeScope newScope addPackages;
-
-in self
diff --git a/pkgs/development/libraries/qt-5/5.6/fetch.sh b/pkgs/development/libraries/qt-5/5.6/fetch.sh
deleted file mode 100644
index bb9eb66a01dc..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/fetch.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-WGET_ARGS=( http://download.qt.io/official_releases/qt/5.6/5.6.3/submodules/ \
- http://download.qt.io/community_releases/5.6/5.6.3/ )
diff --git a/pkgs/development/libraries/qt-5/5.6/qtbase-fixguicmake.patch b/pkgs/development/libraries/qt-5/5.6/qtbase-fixguicmake.patch
deleted file mode 100644
index 8b46d432812a..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/qtbase-fixguicmake.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
-index 0bbc871..3673634 100644
---- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
-+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
-@@ -286,7 +286,7 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
- macro(_populate_$${CMAKE_MODULE_NAME}_plugin_properties Plugin Configuration PLUGIN_LOCATION)
- set_property(TARGET Qt5::${Plugin} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
-
-- set(imported_location \"$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\")
-+ set(imported_location \"${PLUGIN_LOCATION}\")
- _qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location})
- set_target_properties(Qt5::${Plugin} PROPERTIES
- \"IMPORTED_LOCATION_${Configuration}\" ${imported_location}
-diff --git a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
-index 5baf0fd..3583745 100644
---- a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
-+++ b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
-@@ -2,10 +2,10 @@
- add_library(Qt5::$$CMAKE_PLUGIN_NAME MODULE IMPORTED)
-
- !!IF !isEmpty(CMAKE_RELEASE_TYPE)
--_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME RELEASE \"$${CMAKE_PLUGIN_LOCATION_RELEASE}\")
-+_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME RELEASE \"$${CMAKE_PLUGIN_DIR}$${CMAKE_PLUGIN_LOCATION_RELEASE}\")
- !!ENDIF
- !!IF !isEmpty(CMAKE_DEBUG_TYPE)
--_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME DEBUG \"$${CMAKE_PLUGIN_LOCATION_DEBUG}\")
-+_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME DEBUG \"$${CMAKE_PLUGIN_DIR}$${CMAKE_PLUGIN_LOCATION_DEBUG}\")
- !!ENDIF
-
- list(APPEND Qt5$${CMAKE_MODULE_NAME}_PLUGINS Qt5::$$CMAKE_PLUGIN_NAME)
diff --git a/pkgs/development/libraries/qt-5/5.6/qtbase.patch b/pkgs/development/libraries/qt-5/5.6/qtbase.patch
deleted file mode 100644
index d8322cbc1997..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/qtbase.patch
+++ /dev/null
@@ -1,795 +0,0 @@
-diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf
-index 11fb52a0b1..614fdbb046 100644
---- a/mkspecs/features/create_cmake.prf
-+++ b/mkspecs/features/create_cmake.prf
-@@ -21,7 +21,7 @@ load(cmake_functions)
- # at cmake time whether package has been found via a symlink, and correct
- # that to an absolute path. This is only done for installations to
- # the /usr or / prefix.
--CMAKE_INSTALL_LIBS_DIR = $$cmakeTargetPath($$[QT_INSTALL_LIBS])
-+CMAKE_INSTALL_LIBS_DIR = $$cmakeTargetPath($$NIX_OUTPUT_OUT/lib/)
- contains(CMAKE_INSTALL_LIBS_DIR, ^(/usr)?/lib(64)?.*): CMAKE_USR_MOVE_WORKAROUND = $$CMAKE_INSTALL_LIBS_DIR
-
- CMAKE_OUT_DIR = $$MODULE_BASE_OUTDIR/lib/cmake
-@@ -47,47 +47,22 @@ split_incpath {
- $$cmake_extra_source_includes.output
- }
-
--CMAKE_INCLUDE_DIR = $$cmakeRelativePath($$[QT_INSTALL_HEADERS], $$[QT_INSTALL_PREFIX])
--contains(CMAKE_INCLUDE_DIR, "^\\.\\./.*") {
-- CMAKE_INCLUDE_DIR = $$[QT_INSTALL_HEADERS]/
-- CMAKE_INCLUDE_DIR_IS_ABSOLUTE = True
--}
-+CMAKE_INCLUDE_DIR = $$NIX_OUTPUT_DEV/include/
-+CMAKE_INCLUDE_DIR_IS_ABSOLUTE = True
-
- !exists($$first(QT.$${MODULE}_private.includes)): CMAKE_NO_PRIVATE_INCLUDES = true
-
--CMAKE_LIB_DIR = $$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])
--contains(CMAKE_LIB_DIR,"^\\.\\./.*") {
-- CMAKE_LIB_DIR = $$[QT_INSTALL_LIBS]/
-- CMAKE_LIB_DIR_IS_ABSOLUTE = True
--} else {
-- CMAKE_RELATIVE_INSTALL_LIBS_DIR = $$cmakeRelativePath($$[QT_INSTALL_PREFIX], $$[QT_INSTALL_LIBS])
-- # We need to go up another two levels because the CMake files are
-- # installed in $${CMAKE_LIB_DIR}/cmake/Qt5$${CMAKE_MODULE_NAME}
-- CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
--}
-+CMAKE_LIB_DIR = $$NIX_OUTPUT_OUT/lib/
-+CMAKE_LIB_DIR_IS_ABSOLUTE = True
-
--CMAKE_BIN_DIR = $$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])
--contains(CMAKE_BIN_DIR, "^\\.\\./.*") {
-- CMAKE_BIN_DIR = $$[QT_HOST_BINS]/
-- CMAKE_BIN_DIR_IS_ABSOLUTE = True
--}
-+CMAKE_BIN_DIR = $$NIX_OUTPUT_BIN/bin/
-+CMAKE_BIN_DIR_IS_ABSOLUTE = True
-
--CMAKE_PLUGIN_DIR = $$cmakeRelativePath($$[QT_INSTALL_PLUGINS], $$[QT_INSTALL_PREFIX])
--contains(CMAKE_PLUGIN_DIR, "^\\.\\./.*") {
-- CMAKE_PLUGIN_DIR = $$[QT_INSTALL_PLUGINS]/
-- CMAKE_PLUGIN_DIR_IS_ABSOLUTE = True
--}
-+CMAKE_PLUGIN_DIR = $$NIX_OUTPUT_PLUGIN/
-+CMAKE_PLUGIN_DIR_IS_ABSOLUTE = True
-
--win32:!wince:!static:!staticlib {
-- CMAKE_DLL_DIR = $$cmakeRelativePath($$[QT_INSTALL_BINS], $$[QT_INSTALL_PREFIX])
-- contains(CMAKE_DLL_DIR, "^\\.\\./.*") {
-- CMAKE_DLL_DIR = $$[QT_INSTALL_BINS]/
-- CMAKE_DLL_DIR_IS_ABSOLUTE = True
-- }
--} else {
-- CMAKE_DLL_DIR = $$CMAKE_LIB_DIR
-- CMAKE_DLL_DIR_IS_ABSOLUTE = $$CMAKE_LIB_DIR_IS_ABSOLUTE
--}
-+CMAKE_DLL_DIR = $$NIX_OUTPUT_OUT/lib/
-+CMAKE_DLL_DIR_IS_ABSOLUTE = True
-
- static|staticlib:CMAKE_STATIC_TYPE = true
-
-@@ -167,7 +142,7 @@ contains(CONFIG, plugin) {
- cmake_target_file
-
- cmake_qt5_plugin_file.files = $$cmake_target_file.output
-- cmake_qt5_plugin_file.path = $$[QT_INSTALL_LIBS]/cmake/Qt5$${CMAKE_MODULE_NAME}
-+ cmake_qt5_plugin_file.path = $$NIX_OUTPUT_OUT/lib/cmake/Qt5$${CMAKE_MODULE_NAME}
- INSTALLS += cmake_qt5_plugin_file
-
- return()
-@@ -314,7 +289,7 @@ exists($$cmake_macros_file.input) {
- cmake_qt5_module_files.files += $$cmake_macros_file.output
- }
-
--cmake_qt5_module_files.path = $$[QT_INSTALL_LIBS]/cmake/Qt5$${CMAKE_MODULE_NAME}
-+cmake_qt5_module_files.path = $$NIX_OUTPUT_OUT/lib/cmake/Qt5$${CMAKE_MODULE_NAME}
-
- # We are generating cmake files. Most developers of Qt are not aware of cmake,
- # so we require automatic tests to be available. The only module which should
-diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
-index d2358cae4b..61d8cc0471 100644
---- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
-+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
-@@ -9,30 +9,6 @@ if (CMAKE_VERSION VERSION_LESS 3.0.0)
- endif()
- !!ENDIF
-
--!!IF !isEmpty(CMAKE_USR_MOVE_WORKAROUND)
--!!IF !isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
--set(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"$$[QT_INSTALL_PREFIX]\")
--!!ELSE
--get_filename_component(_IMPORT_PREFIX \"${CMAKE_CURRENT_LIST_FILE}\" PATH)
--# Use original install prefix when loaded through a
--# cross-prefix symbolic link such as /lib -> /usr/lib.
--get_filename_component(_realCurr \"${_IMPORT_PREFIX}\" REALPATH)
--get_filename_component(_realOrig \"$$CMAKE_INSTALL_LIBS_DIR/cmake/Qt5$${CMAKE_MODULE_NAME}\" REALPATH)
--if(_realCurr STREQUAL _realOrig)
-- get_filename_component(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"$$CMAKE_INSTALL_LIBS_DIR/$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}\" ABSOLUTE)
--else()
-- get_filename_component(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
--endif()
--unset(_realOrig)
--unset(_realCurr)
--unset(_IMPORT_PREFIX)
--!!ENDIF
--!!ELIF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
--get_filename_component(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
--!!ELSE
--set(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"$$[QT_INSTALL_PREFIX]\")
--!!ENDIF
--
- !!IF !equals(TEMPLATE, aux)
- # For backwards compatibility only. Use Qt5$${CMAKE_MODULE_NAME}_VERSION instead.
- set(Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING "$$eval(QT.$${MODULE}.MAJOR_VERSION).$$eval(QT.$${MODULE}.MINOR_VERSION).$$eval(QT.$${MODULE}.PATCH_VERSION)")
-@@ -58,11 +34,7 @@ endmacro()
- macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATION IMPLIB_LOCATION)
- set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
-
--!!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
--!!ELSE
- set(imported_location \"$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
--!!ENDIF
- _qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location})
- set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES
- \"INTERFACE_LINK_LIBRARIES\" \"${_Qt5$${CMAKE_MODULE_NAME}_LIB_DEPENDENCIES}\"
-@@ -75,11 +47,7 @@ macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATI
- )
-
- !!IF !isEmpty(CMAKE_WINDOWS_BUILD)
--!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-- set(imported_implib \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
--!!ELSE
- set(imported_implib \"IMPORTED_IMPLIB_${Configuration}\" \"$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
--!!ENDIF
- _qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_implib})
- if(NOT \"${IMPLIB_LOCATION}\" STREQUAL \"\")
- set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES
-@@ -95,24 +63,13 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
- !!IF !no_module_headers
- !!IF !isEmpty(CMAKE_BUILD_IS_FRAMEWORK)
- set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework\"
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework/Headers\"
-+ \"$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework\"
-+ \"$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework/Headers\"
- )
- !!IF isEmpty(CMAKE_NO_PRIVATE_INCLUDES)
- set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/\"
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/$${MODULE_INCNAME}\"
-- )
--!!ELSE
-- set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS \"\")
--!!ENDIF
--!!ELSE
--!!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE)
-- set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR\" \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}\")
--!!IF isEmpty(CMAKE_NO_PRIVATE_INCLUDES)
-- set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/$$VERSION\"
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/$$VERSION/$${MODULE_INCNAME}\"
-+ \"$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/\"
-+ \"$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/$${MODULE_INCNAME}\"
- )
- !!ELSE
- set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS \"\")
-@@ -128,7 +85,6 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
- set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS \"\")
- !!ENDIF
- !!ENDIF
--!!ENDIF
- !!IF !isEmpty(CMAKE_ADD_SOURCE_INCLUDE_DIRS)
- include(\"${CMAKE_CURRENT_LIST_DIR}/ExtraSourceIncludes.cmake\" OPTIONAL)
- !!ENDIF
-@@ -254,25 +210,13 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
- !!IF !isEmpty(CMAKE_FIND_OTHER_LIBRARY_BUILD)
- !!IF isEmpty(CMAKE_DEBUG_TYPE)
- !!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
--!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-- if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
--!!ELSE // CMAKE_LIB_DIR_IS_ABSOLUTE
- if (EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
--!!ENDIF // CMAKE_LIB_DIR_IS_ABSOLUTE
- _populate_$${CMAKE_MODULE_NAME}_target_properties(DEBUG \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" \"\" )
- !!ELSE // CMAKE_STATIC_WINDOWS_BUILD
- if (EXISTS
--!!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}$${CMAKE_LIB_FILE_LOCATION_DEBUG}\"
--!!ELSE
- \"$${CMAKE_LIB_FILE_LOCATION_DEBUG}\"
--!!ENDIF
- AND EXISTS
--!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
--!!ELSE
- \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
--!!ENDIF
- _populate_$${CMAKE_MODULE_NAME}_target_properties(DEBUG \"$${CMAKE_LIB_FILE_LOCATION_DEBUG}\" \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
- !!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
- endif()
-@@ -291,25 +235,13 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
- !!IF !isEmpty(CMAKE_FIND_OTHER_LIBRARY_BUILD)
- !!IF isEmpty(CMAKE_RELEASE_TYPE)
- !!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
--!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-- if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
--!!ELSE // CMAKE_LIB_DIR_IS_ABSOLUTE
- if (EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
--!!ENDIF // CMAKE_LIB_DIR_IS_ABSOLUTE
- _populate_$${CMAKE_MODULE_NAME}_target_properties(RELEASE \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" \"\" )
- !!ELSE // CMAKE_STATIC_WINDOWS_BUILD
- if (EXISTS
--!!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}$${CMAKE_LIB_FILE_LOCATION_RELEASE}\"
--!!ELSE
- \"$${CMAKE_LIB_FILE_LOCATION_RELEASE}\"
--!!ENDIF
- AND EXISTS
--!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
--!!ELSE
- \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
--!!ENDIF
- _populate_$${CMAKE_MODULE_NAME}_target_properties(RELEASE \"$${CMAKE_LIB_FILE_LOCATION_RELEASE}\" \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
- !!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
- endif()
-@@ -328,11 +260,7 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
- macro(_populate_$${CMAKE_MODULE_NAME}_plugin_properties Plugin Configuration PLUGIN_LOCATION)
- set_property(TARGET Qt5::${Plugin} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
-
--!!IF isEmpty(CMAKE_PLUGIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\")
--!!ELSE
- set(imported_location \"$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\")
--!!ENDIF
- _qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location})
- set_target_properties(Qt5::${Plugin} PROPERTIES
- \"IMPORTED_LOCATION_${Configuration}\" ${imported_location}
-diff --git a/mkspecs/features/qml_module.prf b/mkspecs/features/qml_module.prf
-index 47ebe78400..25aa2b93e7 100644
---- a/mkspecs/features/qml_module.prf
-+++ b/mkspecs/features/qml_module.prf
-@@ -17,10 +17,7 @@ fq_qml_files = $$_PRO_FILE_PWD_/qmldir
-
- for(qmlf, QML_FILES): fq_qml_files += $$absolute_path($$qmlf, $$_PRO_FILE_PWD_)
-
--qml1_target: \
-- instbase = $$[QT_INSTALL_IMPORTS]
--else: \
-- instbase = $$[QT_INSTALL_QML]
-+instbase = $$NIX_OUTPUT_QML
-
- # Install rules
- qmldir.base = $$_PRO_FILE_PWD_
-diff --git a/mkspecs/features/qml_plugin.prf b/mkspecs/features/qml_plugin.prf
-index ebec1db8da..62ace84a6c 100644
---- a/mkspecs/features/qml_plugin.prf
-+++ b/mkspecs/features/qml_plugin.prf
-@@ -46,13 +46,8 @@ exists($$QMLTYPEFILE): QML_FILES += $$QMLTYPEFILE
-
- load(qt_build_paths)
-
--qml1_target {
-- DESTDIR = $$MODULE_BASE_OUTDIR/imports/$$TARGETPATH
-- instbase = $$[QT_INSTALL_IMPORTS]
--} else {
-- DESTDIR = $$MODULE_BASE_OUTDIR/qml/$$TARGETPATH
-- instbase = $$[QT_INSTALL_QML]
--}
-+DESTDIR = $$MODULE_BASE_OUTDIR/qml/$$TARGETPATH
-+instbase = $$NIX_OUTPUT_QML
-
- target.path = $$instbase/$$TARGETPATH
- INSTALLS += target
-diff --git a/mkspecs/features/qt_app.prf b/mkspecs/features/qt_app.prf
-index 46aca50cc2..4f4e634724 100644
---- a/mkspecs/features/qt_app.prf
-+++ b/mkspecs/features/qt_app.prf
-@@ -29,7 +29,7 @@ host_build:force_bootstrap {
- target.path = $$[QT_HOST_BINS]
- } else {
- !build_pass:contains(QT_CONFIG, debug_and_release): CONFIG += release
-- target.path = $$[QT_INSTALL_BINS]
-+ target.path = $$NIX_OUTPUT_BIN/bin
- CONFIG += relative_qt_rpath # Qt's tools and apps should be relocatable
- }
- INSTALLS += target
-diff --git a/mkspecs/features/qt_build_paths.prf b/mkspecs/features/qt_build_paths.prf
-index 1848f00e90..2af93675c5 100644
---- a/mkspecs/features/qt_build_paths.prf
-+++ b/mkspecs/features/qt_build_paths.prf
-@@ -23,6 +23,6 @@ exists($$MODULE_BASE_INDIR/.git): \
- !force_independent {
- # If the module is not built independently, everything ends up in qtbase.
- # This is the case in non-prefix builds, except for selected modules.
-- MODULE_BASE_OUTDIR = $$[QT_HOST_PREFIX]
-- MODULE_QMAKE_OUTDIR = $$[QT_HOST_PREFIX]
-+ MODULE_BASE_OUTDIR = $$NIX_OUTPUT_OUT
-+ MODULE_QMAKE_OUTDIR = $$NIX_OUTPUT_OUT
- }
-diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf
-index 08b3f3e5af..5ffeafd9d8 100644
---- a/mkspecs/features/qt_common.prf
-+++ b/mkspecs/features/qt_common.prf
-@@ -30,8 +30,8 @@ contains(TEMPLATE, .*lib) {
- qqt_libdir = \$\$\$\$[QT_HOST_LIBS]
- qt_libdir = $$[QT_HOST_LIBS]
- } else {
-- qqt_libdir = \$\$\$\$[QT_INSTALL_LIBS]
-- qt_libdir = $$[QT_INSTALL_LIBS]
-+ qqt_libdir = \$\$\$\$NIX_OUTPUT_OUT/lib
-+ qt_libdir = $$NIX_OUTPUT_OUT/lib
- }
- contains(QMAKE_DEFAULT_LIBDIRS, $$qt_libdir) {
- lib_replace.match = "[^ ']*$$rplbase/lib"
-diff --git a/mkspecs/features/qt_docs.prf b/mkspecs/features/qt_docs.prf
-index 183d0c9502..17982b04ec 100644
---- a/mkspecs/features/qt_docs.prf
-+++ b/mkspecs/features/qt_docs.prf
-@@ -41,7 +41,7 @@ QMAKE_DOCS_OUTPUTDIR = $$QMAKE_DOCS_BASE_OUTDIR/$$QMAKE_DOCS_TARGETDIR
-
- QDOC += -outputdir $$shell_quote($$QMAKE_DOCS_OUTPUTDIR)
- !build_online_docs: \
-- QDOC += -installdir $$shell_quote($$[QT_INSTALL_DOCS])
-+ QDOC += -installdir $$shell_quote($$NIX_OUTPUT_DOC)
- PREP_DOC_INDEXES =
- DOC_INDEXES =
- !isEmpty(QTREPOS) {
-@@ -60,8 +60,8 @@ DOC_INDEXES =
- DOC_INDEXES += -indexdir $$shell_quote($$qrep/doc)
- } else {
- prepare_docs: \
-- PREP_DOC_INDEXES += -indexdir $$shell_quote($$[QT_INSTALL_DOCS/get])
-- DOC_INDEXES += -indexdir $$shell_quote($$[QT_INSTALL_DOCS/get])
-+ PREP_DOC_INDEXES += -indexdir $$shell_quote($$NIX_OUTPUT_DOC)
-+ DOC_INDEXES += -indexdir $$shell_quote($$NIX_OUTPUT_DOC)
- }
- doc_command = $$QDOC $$QMAKE_DOCS
- prepare_docs {
-@@ -75,12 +75,12 @@ prepare_docs {
- qch_docs.commands = $$QHELPGENERATOR $$shell_quote($$QMAKE_DOCS_OUTPUTDIR/$${QMAKE_DOCS_TARGET}.qhp) -o $$shell_quote($$QMAKE_DOCS_BASE_OUTDIR/$${QMAKE_DOCS_TARGET}.qch)
-
- inst_html_docs.files = $$QMAKE_DOCS_OUTPUTDIR
-- inst_html_docs.path = $$[QT_INSTALL_DOCS]
-+ inst_html_docs.path = $$NIX_OUTPUT_DOC
- inst_html_docs.CONFIG += no_check_exist directory no_default_install no_build
- INSTALLS += inst_html_docs
-
- inst_qch_docs.files = $$QMAKE_DOCS_BASE_OUTDIR/$${QMAKE_DOCS_TARGET}.qch
-- inst_qch_docs.path = $$[QT_INSTALL_DOCS]
-+ inst_qch_docs.path = $$NIX_OUTPUT_DOC
- inst_qch_docs.CONFIG += no_check_exist no_default_install no_build
- INSTALLS += inst_qch_docs
-
-diff --git a/mkspecs/features/qt_example_installs.prf b/mkspecs/features/qt_example_installs.prf
-index 4c68cfd72f..f422f18266 100644
---- a/mkspecs/features/qt_example_installs.prf
-+++ b/mkspecs/features/qt_example_installs.prf
-@@ -70,7 +70,7 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
- $$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \
- $$DBUS_ADAPTORS $$DBUS_INTERFACES
- addInstallFiles(sources.files, $$sourcefiles)
-- sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase
-+ sources.path = $$NIX_OUTPUT_DEV/share/examples/$$probase
- INSTALLS += sources
-
- check_examples {
-diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
-index 4a1d265a8b..d346424b5b 100644
---- a/mkspecs/features/qt_functions.prf
-+++ b/mkspecs/features/qt_functions.prf
-@@ -70,7 +70,7 @@ defineTest(qtHaveModule) {
- defineTest(qtPrepareTool) {
- cmd = $$eval(QT_TOOL.$${2}.binary)
- isEmpty(cmd) {
-- cmd = $$[QT_HOST_BINS]/$$2
-+ cmd = $$system("command -v $$2")
- exists($${cmd}.pl) {
- cmd = perl -w $$system_path($${cmd}.pl)
- } else: contains(QMAKE_HOST.os, Windows) {
-diff --git a/mkspecs/features/qt_installs.prf b/mkspecs/features/qt_installs.prf
-index 3a5dbb6274..24f321bd82 100644
---- a/mkspecs/features/qt_installs.prf
-+++ b/mkspecs/features/qt_installs.prf
-@@ -12,16 +12,10 @@
- #library
- !qt_no_install_library {
- win32 {
-- host_build: \
-- dlltarget.path = $$[QT_HOST_BINS]
-- else: \
-- dlltarget.path = $$[QT_INSTALL_BINS]
-+ dlltarget.path = $$NIX_OUTPUT_BIN/bin
- INSTALLS += dlltarget
- }
-- host_build: \
-- target.path = $$[QT_HOST_LIBS]
-- else: \
-- target.path = $$[QT_INSTALL_LIBS]
-+ target.path = $$NIX_OUTPUT_OUT/lib
- !static: target.CONFIG = no_dll
- INSTALLS += target
- }
-@@ -29,33 +23,33 @@
- #headers
- qt_install_headers {
- class_headers.files = $$SYNCQT.HEADER_CLASSES
-- class_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME
-+ class_headers.path = $$NIX_OUTPUT_DEV/include/$$MODULE_INCNAME
- INSTALLS += class_headers
-
- targ_headers.files = $$SYNCQT.HEADER_FILES
-- targ_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME
-+ targ_headers.path = $$NIX_OUTPUT_DEV/include/$$MODULE_INCNAME
- INSTALLS += targ_headers
-
- private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES
-- private_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/private
-+ private_headers.path = $$NIX_OUTPUT_DEV/include/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/private
- INSTALLS += private_headers
-
- qpa_headers.files = $$SYNCQT.QPA_HEADER_FILES
-- qpa_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/qpa
-+ qpa_headers.path = $$NIX_OUTPUT_DEV/include/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/qpa
- INSTALLS += qpa_headers
- }
-
- #module
- qt_install_module {
- !isEmpty(MODULE_PRI) {
-- pritarget.path = $$[QT_HOST_DATA]/mkspecs/modules
-+ pritarget.path = $$NIX_OUTPUT_DEV/mkspecs/modules
- pritarget.files = $$MODULE_PRI
- INSTALLS += pritarget
- } else: isEmpty(MODULE_PRIVATE_PRI) {
- warning("Project $$basename(_PRO_FILE_) is a module, but has not defined MODULE_PRI, which is required for Qt to expose the module to other projects.")
- }
- !isEmpty(MODULE_PRIVATE_PRI) {
-- privpritarget.path = $$[QT_HOST_DATA]/mkspecs/modules
-+ privpritarget.path = $$NIX_OUTPUT_DEV/mkspecs/modules
- privpritarget.files = $$MODULE_PRIVATE_PRI
- INSTALLS += privpritarget
- }
-diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf
-index 3cf6c7349c..83e68025a5 100644
---- a/mkspecs/features/qt_plugin.prf
-+++ b/mkspecs/features/qt_plugin.prf
-@@ -82,7 +82,7 @@ CONFIG(static, static|shared)|prefix_build {
- }
- }
-
--target.path = $$[QT_INSTALL_PLUGINS]/$$PLUGIN_TYPE
-+target.path = $$NIX_OUTPUT_PLUGIN/$$PLUGIN_TYPE
- INSTALLS += target
-
- TARGET = $$qt5LibraryTarget($$TARGET)
-diff --git a/src/corelib/Qt5CoreConfigExtras.cmake.in b/src/corelib/Qt5CoreConfigExtras.cmake.in
-index 91a4eb619a..08b533e69c 100644
---- a/src/corelib/Qt5CoreConfigExtras.cmake.in
-+++ b/src/corelib/Qt5CoreConfigExtras.cmake.in
-@@ -3,7 +3,7 @@ if (NOT TARGET Qt5::qmake)
- add_executable(Qt5::qmake IMPORTED)
-
- !!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_BIN_DIR}qmake$$CMAKE_BIN_SUFFIX\")
-+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_BIN_DIR}qmake$$CMAKE_BIN_SUFFIX\")
- !!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}qmake$$CMAKE_BIN_SUFFIX\")
- !!ENDIF
-@@ -18,7 +18,7 @@ if (NOT TARGET Qt5::moc)
- add_executable(Qt5::moc IMPORTED)
-
- !!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_BIN_DIR}moc$$CMAKE_BIN_SUFFIX\")
-+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_BIN_DIR}moc$$CMAKE_BIN_SUFFIX\")
- !!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}moc$$CMAKE_BIN_SUFFIX\")
- !!ENDIF
-@@ -35,7 +35,7 @@ if (NOT TARGET Qt5::rcc)
- add_executable(Qt5::rcc IMPORTED)
-
- !!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_BIN_DIR}rcc$$CMAKE_BIN_SUFFIX\")
-+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_BIN_DIR}rcc$$CMAKE_BIN_SUFFIX\")
- !!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}rcc$$CMAKE_BIN_SUFFIX\")
- !!ENDIF
-@@ -131,7 +131,7 @@ if (NOT TARGET Qt5::WinMain)
- !!IF !isEmpty(CMAKE_RELEASE_TYPE)
- set_property(TARGET Qt5::WinMain APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
- !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_RELEASE}\")
-+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_RELEASE}\")
- !!ELSE
- set(imported_location \"$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_RELEASE}\")
- !!ENDIF
-@@ -145,7 +145,7 @@ if (NOT TARGET Qt5::WinMain)
- set_property(TARGET Qt5::WinMain APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-
- !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_DEBUG}\")
-+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_DEBUG}\")
- !!ELSE
- set(imported_location \"$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_DEBUG}\")
- !!ENDIF
-diff --git a/src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in b/src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in
-index c357237d0e..6f0c75de3c 100644
---- a/src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in
-+++ b/src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in
-@@ -1,6 +1,6 @@
-
- !!IF isEmpty(CMAKE_HOST_DATA_DIR_IS_ABSOLUTE)
--set(_qt5_corelib_extra_includes \"${_qt5Core_install_prefix}/$${CMAKE_HOST_DATA_DIR}/mkspecs/$${CMAKE_MKSPEC}\")
-+set(_qt5_corelib_extra_includes \"$$NIX_OUTPUT_DEV/$${CMAKE_HOST_DATA_DIR}/mkspecs/$${CMAKE_MKSPEC}\")
- !!ELSE
- set(_qt5_corelib_extra_includes \"$${CMAKE_HOST_DATA_DIR}mkspecs/$${CMAKE_MKSPEC}\")
- !!ENDIF
-diff --git a/src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in b/src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in
-index 706304cf34..546420f6ad 100644
---- a/src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in
-+++ b/src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in
-@@ -1,6 +1,6 @@
-
- !!IF isEmpty(CMAKE_INSTALL_DATA_DIR_IS_ABSOLUTE)
--set(_qt5_corelib_extra_includes \"${_qt5Core_install_prefix}/$${CMAKE_INSTALL_DATA_DIR}/mkspecs/$${CMAKE_MKSPEC}\")
-+set(_qt5_corelib_extra_includes \"$$NIX_OUTPUT_DEV/$${CMAKE_INSTALL_DATA_DIR}/mkspecs/$${CMAKE_MKSPEC}\")
- !!ELSE
- set(_qt5_corelib_extra_includes \"$${CMAKE_INSTALL_DATA_DIR}mkspecs/$${CMAKE_MKSPEC}\")
- !!ENDIF
-diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
-index bd3c12ce97..a796775970 100644
---- a/src/corelib/kernel/qcoreapplication.cpp
-+++ b/src/corelib/kernel/qcoreapplication.cpp
-@@ -2533,6 +2533,15 @@ QStringList QCoreApplication::libraryPaths()
- QStringList *app_libpaths = new QStringList;
- coreappdata()->app_libpaths.reset(app_libpaths);
-
-+ // Add library paths derived from PATH
-+ const QStringList paths = QFile::decodeName(qgetenv("PATH")).split(':');
-+ const QString plugindir = QStringLiteral("../" NIXPKGS_QT_PLUGIN_PREFIX);
-+ for (const QString &path: paths) {
-+ if (!path.isEmpty()) {
-+ app_libpaths->append(QDir::cleanPath(path + QDir::separator() + plugindir));
-+ }
-+ }
-+
- const QByteArray libPathEnv = qgetenv("QT_PLUGIN_PATH");
- if (!libPathEnv.isEmpty()) {
- QStringList paths = QFile::decodeName(libPathEnv).split(QDir::listSeparator(), QString::SkipEmptyParts);
-diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp
-index c13c9a5223..6936851511 100644
---- a/src/corelib/tools/qtimezoneprivate_tz.cpp
-+++ b/src/corelib/tools/qtimezoneprivate_tz.cpp
-@@ -64,7 +64,11 @@ typedef QHash QTzTimeZoneHash;
- // Parse zone.tab table, assume lists all installed zones, if not will need to read directories
- static QTzTimeZoneHash loadTzTimeZones()
- {
-- QString path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
-+ // Try TZDIR first, in case we're running on NixOS.
-+ QString path = QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/zone.tab");
-+ // Fallback to traditional paths in case we are not on NixOS.
-+ if (!QFile::exists(path))
-+ path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
- if (!QFile::exists(path))
- path = QStringLiteral("/usr/lib/zoneinfo/zone.tab");
-
-@@ -636,12 +640,16 @@ void QTzTimeZonePrivate::init(const QByteArray &ianaId)
- if (!tzif.open(QIODevice::ReadOnly))
- return;
- } else {
-- // Open named tz, try modern path first, if fails try legacy path
-- tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
-+ // Try TZDIR first, in case we're running on NixOS
-+ tzif.setFileName(QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/") + QString::fromLocal8Bit(ianaId));
- if (!tzif.open(QIODevice::ReadOnly)) {
-- tzif.setFileName(QLatin1String("/usr/lib/zoneinfo/") + QString::fromLocal8Bit(ianaId));
-- if (!tzif.open(QIODevice::ReadOnly))
-- return;
-+ // Open named tz, try modern path first, if fails try legacy path
-+ tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
-+ if (!tzif.open(QIODevice::ReadOnly)) {
-+ tzif.setFileName(QLatin1String("/usr/lib/zoneinfo/") + QString::fromLocal8Bit(ianaId));
-+ if (!tzif.open(QIODevice::ReadOnly))
-+ return;
-+ }
- }
- }
-
-diff --git a/src/dbus/Qt5DBusConfigExtras.cmake.in b/src/dbus/Qt5DBusConfigExtras.cmake.in
-index 1d947159e2..b36865fc48 100644
---- a/src/dbus/Qt5DBusConfigExtras.cmake.in
-+++ b/src/dbus/Qt5DBusConfigExtras.cmake.in
-@@ -2,11 +2,7 @@
- if (NOT TARGET Qt5::qdbuscpp2xml)
- add_executable(Qt5::qdbuscpp2xml IMPORTED)
-
--!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5DBus_install_prefix}/$${CMAKE_BIN_DIR}qdbuscpp2xml$$CMAKE_BIN_SUFFIX\")
--!!ELSE
-- set(imported_location \"$${CMAKE_BIN_DIR}qdbuscpp2xml$$CMAKE_BIN_SUFFIX\")
--!!ENDIF
-+ set(imported_location \"$$NIX_OUTPUT_DEV/bin/qdbuscpp2xml$$CMAKE_BIN_SUFFIX\")
- _qt5_DBus_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::qdbuscpp2xml PROPERTIES
-@@ -17,11 +13,7 @@ endif()
- if (NOT TARGET Qt5::qdbusxml2cpp)
- add_executable(Qt5::qdbusxml2cpp IMPORTED)
-
--!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5DBus_install_prefix}/$${CMAKE_BIN_DIR}qdbusxml2cpp$$CMAKE_BIN_SUFFIX\")
--!!ELSE
-- set(imported_location \"$${CMAKE_BIN_DIR}qdbusxml2cpp$$CMAKE_BIN_SUFFIX\")
--!!ENDIF
-+ set(imported_location \"$$NIX_OUTPUT_DEV/bin/qdbusxml2cpp$$CMAKE_BIN_SUFFIX\")
- _qt5_DBus_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::qdbusxml2cpp PROPERTIES
-diff --git a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in
-index 07869efd7d..fb4183bada 100644
---- a/src/gui/Qt5GuiConfigExtras.cmake.in
-+++ b/src/gui/Qt5GuiConfigExtras.cmake.in
-@@ -2,7 +2,7 @@
- !!IF !isEmpty(CMAKE_ANGLE_EGL_DLL_RELEASE)
-
- !!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE)
--set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR/QtANGLE\")
-+set(Qt5Gui_EGL_INCLUDE_DIRS \"$$NIX_OUTPUT_DEV/$$CMAKE_INCLUDE_DIR/QtANGLE\")
- !!ELSE
- set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR/QtANGLE\")
- !!ENDIF
-@@ -17,13 +17,13 @@ macro(_populate_qt5gui_gl_target_properties TargetName Configuration LIB_LOCATIO
- set_property(TARGET Qt5::${TargetName} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
-
- !!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5Gui_install_prefix}/$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
-+ set(imported_location \"$$NIX_OUTPUT_OUT/$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
- !!ELSE
- set(imported_location \"$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
- !!ENDIF
-
- !!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-- set(imported_implib \"${_qt5Gui_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
-+ set(imported_implib \"$$NIX_OUTPUT_OUT/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
- !!ELSE
- set(imported_implib \"$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
- !!ENDIF
-diff --git a/src/network/kernel/qdnslookup_unix.cpp b/src/network/kernel/qdnslookup_unix.cpp
-index 584f0b0f0e..24d80063f2 100644
---- a/src/network/kernel/qdnslookup_unix.cpp
-+++ b/src/network/kernel/qdnslookup_unix.cpp
-@@ -83,7 +83,7 @@ static bool resolveLibraryInternal()
- if (!lib.load())
- #endif
- {
-- lib.setFileName(QLatin1String("resolv"));
-+ lib.setFileName(QLatin1String(NIXPKGS_LIBRESOLV));
- if (!lib.load())
- return false;
- }
-diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp
-index dabf1913cc..53bb867e07 100644
---- a/src/network/kernel/qhostinfo_unix.cpp
-+++ b/src/network/kernel/qhostinfo_unix.cpp
-@@ -94,7 +94,7 @@ static bool resolveLibraryInternal()
- if (!lib.load())
- #endif
- {
-- lib.setFileName(QLatin1String("resolv"));
-+ lib.setFileName(QLatin1String(NIXPKGS_LIBRESOLV));
- if (!lib.load())
- return false;
- }
-diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp
-index 68caaeb6dc..fef4a81474 100644
---- a/src/network/ssl/qsslcontext_openssl.cpp
-+++ b/src/network/ssl/qsslcontext_openssl.cpp
-@@ -340,7 +340,7 @@ init_context:
-
- const QVector qcurves = sslContext->sslConfiguration.ellipticCurves();
- if (!qcurves.isEmpty()) {
--#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
-+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && defined(SSL_CTRL_SET_CURVES) && !defined(OPENSSL_NO_EC)
- // Set the curves to be used
- if (q_SSLeay() >= 0x10002000L) {
- // SSL_CTX_ctrl wants a non-const pointer as last argument,
-@@ -354,7 +354,7 @@ init_context:
- return sslContext;
- }
- } else
--#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
-+#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && defined(SSL_CTRL_SET_CURVES) && !defined(OPENSSL_NO_EC)
- {
- // specific curves requested, but not possible to set -> error
- sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocket::tr("OpenSSL version too old, need at least v1.0.2"));
-diff --git a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
-index 338c7ca3be..dd52114bac 100644
---- a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
-+++ b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
-@@ -251,12 +251,9 @@ void TableGenerator::initPossibleLocations()
- // the QTCOMPOSE environment variable
- if (qEnvironmentVariableIsSet("QTCOMPOSE"))
- m_possibleLocations.append(QString::fromLocal8Bit(qgetenv("QTCOMPOSE")));
-- m_possibleLocations.append(QStringLiteral("/usr/share/X11/locale"));
-- m_possibleLocations.append(QStringLiteral("/usr/local/share/X11/locale"));
-- m_possibleLocations.append(QStringLiteral("/usr/lib/X11/locale"));
-- m_possibleLocations.append(QStringLiteral("/usr/local/lib/X11/locale"));
- m_possibleLocations.append(QStringLiteral(X11_PREFIX "/share/X11/locale"));
- m_possibleLocations.append(QStringLiteral(X11_PREFIX "/lib/X11/locale"));
-+ m_possibleLocations.append(QLatin1String(NIXPKGS_QTCOMPOSE));
- }
-
- QString TableGenerator::findComposeFile()
-diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
-index c2b7a562a9..4fa5f6d6a5 100644
---- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
-+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
-@@ -570,7 +570,14 @@ void (*QGLXContext::getProcAddress(const QByteArray &procName)) ()
- #ifndef QT_NO_LIBRARY
- extern const QString qt_gl_library_name();
- // QLibrary lib(qt_gl_library_name());
-+ // Check system library paths first
- QLibrary lib(QLatin1String("GL"));
-+#ifdef NIXPKGS_MESA_GL
-+ if (!lib.load()) {
-+ // Fallback to Mesa driver
-+ lib.setFileName(QLatin1String(NIXPKGS_MESA_GL));
-+ }
-+#endif // NIXPKGS_MESA_GL
- glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB");
- #endif
- }
-diff --git a/src/plugins/platforms/xcb/qxcbcursor.cpp b/src/plugins/platforms/xcb/qxcbcursor.cpp
-index 4646ced954..ff3111f393 100644
---- a/src/plugins/platforms/xcb/qxcbcursor.cpp
-+++ b/src/plugins/platforms/xcb/qxcbcursor.cpp
-@@ -303,10 +303,10 @@ QXcbCursor::QXcbCursor(QXcbConnection *conn, QXcbScreen *screen)
- #if defined(XCB_USE_XLIB) && !defined(QT_NO_LIBRARY)
- static bool function_ptrs_not_initialized = true;
- if (function_ptrs_not_initialized) {
-- QLibrary xcursorLib(QLatin1String("Xcursor"), 1);
-+ QLibrary xcursorLib(QLatin1String(NIXPKGS_LIBXCURSOR), 1);
- bool xcursorFound = xcursorLib.load();
- if (!xcursorFound) { // try without the version number
-- xcursorLib.setFileName(QLatin1String("Xcursor"));
-+ xcursorLib.setFileName(QLatin1String(NIXPKGS_LIBXCURSOR));
- xcursorFound = xcursorLib.load();
- }
- if (xcursorFound) {
-diff --git a/src/testlib/qtestassert.h b/src/testlib/qtestassert.h
-index ca3e02ca06..28dd73d772 100644
---- a/src/testlib/qtestassert.h
-+++ b/src/testlib/qtestassert.h
-@@ -38,10 +38,13 @@
-
- QT_BEGIN_NAMESPACE
-
--
--#define QTEST_ASSERT(cond) do { if (!(cond)) qt_assert(#cond,__FILE__,__LINE__); } while (0)
--
--#define QTEST_ASSERT_X(cond, where, what) do { if (!(cond)) qt_assert_x(where, what,__FILE__,__LINE__); } while (0)
-+#if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
-+#define QTEST_ASSERT(cond) do { } while ((false) && (cond))
-+#define QTEST_ASSERT_X(cond, where, what) do { } while ((false) && (cond))
-+#else
-+#define QTEST_ASSERT(cond) do { if (!(cond)) qt_assert(#cond,__FILE__,__LINE__); } while (false)
-+#define QTEST_ASSERT_X(cond, where, what) do { if (!(cond)) qt_assert_x(where, what,__FILE__,__LINE__); } while (false)
-+#endif
-
- QT_END_NAMESPACE
-
-diff --git a/src/widgets/Qt5WidgetsConfigExtras.cmake.in b/src/widgets/Qt5WidgetsConfigExtras.cmake.in
-index 99d87e2e46..a4eab2aa72 100644
---- a/src/widgets/Qt5WidgetsConfigExtras.cmake.in
-+++ b/src/widgets/Qt5WidgetsConfigExtras.cmake.in
-@@ -3,7 +3,7 @@ if (NOT TARGET Qt5::uic)
- add_executable(Qt5::uic IMPORTED)
-
- !!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5Widgets_install_prefix}/$${CMAKE_BIN_DIR}uic$$CMAKE_BIN_SUFFIX\")
-+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_BIN_DIR}uic$$CMAKE_BIN_SUFFIX\")
- !!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}uic$$CMAKE_BIN_SUFFIX\")
- !!ENDIF
diff --git a/pkgs/development/libraries/qt-5/5.6/qtdeclarative.patch b/pkgs/development/libraries/qt-5/5.6/qtdeclarative.patch
deleted file mode 100644
index dbddaa2a1d60..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/qtdeclarative.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp
-index dfdf2edbe..7ee96049d 100644
---- a/src/qml/qml/qqmlimport.cpp
-+++ b/src/qml/qml/qqmlimport.cpp
-@@ -1568,6 +1568,15 @@ QQmlImportDatabase::QQmlImportDatabase(QQmlEngine *e)
- QString installImportsPath = QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath);
- addImportPath(installImportsPath);
-
-+ // Add import paths derived from PATH
-+ const QStringList paths = QFile::decodeName(qgetenv("PATH")).split(':');
-+ const QString qmldir = QStringLiteral("../" NIXPKGS_QML2_IMPORT_PREFIX);
-+ for (const QString &path: paths) {
-+ if (!path.isEmpty()) {
-+ addImportPath(QDir::cleanPath(path + QDir::separator() + qmldir));
-+ }
-+ }
-+
- // env import paths
- if (Q_UNLIKELY(!qEnvironmentVariableIsEmpty("QML2_IMPORT_PATH"))) {
- const QByteArray envImportPath = qgetenv("QML2_IMPORT_PATH");
diff --git a/pkgs/development/libraries/qt-5/5.6/qtscript.patch b/pkgs/development/libraries/qt-5/5.6/qtscript.patch
deleted file mode 100644
index 5508dec1280e..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/qtscript.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h
-index 1f6d25e..087c3fb 100644
---- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h
-+++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.h
-@@ -81,7 +81,7 @@
- #include
- #elif PLATFORM(GTK)
- #include
--typedef struct _GMutex GMutex;
-+typedef union _GMutex GMutex;
- typedef struct _GCond GCond;
- #endif
-
diff --git a/pkgs/development/libraries/qt-5/5.6/qtserialport.patch b/pkgs/development/libraries/qt-5/5.6/qtserialport.patch
deleted file mode 100644
index b2cffbe4f39b..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/qtserialport.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/src/serialport/qtudev_p.h b/src/serialport/qtudev_p.h
-index 6f2cabd..cd3c0ed 100644
---- a/src/serialport/qtudev_p.h
-+++ b/src/serialport/qtudev_p.h
-@@ -105,9 +105,17 @@ inline QFunctionPointer resolveSymbol(QLibrary *udevLibrary, const char *symbolN
- inline bool resolveSymbols(QLibrary *udevLibrary)
- {
- if (!udevLibrary->isLoaded()) {
-+#ifdef NIXPKGS_LIBUDEV
-+ udevLibrary->setFileNameAndVersion(QLatin1String(NIXPKGS_LIBUDEV), 1);
-+#else
- udevLibrary->setFileNameAndVersion(QStringLiteral("udev"), 1);
-+#endif
- if (!udevLibrary->load()) {
-+#ifdef NIXPKGS_LIBUDEV
-+ udevLibrary->setFileNameAndVersion(QLatin1String(NIXPKGS_LIBUDEV), 0);
-+#else
- udevLibrary->setFileNameAndVersion(QStringLiteral("udev"), 0);
-+#endif
- if (!udevLibrary->load()) {
- qWarning("Failed to load the library: %s, supported version(s): %i and %i", qPrintable(udevLibrary->fileName()), 1, 0);
- return false;
diff --git a/pkgs/development/libraries/qt-5/5.6/qttools.patch b/pkgs/development/libraries/qt-5/5.6/qttools.patch
deleted file mode 100644
index dcb15e0e55a6..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/qttools.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-diff --git a/src/assistant/help/Qt5HelpConfigExtras.cmake.in b/src/assistant/help/Qt5HelpConfigExtras.cmake.in
-index 5a5bd5ce..1c6727d4 100644
---- a/src/assistant/help/Qt5HelpConfigExtras.cmake.in
-+++ b/src/assistant/help/Qt5HelpConfigExtras.cmake.in
-@@ -2,14 +2,13 @@
- if (NOT TARGET Qt5::qcollectiongenerator)
- add_executable(Qt5::qcollectiongenerator IMPORTED)
-
--!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5Help_install_prefix}/$${CMAKE_BIN_DIR}qcollectiongenerator$$CMAKE_BIN_SUFFIX\")
--!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}qcollectiongenerator$$CMAKE_BIN_SUFFIX\")
--!!ENDIF
-+ if(NOT EXISTS \"${imported_location}\")
-+ set(imported_location \"$${CMAKE_BIN_DIR}qcollectiongenerator$$CMAKE_BIN_SUFFIX\")
-+ endif()
- _qt5_Help_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::qcollectiongenerator PROPERTIES
- IMPORTED_LOCATION ${imported_location}
- )
--endif()
-+endif()
-\ No newline at end of file
-diff --git a/src/linguist/Qt5LinguistToolsConfig.cmake.in b/src/linguist/Qt5LinguistToolsConfig.cmake.in
-index 4318b16f..d60db4ff 100644
---- a/src/linguist/Qt5LinguistToolsConfig.cmake.in
-+++ b/src/linguist/Qt5LinguistToolsConfig.cmake.in
-@@ -44,11 +44,7 @@ endmacro()
- if (NOT TARGET Qt5::lrelease)
- add_executable(Qt5::lrelease IMPORTED)
-
--!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5_linguisttools_install_prefix}/$${CMAKE_BIN_DIR}lrelease$$CMAKE_BIN_SUFFIX\")
--!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}lrelease$$CMAKE_BIN_SUFFIX\")
--!!ENDIF
- _qt5_LinguistTools_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::lrelease PROPERTIES
-@@ -59,11 +55,7 @@ endif()
- if (NOT TARGET Qt5::lupdate)
- add_executable(Qt5::lupdate IMPORTED)
-
--!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5_linguisttools_install_prefix}/$${CMAKE_BIN_DIR}lupdate$$CMAKE_BIN_SUFFIX\")
--!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}lupdate$$CMAKE_BIN_SUFFIX\")
--!!ENDIF
- _qt5_LinguistTools_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::lupdate PROPERTIES
-@@ -74,11 +66,7 @@ endif()
- if (NOT TARGET Qt5::lconvert)
- add_executable(Qt5::lconvert IMPORTED)
-
--!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
-- set(imported_location \"${_qt5_linguisttools_install_prefix}/$${CMAKE_BIN_DIR}lconvert$$CMAKE_BIN_SUFFIX\")
--!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}lconvert$$CMAKE_BIN_SUFFIX\")
--!!ENDIF
- _qt5_LinguistTools_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::lconvert PROPERTIES
diff --git a/pkgs/development/libraries/qt-5/5.6/qtwebengine-seccomp.patch b/pkgs/development/libraries/qt-5/5.6/qtwebengine-seccomp.patch
deleted file mode 100644
index bf6af8059823..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/qtwebengine-seccomp.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Backported to Qt 5.6 for epoll_pwait fix on newer glibc
-Part of upstream Chromium's 4e8083b4ab953ba298aedfc4e79d464be15e4012
-Review URL: https://codereview.chromium.org/1613883002
----
-diff --git a/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc b/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
-index 10278dc5fc9b..b30b3e6acef6 100644
---- a/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
-+++ b/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
-@@ -414,6 +414,7 @@ bool SyscallSets::IsAllowedEpoll(int sysno) {
- case __NR_epoll_create:
- case __NR_epoll_wait:
- #endif
-+ case __NR_epoll_pwait:
- case __NR_epoll_create1:
- case __NR_epoll_ctl:
- return true;
-@@ -421,7 +422,6 @@ bool SyscallSets::IsAllowedEpoll(int sysno) {
- #if defined(__x86_64__)
- case __NR_epoll_ctl_old:
- #endif
-- case __NR_epoll_pwait:
- #if defined(__x86_64__)
- case __NR_epoll_wait_old:
- #endif
diff --git a/pkgs/development/libraries/qt-5/5.6/qtwebkit.patch b/pkgs/development/libraries/qt-5/5.6/qtwebkit.patch
deleted file mode 100644
index da1658554e44..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/qtwebkit.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-diff --git a/Source/JavaScriptCore/API/JSStringRef.cpp b/Source/JavaScriptCore/API/JSStringRef.cpp
-index 812f3d413..77a3fd0f4 100644
---- a/Source/JavaScriptCore/API/JSStringRef.cpp
-+++ b/Source/JavaScriptCore/API/JSStringRef.cpp
-@@ -37,7 +37,7 @@ using namespace WTF::Unicode;
- JSStringRef JSStringCreateWithCharacters(const JSChar* chars, size_t numChars)
- {
- initializeThreading();
-- return OpaqueJSString::create(chars, numChars).leakRef();
-+ return OpaqueJSString::create(reinterpret_cast(chars), numChars).leakRef();
- }
-
- JSStringRef JSStringCreateWithUTF8CString(const char* string)
-@@ -62,7 +62,7 @@ JSStringRef JSStringCreateWithUTF8CString(const char* string)
- JSStringRef JSStringCreateWithCharactersNoCopy(const JSChar* chars, size_t numChars)
- {
- initializeThreading();
-- return OpaqueJSString::create(StringImpl::createWithoutCopying(chars, numChars, WTF::DoesNotHaveTerminatingNullCharacter)).leakRef();
-+ return OpaqueJSString::create(StringImpl::createWithoutCopying(reinterpret_cast(chars), numChars, WTF::DoesNotHaveTerminatingNullCharacter)).leakRef();
- }
-
- JSStringRef JSStringRetain(JSStringRef string)
-@@ -83,7 +83,7 @@ size_t JSStringGetLength(JSStringRef string)
-
- const JSChar* JSStringGetCharactersPtr(JSStringRef string)
- {
-- return string->characters();
-+ return reinterpret_cast(string->characters());
- }
-
- size_t JSStringGetMaximumUTF8CStringSize(JSStringRef string)
-diff --git a/Source/JavaScriptCore/runtime/DateConversion.cpp b/Source/JavaScriptCore/runtime/DateConversion.cpp
-index 0b57f012d..05e27338b 100644
---- a/Source/JavaScriptCore/runtime/DateConversion.cpp
-+++ b/Source/JavaScriptCore/runtime/DateConversion.cpp
-@@ -107,7 +107,8 @@ String formatDateTime(const GregorianDateTime& t, DateTimeFormat format, bool as
- #if OS(WINDOWS)
- TIME_ZONE_INFORMATION timeZoneInformation;
- GetTimeZoneInformation(&timeZoneInformation);
-- const WCHAR* timeZoneName = t.isDST() ? timeZoneInformation.DaylightName : timeZoneInformation.StandardName;
-+ const WCHAR* winTimeZoneName = t.isDST() ? timeZoneInformation.DaylightName : timeZoneInformation.StandardName;
-+ String timeZoneName(reinterpret_cast(winTimeZoneName));
- #else
- struct tm gtm = t;
- char timeZoneName[70];
-diff --git a/Source/WTF/WTF.pri b/Source/WTF/WTF.pri
-index 1f4866d66..bb61e4ba3 100644
---- a/Source/WTF/WTF.pri
-+++ b/Source/WTF/WTF.pri
-@@ -12,7 +12,7 @@ mac {
- # Mac OS does ship libicu but not the associated header files.
- # Therefore WebKit provides adequate header files.
- INCLUDEPATH = $${ROOT_WEBKIT_DIR}/Source/WTF/icu $$INCLUDEPATH
-- LIBS += -licucore
-+ LIBS += /usr/lib/libicucore.dylib
- } else:!use?(wchar_unicode): {
- win32 {
- CONFIG(static, static|shared) {
-diff --git a/Source/WTF/wtf/TypeTraits.h b/Source/WTF/wtf/TypeTraits.h
-index 9df2c95cf..f5d6121fd 100644
---- a/Source/WTF/wtf/TypeTraits.h
-+++ b/Source/WTF/wtf/TypeTraits.h
-@@ -72,6 +72,9 @@ namespace WTF {
- template<> struct IsInteger { static const bool value = true; };
- template<> struct IsInteger { static const bool value = true; };
- template<> struct IsInteger { static const bool value = true; };
-+#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) || (defined(_HAS_CHAR16_T_LANGUAGE_SUPPORT) && _HAS_CHAR16_T_LANGUAGE_SUPPORT)
-+ template<> struct IsInteger { static const bool value = true; };
-+#endif
- #if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED)
- template<> struct IsInteger { static const bool value = true; };
- #endif
-diff --git a/Source/WebCore/plugins/qt/PluginPackageQt.cpp b/Source/WebCore/plugins/qt/PluginPackageQt.cpp
-index a923d49aa..46772a4bb 100644
---- a/Source/WebCore/plugins/qt/PluginPackageQt.cpp
-+++ b/Source/WebCore/plugins/qt/PluginPackageQt.cpp
-@@ -136,7 +136,11 @@ static void initializeGtk(QLibrary* module = 0)
- }
- }
-
-+#ifdef NIXPKGS_LIBGTK2
-+ QLibrary library(QLatin1String(NIXPKGS_LIBGTK2), 0);
-+#else
- QLibrary library(QLatin1String("libgtk-x11-2.0"), 0);
-+#endif
- if (library.load()) {
- typedef void *(*gtk_init_check_ptr)(int*, char***);
- gtk_init_check_ptr gtkInitCheck = (gtk_init_check_ptr)library.resolve("gtk_init_check");
-diff --git a/Source/WebCore/plugins/qt/PluginViewQt.cpp b/Source/WebCore/plugins/qt/PluginViewQt.cpp
-index de06a2fea..86fe39ef1 100644
---- a/Source/WebCore/plugins/qt/PluginViewQt.cpp
-+++ b/Source/WebCore/plugins/qt/PluginViewQt.cpp
-@@ -697,7 +697,11 @@ static Display *getPluginDisplay()
- // support gdk based plugins (like flash) that use a different X connection.
- // The code below has the same effect as this one:
- // Display *gdkDisplay = gdk_x11_display_get_xdisplay(gdk_display_get_default());
-+#ifdef NIXPKGS_LIBGDK2
-+ QLibrary library(QLatin1String(NIXPKGS_LIBGDK2), 0);
-+#else
- QLibrary library(QLatin1String("libgdk-x11-2.0"), 0);
-+#endif
- if (!library.load())
- return 0;
-
-diff --git a/Source/WebKit2/PluginProcess/qt/PluginProcessMainQt.cpp b/Source/WebKit2/PluginProcess/qt/PluginProcessMainQt.cpp
-index 8de65216b..38f5c05e5 100644
---- a/Source/WebKit2/PluginProcess/qt/PluginProcessMainQt.cpp
-+++ b/Source/WebKit2/PluginProcess/qt/PluginProcessMainQt.cpp
-@@ -53,7 +53,11 @@ static void messageHandler(QtMsgType type, const QMessageLogContext&, const QStr
-
- static bool initializeGtk()
- {
-+#ifdef NIXPKGS_LIBGTK2
-+ QLibrary gtkLibrary(QLatin1String(NIXPKGS_LIBGTK2), 0);
-+#else
- QLibrary gtkLibrary(QLatin1String("libgtk-x11-2.0"), 0);
-+#endif
- if (!gtkLibrary.load())
- return false;
- typedef void* (*gtk_init_ptr)(void*, void*);
-diff --git a/Source/WebKit2/Shared/API/c/WKString.cpp b/Source/WebKit2/Shared/API/c/WKString.cpp
-index cbac67dd8..23400a64e 100644
---- a/Source/WebKit2/Shared/API/c/WKString.cpp
-+++ b/Source/WebKit2/Shared/API/c/WKString.cpp
-@@ -55,7 +55,7 @@ size_t WKStringGetLength(WKStringRef stringRef)
- size_t WKStringGetCharacters(WKStringRef stringRef, WKChar* buffer, size_t bufferLength)
- {
- COMPILE_ASSERT(sizeof(WKChar) == sizeof(UChar), WKStringGetCharacters_sizeof_WKChar_matches_UChar);
-- return (toImpl(stringRef)->getCharacters(static_cast(buffer), bufferLength));
-+ return (toImpl(stringRef)->getCharacters(reinterpret_cast(buffer), bufferLength));
- }
-
- size_t WKStringGetMaximumUTF8CStringSize(WKStringRef stringRef)
-diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
-index d734ff684..0f6ff63d1 100644
---- a/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
-+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
-@@ -64,7 +64,11 @@ static Display* getPluginDisplay()
- // The code below has the same effect as this one:
- // Display *gdkDisplay = gdk_x11_display_get_xdisplay(gdk_display_get_default());
-
-+#ifdef NIXPKGS_LIBGDK2
-+ QLibrary library(QLatin1String(NIXPKGS_LIBGDK2), 0);
-+#else
- QLibrary library(QLatin1String("libgdk-x11-2.0"), 0);
-+#endif
- if (!library.load())
- return 0;
-
diff --git a/pkgs/development/libraries/qt-5/5.6/srcs.nix b/pkgs/development/libraries/qt-5/5.6/srcs.nix
deleted file mode 100644
index 87d35a43d86b..000000000000
--- a/pkgs/development/libraries/qt-5/5.6/srcs.nix
+++ /dev/null
@@ -1,309 +0,0 @@
-# DO NOT EDIT! This file is generated automatically by fetch-kde-qt.sh
-{ fetchurl, mirror }:
-
-{
- qt3d = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qt3d-opensource-src-5.6.3.tar.xz";
- sha256 = "1zkzc3wh2i89nacb55mbgl09zhrjbrxg9ir626bsvz15x4q5ml0h";
- name = "qt3d-opensource-src-5.6.3.tar.xz";
- };
- };
- qtactiveqt = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtactiveqt-opensource-src-5.6.3.tar.xz";
- sha256 = "00qscqjpkv5ssrjdwwcjp9q1rqgp8lsdjjksjpyyg4v6knd74s0i";
- name = "qtactiveqt-opensource-src-5.6.3.tar.xz";
- };
- };
- qtandroidextras = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtandroidextras-opensource-src-5.6.3.tar.xz";
- sha256 = "1v19p1pqcdicylj3hd2lbm5swqddydlv9aqmws3qwsc2vwh15d4n";
- name = "qtandroidextras-opensource-src-5.6.3.tar.xz";
- };
- };
- qtbase = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtbase-opensource-src-5.6.3.tar.xz";
- sha256 = "18ad7cxln61276cm8h8hzm0y6svw6b5m5nbm1niif9pwlqlqbx7y";
- name = "qtbase-opensource-src-5.6.3.tar.xz";
- };
- };
- qtcanvas3d = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtcanvas3d-opensource-src-5.6.3.tar.xz";
- sha256 = "1zsn3xbsqapivfg80cldjlh7z07nf88958a7g6dm7figkwahx7p9";
- name = "qtcanvas3d-opensource-src-5.6.3.tar.xz";
- };
- };
- qtcharts = {
- version = "2.1.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtcharts-opensource-src-2.1.3.tar.xz";
- sha256 = "0bvxmqx7094mq1svrv1i1jp6vl87r2mp7k9n3gqpixjmqaqsjdpn";
- name = "qtcharts-opensource-src-2.1.3.tar.xz";
- };
- };
- qtconnectivity = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtconnectivity-opensource-src-5.6.3.tar.xz";
- sha256 = "1pnc0zmps5iw5yhn2w0wl8cnyxhcy88d3rnaiv62ljpsccynwh7s";
- name = "qtconnectivity-opensource-src-5.6.3.tar.xz";
- };
- };
- qtdatavis3d = {
- version = "1.2.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtdatavis3d-opensource-src-1.2.3.tar.xz";
- sha256 = "0rqhr6s3fic91r6r1g2ws57j6ixvkh4zhcwh7savs1risx374vya";
- name = "qtdatavis3d-opensource-src-1.2.3.tar.xz";
- };
- };
- qtdeclarative = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtdeclarative-opensource-src-5.6.3.tar.xz";
- sha256 = "1z4ih5jbydnk5dz0arhvwc54fjw7fynqx3rhm6f8lsyis19w0gzn";
- name = "qtdeclarative-opensource-src-5.6.3.tar.xz";
- };
- };
- qtdeclarative-render2d = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtdeclarative-render2d-opensource-src-5.6.3.tar.xz";
- sha256 = "0r2qn8l3wh73cj75rq34zmc6rgl7v11c31pjdcsybad76nw5wb2p";
- name = "qtdeclarative-render2d-opensource-src-5.6.3.tar.xz";
- };
- };
- qtdoc = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtdoc-opensource-src-5.6.3.tar.xz";
- sha256 = "11zhlry8hlql1q3pm4mf7qyky9i2irxqdrr9nr5m93wjyfsjbh7f";
- name = "qtdoc-opensource-src-5.6.3.tar.xz";
- };
- };
- qtenginio = {
- version = "1.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtenginio-opensource-src-1.6.3.tar.xz";
- sha256 = "04ir5pa8wpkc7cq08s0b69a0vhkr7479ixn3m2vww4jm6l5hc1yr";
- name = "qtenginio-opensource-src-1.6.3.tar.xz";
- };
- };
- qtgraphicaleffects = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtgraphicaleffects-opensource-src-5.6.3.tar.xz";
- sha256 = "1vcrm4jfmxjlw23dnwf45mzq2z5s4fz6j2znknr25ca5bqnmjhn7";
- name = "qtgraphicaleffects-opensource-src-5.6.3.tar.xz";
- };
- };
- qtimageformats = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtimageformats-opensource-src-5.6.3.tar.xz";
- sha256 = "1hs8b258xsbc4xb4844mas9ka54f5cfhhszblawwjxn9j0ydmr7g";
- name = "qtimageformats-opensource-src-5.6.3.tar.xz";
- };
- };
- qtlocation = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtlocation-opensource-src-5.6.3.tar.xz";
- sha256 = "0rhlmyi5kkhl1bimaj1fmp36v7x5r79j3flgx9dv27rkric1ra5p";
- name = "qtlocation-opensource-src-5.6.3.tar.xz";
- };
- };
- qtmacextras = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtmacextras-opensource-src-5.6.3.tar.xz";
- sha256 = "10v2a058yv6k76gg9dgpy4fc0xd652dknzsw5432gm8d9391382i";
- name = "qtmacextras-opensource-src-5.6.3.tar.xz";
- };
- };
- qtmultimedia = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtmultimedia-opensource-src-5.6.3.tar.xz";
- sha256 = "0ihvbv0ldravbrx6406ps0z8y6521iz6h58n5ws44xq3m2g06dmf";
- name = "qtmultimedia-opensource-src-5.6.3.tar.xz";
- };
- };
- qtpurchasing = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtpurchasing-opensource-src-5.6.3.tar.xz";
- sha256 = "0lf269jzd6y4x5bxjwgz9dpw7hxmc6sp39qpxwlswd505cf0wgd7";
- name = "qtpurchasing-opensource-src-5.6.3.tar.xz";
- };
- };
- qtquickcontrols = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtquickcontrols-opensource-src-5.6.3.tar.xz";
- sha256 = "13nvn0d2i4lf4igc1xqf7m98n4j66az1bi02zzv5m18vyb40zfri";
- name = "qtquickcontrols-opensource-src-5.6.3.tar.xz";
- };
- };
- qtquickcontrols2 = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtquickcontrols2-opensource-src-5.6.3.tar.xz";
- sha256 = "1jw1zykrx8aa9p781hc74h9za7lnnm4ifpdyqa4ahbdy193phl7c";
- name = "qtquickcontrols2-opensource-src-5.6.3.tar.xz";
- };
- };
- qtscript = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtscript-opensource-src-5.6.3.tar.xz";
- sha256 = "12dkf2s1l9y9cwdyayg2mpnwvx14kq93pymp3iy3fw1s1vfj11zh";
- name = "qtscript-opensource-src-5.6.3.tar.xz";
- };
- };
- qtsensors = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtsensors-opensource-src-5.6.3.tar.xz";
- sha256 = "0ws96fmk5zz9szrw9x1dwa6gnv9rpv1q0h9ax9z5m1kiapfd80km";
- name = "qtsensors-opensource-src-5.6.3.tar.xz";
- };
- };
- qtserialbus = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtserialbus-opensource-src-5.6.3.tar.xz";
- sha256 = "17lskz4r549hc02riv0a3jdjbyaq4y4a94xd3jhy454lhzirpj3i";
- name = "qtserialbus-opensource-src-5.6.3.tar.xz";
- };
- };
- qtserialport = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtserialport-opensource-src-5.6.3.tar.xz";
- sha256 = "06mfkd88rcn4p8pfzsyqbfg956vwwcql0khchjgx3bh34zp1yb88";
- name = "qtserialport-opensource-src-5.6.3.tar.xz";
- };
- };
- qtsvg = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtsvg-opensource-src-5.6.3.tar.xz";
- sha256 = "1v6wz8fcgsh4lfv68bhavms0l1z3mcn8vggakc3m8rdl2wsih3qh";
- name = "qtsvg-opensource-src-5.6.3.tar.xz";
- };
- };
- qttools = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qttools-opensource-src-5.6.3.tar.xz";
- sha256 = "09krlrgcglylsv7xx4r681v7zmyy6nr8j18482skrmsqh21vlqqs";
- name = "qttools-opensource-src-5.6.3.tar.xz";
- };
- };
- qttranslations = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qttranslations-opensource-src-5.6.3.tar.xz";
- sha256 = "1avcfymi9bxk02i1rqh89c6hnvf4bg9qry94z29g1r62c80lxvbd";
- name = "qttranslations-opensource-src-5.6.3.tar.xz";
- };
- };
- qtvirtualkeyboard = {
- version = "2.0";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtvirtualkeyboard-opensource-src-2.0.tar.xz";
- sha256 = "1v0saqz76h9gnb13b8mri4jq93i7f1gr7hj81zj3vz433s2klm0x";
- name = "qtvirtualkeyboard-opensource-src-2.0.tar.xz";
- };
- };
- qtwayland = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtwayland-opensource-src-5.6.3.tar.xz";
- sha256 = "18ys14fzjybx02aj85vyqzsp89ypv2c6vfpklxzslwyvn9w54iss";
- name = "qtwayland-opensource-src-5.6.3.tar.xz";
- };
- };
- qtwebchannel = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtwebchannel-opensource-src-5.6.3.tar.xz";
- sha256 = "04q7wmdnv4pskah2s5nnrzbsb207fvkj333m69wkqrc64anb1ccf";
- name = "qtwebchannel-opensource-src-5.6.3.tar.xz";
- };
- };
- qtwebengine = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtwebengine-opensource-src-5.6.3.tar.xz";
- sha256 = "19xpvnjwrjpj6wx7sy1cs1r1ibnh5hqfk9w9rnqf5h7n77xnk780";
- name = "qtwebengine-opensource-src-5.6.3.tar.xz";
- };
- };
- qtwebkit = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/community_releases/5.6/5.6.3/qtwebkit-opensource-src-5.6.3.tar.xz";
- sha256 = "15iqgaw3jznfq1mdg1mmr7pn8w3qhw964h5m36vg3ywqayr6p309";
- name = "qtwebkit-opensource-src-5.6.3.tar.xz";
- };
- };
- qtwebkit-examples = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/community_releases/5.6/5.6.3/qtwebkit-examples-opensource-src-5.6.3.tar.xz";
- sha256 = "17hnls8j4wz0kyzzq7m3105lqz71zsxr0hya7i23pl4qc8affv1d";
- name = "qtwebkit-examples-opensource-src-5.6.3.tar.xz";
- };
- };
- qtwebsockets = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtwebsockets-opensource-src-5.6.3.tar.xz";
- sha256 = "1sr8q0wqw4xwcdl6nvnv04pcjxb0fbs4ywrkcghdz2bcc52r0hx2";
- name = "qtwebsockets-opensource-src-5.6.3.tar.xz";
- };
- };
- qtwebview = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtwebview-opensource-src-5.6.3.tar.xz";
- sha256 = "076q9g2ca41v8lyhn7354rs8w2ca0wp2hsxc76zprzghi5p4b2kn";
- name = "qtwebview-opensource-src-5.6.3.tar.xz";
- };
- };
- qtwinextras = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtwinextras-opensource-src-5.6.3.tar.xz";
- sha256 = "0nmhvd1g18w12q6i8s87aq7rwikcn1m8m9m0a02l3p22xvimkxzf";
- name = "qtwinextras-opensource-src-5.6.3.tar.xz";
- };
- };
- qtx11extras = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtx11extras-opensource-src-5.6.3.tar.xz";
- sha256 = "0zv70z5z48wlg0q2zd7nbp7i0wimdcalns6yg0mjp7v2w2b8wyhy";
- name = "qtx11extras-opensource-src-5.6.3.tar.xz";
- };
- };
- qtxmlpatterns = {
- version = "5.6.3";
- src = fetchurl {
- url = "${mirror}/official_releases/qt/5.6/5.6.3/submodules/qtxmlpatterns-opensource-src-5.6.3.tar.xz";
- sha256 = "1xjimf88j2s5jrqgr9ki82zmis8r979rrzq4k6dxw43k1ngzyqd4";
- name = "qtxmlpatterns-opensource-src-5.6.3.tar.xz";
- };
- };
-}
diff --git a/pkgs/development/libraries/qt-5/5.9/default.nix b/pkgs/development/libraries/qt-5/5.9/default.nix
index 52c763263b53..b27c5d3eb58c 100644
--- a/pkgs/development/libraries/qt-5/5.9/default.nix
+++ b/pkgs/development/libraries/qt-5/5.9/default.nix
@@ -36,7 +36,11 @@ let
srcs = import ./srcs.nix { inherit fetchurl; inherit mirror; };
patches = {
- qtbase = [ ./qtbase.patch ./qtbase-fixguicmake.patch ];
+ qtbase = [
+ ./qtbase.patch
+ ./qtbase-fixguicmake.patch
+ ./qtbase-openssl_1_1.patch
+ ];
qtdeclarative = [ ./qtdeclarative.patch ];
qtscript = [ ./qtscript.patch ];
qtserialport = [ ./qtserialport.patch ];
diff --git a/pkgs/development/libraries/qt-5/5.9/qtbase-openssl_1_1.patch b/pkgs/development/libraries/qt-5/5.9/qtbase-openssl_1_1.patch
new file mode 100644
index 000000000000..d5f4d7527cb4
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.9/qtbase-openssl_1_1.patch
@@ -0,0 +1,3985 @@
+commit 2d88fc0ce4ac76924a65ffd797183de9422ba672
+Author: Andreas Rammhold
+Date: Wed Mar 6 00:18:51 2019 +0100
+
+ openssl1.1 compat
+
+diff --git a/config.tests/openssl/openssl.cpp b/config.tests/openssl/openssl.cpp
+index 6c8a9e8f19..d33b62389c 100644
+--- a/config.tests/openssl/openssl.cpp
++++ b/config.tests/openssl/openssl.cpp
+@@ -39,8 +39,8 @@
+
+ #include
+
+-#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x0090700fL || OPENSSL_VERSION_NUMBER-0 >= 0x10100000L
+-# error "OpenSSL >= 0.9.7, and < 1.1.0 is required"
++#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x0090700fL
++# error "OpenSSL >= 0.9.7 is required"
+ #endif
+
+ #include
+diff --git a/config.tests/openssl11/openssl.cpp b/config.tests/openssl11/openssl.cpp
+new file mode 100644
+index 0000000000..c20cc59deb
+--- /dev/null
++++ b/config.tests/openssl11/openssl.cpp
+@@ -0,0 +1,48 @@
++/****************************************************************************
++**
++** Copyright (C) 2017 The Qt Company Ltd.
++** Contact: https://www.qt.io/licensing/
++**
++** This file is part of the config.tests of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and The Qt Company. For licensing terms
++** and conditions see https://www.qt.io/terms-conditions. For further
++** information use the contact form at https://www.qt.io/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 3 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL3 included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU Lesser General Public License version 3 requirements
++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 2.0 or (at your option) the GNU General
++** Public license version 3 or any later version approved by the KDE Free
++** Qt Foundation. The licenses are as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
++** included in the packaging of this file. Please review the following
++** information to ensure the GNU General Public License requirements will
++** be met: https://www.gnu.org/licenses/gpl-2.0.html and
++** https://www.gnu.org/licenses/gpl-3.0.html.
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++#include
++
++#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10100000L
++# error "OpenSSL >= 1.1 is required"
++#endif
++
++int main()
++{
++}
+diff --git a/config.tests/openssl11/openssl11.pro b/config.tests/openssl11/openssl11.pro
+new file mode 100644
+index 0000000000..a023aee4aa
+--- /dev/null
++++ b/config.tests/openssl11/openssl11.pro
+@@ -0,0 +1,2 @@
++SOURCES = openssl.cpp
++CONFIG -= x11 qt
+diff --git a/src/network/configure.json b/src/network/configure.json
+index 2cf90ed94b..a021c0734b 100644
+--- a/src/network/configure.json
++++ b/src/network/configure.json
+@@ -77,6 +77,17 @@
+ },
+ { "libs": "-lssl -lcrypto", "condition": "!config.win32" }
+ ]
++ },
++ "openssl11": {
++ "label": "OpenSSL v. 1.1 support",
++ "type": "compile",
++ "test": "openssl11",
++ "sources": [
++ {
++ "comment": "placeholder for OPENSSL_PATH",
++ "libs": ""
++ }
++ ]
+ }
+ },
+
+@@ -182,7 +193,7 @@
+ "enable": "input.openssl == 'yes' || input.openssl == 'linked' || input.openssl == 'runtime'",
+ "disable": "input.openssl == 'no' || input.ssl == 'no'",
+ "autoDetect": "!config.winrt",
+- "condition": "!features.securetransport && (features.openssl-linked || libs.openssl_headers)",
++ "condition": "!features.securetransport && (features.openssl-linked || libs.openssl_headers || feature.opensslv11)",
+ "output": [
+ "privateFeature",
+ { "type": "publicQtConfig", "condition": "!features.openssl-linked" },
+@@ -193,7 +204,7 @@
+ "label": " Qt directly linked to OpenSSL",
+ "enable": "input.openssl == 'linked'",
+ "disable": "input.openssl != 'linked'",
+- "condition": "!features.securetransport && libs.openssl",
++ "condition": "!features.securetransport && (libs.openssl || feature.opensslv11)",
+ "output": [
+ "privateFeature",
+ { "type": "define", "name": "QT_LINKED_OPENSSL" }
+@@ -213,6 +224,11 @@
+ "condition": "config.winrt || features.securetransport || features.openssl",
+ "output": [ "publicFeature", "feature" ]
+ },
++ "opensslv11": {
++ "label": "OpenSSL v. 1.1",
++ "condition": "libs.openssl11",
++ "output": ["publicFeature", "feature"]
++ },
+ "sctp": {
+ "label": "SCTP",
+ "autoDetect": false,
+diff --git a/src/network/ssl/qsslcertificate_openssl.cpp b/src/network/ssl/qsslcertificate_openssl.cpp
+index 28b7eda54a..71e514a025 100644
+--- a/src/network/ssl/qsslcertificate_openssl.cpp
++++ b/src/network/ssl/qsslcertificate_openssl.cpp
+@@ -1,6 +1,7 @@
+ /****************************************************************************
+ **
+-** Copyright (C) 2016 The Qt Company Ltd.
++** Copyright (C) 2017 The Qt Company Ltd.
++** Copyright (C) 2016 Richard J. Moore
+ ** Contact: https://www.qt.io/licensing/
+ **
+ ** This file is part of the QtNetwork module of the Qt Toolkit.
+@@ -64,12 +65,14 @@ bool QSslCertificate::operator==(const QSslCertificate &other) const
+ uint qHash(const QSslCertificate &key, uint seed) Q_DECL_NOTHROW
+ {
+ if (X509 * const x509 = key.d->x509) {
+- (void)q_X509_cmp(x509, x509); // populate x509->sha1_hash
+- // (if someone knows a better way...)
+- return qHashBits(x509->sha1_hash, SHA_DIGEST_LENGTH, seed);
+- } else {
+- return seed;
++ const EVP_MD *sha1 = q_EVP_sha1();
++ unsigned int len = 0;
++ unsigned char md[EVP_MAX_MD_SIZE];
++ q_X509_digest(x509, sha1, md, &len);
++ return qHashBits(md, len, seed);
+ }
++
++ return seed;
+ }
+
+ bool QSslCertificate::isNull() const
+@@ -89,8 +92,7 @@ QByteArray QSslCertificate::version() const
+ {
+ QMutexLocker lock(QMutexPool::globalInstanceGet(d.data()));
+ if (d->versionString.isEmpty() && d->x509)
+- d->versionString =
+- QByteArray::number(qlonglong(q_ASN1_INTEGER_get(d->x509->cert_info->version)) + 1);
++ d->versionString = QByteArray::number(qlonglong(q_X509_get_version(d->x509)) + 1);
+
+ return d->versionString;
+ }
+@@ -99,7 +101,7 @@ QByteArray QSslCertificate::serialNumber() const
+ {
+ QMutexLocker lock(QMutexPool::globalInstanceGet(d.data()));
+ if (d->serialNumberString.isEmpty() && d->x509) {
+- ASN1_INTEGER *serialNumber = d->x509->cert_info->serialNumber;
++ ASN1_INTEGER *serialNumber = q_X509_get_serialNumber(d->x509);
+ QByteArray hexString;
+ hexString.reserve(serialNumber->length * 3);
+ for (int a = 0; a < serialNumber->length; ++a) {
+@@ -199,14 +201,15 @@ QMultiMap QSslCertificate::subjectAlter
+ continue;
+ }
+
+- const char *altNameStr = reinterpret_cast(q_ASN1_STRING_data(genName->d.ia5));
++ const char *altNameStr = reinterpret_cast(q_ASN1_STRING_get0_data(genName->d.ia5));
+ const QString altName = QString::fromLatin1(altNameStr, len);
+ if (genName->type == GEN_DNS)
+ result.insert(QSsl::DnsEntry, altName);
+ else if (genName->type == GEN_EMAIL)
+ result.insert(QSsl::EmailEntry, altName);
+ }
+- q_sk_pop_free((STACK*)altNames, reinterpret_cast(q_sk_free));
++
++ q_OPENSSL_sk_pop_free((OPENSSL_STACK*)altNames, reinterpret_cast(q_OPENSSL_sk_free));
+ }
+
+ return result;
+@@ -235,25 +238,26 @@ QSslKey QSslCertificate::publicKey() const
+ QSslKey key;
+
+ key.d->type = QSsl::PublicKey;
+- X509_PUBKEY *xkey = d->x509->cert_info->key;
+- EVP_PKEY *pkey = q_X509_PUBKEY_get(xkey);
++
++ EVP_PKEY *pkey = q_X509_get_pubkey(d->x509);
+ Q_ASSERT(pkey);
++ const int keyType = q_EVP_PKEY_type(q_EVP_PKEY_base_id(pkey));
+
+- if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_RSA) {
++ if (keyType == EVP_PKEY_RSA) {
+ key.d->rsa = q_EVP_PKEY_get1_RSA(pkey);
+ key.d->algorithm = QSsl::Rsa;
+ key.d->isNull = false;
+- } else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_DSA) {
++ } else if (keyType == EVP_PKEY_DSA) {
+ key.d->dsa = q_EVP_PKEY_get1_DSA(pkey);
+ key.d->algorithm = QSsl::Dsa;
+ key.d->isNull = false;
+ #ifndef OPENSSL_NO_EC
+- } else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_EC) {
++ } else if (keyType == EVP_PKEY_EC) {
+ key.d->ec = q_EVP_PKEY_get1_EC_KEY(pkey);
+ key.d->algorithm = QSsl::Ec;
+ key.d->isNull = false;
+ #endif
+- } else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_DH) {
++ } else if (keyType == EVP_PKEY_DH) {
+ // DH unsupported
+ } else {
+ // error?
+@@ -275,7 +279,7 @@ static QVariant x509UnknownExtensionToValue(X509_EXTENSION *ext)
+ X509V3_EXT_METHOD *meth = const_cast(q_X509V3_EXT_get(ext));
+ if (!meth) {
+ ASN1_OCTET_STRING *value = q_X509_EXTENSION_get_data(ext);
+- QByteArray result( reinterpret_cast(q_ASN1_STRING_data(value)),
++ QByteArray result( reinterpret_cast(q_ASN1_STRING_get0_data(value)),
+ q_ASN1_STRING_length(value));
+ return result;
+ }
+@@ -371,7 +375,7 @@ static QVariant x509ExtensionToValue(X509_EXTENSION *ext)
+ continue;
+ }
+
+- const char *uriStr = reinterpret_cast(q_ASN1_STRING_data(name->d.uniformResourceIdentifier));
++ const char *uriStr = reinterpret_cast(q_ASN1_STRING_get0_data(name->d.uniformResourceIdentifier));
+ const QString uri = QString::fromUtf8(uriStr, len);
+
+ result[QString::fromUtf8(QSslCertificatePrivate::asn1ObjectName(ad->method))] = uri;
+@@ -380,11 +384,7 @@ static QVariant x509ExtensionToValue(X509_EXTENSION *ext)
+ }
+ }
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+- q_sk_pop_free((_STACK*)info, reinterpret_cast(q_sk_free));
+-#else
+- q_sk_pop_free((STACK*)info, reinterpret_cast(q_sk_free));
+-#endif
++ q_OPENSSL_sk_pop_free((OPENSSL_STACK*)info, reinterpret_cast(q_OPENSSL_sk_free));
+ return result;
+ }
+ break;
+@@ -607,7 +607,11 @@ static QMap _q_mapFromX509Name(X509_NAME *name)
+ unsigned char *data = 0;
+ int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e));
+ info.insertMulti(name, QString::fromUtf8((char*)data, size));
++#if QT_CONFIG(opensslv11)
++ q_CRYPTO_free(data, 0, 0);
++#else
+ q_CRYPTO_free(data);
++#endif
+ }
+
+ return info;
+@@ -619,8 +623,9 @@ QSslCertificate QSslCertificatePrivate::QSslCertificate_from_X509(X509 *x509)
+ if (!x509 || !QSslSocket::supportsSsl())
+ return certificate;
+
+- ASN1_TIME *nbef = q_X509_get_notBefore(x509);
+- ASN1_TIME *naft = q_X509_get_notAfter(x509);
++ ASN1_TIME *nbef = q_X509_getm_notBefore(x509);
++ ASN1_TIME *naft = q_X509_getm_notAfter(x509);
++
+ certificate.d->notValidBefore = q_getTimeFromASN1(nbef);
+ certificate.d->notValidAfter = q_getTimeFromASN1(naft);
+ certificate.d->null = false;
+diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp
+index c92d8fc3f8..cef503710c 100644
+--- a/src/network/ssl/qsslcontext_openssl.cpp
++++ b/src/network/ssl/qsslcontext_openssl.cpp
+@@ -1,6 +1,6 @@
+ /****************************************************************************
+ **
+-** Copyright (C) 2016 The Qt Company Ltd.
++** Copyright (C) 2017 The Qt Company Ltd.
+ ** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+ ** Copyright (C) 2014 Governikus GmbH & Co. KG.
+ ** Contact: https://www.qt.io/licensing/
+@@ -41,22 +41,14 @@
+
+
+ #include
+-#include
+-#include
+
+ #include "private/qssl_p.h"
+ #include "private/qsslcontext_openssl_p.h"
+-#include "private/qsslsocket_p.h"
+ #include "private/qsslsocket_openssl_p.h"
+ #include "private/qsslsocket_openssl_symbols_p.h"
+-#include "private/qssldiffiehellmanparameters_p.h"
+
+ QT_BEGIN_NAMESPACE
+
+-// defined in qsslsocket_openssl.cpp:
+-extern int q_X509Callback(int ok, X509_STORE_CTX *ctx);
+-extern QString getErrorsFromOpenSsl();
+-
+ QSslContext::QSslContext()
+ : ctx(0),
+ pkey(0),
+@@ -78,301 +70,6 @@ QSslContext::~QSslContext()
+ q_SSL_SESSION_free(session);
+ }
+
+-static inline QString msgErrorSettingEllipticCurves(const QString &why)
+-{
+- return QSslSocket::tr("Error when setting the elliptic curves (%1)").arg(why);
+-}
+-
+-// static
+-void QSslContext::initSslContext(QSslContext *sslContext, QSslSocket::SslMode mode, const QSslConfiguration &configuration, bool allowRootCertOnDemandLoading)
+-{
+- sslContext->sslConfiguration = configuration;
+- sslContext->errorCode = QSslError::NoError;
+-
+- bool client = (mode == QSslSocket::SslClientMode);
+-
+- bool reinitialized = false;
+- bool unsupportedProtocol = false;
+-init_context:
+- switch (sslContext->sslConfiguration.protocol()) {
+- case QSsl::SslV2:
+-#ifndef OPENSSL_NO_SSL2
+- sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv2_client_method() : q_SSLv2_server_method());
+-#else
+- // SSL 2 not supported by the system, but chosen deliberately -> error
+- sslContext->ctx = 0;
+- unsupportedProtocol = true;
+-#endif
+- break;
+- case QSsl::SslV3:
+-#ifndef OPENSSL_NO_SSL3_METHOD
+- sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv3_client_method() : q_SSLv3_server_method());
+-#else
+- // SSL 3 not supported by the system, but chosen deliberately -> error
+- sslContext->ctx = 0;
+- unsupportedProtocol = true;
+-#endif
+- break;
+- case QSsl::SecureProtocols:
+- // SSLv2 and SSLv3 will be disabled by SSL options
+- // But we need q_SSLv23_server_method() otherwise AnyProtocol will be unable to connect on Win32.
+- case QSsl::TlsV1SslV3:
+- // SSLv2 will will be disabled by SSL options
+- case QSsl::AnyProtocol:
+- default:
+- sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method());
+- break;
+- case QSsl::TlsV1_0:
+- sslContext->ctx = q_SSL_CTX_new(client ? q_TLSv1_client_method() : q_TLSv1_server_method());
+- break;
+- case QSsl::TlsV1_1:
+-#if OPENSSL_VERSION_NUMBER >= 0x10001000L
+- sslContext->ctx = q_SSL_CTX_new(client ? q_TLSv1_1_client_method() : q_TLSv1_1_server_method());
+-#else
+- // TLS 1.1 not supported by the system, but chosen deliberately -> error
+- sslContext->ctx = 0;
+- unsupportedProtocol = true;
+-#endif
+- break;
+- case QSsl::TlsV1_2:
+-#if OPENSSL_VERSION_NUMBER >= 0x10001000L
+- sslContext->ctx = q_SSL_CTX_new(client ? q_TLSv1_2_client_method() : q_TLSv1_2_server_method());
+-#else
+- // TLS 1.2 not supported by the system, but chosen deliberately -> error
+- sslContext->ctx = 0;
+- unsupportedProtocol = true;
+-#endif
+- break;
+- case QSsl::TlsV1_0OrLater:
+- // Specific protocols will be specified via SSL options.
+- sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method());
+- break;
+- case QSsl::TlsV1_1OrLater:
+- case QSsl::TlsV1_2OrLater:
+-#if OPENSSL_VERSION_NUMBER >= 0x10001000L
+- // Specific protocols will be specified via SSL options.
+- sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method());
+-#else
+- // TLS 1.1/1.2 not supported by the system, but chosen deliberately -> error
+- sslContext->ctx = 0;
+- unsupportedProtocol = true;
+-#endif
+- break;
+- }
+-
+- if (!sslContext->ctx) {
+- // After stopping Flash 10 the SSL library looses its ciphers. Try re-adding them
+- // by re-initializing the library.
+- if (!reinitialized) {
+- reinitialized = true;
+- if (q_SSL_library_init() == 1)
+- goto init_context;
+- }
+-
+- sslContext->errorStr = QSslSocket::tr("Error creating SSL context (%1)").arg(
+- unsupportedProtocol ? QSslSocket::tr("unsupported protocol") : QSslSocketBackendPrivate::getErrorsFromOpenSsl()
+- );
+- sslContext->errorCode = QSslError::UnspecifiedError;
+- return;
+- }
+-
+- // Enable bug workarounds.
+- long options = QSslSocketBackendPrivate::setupOpenSslOptions(configuration.protocol(), configuration.d->sslOptions);
+- q_SSL_CTX_set_options(sslContext->ctx, options);
+-
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+- // Tell OpenSSL to release memory early
+- // http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html
+- if (q_SSLeay() >= 0x10000000L)
+- q_SSL_CTX_set_mode(sslContext->ctx, SSL_MODE_RELEASE_BUFFERS);
+-#endif
+-
+- // Initialize ciphers
+- QByteArray cipherString;
+- bool first = true;
+- QList ciphers = sslContext->sslConfiguration.ciphers();
+- if (ciphers.isEmpty())
+- ciphers = QSslSocketPrivate::defaultCiphers();
+- for (const QSslCipher &cipher : qAsConst(ciphers)) {
+- if (first)
+- first = false;
+- else
+- cipherString.append(':');
+- cipherString.append(cipher.name().toLatin1());
+- }
+-
+- if (!q_SSL_CTX_set_cipher_list(sslContext->ctx, cipherString.data())) {
+- sslContext->errorStr = QSslSocket::tr("Invalid or empty cipher list (%1)").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
+- sslContext->errorCode = QSslError::UnspecifiedError;
+- return;
+- }
+-
+- const QDateTime now = QDateTime::currentDateTimeUtc();
+-
+- // Add all our CAs to this store.
+- const auto caCertificates = sslContext->sslConfiguration.caCertificates();
+- for (const QSslCertificate &caCertificate : caCertificates) {
+- // From https://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html:
+- //
+- // If several CA certificates matching the name, key identifier, and
+- // serial number condition are available, only the first one will be
+- // examined. This may lead to unexpected results if the same CA
+- // certificate is available with different expiration dates. If a
+- // ``certificate expired'' verification error occurs, no other
+- // certificate will be searched. Make sure to not have expired
+- // certificates mixed with valid ones.
+- //
+- // See also: QSslSocketBackendPrivate::verify()
+- if (caCertificate.expiryDate() >= now) {
+- q_X509_STORE_add_cert(q_SSL_CTX_get_cert_store(sslContext->ctx), (X509 *)caCertificate.handle());
+- }
+- }
+-
+- if (QSslSocketPrivate::s_loadRootCertsOnDemand && allowRootCertOnDemandLoading) {
+- // tell OpenSSL the directories where to look up the root certs on demand
+- const QList unixDirs = QSslSocketPrivate::unixRootCertDirectories();
+- for (const QByteArray &unixDir : unixDirs)
+- q_SSL_CTX_load_verify_locations(sslContext->ctx, 0, unixDir.constData());
+- }
+-
+- if (!sslContext->sslConfiguration.localCertificate().isNull()) {
+- // Require a private key as well.
+- if (sslContext->sslConfiguration.privateKey().isNull()) {
+- sslContext->errorStr = QSslSocket::tr("Cannot provide a certificate with no key, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
+- sslContext->errorCode = QSslError::UnspecifiedError;
+- return;
+- }
+-
+- // Load certificate
+- if (!q_SSL_CTX_use_certificate(sslContext->ctx, (X509 *)sslContext->sslConfiguration.localCertificate().handle())) {
+- sslContext->errorStr = QSslSocket::tr("Error loading local certificate, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
+- sslContext->errorCode = QSslError::UnspecifiedError;
+- return;
+- }
+-
+- if (configuration.d->privateKey.algorithm() == QSsl::Opaque) {
+- sslContext->pkey = reinterpret_cast(configuration.d->privateKey.handle());
+- } else {
+- // Load private key
+- sslContext->pkey = q_EVP_PKEY_new();
+- // before we were using EVP_PKEY_assign_R* functions and did not use EVP_PKEY_free.
+- // this lead to a memory leak. Now we use the *_set1_* functions which do not
+- // take ownership of the RSA/DSA key instance because the QSslKey already has ownership.
+- if (configuration.d->privateKey.algorithm() == QSsl::Rsa)
+- q_EVP_PKEY_set1_RSA(sslContext->pkey, reinterpret_cast(configuration.d->privateKey.handle()));
+- else if (configuration.d->privateKey.algorithm() == QSsl::Dsa)
+- q_EVP_PKEY_set1_DSA(sslContext->pkey, reinterpret_cast(configuration.d->privateKey.handle()));
+-#ifndef OPENSSL_NO_EC
+- else if (configuration.d->privateKey.algorithm() == QSsl::Ec)
+- q_EVP_PKEY_set1_EC_KEY(sslContext->pkey, reinterpret_cast(configuration.d->privateKey.handle()));
+-#endif
+- }
+-
+- if (!q_SSL_CTX_use_PrivateKey(sslContext->ctx, sslContext->pkey)) {
+- sslContext->errorStr = QSslSocket::tr("Error loading private key, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
+- sslContext->errorCode = QSslError::UnspecifiedError;
+- return;
+- }
+- if (configuration.d->privateKey.algorithm() == QSsl::Opaque)
+- sslContext->pkey = 0; // Don't free the private key, it belongs to QSslKey
+-
+- // Check if the certificate matches the private key.
+- if (!q_SSL_CTX_check_private_key(sslContext->ctx)) {
+- sslContext->errorStr = QSslSocket::tr("Private key does not certify public key, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
+- sslContext->errorCode = QSslError::UnspecifiedError;
+- return;
+- }
+-
+- // If we have any intermediate certificates then we need to add them to our chain
+- bool first = true;
+- for (const QSslCertificate &cert : qAsConst(configuration.d->localCertificateChain)) {
+- if (first) {
+- first = false;
+- continue;
+- }
+- q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_EXTRA_CHAIN_CERT, 0,
+- q_X509_dup(reinterpret_cast(cert.handle())));
+- }
+- }
+-
+- // Initialize peer verification.
+- if (sslContext->sslConfiguration.peerVerifyMode() == QSslSocket::VerifyNone) {
+- q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_NONE, 0);
+- } else {
+- q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_PEER, q_X509Callback);
+- }
+-
+- // Set verification depth.
+- if (sslContext->sslConfiguration.peerVerifyDepth() != 0)
+- q_SSL_CTX_set_verify_depth(sslContext->ctx, sslContext->sslConfiguration.peerVerifyDepth());
+-
+- // set persisted session if the user set it
+- if (!configuration.sessionTicket().isEmpty())
+- sslContext->setSessionASN1(configuration.sessionTicket());
+-
+- // Set temp DH params
+- QSslDiffieHellmanParameters dhparams = configuration.diffieHellmanParameters();
+-
+- if (!dhparams.isValid()) {
+- sslContext->errorStr = QSslSocket::tr("Diffie-Hellman parameters are not valid");
+- sslContext->errorCode = QSslError::UnspecifiedError;
+- return;
+- }
+-
+- if (!dhparams.isEmpty()) {
+- const QByteArray ¶ms = dhparams.d->derData;
+- const char *ptr = params.constData();
+- DH *dh = q_d2i_DHparams(NULL, reinterpret_cast(&ptr), params.length());
+- if (dh == NULL)
+- qFatal("q_d2i_DHparams failed to convert QSslDiffieHellmanParameters to DER form");
+- q_SSL_CTX_set_tmp_dh(sslContext->ctx, dh);
+- q_DH_free(dh);
+- }
+-
+-#ifndef OPENSSL_NO_EC
+-#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+- if (q_SSLeay() >= 0x10002000L) {
+- q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_SET_ECDH_AUTO, 1, NULL);
+- } else
+-#endif
+- {
+- // Set temp ECDH params
+- EC_KEY *ecdh = 0;
+- ecdh = q_EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
+- q_SSL_CTX_set_tmp_ecdh(sslContext->ctx, ecdh);
+- q_EC_KEY_free(ecdh);
+- }
+-#endif // OPENSSL_NO_EC
+-
+-#if OPENSSL_VERSION_NUMBER >= 0x10001000L && !defined(OPENSSL_NO_PSK)
+- if (!client)
+- q_SSL_CTX_use_psk_identity_hint(sslContext->ctx, sslContext->sslConfiguration.preSharedKeyIdentityHint().constData());
+-#endif // OPENSSL_VERSION_NUMBER >= 0x10001000L && !defined(OPENSSL_NO_PSK)
+-
+- const QVector qcurves = sslContext->sslConfiguration.ellipticCurves();
+- if (!qcurves.isEmpty()) {
+-#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
+- // Set the curves to be used
+- if (q_SSLeay() >= 0x10002000L) {
+- // SSL_CTX_ctrl wants a non-const pointer as last argument,
+- // but let's avoid a copy into a temporary array
+- if (!q_SSL_CTX_ctrl(sslContext->ctx,
+- SSL_CTRL_SET_CURVES,
+- qcurves.size(),
+- const_cast(reinterpret_cast(qcurves.data())))) {
+- sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
+- sslContext->errorCode = QSslError::UnspecifiedError;
+- }
+- } else
+-#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
+- {
+- // specific curves requested, but not possible to set -> error
+- sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocket::tr("OpenSSL version too old, need at least v1.0.2"));
+- sslContext->errorCode = QSslError::UnspecifiedError;
+- }
+- }
+-}
+-
+ QSslContext* QSslContext::fromConfiguration(QSslSocket::SslMode mode, const QSslConfiguration &configuration, bool allowRootCertOnDemandLoading)
+ {
+ QSslContext *sslContext = new QSslContext();
+@@ -463,7 +160,7 @@ SSL* QSslContext::createSsl()
+ m_npnContext.len = m_supportedNPNVersions.count();
+ m_npnContext.status = QSslConfiguration::NextProtocolNegotiationNone;
+ #if OPENSSL_VERSION_NUMBER >= 0x10002000L
+- if (q_SSLeay() >= 0x10002000L) {
++ if (QSslSocket::sslLibraryVersionNumber() >= 0x10002000L) {
+ // Callback's type has a parameter 'const unsigned char ** out'
+ // since it was introduced in 1.0.2. Internally, OpenSSL's own code
+ // (tests/examples) cast it to unsigned char * (since it's 'out').
+@@ -508,7 +205,7 @@ bool QSslContext::cacheSession(SSL* ssl)
+ unsigned char *data = reinterpret_cast(m_sessionASN1.data());
+ if (!q_i2d_SSL_SESSION(session, &data))
+ qCWarning(lcSsl, "could not store persistent version of SSL session");
+- m_sessionTicketLifeTimeHint = session->tlsext_tick_lifetime_hint;
++ m_sessionTicketLifeTimeHint = q_SSL_SESSION_get_ticket_lifetime_hint(session);
+ }
+ }
+
+diff --git a/src/network/ssl/qsslcontext_openssl11.cpp b/src/network/ssl/qsslcontext_openssl11.cpp
+new file mode 100644
+index 0000000000..787b6ae3f5
+--- /dev/null
++++ b/src/network/ssl/qsslcontext_openssl11.cpp
+@@ -0,0 +1,277 @@
++/****************************************************************************
++**
++** Copyright (C) 2017 The Qt Company Ltd.
++** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
++** Copyright (C) 2014 Governikus GmbH & Co. KG.
++** Copyright (C) 2016 Richard J. Moore
++** Contact: https://www.qt.io/licensing/
++**
++** This file is part of the QtNetwork module of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and The Qt Company. For licensing terms
++** and conditions see https://www.qt.io/terms-conditions. For further
++** information use the contact form at https://www.qt.io/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 3 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL3 included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU Lesser General Public License version 3 requirements
++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 2.0 or (at your option) the GNU General
++** Public license version 3 or any later version approved by the KDE Free
++** Qt Foundation. The licenses are as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
++** included in the packaging of this file. Please review the following
++** information to ensure the GNU General Public License requirements will
++** be met: https://www.gnu.org/licenses/gpl-2.0.html and
++** https://www.gnu.org/licenses/gpl-3.0.html.
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++
++#include
++#include
++
++#include "private/qssl_p.h"
++#include "private/qsslcontext_openssl_p.h"
++#include "private/qsslsocket_p.h"
++#include "private/qsslsocket_openssl_p.h"
++#include "private/qsslsocket_openssl_symbols_p.h"
++#include "private/qssldiffiehellmanparameters_p.h"
++
++#include
++
++QT_BEGIN_NAMESPACE
++
++// defined in qsslsocket_openssl.cpp:
++extern int q_X509Callback(int ok, X509_STORE_CTX *ctx);
++extern QString getErrorsFromOpenSsl();
++
++static inline QString msgErrorSettingEllipticCurves(const QString &why)
++{
++ return QSslSocket::tr("Error when setting the elliptic curves (%1)").arg(why);
++}
++
++// static
++void QSslContext::initSslContext(QSslContext *sslContext, QSslSocket::SslMode mode, const QSslConfiguration &configuration, bool allowRootCertOnDemandLoading)
++{
++ sslContext->sslConfiguration = configuration;
++ sslContext->errorCode = QSslError::NoError;
++
++ bool client = (mode == QSslSocket::SslClientMode);
++
++ bool reinitialized = false;
++ bool unsupportedProtocol = false;
++init_context:
++ if (sslContext->sslConfiguration.protocol() == QSsl::SslV2) {
++ // SSL 2 is no longer supported, but chosen deliberately -> error
++ sslContext->ctx = nullptr;
++ unsupportedProtocol = true;
++ } else {
++ // The ssl options will actually control the supported methods
++ sslContext->ctx = q_SSL_CTX_new(client ? q_TLS_client_method() : q_TLS_server_method());
++ }
++
++ if (!sslContext->ctx) {
++ // After stopping Flash 10 the SSL library loses its ciphers. Try re-adding them
++ // by re-initializing the library.
++ if (!reinitialized) {
++ reinitialized = true;
++ if (q_OPENSSL_init_ssl(0, nullptr) == 1)
++ goto init_context;
++ }
++
++ sslContext->errorStr = QSslSocket::tr("Error creating SSL context (%1)").arg(
++ unsupportedProtocol ? QSslSocket::tr("unsupported protocol") : QSslSocketBackendPrivate::getErrorsFromOpenSsl()
++ );
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ // Enable bug workarounds.
++ long options = QSslSocketBackendPrivate::setupOpenSslOptions(configuration.protocol(), configuration.d->sslOptions);
++ q_SSL_CTX_set_options(sslContext->ctx, options);
++
++ // Tell OpenSSL to release memory early
++ // http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html
++ q_SSL_CTX_set_mode(sslContext->ctx, SSL_MODE_RELEASE_BUFFERS);
++
++ // Initialize ciphers
++ QByteArray cipherString;
++ bool first = true;
++ QList ciphers = sslContext->sslConfiguration.ciphers();
++ if (ciphers.isEmpty())
++ ciphers = QSslSocketPrivate::defaultCiphers();
++ for (const QSslCipher &cipher : qAsConst(ciphers)) {
++ if (first)
++ first = false;
++ else
++ cipherString.append(':');
++ cipherString.append(cipher.name().toLatin1());
++ }
++
++ if (!q_SSL_CTX_set_cipher_list(sslContext->ctx, cipherString.data())) {
++ sslContext->errorStr = QSslSocket::tr("Invalid or empty cipher list (%1)").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ const QDateTime now = QDateTime::currentDateTimeUtc();
++
++ // Add all our CAs to this store.
++ const auto caCertificates = sslContext->sslConfiguration.caCertificates();
++ for (const QSslCertificate &caCertificate : caCertificates) {
++ // From https://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html:
++ //
++ // If several CA certificates matching the name, key identifier, and
++ // serial number condition are available, only the first one will be
++ // examined. This may lead to unexpected results if the same CA
++ // certificate is available with different expiration dates. If a
++ // ``certificate expired'' verification error occurs, no other
++ // certificate will be searched. Make sure to not have expired
++ // certificates mixed with valid ones.
++ //
++ // See also: QSslSocketBackendPrivate::verify()
++ if (caCertificate.expiryDate() >= now) {
++ q_X509_STORE_add_cert(q_SSL_CTX_get_cert_store(sslContext->ctx), (X509 *)caCertificate.handle());
++ }
++ }
++
++ if (QSslSocketPrivate::s_loadRootCertsOnDemand && allowRootCertOnDemandLoading) {
++ // tell OpenSSL the directories where to look up the root certs on demand
++ const QList unixDirs = QSslSocketPrivate::unixRootCertDirectories();
++ for (const QByteArray &unixDir : unixDirs)
++ q_SSL_CTX_load_verify_locations(sslContext->ctx, nullptr, unixDir.constData());
++ }
++
++ if (!sslContext->sslConfiguration.localCertificate().isNull()) {
++ // Require a private key as well.
++ if (sslContext->sslConfiguration.privateKey().isNull()) {
++ sslContext->errorStr = QSslSocket::tr("Cannot provide a certificate with no key, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ // Load certificate
++ if (!q_SSL_CTX_use_certificate(sslContext->ctx, (X509 *)sslContext->sslConfiguration.localCertificate().handle())) {
++ sslContext->errorStr = QSslSocket::tr("Error loading local certificate, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ if (configuration.d->privateKey.algorithm() == QSsl::Opaque) {
++ sslContext->pkey = reinterpret_cast(configuration.d->privateKey.handle());
++ } else {
++ // Load private key
++ sslContext->pkey = q_EVP_PKEY_new();
++ // before we were using EVP_PKEY_assign_R* functions and did not use EVP_PKEY_free.
++ // this lead to a memory leak. Now we use the *_set1_* functions which do not
++ // take ownership of the RSA/DSA key instance because the QSslKey already has ownership.
++ if (configuration.d->privateKey.algorithm() == QSsl::Rsa)
++ q_EVP_PKEY_set1_RSA(sslContext->pkey, reinterpret_cast(configuration.d->privateKey.handle()));
++ else if (configuration.d->privateKey.algorithm() == QSsl::Dsa)
++ q_EVP_PKEY_set1_DSA(sslContext->pkey, reinterpret_cast(configuration.d->privateKey.handle()));
++#ifndef OPENSSL_NO_EC
++ else if (configuration.d->privateKey.algorithm() == QSsl::Ec)
++ q_EVP_PKEY_set1_EC_KEY(sslContext->pkey, reinterpret_cast(configuration.d->privateKey.handle()));
++#endif
++ }
++
++ if (!q_SSL_CTX_use_PrivateKey(sslContext->ctx, sslContext->pkey)) {
++ sslContext->errorStr = QSslSocket::tr("Error loading private key, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++ if (configuration.d->privateKey.algorithm() == QSsl::Opaque)
++ sslContext->pkey = nullptr; // Don't free the private key, it belongs to QSslKey
++
++ // Check if the certificate matches the private key.
++ if (!q_SSL_CTX_check_private_key(sslContext->ctx)) {
++ sslContext->errorStr = QSslSocket::tr("Private key does not certify public key, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ // If we have any intermediate certificates then we need to add them to our chain
++ bool first = true;
++ for (const QSslCertificate &cert : qAsConst(configuration.d->localCertificateChain)) {
++ if (first) {
++ first = false;
++ continue;
++ }
++ q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_EXTRA_CHAIN_CERT, 0,
++ q_X509_dup(reinterpret_cast(cert.handle())));
++ }
++ }
++
++ // Initialize peer verification.
++ if (sslContext->sslConfiguration.peerVerifyMode() == QSslSocket::VerifyNone) {
++ q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_NONE, nullptr);
++ } else {
++ q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_PEER, q_X509Callback);
++ }
++
++ // Set verification depth.
++ if (sslContext->sslConfiguration.peerVerifyDepth() != 0)
++ q_SSL_CTX_set_verify_depth(sslContext->ctx, sslContext->sslConfiguration.peerVerifyDepth());
++
++ // set persisted session if the user set it
++ if (!configuration.sessionTicket().isEmpty())
++ sslContext->setSessionASN1(configuration.sessionTicket());
++
++ // Set temp DH params
++ QSslDiffieHellmanParameters dhparams = configuration.diffieHellmanParameters();
++
++ if (!dhparams.isValid()) {
++ sslContext->errorStr = QSslSocket::tr("Diffie-Hellman parameters are not valid");
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ if (!dhparams.isEmpty()) {
++ const QByteArray ¶ms = dhparams.d->derData;
++ const char *ptr = params.constData();
++ DH *dh = q_d2i_DHparams(NULL, reinterpret_cast(&ptr), params.length());
++ if (dh == NULL)
++ qFatal("q_d2i_DHparams failed to convert QSslDiffieHellmanParameters to DER form");
++ q_SSL_CTX_set_tmp_dh(sslContext->ctx, dh);
++ q_DH_free(dh);
++ }
++
++#ifndef OPENSSL_NO_PSK
++ if (!client)
++ q_SSL_CTX_use_psk_identity_hint(sslContext->ctx, sslContext->sslConfiguration.preSharedKeyIdentityHint().constData());
++#endif // !OPENSSL_NO_PSK
++
++ const QVector qcurves = sslContext->sslConfiguration.ellipticCurves();
++ if (!qcurves.isEmpty()) {
++#ifdef OPENSSL_NO_EC
++ sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocket::tr("OpenSSL version with disabled elliptic curves"));
++ sslContext->errorCode = QSslError::UnspecifiedError;
++#else
++ // Set the curves to be used.
++ std::vector curves;
++ curves.reserve(qcurves.size());
++ for (const auto &sslCurve : qcurves)
++ curves.push_back(sslCurve.id);
++ if (!q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_SET_CURVES, long(curves.size()), &curves[0])) {
++ sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ }
++#endif
++ }
++}
++
++QT_END_NAMESPACE
+diff --git a/src/network/ssl/qsslcontext_opensslpre11.cpp b/src/network/ssl/qsslcontext_opensslpre11.cpp
+new file mode 100644
+index 0000000000..9c01c2f2dc
+--- /dev/null
++++ b/src/network/ssl/qsslcontext_opensslpre11.cpp
+@@ -0,0 +1,354 @@
++/****************************************************************************
++**
++** Copyright (C) 2017 The Qt Company Ltd.
++** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
++** Copyright (C) 2014 Governikus GmbH & Co. KG.
++** Contact: https://www.qt.io/licensing/
++**
++** This file is part of the QtNetwork module of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and The Qt Company. For licensing terms
++** and conditions see https://www.qt.io/terms-conditions. For further
++** information use the contact form at https://www.qt.io/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 3 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL3 included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU Lesser General Public License version 3 requirements
++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 2.0 or (at your option) the GNU General
++** Public license version 3 or any later version approved by the KDE Free
++** Qt Foundation. The licenses are as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
++** included in the packaging of this file. Please review the following
++** information to ensure the GNU General Public License requirements will
++** be met: https://www.gnu.org/licenses/gpl-2.0.html and
++** https://www.gnu.org/licenses/gpl-3.0.html.
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++
++#include
++#include
++
++#include "private/qssl_p.h"
++#include "private/qsslcontext_openssl_p.h"
++#include "private/qsslsocket_p.h"
++#include "private/qsslsocket_openssl_p.h"
++#include "private/qsslsocket_openssl_symbols_p.h"
++#include "private/qssldiffiehellmanparameters_p.h"
++
++QT_BEGIN_NAMESPACE
++
++// defined in qsslsocket_openssl.cpp:
++extern int q_X509Callback(int ok, X509_STORE_CTX *ctx);
++extern QString getErrorsFromOpenSsl();
++
++static inline QString msgErrorSettingEllipticCurves(const QString &why)
++{
++ return QSslSocket::tr("Error when setting the elliptic curves (%1)").arg(why);
++}
++
++// static
++void QSslContext::initSslContext(QSslContext *sslContext, QSslSocket::SslMode mode, const QSslConfiguration &configuration, bool allowRootCertOnDemandLoading)
++{
++ sslContext->sslConfiguration = configuration;
++ sslContext->errorCode = QSslError::NoError;
++
++ bool client = (mode == QSslSocket::SslClientMode);
++
++ bool reinitialized = false;
++ bool unsupportedProtocol = false;
++init_context:
++ switch (sslContext->sslConfiguration.protocol()) {
++ case QSsl::SslV2:
++#ifndef OPENSSL_NO_SSL2
++ sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv2_client_method() : q_SSLv2_server_method());
++#else
++ // SSL 2 not supported by the system, but chosen deliberately -> error
++ sslContext->ctx = 0;
++ unsupportedProtocol = true;
++#endif
++ break;
++ case QSsl::SslV3:
++#ifndef OPENSSL_NO_SSL3_METHOD
++ sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv3_client_method() : q_SSLv3_server_method());
++#else
++ // SSL 3 not supported by the system, but chosen deliberately -> error
++ sslContext->ctx = 0;
++ unsupportedProtocol = true;
++#endif
++ break;
++ case QSsl::SecureProtocols:
++ // SSLv2 and SSLv3 will be disabled by SSL options
++ // But we need q_SSLv23_server_method() otherwise AnyProtocol will be unable to connect on Win32.
++ case QSsl::TlsV1SslV3:
++ // SSLv2 will will be disabled by SSL options
++ case QSsl::AnyProtocol:
++ default:
++ sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method());
++ break;
++ case QSsl::TlsV1_0:
++ sslContext->ctx = q_SSL_CTX_new(client ? q_TLSv1_client_method() : q_TLSv1_server_method());
++ break;
++ case QSsl::TlsV1_1:
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++ sslContext->ctx = q_SSL_CTX_new(client ? q_TLSv1_1_client_method() : q_TLSv1_1_server_method());
++#else
++ // TLS 1.1 not supported by the system, but chosen deliberately -> error
++ sslContext->ctx = 0;
++ unsupportedProtocol = true;
++#endif
++ break;
++ case QSsl::TlsV1_2:
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++ sslContext->ctx = q_SSL_CTX_new(client ? q_TLSv1_2_client_method() : q_TLSv1_2_server_method());
++#else
++ // TLS 1.2 not supported by the system, but chosen deliberately -> error
++ sslContext->ctx = 0;
++ unsupportedProtocol = true;
++#endif
++ break;
++ case QSsl::TlsV1_0OrLater:
++ // Specific protocols will be specified via SSL options.
++ sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method());
++ break;
++ case QSsl::TlsV1_1OrLater:
++ case QSsl::TlsV1_2OrLater:
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++ // Specific protocols will be specified via SSL options.
++ sslContext->ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method());
++#else
++ // TLS 1.1/1.2 not supported by the system, but chosen deliberately -> error
++ sslContext->ctx = 0;
++ unsupportedProtocol = true;
++#endif
++ break;
++ }
++
++ if (!sslContext->ctx) {
++ // After stopping Flash 10 the SSL library loses its ciphers. Try re-adding them
++ // by re-initializing the library.
++ if (!reinitialized) {
++ reinitialized = true;
++ if (q_SSL_library_init() == 1)
++ goto init_context;
++ }
++
++ sslContext->errorStr = QSslSocket::tr("Error creating SSL context (%1)").arg(
++ unsupportedProtocol ? QSslSocket::tr("unsupported protocol") : QSslSocketBackendPrivate::getErrorsFromOpenSsl()
++ );
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ // Enable bug workarounds.
++ long options = QSslSocketBackendPrivate::setupOpenSslOptions(configuration.protocol(), configuration.d->sslOptions);
++ q_SSL_CTX_set_options(sslContext->ctx, options);
++
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++ // Tell OpenSSL to release memory early
++ // http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html
++ if (q_SSLeay() >= 0x10000000L)
++ q_SSL_CTX_set_mode(sslContext->ctx, SSL_MODE_RELEASE_BUFFERS);
++#endif
++
++ // Initialize ciphers
++ QByteArray cipherString;
++ bool first = true;
++ QList ciphers = sslContext->sslConfiguration.ciphers();
++ if (ciphers.isEmpty())
++ ciphers = QSslSocketPrivate::defaultCiphers();
++ for (const QSslCipher &cipher : qAsConst(ciphers)) {
++ if (first)
++ first = false;
++ else
++ cipherString.append(':');
++ cipherString.append(cipher.name().toLatin1());
++ }
++
++ if (!q_SSL_CTX_set_cipher_list(sslContext->ctx, cipherString.data())) {
++ sslContext->errorStr = QSslSocket::tr("Invalid or empty cipher list (%1)").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ const QDateTime now = QDateTime::currentDateTimeUtc();
++
++ // Add all our CAs to this store.
++ const auto caCertificates = sslContext->sslConfiguration.caCertificates();
++ for (const QSslCertificate &caCertificate : caCertificates) {
++ // From https://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html:
++ //
++ // If several CA certificates matching the name, key identifier, and
++ // serial number condition are available, only the first one will be
++ // examined. This may lead to unexpected results if the same CA
++ // certificate is available with different expiration dates. If a
++ // ``certificate expired'' verification error occurs, no other
++ // certificate will be searched. Make sure to not have expired
++ // certificates mixed with valid ones.
++ //
++ // See also: QSslSocketBackendPrivate::verify()
++ if (caCertificate.expiryDate() >= now) {
++ q_X509_STORE_add_cert(q_SSL_CTX_get_cert_store(sslContext->ctx), (X509 *)caCertificate.handle());
++ }
++ }
++
++ if (QSslSocketPrivate::s_loadRootCertsOnDemand && allowRootCertOnDemandLoading) {
++ // tell OpenSSL the directories where to look up the root certs on demand
++ const QList unixDirs = QSslSocketPrivate::unixRootCertDirectories();
++ for (const QByteArray &unixDir : unixDirs)
++ q_SSL_CTX_load_verify_locations(sslContext->ctx, 0, unixDir.constData());
++ }
++
++ if (!sslContext->sslConfiguration.localCertificate().isNull()) {
++ // Require a private key as well.
++ if (sslContext->sslConfiguration.privateKey().isNull()) {
++ sslContext->errorStr = QSslSocket::tr("Cannot provide a certificate with no key, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ // Load certificate
++ if (!q_SSL_CTX_use_certificate(sslContext->ctx, (X509 *)sslContext->sslConfiguration.localCertificate().handle())) {
++ sslContext->errorStr = QSslSocket::tr("Error loading local certificate, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ if (configuration.d->privateKey.algorithm() == QSsl::Opaque) {
++ sslContext->pkey = reinterpret_cast(configuration.d->privateKey.handle());
++ } else {
++ // Load private key
++ sslContext->pkey = q_EVP_PKEY_new();
++ // before we were using EVP_PKEY_assign_R* functions and did not use EVP_PKEY_free.
++ // this lead to a memory leak. Now we use the *_set1_* functions which do not
++ // take ownership of the RSA/DSA key instance because the QSslKey already has ownership.
++ if (configuration.d->privateKey.algorithm() == QSsl::Rsa)
++ q_EVP_PKEY_set1_RSA(sslContext->pkey, reinterpret_cast(configuration.d->privateKey.handle()));
++ else if (configuration.d->privateKey.algorithm() == QSsl::Dsa)
++ q_EVP_PKEY_set1_DSA(sslContext->pkey, reinterpret_cast(configuration.d->privateKey.handle()));
++#ifndef OPENSSL_NO_EC
++ else if (configuration.d->privateKey.algorithm() == QSsl::Ec)
++ q_EVP_PKEY_set1_EC_KEY(sslContext->pkey, reinterpret_cast(configuration.d->privateKey.handle()));
++#endif
++ }
++
++ if (!q_SSL_CTX_use_PrivateKey(sslContext->ctx, sslContext->pkey)) {
++ sslContext->errorStr = QSslSocket::tr("Error loading private key, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++ if (configuration.d->privateKey.algorithm() == QSsl::Opaque)
++ sslContext->pkey = 0; // Don't free the private key, it belongs to QSslKey
++
++ // Check if the certificate matches the private key.
++ if (!q_SSL_CTX_check_private_key(sslContext->ctx)) {
++ sslContext->errorStr = QSslSocket::tr("Private key does not certify public key, %1").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ // If we have any intermediate certificates then we need to add them to our chain
++ bool first = true;
++ for (const QSslCertificate &cert : qAsConst(configuration.d->localCertificateChain)) {
++ if (first) {
++ first = false;
++ continue;
++ }
++ q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_EXTRA_CHAIN_CERT, 0,
++ q_X509_dup(reinterpret_cast(cert.handle())));
++ }
++ }
++
++ // Initialize peer verification.
++ if (sslContext->sslConfiguration.peerVerifyMode() == QSslSocket::VerifyNone) {
++ q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_NONE, 0);
++ } else {
++ q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_PEER, q_X509Callback);
++ }
++
++ // Set verification depth.
++ if (sslContext->sslConfiguration.peerVerifyDepth() != 0)
++ q_SSL_CTX_set_verify_depth(sslContext->ctx, sslContext->sslConfiguration.peerVerifyDepth());
++
++ // set persisted session if the user set it
++ if (!configuration.sessionTicket().isEmpty())
++ sslContext->setSessionASN1(configuration.sessionTicket());
++
++ // Set temp DH params
++ QSslDiffieHellmanParameters dhparams = configuration.diffieHellmanParameters();
++
++ if (!dhparams.isValid()) {
++ sslContext->errorStr = QSslSocket::tr("Diffie-Hellman parameters are not valid");
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ return;
++ }
++
++ if (!dhparams.isEmpty()) {
++ const QByteArray ¶ms = dhparams.d->derData;
++ const char *ptr = params.constData();
++ DH *dh = q_d2i_DHparams(NULL, reinterpret_cast(&ptr), params.length());
++ if (dh == NULL)
++ qFatal("q_d2i_DHparams failed to convert QSslDiffieHellmanParameters to DER form");
++ q_SSL_CTX_set_tmp_dh(sslContext->ctx, dh);
++ q_DH_free(dh);
++ }
++
++#ifndef OPENSSL_NO_EC
++#if OPENSSL_VERSION_NUMBER >= 0x10002000L
++ if (q_SSLeay() >= 0x10002000L) {
++ q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_SET_ECDH_AUTO, 1, NULL);
++ } else
++#endif
++ {
++ // Set temp ECDH params
++ EC_KEY *ecdh = 0;
++ ecdh = q_EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
++ q_SSL_CTX_set_tmp_ecdh(sslContext->ctx, ecdh);
++ q_EC_KEY_free(ecdh);
++ }
++#endif // OPENSSL_NO_EC
++
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L && !defined(OPENSSL_NO_PSK)
++ if (!client)
++ q_SSL_CTX_use_psk_identity_hint(sslContext->ctx, sslContext->sslConfiguration.preSharedKeyIdentityHint().constData());
++#endif // OPENSSL_VERSION_NUMBER >= 0x10001000L && !defined(OPENSSL_NO_PSK)
++
++ const QVector qcurves = sslContext->sslConfiguration.ellipticCurves();
++ if (!qcurves.isEmpty()) {
++#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
++ // Set the curves to be used
++ if (q_SSLeay() >= 0x10002000L) {
++ // SSL_CTX_ctrl wants a non-const pointer as last argument,
++ // but let's avoid a copy into a temporary array
++ if (!q_SSL_CTX_ctrl(sslContext->ctx,
++ SSL_CTRL_SET_CURVES,
++ qcurves.size(),
++ const_cast(reinterpret_cast(qcurves.data())))) {
++ sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ }
++ } else
++#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
++ {
++ // specific curves requested, but not possible to set -> error
++ sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocket::tr("OpenSSL version too old, need at least v1.0.2"));
++ sslContext->errorCode = QSslError::UnspecifiedError;
++ }
++ }
++}
++
++QT_END_NAMESPACE
+diff --git a/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp b/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp
+index 90687b05c5..5ebad822f1 100644
+--- a/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp
++++ b/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp
+@@ -1,6 +1,7 @@
+ /****************************************************************************
+ **
+ ** Copyright (C) 2015 Mikkel Krautz
++** Copyright (C) 2016 Richard J. Moore
+ ** Contact: https://www.qt.io/licensing/
+ **
+ ** This file is part of the QtNetwork module of the Qt Toolkit.
+@@ -50,8 +51,8 @@
+ #include
+ #endif
+
+-// For q_BN_is_word.
+ #include
++#include
+
+ QT_BEGIN_NAMESPACE
+
+@@ -62,13 +63,6 @@ static bool isSafeDH(DH *dh)
+
+ QSslSocketPrivate::ensureInitialized();
+
+- // Mark p < 1024 bits as unsafe.
+- if (q_BN_num_bits(dh->p) < 1024) {
+- return false;
+- }
+-
+- if (q_DH_check(dh, &status) != 1)
+- return false;
+
+ // From https://wiki.openssl.org/index.php/Diffie-Hellman_parameters:
+ //
+@@ -81,11 +75,39 @@ static bool isSafeDH(DH *dh)
+ // Without the test, the IETF parameters would
+ // fail validation. For details, see Diffie-Hellman
+ // Parameter Check (when g = 2, must p mod 24 == 11?).
++#if QT_CONFIG(opensslv11)
++ // Mark p < 1024 bits as unsafe.
++ if (q_DH_bits(dh) < 1024)
++ return false;
++
++ if (q_DH_check(dh, &status) != 1)
++ return false;
++
++ const BIGNUM *p = nullptr;
++ const BIGNUM *q = nullptr;
++ const BIGNUM *g = nullptr;
++ q_DH_get0_pqg(dh, &p, &q, &g);
++
++ if (q_BN_is_word(const_cast(g), DH_GENERATOR_2)) {
++ long residue = q_BN_mod_word(p, 24);
++ if (residue == 11 || residue == 23)
++ status &= ~DH_NOT_SUITABLE_GENERATOR;
++ }
++
++#else
++ // Mark p < 1024 bits as unsafe.
++ if (q_BN_num_bits(dh->p) < 1024)
++ return false;
++
++ if (q_DH_check(dh, &status) != 1)
++ return false;
++
+ if (q_BN_is_word(dh->g, DH_GENERATOR_2)) {
+ long residue = q_BN_mod_word(dh->p, 24);
+ if (residue == 11 || residue == 23)
+ status &= ~DH_NOT_SUITABLE_GENERATOR;
+ }
++#endif
+
+ bad |= DH_CHECK_P_NOT_PRIME;
+ bad |= DH_CHECK_P_NOT_SAFE_PRIME;
+diff --git a/src/network/ssl/qsslellipticcurve.h b/src/network/ssl/qsslellipticcurve.h
+index 231566063e..57dda19bad 100644
+--- a/src/network/ssl/qsslellipticcurve.h
++++ b/src/network/ssl/qsslellipticcurve.h
+@@ -80,6 +80,7 @@ private:
+ friend Q_DECL_CONSTEXPR bool operator==(QSslEllipticCurve lhs, QSslEllipticCurve rhs) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR uint qHash(QSslEllipticCurve curve, uint seed) Q_DECL_NOTHROW;
+
++ friend class QSslContext;
+ friend class QSslSocketPrivate;
+ friend class QSslSocketBackendPrivate;
+ };
+diff --git a/src/network/ssl/qsslellipticcurve_openssl.cpp b/src/network/ssl/qsslellipticcurve_openssl.cpp
+index e18197b703..8cd14837f0 100644
+--- a/src/network/ssl/qsslellipticcurve_openssl.cpp
++++ b/src/network/ssl/qsslellipticcurve_openssl.cpp
+@@ -1,6 +1,7 @@
+ /****************************************************************************
+ **
+ ** Copyright (C) 2014 Governikus GmbH & Co. KG.
++** Copyright (C) 2016 Richard J. Moore
+ ** Contact: https://www.qt.io/licensing/
+ **
+ ** This file is part of the QtNetwork module of the Qt Toolkit.
+@@ -78,17 +79,18 @@ QSslEllipticCurve QSslEllipticCurve::fromShortName(const QString &name)
+ QSslEllipticCurve result;
+
+ #ifndef OPENSSL_NO_EC
+- const QByteArray curveNameLatin1 = name.toLatin1();
+
++ const QByteArray curveNameLatin1 = name.toLatin1();
+ int nid = q_OBJ_sn2nid(curveNameLatin1.data());
+
+ #if OPENSSL_VERSION_NUMBER >= 0x10002000L
+- if (nid == 0 && q_SSLeay() >= 0x10002000L)
++ if (nid == 0 && QSslSocket::sslLibraryVersionNumber() >= 0x10002000L)
+ nid = q_EC_curve_nist2nid(curveNameLatin1.data());
+ #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
+
+ result.id = nid;
+-#endif
++
++#endif // !OPENSSL_NO_EC
+
+ return result;
+ }
+diff --git a/src/network/ssl/qsslkey_openssl.cpp b/src/network/ssl/qsslkey_openssl.cpp
+index 26119023d1..2b03af9441 100644
+--- a/src/network/ssl/qsslkey_openssl.cpp
++++ b/src/network/ssl/qsslkey_openssl.cpp
+@@ -1,6 +1,7 @@
+ /****************************************************************************
+ **
+-** Copyright (C) 2016 The Qt Company Ltd.
++** Copyright (C) 2017 The Qt Company Ltd.
++** Copyright (C) 2016 Richard J. Moore
+ ** Contact: https://www.qt.io/licensing/
+ **
+ ** This file is part of the QtNetwork module of the Qt Toolkit.
+@@ -87,33 +88,32 @@ bool QSslKeyPrivate::fromEVP_PKEY(EVP_PKEY *pkey)
+ if (pkey == nullptr)
+ return false;
+
+- if (pkey->type == EVP_PKEY_RSA) {
++#if QT_CONFIG(opensslv11)
++ const int keyType = q_EVP_PKEY_type(q_EVP_PKEY_base_id(pkey));
++#else
++ const int keyType = pkey->type;
++#endif
++ if (keyType == EVP_PKEY_RSA) {
+ isNull = false;
+ algorithm = QSsl::Rsa;
+ type = QSsl::PrivateKey;
+
+- rsa = q_RSA_new();
+- memcpy(rsa, q_EVP_PKEY_get1_RSA(pkey), sizeof(RSA));
+-
++ rsa = q_EVP_PKEY_get1_RSA(pkey);
+ return true;
+- }
+- else if (pkey->type == EVP_PKEY_DSA) {
++ } else if (keyType == EVP_PKEY_DSA) {
+ isNull = false;
+ algorithm = QSsl::Dsa;
+ type = QSsl::PrivateKey;
+
+- dsa = q_DSA_new();
+- memcpy(dsa, q_EVP_PKEY_get1_DSA(pkey), sizeof(DSA));
+-
++ dsa = q_EVP_PKEY_get1_DSA(pkey);
+ return true;
+ }
+ #ifndef OPENSSL_NO_EC
+- else if (pkey->type == EVP_PKEY_EC) {
++ else if (keyType == EVP_PKEY_EC) {
+ isNull = false;
+ algorithm = QSsl::Ec;
+ type = QSsl::PrivateKey;
+- ec = q_EC_KEY_dup(q_EVP_PKEY_get1_EC_KEY(pkey));
+-
++ ec = q_EVP_PKEY_get1_EC_KEY(pkey);
+ return true;
+ }
+ #endif
+@@ -181,8 +181,8 @@ int QSslKeyPrivate::length() const
+ return -1;
+
+ switch (algorithm) {
+- case QSsl::Rsa: return q_BN_num_bits(rsa->n);
+- case QSsl::Dsa: return q_BN_num_bits(dsa->p);
++ case QSsl::Rsa: return q_RSA_bits(rsa);
++ case QSsl::Dsa: return q_DSA_bits(dsa);
+ #ifndef OPENSSL_NO_EC
+ case QSsl::Ec: return q_EC_GROUP_get_degree(q_EC_KEY_get0_group(ec));
+ #endif
+@@ -276,7 +276,13 @@ Qt::HANDLE QSslKeyPrivate::handle() const
+
+ static QByteArray doCrypt(QSslKeyPrivate::Cipher cipher, const QByteArray &data, const QByteArray &key, const QByteArray &iv, int enc)
+ {
+- EVP_CIPHER_CTX ctx;
++#if QT_CONFIG(opensslv11)
++ EVP_CIPHER_CTX *ctx = q_EVP_CIPHER_CTX_new();
++#else
++ EVP_CIPHER_CTX evpCipherContext;
++ EVP_CIPHER_CTX *ctx = &evpCipherContext;
++#endif
++
+ const EVP_CIPHER* type = 0;
+ int i = 0, len = 0;
+
+@@ -294,21 +300,44 @@ static QByteArray doCrypt(QSslKeyPrivate::Cipher cipher, const QByteArray &data,
+
+ QByteArray output;
+ output.resize(data.size() + EVP_MAX_BLOCK_LENGTH);
+- q_EVP_CIPHER_CTX_init(&ctx);
+- q_EVP_CipherInit(&ctx, type, NULL, NULL, enc);
+- q_EVP_CIPHER_CTX_set_key_length(&ctx, key.size());
++
++#if QT_CONFIG(opensslv11)
++ q_EVP_CIPHER_CTX_reset(ctx);
++#else
++ q_EVP_CIPHER_CTX_init(ctx);
++#endif
++
++ q_EVP_CipherInit(ctx, type, NULL, NULL, enc);
++ q_EVP_CIPHER_CTX_set_key_length(ctx, key.size());
+ if (cipher == QSslKeyPrivate::Rc2Cbc)
+- q_EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_SET_RC2_KEY_BITS, 8 * key.size(), NULL);
+- q_EVP_CipherInit(&ctx, NULL,
++ q_EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_RC2_KEY_BITS, 8 * key.size(), NULL);
++
++#if QT_CONFIG(opensslv11)
++ // EVP_CipherInit in 1.1 resets the context thus making the calls above useless.
++ // We call EVP_CipherInit_ex instead.
++ q_EVP_CipherInit_ex(ctx, nullptr, nullptr,
++ reinterpret_cast(key.constData()),
++ reinterpret_cast(iv.constData()),
++ enc);
++#else
++ q_EVP_CipherInit(ctx, NULL,
+ reinterpret_cast(key.constData()),
+ reinterpret_cast(iv.constData()), enc);
+- q_EVP_CipherUpdate(&ctx,
++#endif // opensslv11
++
++ q_EVP_CipherUpdate(ctx,
+ reinterpret_cast(output.data()), &len,
+ reinterpret_cast(data.constData()), data.size());
+- q_EVP_CipherFinal(&ctx,
++ q_EVP_CipherFinal(ctx,
+ reinterpret_cast(output.data()) + len, &i);
+ len += i;
+- q_EVP_CIPHER_CTX_cleanup(&ctx);
++
++#if QT_CONFIG(opensslv11)
++ q_EVP_CIPHER_CTX_reset(ctx);
++ q_EVP_CIPHER_CTX_free(ctx);
++#else
++ q_EVP_CIPHER_CTX_cleanup(ctx);
++#endif
+
+ return output.left(len);
+ }
+diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
+index f5b493897e..45cea490fc 100644
+--- a/src/network/ssl/qsslsocket_openssl.cpp
++++ b/src/network/ssl/qsslsocket_openssl.cpp
+@@ -1,6 +1,6 @@
+ /****************************************************************************
+ **
+-** Copyright (C) 2016 The Qt Company Ltd.
++** Copyright (C) 2017 The Qt Company Ltd.
+ ** Copyright (C) 2014 Governikus GmbH & Co. KG
+ ** Contact: https://www.qt.io/licensing/
+ **
+@@ -97,70 +97,6 @@ bool QSslSocketPrivate::s_loadRootCertsOnDemand = false;
+ int QSslSocketBackendPrivate::s_indexForSSLExtraData = -1;
+ #endif
+
+-/* \internal
+-
+- From OpenSSL's thread(3) manual page:
+-
+- OpenSSL can safely be used in multi-threaded applications provided that at
+- least two callback functions are set.
+-
+- locking_function(int mode, int n, const char *file, int line) is needed to
+- perform locking on shared data structures. (Note that OpenSSL uses a
+- number of global data structures that will be implicitly shared
+- whenever multiple threads use OpenSSL.) Multi-threaded
+- applications will crash at random if it is not set. ...
+- ...
+- id_function(void) is a function that returns a thread ID. It is not
+- needed on Windows nor on platforms where getpid() returns a different
+- ID for each thread (most notably Linux)
+-*/
+-class QOpenSslLocks
+-{
+-public:
+- inline QOpenSslLocks()
+- : initLocker(QMutex::Recursive),
+- locksLocker(QMutex::Recursive)
+- {
+- QMutexLocker locker(&locksLocker);
+- int numLocks = q_CRYPTO_num_locks();
+- locks = new QMutex *[numLocks];
+- memset(locks, 0, numLocks * sizeof(QMutex *));
+- }
+- inline ~QOpenSslLocks()
+- {
+- QMutexLocker locker(&locksLocker);
+- for (int i = 0; i < q_CRYPTO_num_locks(); ++i)
+- delete locks[i];
+- delete [] locks;
+-
+- QSslSocketPrivate::deinitialize();
+- }
+- inline QMutex *lock(int num)
+- {
+- QMutexLocker locker(&locksLocker);
+- QMutex *tmp = locks[num];
+- if (!tmp)
+- tmp = locks[num] = new QMutex(QMutex::Recursive);
+- return tmp;
+- }
+-
+- QMutex *globalLock()
+- {
+- return &locksLocker;
+- }
+-
+- QMutex *initLock()
+- {
+- return &initLocker;
+- }
+-
+-private:
+- QMutex initLocker;
+- QMutex locksLocker;
+- QMutex **locks;
+-};
+-Q_GLOBAL_STATIC(QOpenSslLocks, openssl_locks)
+-
+ QString QSslSocketBackendPrivate::getErrorsFromOpenSsl()
+ {
+ QString errorString;
+@@ -175,20 +111,6 @@ QString QSslSocketBackendPrivate::getErrorsFromOpenSsl()
+ }
+
+ extern "C" {
+-static void locking_function(int mode, int lockNumber, const char *, int)
+-{
+- QMutex *mutex = openssl_locks()->lock(lockNumber);
+-
+- // Lock or unlock it
+- if (mode & CRYPTO_LOCK)
+- mutex->lock();
+- else
+- mutex->unlock();
+-}
+-static unsigned long id_function()
+-{
+- return (quintptr)QThread::currentThreadId();
+-}
+
+ #if OPENSSL_VERSION_NUMBER >= 0x10001000L && !defined(OPENSSL_NO_PSK)
+ static unsigned int q_ssl_psk_client_callback(SSL *ssl,
+@@ -227,7 +149,7 @@ QSslSocketBackendPrivate::~QSslSocketBackendPrivate()
+ destroySslContext();
+ }
+
+-QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(SSL_CIPHER *cipher)
++QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(const SSL_CIPHER *cipher)
+ {
+ QSslCipher ciph;
+
+@@ -283,6 +205,7 @@ struct QSslErrorList
+ QMutex mutex;
+ QVector errors;
+ };
++
+ Q_GLOBAL_STATIC(QSslErrorList, _q_sslErrorList)
+
+ int q_X509Callback(int ok, X509_STORE_CTX *ctx)
+@@ -312,7 +235,7 @@ int q_X509Callback(int ok, X509_STORE_CTX *ctx)
+ }
+ #endif
+ }
+- // Always return OK to allow verification to continue. We're handle the
++ // Always return OK to allow verification to continue. We handle the
+ // errors gracefully after collecting all errors, after verification has
+ // completed.
+ return 1;
+@@ -397,7 +320,7 @@ bool QSslSocketBackendPrivate::initSslContext()
+ if (configuration.protocol != QSsl::SslV2 &&
+ configuration.protocol != QSsl::SslV3 &&
+ configuration.protocol != QSsl::UnknownProtocol &&
+- mode == QSslSocket::SslClientMode && q_SSLeay() >= 0x00090806fL) {
++ mode == QSslSocket::SslClientMode && QSslSocket::sslLibraryVersionNumber() >= 0x00090806fL) {
+ // Set server hostname on TLS extension. RFC4366 section 3.1 requires it in ACE format.
+ QString tlsHostName = verificationPeerName.isEmpty() ? q->peerName() : verificationPeerName;
+ if (tlsHostName.isEmpty())
+@@ -438,13 +361,13 @@ bool QSslSocketBackendPrivate::initSslContext()
+
+ #if OPENSSL_VERSION_NUMBER >= 0x10001000L
+ // Save a pointer to this object into the SSL structure.
+- if (q_SSLeay() >= 0x10001000L)
++ if (QSslSocket::sslLibraryVersionNumber() >= 0x10001000L)
+ q_SSL_set_ex_data(ssl, s_indexForSSLExtraData, this);
+ #endif
+
+ #if OPENSSL_VERSION_NUMBER >= 0x10001000L && !defined(OPENSSL_NO_PSK)
+ // Set the client callback for PSK
+- if (q_SSLeay() >= 0x10001000L) {
++ if (QSslSocket::sslLibraryVersionNumber() >= 0x10001000L) {
+ if (mode == QSslSocket::SslClientMode)
+ q_SSL_set_psk_client_callback(ssl, &q_ssl_psk_client_callback);
+ else if (mode == QSslSocket::SslServerMode)
+@@ -464,16 +387,6 @@ void QSslSocketBackendPrivate::destroySslContext()
+ sslContextPointer.clear();
+ }
+
+-/*!
+- \internal
+-*/
+-void QSslSocketPrivate::deinitialize()
+-{
+- q_CRYPTO_set_id_callback(0);
+- q_CRYPTO_set_locking_callback(0);
+- q_ERR_free_strings();
+-}
+-
+ /*!
+ \internal
+
+@@ -486,91 +399,6 @@ bool QSslSocketPrivate::supportsSsl()
+ return ensureLibraryLoaded();
+ }
+
+-bool QSslSocketPrivate::ensureLibraryLoaded()
+-{
+- if (!q_resolveOpenSslSymbols())
+- return false;
+-
+- // Check if the library itself needs to be initialized.
+- QMutexLocker locker(openssl_locks()->initLock());
+-
+- if (!s_libraryLoaded) {
+- s_libraryLoaded = true;
+-
+- // Initialize OpenSSL.
+- q_CRYPTO_set_id_callback(id_function);
+- q_CRYPTO_set_locking_callback(locking_function);
+- if (q_SSL_library_init() != 1)
+- return false;
+- q_SSL_load_error_strings();
+- q_OpenSSL_add_all_algorithms();
+-
+-#if OPENSSL_VERSION_NUMBER >= 0x10001000L
+- if (q_SSLeay() >= 0x10001000L)
+- QSslSocketBackendPrivate::s_indexForSSLExtraData = q_SSL_get_ex_new_index(0L, NULL, NULL, NULL, NULL);
+-#endif
+-
+- // Initialize OpenSSL's random seed.
+- if (!q_RAND_status()) {
+- qWarning("Random number generator not seeded, disabling SSL support");
+- return false;
+- }
+- }
+- return true;
+-}
+-
+-void QSslSocketPrivate::ensureCiphersAndCertsLoaded()
+-{
+- QMutexLocker locker(openssl_locks()->initLock());
+- if (s_loadedCiphersAndCerts)
+- return;
+- s_loadedCiphersAndCerts = true;
+-
+- resetDefaultCiphers();
+- resetDefaultEllipticCurves();
+-
+-#if QT_CONFIG(library)
+- //load symbols needed to receive certificates from system store
+-#if defined(Q_OS_WIN)
+- HINSTANCE hLib = LoadLibraryW(L"Crypt32");
+- if (hLib) {
+- ptrCertOpenSystemStoreW = (PtrCertOpenSystemStoreW)GetProcAddress(hLib, "CertOpenSystemStoreW");
+- ptrCertFindCertificateInStore = (PtrCertFindCertificateInStore)GetProcAddress(hLib, "CertFindCertificateInStore");
+- ptrCertCloseStore = (PtrCertCloseStore)GetProcAddress(hLib, "CertCloseStore");
+- if (!ptrCertOpenSystemStoreW || !ptrCertFindCertificateInStore || !ptrCertCloseStore)
+- qCWarning(lcSsl, "could not resolve symbols in crypt32 library"); // should never happen
+- } else {
+- qCWarning(lcSsl, "could not load crypt32 library"); // should never happen
+- }
+-#elif defined(Q_OS_QNX)
+- s_loadRootCertsOnDemand = true;
+-#elif defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+- // check whether we can enable on-demand root-cert loading (i.e. check whether the sym links are there)
+- QList dirs = unixRootCertDirectories();
+- QStringList symLinkFilter;
+- symLinkFilter << QLatin1String("[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].[0-9]");
+- for (int a = 0; a < dirs.count(); ++a) {
+- QDirIterator iterator(QLatin1String(dirs.at(a)), symLinkFilter, QDir::Files);
+- if (iterator.hasNext()) {
+- s_loadRootCertsOnDemand = true;
+- break;
+- }
+- }
+-#endif
+-#endif // QT_CONFIG(library)
+- // if on-demand loading was not enabled, load the certs now
+- if (!s_loadRootCertsOnDemand)
+- setDefaultCaCertificates(systemCaCertificates());
+-#ifdef Q_OS_WIN
+- //Enabled for fetching additional root certs from windows update on windows 6+
+- //This flag is set false by setDefaultCaCertificates() indicating the app uses
+- //its own cert bundle rather than the system one.
+- //Same logic that disables the unix on demand cert loading.
+- //Unlike unix, we do preload the certificates from the cert store.
+- if ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) >= QSysInfo::WV_6_0)
+- s_loadRootCertsOnDemand = true;
+-#endif
+-}
+
+ /*!
+ \internal
+@@ -587,26 +415,6 @@ void QSslSocketPrivate::ensureInitialized()
+ ensureCiphersAndCertsLoaded();
+ }
+
+-long QSslSocketPrivate::sslLibraryVersionNumber()
+-{
+- if (!supportsSsl())
+- return 0;
+-
+- return q_SSLeay();
+-}
+-
+-QString QSslSocketPrivate::sslLibraryVersionString()
+-{
+- if (!supportsSsl())
+- return QString();
+-
+- const char *versionString = q_SSLeay_version(SSLEAY_VERSION);
+- if (!versionString)
+- return QString();
+-
+- return QString::fromLatin1(versionString);
+-}
+-
+ long QSslSocketPrivate::sslLibraryBuildVersionNumber()
+ {
+ return OPENSSL_VERSION_NUMBER;
+@@ -628,7 +436,11 @@ QString QSslSocketPrivate::sslLibraryBuildVersionString()
+ */
+ void QSslSocketPrivate::resetDefaultCiphers()
+ {
++#if QT_CONFIG(opensslv11)
++ SSL_CTX *myCtx = q_SSL_CTX_new(q_TLS_client_method());
++#else
+ SSL_CTX *myCtx = q_SSL_CTX_new(q_SSLv23_client_method());
++#endif
+ SSL *mySsl = q_SSL_new(myCtx);
+
+ QList ciphers;
+@@ -664,7 +476,7 @@ void QSslSocketPrivate::resetDefaultEllipticCurves()
+ QVector curves;
+
+ #ifndef OPENSSL_NO_EC
+- const size_t curveCount = q_EC_get_builtin_curves(NULL, 0);
++ const size_t curveCount = q_EC_get_builtin_curves(nullptr, 0);
+
+ QVarLengthArray builtinCurves(static_cast(curveCount));
+
+@@ -698,13 +510,14 @@ QList QSslSocketPrivate::systemCaCertificates()
+ if (ptrCertOpenSystemStoreW && ptrCertFindCertificateInStore && ptrCertCloseStore) {
+ HCERTSTORE hSystemStore;
+ hSystemStore = ptrCertOpenSystemStoreW(0, L"ROOT");
+- if(hSystemStore) {
+- PCCERT_CONTEXT pc = NULL;
+- while(1) {
+- pc = ptrCertFindCertificateInStore( hSystemStore, X509_ASN_ENCODING, 0, CERT_FIND_ANY, NULL, pc);
+- if(!pc)
++ if (hSystemStore) {
++ PCCERT_CONTEXT pc = nullptr;
++ while (1) {
++ pc = ptrCertFindCertificateInStore(hSystemStore, X509_ASN_ENCODING, 0, CERT_FIND_ANY, nullptr, pc);
++ if (!pc)
+ break;
+- QByteArray der((const char *)(pc->pbCertEncoded), static_cast(pc->cbCertEncoded));
++ QByteArray der(reinterpret_cast(pc->pbCertEncoded),
++ static_cast(pc->cbCertEncoded));
+ QSslCertificate cert(der, QSsl::Der);
+ systemCerts.append(cert);
+ }
+@@ -1504,14 +1317,8 @@ QSslCipher QSslSocketBackendPrivate::sessionCipher() const
+ {
+ if (!ssl)
+ return QSslCipher();
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+- // FIXME This is fairly evil, but needed to keep source level compatibility
+- // with the OpenSSL 0.9.x implementation at maximum -- some other functions
+- // don't take a const SSL_CIPHER* when they should
+- SSL_CIPHER *sessionCipher = const_cast(q_SSL_get_current_cipher(ssl));
+-#else
+- SSL_CIPHER *sessionCipher = q_SSL_get_current_cipher(ssl);
+-#endif
++
++ const SSL_CIPHER *sessionCipher = q_SSL_get_current_cipher(ssl);
+ return sessionCipher ? QSslCipher_from_SSL_CIPHER(sessionCipher) : QSslCipher();
+ }
+
+@@ -1537,112 +1344,6 @@ QSsl::SslProtocol QSslSocketBackendPrivate::sessionProtocol() const
+ return QSsl::UnknownProtocol;
+ }
+
+-void QSslSocketBackendPrivate::continueHandshake()
+-{
+- Q_Q(QSslSocket);
+- // if we have a max read buffer size, reset the plain socket's to match
+- if (readBufferMaxSize)
+- plainSocket->setReadBufferSize(readBufferMaxSize);
+-
+- if (q_SSL_ctrl((ssl), SSL_CTRL_GET_SESSION_REUSED, 0, NULL))
+- configuration.peerSessionShared = true;
+-
+-#ifdef QT_DECRYPT_SSL_TRAFFIC
+- if (ssl->session && ssl->s3) {
+- const char *mk = reinterpret_cast(ssl->session->master_key);
+- QByteArray masterKey(mk, ssl->session->master_key_length);
+- const char *random = reinterpret_cast(ssl->s3->client_random);
+- QByteArray clientRandom(random, SSL3_RANDOM_SIZE);
+-
+- // different format, needed for e.g. older Wireshark versions:
+-// const char *sid = reinterpret_cast(ssl->session->session_id);
+-// QByteArray sessionID(sid, ssl->session->session_id_length);
+-// QByteArray debugLineRSA("RSA Session-ID:");
+-// debugLineRSA.append(sessionID.toHex().toUpper());
+-// debugLineRSA.append(" Master-Key:");
+-// debugLineRSA.append(masterKey.toHex().toUpper());
+-// debugLineRSA.append("\n");
+-
+- QByteArray debugLineClientRandom("CLIENT_RANDOM ");
+- debugLineClientRandom.append(clientRandom.toHex().toUpper());
+- debugLineClientRandom.append(" ");
+- debugLineClientRandom.append(masterKey.toHex().toUpper());
+- debugLineClientRandom.append("\n");
+-
+- QString sslKeyFile = QDir::tempPath() + QLatin1String("/qt-ssl-keys");
+- QFile file(sslKeyFile);
+- if (!file.open(QIODevice::Append))
+- qCWarning(lcSsl) << "could not open file" << sslKeyFile << "for appending";
+- if (!file.write(debugLineClientRandom))
+- qCWarning(lcSsl) << "could not write to file" << sslKeyFile;
+- file.close();
+- } else {
+- qCWarning(lcSsl, "could not decrypt SSL traffic");
+- }
+-#endif
+-
+- // Cache this SSL session inside the QSslContext
+- if (!(configuration.sslOptions & QSsl::SslOptionDisableSessionSharing)) {
+- if (!sslContextPointer->cacheSession(ssl)) {
+- sslContextPointer.clear(); // we could not cache the session
+- } else {
+- // Cache the session for permanent usage as well
+- if (!(configuration.sslOptions & QSsl::SslOptionDisableSessionPersistence)) {
+- if (!sslContextPointer->sessionASN1().isEmpty())
+- configuration.sslSession = sslContextPointer->sessionASN1();
+- configuration.sslSessionTicketLifeTimeHint = sslContextPointer->sessionTicketLifeTimeHint();
+- }
+- }
+- }
+-
+-#if OPENSSL_VERSION_NUMBER >= 0x1000100fL && !defined(OPENSSL_NO_NEXTPROTONEG)
+-
+- configuration.nextProtocolNegotiationStatus = sslContextPointer->npnContext().status;
+- if (sslContextPointer->npnContext().status == QSslConfiguration::NextProtocolNegotiationUnsupported) {
+- // we could not agree -> be conservative and use HTTP/1.1
+- configuration.nextNegotiatedProtocol = QByteArrayLiteral("http/1.1");
+- } else {
+- const unsigned char *proto = 0;
+- unsigned int proto_len = 0;
+-#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+- if (q_SSLeay() >= 0x10002000L) {
+- q_SSL_get0_alpn_selected(ssl, &proto, &proto_len);
+- if (proto_len && mode == QSslSocket::SslClientMode) {
+- // Client does not have a callback that sets it ...
+- configuration.nextProtocolNegotiationStatus = QSslConfiguration::NextProtocolNegotiationNegotiated;
+- }
+- }
+-
+- if (!proto_len) { // Test if NPN was more lucky ...
+-#else
+- {
+-#endif
+- q_SSL_get0_next_proto_negotiated(ssl, &proto, &proto_len);
+- }
+-
+- if (proto_len)
+- configuration.nextNegotiatedProtocol = QByteArray(reinterpret_cast(proto), proto_len);
+- else
+- configuration.nextNegotiatedProtocol.clear();
+- }
+-#endif // OPENSSL_VERSION_NUMBER >= 0x1000100fL ...
+-
+-#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+- if (q_SSLeay() >= 0x10002000L && mode == QSslSocket::SslClientMode) {
+- EVP_PKEY *key;
+- if (q_SSL_get_server_tmp_key(ssl, &key))
+- configuration.ephemeralServerKey = QSslKey(key, QSsl::PublicKey);
+- }
+-#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L ...
+-
+- connectionEncrypted = true;
+- emit q->encrypted();
+- if (autoStartHandshake && pendingClose) {
+- pendingClose = false;
+- q->disconnectFromHost();
+- }
+-}
+-
+ QList QSslSocketBackendPrivate::STACKOFX509_to_QSslCertificates(STACK_OF(X509) *x509)
+ {
+ ensureInitialized();
+@@ -1696,12 +1397,12 @@ QList QSslSocketBackendPrivate::verify(const QList &
+ QMutexLocker sslErrorListMutexLocker(&_q_sslErrorList()->mutex);
+
+ // Register a custom callback to get all verification errors.
+- X509_STORE_set_verify_cb_func(certStore, q_X509Callback);
++ q_X509_STORE_set_verify_cb(certStore, q_X509Callback);
+
+ // Build the chain of intermediate certificates
+ STACK_OF(X509) *intermediates = 0;
+ if (certificateChain.length() > 1) {
+- intermediates = (STACK_OF(X509) *) q_sk_new_null();
++ intermediates = (STACK_OF(X509) *) q_OPENSSL_sk_new_null();
+
+ if (!intermediates) {
+ q_X509_STORE_free(certStore);
+@@ -1715,11 +1416,8 @@ QList QSslSocketBackendPrivate::verify(const QList &
+ first = false;
+ continue;
+ }
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+- q_sk_push( (_STACK *)intermediates, reinterpret_cast(cert.handle()));
+-#else
+- q_sk_push( (STACK *)intermediates, reinterpret_cast(cert.handle()));
+-#endif
++
++ q_OPENSSL_sk_push((OPENSSL_STACK *)intermediates, reinterpret_cast(cert.handle()));
+ }
+ }
+
+@@ -1743,11 +1441,7 @@ QList QSslSocketBackendPrivate::verify(const QList &
+ (void) q_X509_verify_cert(storeContext);
+
+ q_X509_STORE_CTX_free(storeContext);
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+- q_sk_free( (_STACK *) intermediates);
+-#else
+- q_sk_free( (STACK *) intermediates);
+-#endif
++ q_OPENSSL_sk_free((OPENSSL_STACK *)intermediates);
+
+ // Now process the errors
+ const auto errorList = std::move(_q_sslErrorList()->errors);
+@@ -1821,7 +1515,8 @@ bool QSslSocketBackendPrivate::importPkcs12(QIODevice *device,
+ // Convert to Qt types
+ if (!key->d->fromEVP_PKEY(pkey)) {
+ qCWarning(lcSsl, "Unable to convert private key");
+- q_sk_pop_free(reinterpret_cast(ca), reinterpret_cast(q_sk_free));
++ q_OPENSSL_sk_pop_free(reinterpret_cast(ca),
++ reinterpret_cast(q_OPENSSL_sk_free));
+ q_X509_free(x509);
+ q_EVP_PKEY_free(pkey);
+ q_PKCS12_free(p12);
+@@ -1836,7 +1531,11 @@ bool QSslSocketBackendPrivate::importPkcs12(QIODevice *device,
+ *caCertificates = QSslSocketBackendPrivate::STACKOFX509_to_QSslCertificates(ca);
+
+ // Clean up
+- q_sk_pop_free(reinterpret_cast(ca), reinterpret_cast(q_sk_free));
++ // TODO: verify ASAP, in the past we had sk_pop_free with q_OPENSSL_sk_free
++ // which seems to be blatantly wrong and even crashes with 1.1.
++ q_OPENSSL_sk_pop_free(reinterpret_cast(ca),
++ reinterpret_cast(q_X509_free));
++
+ q_X509_free(x509);
+ q_EVP_PKEY_free(pkey);
+ q_PKCS12_free(p12);
+diff --git a/src/network/ssl/qsslsocket_openssl11.cpp b/src/network/ssl/qsslsocket_openssl11.cpp
+new file mode 100644
+index 0000000000..b6d18943a5
+--- /dev/null
++++ b/src/network/ssl/qsslsocket_openssl11.cpp
+@@ -0,0 +1,285 @@
++/****************************************************************************
++**
++** Copyright (C) 2017 The Qt Company Ltd.
++** Copyright (C) 2014 Governikus GmbH & Co. KG
++** Copyright (C) 2016 Richard J. Moore
++** Contact: https://www.qt.io/licensing/
++**
++** This file is part of the QtNetwork module of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and The Qt Company. For licensing terms
++** and conditions see https://www.qt.io/terms-conditions. For further
++** information use the contact form at https://www.qt.io/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 3 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL3 included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU Lesser General Public License version 3 requirements
++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 2.0 or (at your option) the GNU General
++** Public license version 3 or any later version approved by the KDE Free
++** Qt Foundation. The licenses are as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
++** included in the packaging of this file. Please review the following
++** information to ensure the GNU General Public License requirements will
++** be met: https://www.gnu.org/licenses/gpl-2.0.html and
++** https://www.gnu.org/licenses/gpl-3.0.html.
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++/****************************************************************************
++**
++** In addition, as a special exception, the copyright holders listed above give
++** permission to link the code of its release of Qt with the OpenSSL project's
++** "OpenSSL" library (or modified versions of the "OpenSSL" library that use the
++** same license as the original version), and distribute the linked executables.
++**
++** You must comply with the GNU General Public License version 2 in all
++** respects for all of the code used other than the "OpenSSL" code. If you
++** modify this file, you may extend this exception to your version of the file,
++** but you are not obligated to do so. If you do not wish to do so, delete
++** this exception statement from your version of this file.
++**
++****************************************************************************/
++
++//#define QT_DECRYPT_SSL_TRAFFIC
++
++#include "qssl_p.h"
++#include "qsslsocket_openssl_p.h"
++#include "qsslsocket_openssl_symbols_p.h"
++#include "qsslsocket.h"
++#include "qsslkey.h"
++
++#include
++#include
++#include
++#include
++#include
++#include
++
++QT_BEGIN_NAMESPACE
++
++Q_GLOBAL_STATIC_WITH_ARGS(QMutex, qt_opensslInitMutex, (QMutex::Recursive))
++
++/*!
++ \internal
++*/
++void QSslSocketPrivate::deinitialize()
++{
++ // This function exists only for compatibility with the pre-11 code,
++ // where deinitialize() actually does some cleanup. To be discarded
++ // once we retire < 1.1.
++}
++
++bool QSslSocketPrivate::ensureLibraryLoaded()
++{
++ if (!q_resolveOpenSslSymbols())
++ return false;
++
++ const QMutexLocker locker(qt_opensslInitMutex);
++
++ if (!s_libraryLoaded) {
++ s_libraryLoaded = true;
++
++ // Initialize OpenSSL.
++ if (q_OPENSSL_init_ssl(0, nullptr) != 1)
++ return false;
++ q_SSL_load_error_strings();
++ q_OpenSSL_add_all_algorithms();
++
++ QSslSocketBackendPrivate::s_indexForSSLExtraData
++ = q_CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, 0L, nullptr, nullptr,
++ nullptr, nullptr);
++
++ // Initialize OpenSSL's random seed.
++ if (!q_RAND_status()) {
++ qWarning("Random number generator not seeded, disabling SSL support");
++ return false;
++ }
++ }
++ return true;
++}
++
++void QSslSocketPrivate::ensureCiphersAndCertsLoaded()
++{
++ const QMutexLocker locker(qt_opensslInitMutex);
++
++ if (s_loadedCiphersAndCerts)
++ return;
++ s_loadedCiphersAndCerts = true;
++
++ resetDefaultCiphers();
++ resetDefaultEllipticCurves();
++
++#if QT_CONFIG(library)
++ //load symbols needed to receive certificates from system store
++#if defined(Q_OS_WIN)
++ HINSTANCE hLib = LoadLibraryW(L"Crypt32");
++ if (hLib) {
++ ptrCertOpenSystemStoreW = (PtrCertOpenSystemStoreW)GetProcAddress(hLib, "CertOpenSystemStoreW");
++ ptrCertFindCertificateInStore = (PtrCertFindCertificateInStore)GetProcAddress(hLib, "CertFindCertificateInStore");
++ ptrCertCloseStore = (PtrCertCloseStore)GetProcAddress(hLib, "CertCloseStore");
++ if (!ptrCertOpenSystemStoreW || !ptrCertFindCertificateInStore || !ptrCertCloseStore)
++ qCWarning(lcSsl, "could not resolve symbols in crypt32 library"); // should never happen
++ } else {
++ qCWarning(lcSsl, "could not load crypt32 library"); // should never happen
++ }
++#elif defined(Q_OS_QNX)
++ s_loadRootCertsOnDemand = true;
++#elif defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN)
++ // check whether we can enable on-demand root-cert loading (i.e. check whether the sym links are there)
++ QList dirs = unixRootCertDirectories();
++ QStringList symLinkFilter;
++ symLinkFilter << QLatin1String("[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].[0-9]");
++ for (int a = 0; a < dirs.count(); ++a) {
++ QDirIterator iterator(QLatin1String(dirs.at(a)), symLinkFilter, QDir::Files);
++ if (iterator.hasNext()) {
++ s_loadRootCertsOnDemand = true;
++ break;
++ }
++ }
++#endif
++#endif // QT_CONFIG(library)
++ // if on-demand loading was not enabled, load the certs now
++ if (!s_loadRootCertsOnDemand)
++ setDefaultCaCertificates(systemCaCertificates());
++#ifdef Q_OS_WIN
++ //Enabled for fetching additional root certs from windows update on windows 6+
++ //This flag is set false by setDefaultCaCertificates() indicating the app uses
++ //its own cert bundle rather than the system one.
++ //Same logic that disables the unix on demand cert loading.
++ //Unlike unix, we do preload the certificates from the cert store.
++ if ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) >= QSysInfo::WV_6_0)
++ s_loadRootCertsOnDemand = true;
++#endif
++}
++
++long QSslSocketPrivate::sslLibraryVersionNumber()
++{
++ if (!supportsSsl())
++ return 0;
++
++ return q_OpenSSL_version_num();
++}
++
++QString QSslSocketPrivate::sslLibraryVersionString()
++{
++ if (!supportsSsl())
++ return QString();
++
++ const char *versionString = q_OpenSSL_version(OPENSSL_VERSION);
++ if (!versionString)
++ return QString();
++
++ return QString::fromLatin1(versionString);
++}
++
++void QSslSocketBackendPrivate::continueHandshake()
++{
++ Q_Q(QSslSocket);
++ // if we have a max read buffer size, reset the plain socket's to match
++ if (readBufferMaxSize)
++ plainSocket->setReadBufferSize(readBufferMaxSize);
++
++ if (q_SSL_session_reused(ssl))
++ configuration.peerSessionShared = true;
++
++#ifdef QT_DECRYPT_SSL_TRAFFIC
++ if (q_SSL_get_session(ssl)) {
++ size_t master_key_len = q_SSL_SESSION_get_master_key(q_SSL_get_session(ssl), 0, 0);
++ size_t client_random_len = q_SSL_get_client_random(ssl, 0, 0);
++ QByteArray masterKey(int(master_key_len), 0); // Will not overflow
++ QByteArray clientRandom(int(client_random_len), 0); // Will not overflow
++
++ q_SSL_SESSION_get_master_key(q_SSL_get_session(ssl),
++ reinterpret_cast(masterKey.data()),
++ masterKey.size());
++ q_SSL_get_client_random(ssl, reinterpret_cast(clientRandom.data()),
++ clientRandom.size());
++
++ QByteArray debugLineClientRandom("CLIENT_RANDOM ");
++ debugLineClientRandom.append(clientRandom.toHex().toUpper());
++ debugLineClientRandom.append(" ");
++ debugLineClientRandom.append(masterKey.toHex().toUpper());
++ debugLineClientRandom.append("\n");
++
++ QString sslKeyFile = QDir::tempPath() + QLatin1String("/qt-ssl-keys");
++ QFile file(sslKeyFile);
++ if (!file.open(QIODevice::Append))
++ qCWarning(lcSsl) << "could not open file" << sslKeyFile << "for appending";
++ if (!file.write(debugLineClientRandom))
++ qCWarning(lcSsl) << "could not write to file" << sslKeyFile;
++ file.close();
++ } else {
++ qCWarning(lcSsl, "could not decrypt SSL traffic");
++ }
++#endif
++
++ // Cache this SSL session inside the QSslContext
++ if (!(configuration.sslOptions & QSsl::SslOptionDisableSessionSharing)) {
++ if (!sslContextPointer->cacheSession(ssl)) {
++ sslContextPointer.clear(); // we could not cache the session
++ } else {
++ // Cache the session for permanent usage as well
++ if (!(configuration.sslOptions & QSsl::SslOptionDisableSessionPersistence)) {
++ if (!sslContextPointer->sessionASN1().isEmpty())
++ configuration.sslSession = sslContextPointer->sessionASN1();
++ configuration.sslSessionTicketLifeTimeHint = sslContextPointer->sessionTicketLifeTimeHint();
++ }
++ }
++ }
++
++#if !defined(OPENSSL_NO_NEXTPROTONEG)
++
++ configuration.nextProtocolNegotiationStatus = sslContextPointer->npnContext().status;
++ if (sslContextPointer->npnContext().status == QSslConfiguration::NextProtocolNegotiationUnsupported) {
++ // we could not agree -> be conservative and use HTTP/1.1
++ configuration.nextNegotiatedProtocol = QByteArrayLiteral("http/1.1");
++ } else {
++ const unsigned char *proto = 0;
++ unsigned int proto_len = 0;
++
++ q_SSL_get0_alpn_selected(ssl, &proto, &proto_len);
++ if (proto_len && mode == QSslSocket::SslClientMode) {
++ // Client does not have a callback that sets it ...
++ configuration.nextProtocolNegotiationStatus = QSslConfiguration::NextProtocolNegotiationNegotiated;
++ }
++
++ if (!proto_len) { // Test if NPN was more lucky ...
++ q_SSL_get0_next_proto_negotiated(ssl, &proto, &proto_len);
++ }
++
++ if (proto_len)
++ configuration.nextNegotiatedProtocol = QByteArray(reinterpret_cast(proto), proto_len);
++ else
++ configuration.nextNegotiatedProtocol.clear();
++ }
++#endif // !defined(OPENSSL_NO_NEXTPROTONEG)
++
++ if (mode == QSslSocket::SslClientMode) {
++ EVP_PKEY *key;
++ if (q_SSL_get_server_tmp_key(ssl, &key))
++ configuration.ephemeralServerKey = QSslKey(key, QSsl::PublicKey);
++ }
++
++ connectionEncrypted = true;
++ emit q->encrypted();
++ if (autoStartHandshake && pendingClose) {
++ pendingClose = false;
++ q->disconnectFromHost();
++ }
++}
++
++QT_END_NAMESPACE
+diff --git a/src/network/ssl/qsslsocket_openssl11_symbols_p.h b/src/network/ssl/qsslsocket_openssl11_symbols_p.h
+new file mode 100644
+index 0000000000..2980b3d23e
+--- /dev/null
++++ b/src/network/ssl/qsslsocket_openssl11_symbols_p.h
+@@ -0,0 +1,132 @@
++/****************************************************************************
++**
++** Copyright (C) 2017 The Qt Company Ltd.
++** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
++** Copyright (C) 2016 Richard J. Moore
++** Contact: https://www.qt.io/licensing/
++**
++** This file is part of the QtNetwork module of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and The Qt Company. For licensing terms
++** and conditions see https://www.qt.io/terms-conditions. For further
++** information use the contact form at https://www.qt.io/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 3 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL3 included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU Lesser General Public License version 3 requirements
++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 2.0 or (at your option) the GNU General
++** Public license version 3 or any later version approved by the KDE Free
++** Qt Foundation. The licenses are as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
++** included in the packaging of this file. Please review the following
++** information to ensure the GNU General Public License requirements will
++** be met: https://www.gnu.org/licenses/gpl-2.0.html and
++** https://www.gnu.org/licenses/gpl-3.0.html.
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++/****************************************************************************
++**
++** In addition, as a special exception, the copyright holders listed above give
++** permission to link the code of its release of Qt with the OpenSSL project's
++** "OpenSSL" library (or modified versions of the "OpenSSL" library that use the
++** same license as the original version), and distribute the linked executables.
++**
++** You must comply with the GNU General Public License version 2 in all
++** respects for all of the code used other than the "OpenSSL" code. If you
++** modify this file, you may extend this exception to your version of the file,
++** but you are not obligated to do so. If you do not wish to do so, delete
++** this exception statement from your version of this file.
++**
++****************************************************************************/
++
++#ifndef QSSLSOCKET_OPENSSL11_SYMBOLS_P_H
++#define QSSLSOCKET_OPENSSL11_SYMBOLS_P_H
++
++//
++// W A R N I N G
++// -------------
++//
++// This file is not part of the Qt API. It exists purely as an
++// implementation detail. This header file may change from version to
++// version without notice, or even be removed.
++//
++// We mean it.
++//
++
++// Note: this file does not have QT_BEGIN_NAMESPACE/QT_END_NAMESPACE, it's done
++// in qsslsocket_openssl_symbols_p.h.
++
++#ifndef QSSLSOCKET_OPENSSL_SYMBOLS_P_H
++#error "You are not supposed to use this header file, include qsslsocket_openssl_symbols_p.h instead"
++#endif
++
++const unsigned char * q_ASN1_STRING_get0_data(const ASN1_STRING *x);
++
++Q_AUTOTEST_EXPORT BIO *q_BIO_new(const BIO_METHOD *a);
++Q_AUTOTEST_EXPORT const BIO_METHOD *q_BIO_s_mem();
++
++int q_DSA_bits(DSA *a);
++int q_EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c);
++int q_EVP_PKEY_base_id(EVP_PKEY *a);
++int q_RSA_bits(RSA *a);
++int q_OPENSSL_sk_num(OPENSSL_STACK *a);
++void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void (*b)(void *));
++OPENSSL_STACK *q_OPENSSL_sk_new_null();
++void q_OPENSSL_sk_push(OPENSSL_STACK *st, void *data);
++void q_OPENSSL_sk_free(OPENSSL_STACK *a);
++void * q_OPENSSL_sk_value(OPENSSL_STACK *a, int b);
++int q_SSL_session_reused(SSL *a);
++unsigned long q_SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op);
++int q_OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
++size_t q_SSL_get_client_random(SSL *a, unsigned char *out, size_t outlen);
++size_t q_SSL_SESSION_get_master_key(const SSL_SESSION *session, unsigned char *out, size_t outlen);
++int q_CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
++const SSL_METHOD *q_TLS_method();
++const SSL_METHOD *q_TLS_client_method();
++const SSL_METHOD *q_TLS_server_method();
++ASN1_TIME *q_X509_getm_notBefore(X509 *a);
++ASN1_TIME *q_X509_getm_notAfter(X509 *a);
++
++long q_X509_get_version(X509 *a);
++EVP_PKEY *q_X509_get_pubkey(X509 *a);
++void q_X509_STORE_set_verify_cb(X509_STORE *ctx, X509_STORE_CTX_verify_cb verify_cb);
++STACK_OF(X509) *q_X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx);
++void q_DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
++int q_DH_bits(DH *dh);
++
++# define q_SSL_load_error_strings() q_OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \
++ | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
++
++#define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_OPENSSL_sk_num)(st)
++#define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_OPENSSL_sk_value)(st, i)
++
++#define q_OPENSSL_add_all_algorithms_conf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
++ | OPENSSL_INIT_ADD_ALL_DIGESTS \
++ | OPENSSL_INIT_LOAD_CONFIG, NULL)
++#define q_OPENSSL_add_all_algorithms_noconf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
++ | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
++
++int q_OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
++void q_CRYPTO_free(void *str, const char *file, int line);
++
++long q_OpenSSL_version_num();
++const char *q_OpenSSL_version(int type);
++
++unsigned long q_SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session);
++
++#endif
+diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h
+index b2adb3e547..7f9e884045 100644
+--- a/src/network/ssl/qsslsocket_openssl_p.h
++++ b/src/network/ssl/qsslsocket_openssl_p.h
+@@ -1,6 +1,6 @@
+ /****************************************************************************
+ **
+-** Copyright (C) 2016 The Qt Company Ltd.
++** Copyright (C) 2017 The Qt Company Ltd.
+ ** Contact: https://www.qt.io/licensing/
+ **
+ ** This file is part of the QtNetwork module of the Qt Toolkit.
+@@ -98,8 +98,8 @@
+ #include
+ #include
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+-typedef _STACK STACK;
++#if QT_CONFIG(opensslv11)
++#include
+ #endif
+
+ QT_BEGIN_NAMESPACE
+@@ -151,7 +151,7 @@ public:
+ #endif
+
+ Q_AUTOTEST_EXPORT static long setupOpenSslOptions(QSsl::SslProtocol protocol, QSsl::SslOptions sslOptions);
+- static QSslCipher QSslCipher_from_SSL_CIPHER(SSL_CIPHER *cipher);
++ static QSslCipher QSslCipher_from_SSL_CIPHER(const SSL_CIPHER *cipher);
+ static QList STACKOFX509_to_QSslCertificates(STACK_OF(X509) *x509);
+ static QList verify(const QList &certificateChain, const QString &hostName);
+ static QString getErrorsFromOpenSsl();
+diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp
+index c344a94427..0ef8bf6b5e 100644
+--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp
++++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp
+@@ -1,7 +1,8 @@
+ /****************************************************************************
+ **
+-** Copyright (C) 2016 The Qt Company Ltd.
++** Copyright (C) 2017 The Qt Company Ltd.
+ ** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
++** Copyright (C) 2016 Richard J. Moore
+ ** Contact: https://www.qt.io/licensing/
+ **
+ ** This file is part of the QtNetwork module of the Qt Toolkit.
+@@ -136,49 +137,195 @@ void qsslSocketCannotResolveSymbolWarning(const char *functionName)
+
+ #endif // QT_LINKED_OPENSSL
+
++#if QT_CONFIG(opensslv11)
++
++// Below are the functions first introduced in version 1.1:
++
++DEFINEFUNC(const unsigned char *, ASN1_STRING_get0_data, const ASN1_STRING *a, a, return 0, return)
++DEFINEFUNC2(int, OPENSSL_init_ssl, uint64_t opts, opts, const OPENSSL_INIT_SETTINGS *settings, settings, return 0, return)
++DEFINEFUNC2(int, OPENSSL_init_crypto, uint64_t opts, opts, const OPENSSL_INIT_SETTINGS *settings, settings, return 0, return)
++DEFINEFUNC(BIO *, BIO_new, const BIO_METHOD *a, a, return 0, return)
++DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
++DEFINEFUNC2(int, BN_is_word, BIGNUM *a, a, BN_ULONG w, w, return 0, return)
++DEFINEFUNC(int, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX *c, c, return 0, return)
++DEFINEFUNC(int, EVP_PKEY_base_id, EVP_PKEY *a, a, return NID_undef, return)
++DEFINEFUNC(int, RSA_bits, RSA *a, a, return 0, return)
++DEFINEFUNC(int, DSA_bits, DSA *a, a, return 0, return)
++DEFINEFUNC(int, OPENSSL_sk_num, OPENSSL_STACK *a, a, return -1, return)
++DEFINEFUNC2(void, OPENSSL_sk_pop_free, OPENSSL_STACK *a, a, void (*b)(void*), b, return, DUMMYARG)
++DEFINEFUNC(OPENSSL_STACK *, OPENSSL_sk_new_null, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC2(void, OPENSSL_sk_push, OPENSSL_STACK *a, a, void *b, b, return, DUMMYARG)
++DEFINEFUNC(void, OPENSSL_sk_free, OPENSSL_STACK *a, a, return, DUMMYARG)
++DEFINEFUNC2(void *, OPENSSL_sk_value, OPENSSL_STACK *a, a, int b, b, return 0, return)
++DEFINEFUNC(int, SSL_session_reused, SSL *a, a, return 0, return)
++DEFINEFUNC2(unsigned long, SSL_CTX_set_options, SSL_CTX *ctx, ctx, unsigned long op, op, return 0, return)
++DEFINEFUNC3(size_t, SSL_get_client_random, SSL *a, a, unsigned char *out, out, size_t outlen, outlen, return 0, return)
++DEFINEFUNC3(size_t, SSL_SESSION_get_master_key, const SSL_SESSION *ses, ses, unsigned char *out, out, size_t outlen, outlen, return 0, return)
++DEFINEFUNC6(int, CRYPTO_get_ex_new_index, int class_index, class_index, long argl, argl, void *argp, argp, CRYPTO_EX_new *new_func, new_func, CRYPTO_EX_dup *dup_func, dup_func, CRYPTO_EX_free *free_func, free_func, return -1, return)
++
++DEFINEFUNC(const SSL_METHOD *, TLS_method, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(const SSL_METHOD *, TLS_client_method, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(const SSL_METHOD *, TLS_server_method, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(ASN1_TIME *, X509_getm_notBefore, X509 *a, a, return 0, return)
++DEFINEFUNC(ASN1_TIME *, X509_getm_notAfter, X509 *a, a, return 0, return)
++DEFINEFUNC(long, X509_get_version, X509 *a, a, return -1, return)
++DEFINEFUNC(EVP_PKEY *, X509_get_pubkey, X509 *a, a, return 0, return)
++DEFINEFUNC2(void, X509_STORE_set_verify_cb, X509_STORE *a, a, X509_STORE_CTX_verify_cb verify_cb, verify_cb, return, DUMMYARG)
++DEFINEFUNC(STACK_OF(X509) *, X509_STORE_CTX_get0_chain, X509_STORE_CTX *a, a, return 0, return)
++DEFINEFUNC3(void, CRYPTO_free, void *str, str, const char *file, file, int line, line, return, DUMMYARG)
++DEFINEFUNC(long, OpenSSL_version_num, void, DUMMYARG, return 0, return)
++DEFINEFUNC(const char *, OpenSSL_version, int a, a, return 0, return)
++DEFINEFUNC(unsigned long, SSL_SESSION_get_ticket_lifetime_hint, const SSL_SESSION *session, session, return 0, return)
++DEFINEFUNC4(void, DH_get0_pqg, const DH *dh, dh, const BIGNUM **p, p, const BIGNUM **q, q, const BIGNUM **g, g, return, DUMMYARG)
++DEFINEFUNC(int, DH_bits, DH *dh, dh, return 0, return)
++
++#else // QT_CONFIG(opensslv11)
++
++// Functions below are either deprecated or removed in OpenSSL >= 1.1:
++
++DEFINEFUNC(unsigned char *, ASN1_STRING_data, ASN1_STRING *a, a, return 0, return)
++
+ #ifdef SSLEAY_MACROS
+ DEFINEFUNC3(void *, ASN1_dup, i2d_of_void *a, a, d2i_of_void *b, b, char *c, c, return 0, return)
+ #endif
++DEFINEFUNC2(BIO *, BIO_new_file, const char *filename, filename, const char *mode, mode, return 0, return)
++DEFINEFUNC(void, ERR_clear_error, DUMMYARG, DUMMYARG, return, DUMMYARG)
++DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return 0, return)
++DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
++DEFINEFUNC(int, CRYPTO_num_locks, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(void, CRYPTO_set_locking_callback, void (*a)(int, int, const char *, int), a, return, DUMMYARG)
++DEFINEFUNC(void, CRYPTO_set_id_callback, unsigned long (*a)(), a, return, DUMMYARG)
++DEFINEFUNC(void, CRYPTO_free, void *a, a, return, DUMMYARG)
++DEFINEFUNC(unsigned long, ERR_peek_last_error, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(void, ERR_free_strings, void, DUMMYARG, return, DUMMYARG)
++DEFINEFUNC(void, EVP_CIPHER_CTX_cleanup, EVP_CIPHER_CTX *a, a, return, DUMMYARG)
++DEFINEFUNC(void, EVP_CIPHER_CTX_init, EVP_CIPHER_CTX *a, a, return, DUMMYARG)
++
++#ifdef SSLEAY_MACROS
++DEFINEFUNC6(void *, PEM_ASN1_read_bio, d2i_of_void *a, a, const char *b, b, BIO *c, c, void **d, d, pem_password_cb *e, e, void *f, f, return 0, return)
++DEFINEFUNC6(void *, PEM_ASN1_write_bio, d2i_of_void *a, a, const char *b, b, BIO *c, c, void **d, d, pem_password_cb *e, e, void *f, f, return 0, return)
++#endif // SSLEAY_MACROS
++
++DEFINEFUNC(int, sk_num, STACK *a, a, return -1, return)
++DEFINEFUNC2(void, sk_pop_free, STACK *a, a, void (*b)(void*), b, return, DUMMYARG)
++
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++DEFINEFUNC(_STACK *, sk_new_null, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC2(void, sk_push, _STACK *a, a, void *b, b, return, DUMMYARG)
++DEFINEFUNC(void, sk_free, _STACK *a, a, return, DUMMYARG)
++DEFINEFUNC2(void *, sk_value, STACK *a, a, int b, b, return 0, return)
++#else
++DEFINEFUNC(STACK *, sk_new_null, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC2(void, sk_push, STACK *a, a, char *b, b, return, DUMMYARG)
++DEFINEFUNC(void, sk_free, STACK *a, a, return, DUMMYARG)
++DEFINEFUNC2(char *, sk_value, STACK *a, a, int b, b, return 0, return)
++#endif // OPENSSL_VERSION_NUMBER >= 0x10000000L
++
++DEFINEFUNC(int, SSL_library_init, void, DUMMYARG, return -1, return)
++DEFINEFUNC(void, SSL_load_error_strings, void, DUMMYARG, return, DUMMYARG)
++
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++DEFINEFUNC5(int, SSL_get_ex_new_index, long argl, argl, void *argp, argp, CRYPTO_EX_new *new_func, new_func, CRYPTO_EX_dup *dup_func, dup_func, CRYPTO_EX_free *free_func, free_func, return -1, return)
++#endif // OPENSSL_VERSION_NUMBER >= 0x10001000L
++
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++#ifndef OPENSSL_NO_SSL2
++DEFINEFUNC(const SSL_METHOD *, SSLv2_client_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++#ifndef OPENSSL_NO_SSL3_METHOD
++DEFINEFUNC(const SSL_METHOD *, SSLv3_client_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++DEFINEFUNC(const SSL_METHOD *, SSLv23_client_method, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(const SSL_METHOD *, TLSv1_client_method, DUMMYARG, DUMMYARG, return 0, return)
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++DEFINEFUNC(const SSL_METHOD *, TLSv1_1_client_method, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(const SSL_METHOD *, TLSv1_2_client_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++#ifndef OPENSSL_NO_SSL2
++DEFINEFUNC(const SSL_METHOD *, SSLv2_server_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++#ifndef OPENSSL_NO_SSL3_METHOD
++DEFINEFUNC(const SSL_METHOD *, SSLv3_server_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++DEFINEFUNC(const SSL_METHOD *, SSLv23_server_method, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(const SSL_METHOD *, TLSv1_server_method, DUMMYARG, DUMMYARG, return 0, return)
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++DEFINEFUNC(const SSL_METHOD *, TLSv1_1_server_method, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(const SSL_METHOD *, TLSv1_2_server_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++#else
++#ifndef OPENSSL_NO_SSL2
++DEFINEFUNC(SSL_METHOD *, SSLv2_client_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++#ifndef OPENSSL_NO_SSL3_METHOD
++DEFINEFUNC(SSL_METHOD *, SSLv3_client_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++DEFINEFUNC(SSL_METHOD *, SSLv23_client_method, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(SSL_METHOD *, TLSv1_client_method, DUMMYARG, DUMMYARG, return 0, return)
++#ifndef OPENSSL_NO_SSL2
++DEFINEFUNC(SSL_METHOD *, SSLv2_server_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++#ifndef OPENSSL_NO_SSL3_METHOD
++DEFINEFUNC(SSL_METHOD *, SSLv3_server_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++DEFINEFUNC(SSL_METHOD *, SSLv23_server_method, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(SSL_METHOD *, TLSv1_server_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
++
++DEFINEFUNC(STACK_OF(X509) *, X509_STORE_CTX_get_chain, X509_STORE_CTX *a, a, return 0, return)
++
++#ifdef SSLEAY_MACROS
++DEFINEFUNC2(int, i2d_DSAPrivateKey, const DSA *a, a, unsigned char **b, b, return -1, return)
++DEFINEFUNC2(int, i2d_RSAPrivateKey, const RSA *a, a, unsigned char **b, b, return -1, return)
++#ifndef OPENSSL_NO_EC
++DEFINEFUNC2(int, i2d_ECPrivateKey, const EC_KEY *a, a, unsigned char **b, b, return -1, return)
++#endif
++DEFINEFUNC3(RSA *, d2i_RSAPrivateKey, RSA **a, a, unsigned char **b, b, long c, c, return 0, return)
++DEFINEFUNC3(DSA *, d2i_DSAPrivateKey, DSA **a, a, unsigned char **b, b, long c, c, return 0, return)
++#ifndef OPENSSL_NO_EC
++DEFINEFUNC3(EC_KEY *, d2i_ECPrivateKey, EC_KEY **a, a, unsigned char **b, b, long c, c, return 0, return)
++#endif
++#endif
++DEFINEFUNC(char *, CONF_get1_default_config_file, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(void, OPENSSL_add_all_algorithms_noconf, void, DUMMYARG, return, DUMMYARG)
++DEFINEFUNC(void, OPENSSL_add_all_algorithms_conf, void, DUMMYARG, return, DUMMYARG)
++DEFINEFUNC(long, SSLeay, void, DUMMYARG, return 0, return)
++DEFINEFUNC(const char *, SSLeay_version, int a, a, return 0, return)
++
++#endif // QT_CONFIG(opensslv11)
++
+ DEFINEFUNC(long, ASN1_INTEGER_get, ASN1_INTEGER *a, a, return 0, return)
+-DEFINEFUNC(unsigned char *, ASN1_STRING_data, ASN1_STRING *a, a, return 0, return)
+ DEFINEFUNC(int, ASN1_STRING_length, ASN1_STRING *a, a, return 0, return)
+-DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return);
++DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return)
+ DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return)
+ DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return)
+-DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return 0, return)
+ DEFINEFUNC2(BIO *, BIO_new_mem_buf, void *a, a, int b, b, return 0, return)
+ DEFINEFUNC3(int, BIO_read, BIO *a, a, void *b, b, int c, c, return -1, return)
+-DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
++
+ DEFINEFUNC3(int, BIO_write, BIO *a, a, const void *b, b, int c, c, return -1, return)
+ DEFINEFUNC(int, BN_num_bits, const BIGNUM *a, a, return 0, return)
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+-DEFINEFUNC2(int, BN_is_word, BIGNUM *a, a, BN_ULONG w, w, return 0, return)
+-#endif
+ DEFINEFUNC2(BN_ULONG, BN_mod_word, const BIGNUM *a, a, BN_ULONG w, w, return static_cast(-1), return)
+ #ifndef OPENSSL_NO_EC
+ DEFINEFUNC(const EC_GROUP*, EC_KEY_get0_group, const EC_KEY* k, k, return 0, return)
+ DEFINEFUNC(int, EC_GROUP_get_degree, const EC_GROUP* g, g, return 0, return)
+ #endif
+-DEFINEFUNC(int, CRYPTO_num_locks, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC(void, CRYPTO_set_locking_callback, void (*a)(int, int, const char *, int), a, return, DUMMYARG)
+-DEFINEFUNC(void, CRYPTO_set_id_callback, unsigned long (*a)(), a, return, DUMMYARG)
+-DEFINEFUNC(void, CRYPTO_free, void *a, a, return, DUMMYARG)
+ DEFINEFUNC(DSA *, DSA_new, DUMMYARG, DUMMYARG, return 0, return)
+ DEFINEFUNC(void, DSA_free, DSA *a, a, return, DUMMYARG)
+ DEFINEFUNC3(X509 *, d2i_X509, X509 **a, a, const unsigned char **b, b, long c, c, return 0, return)
+ DEFINEFUNC2(char *, ERR_error_string, unsigned long a, a, char *b, b, return 0, return)
+ DEFINEFUNC(unsigned long, ERR_get_error, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC(void, ERR_free_strings, void, DUMMYARG, return, DUMMYARG)
+-DEFINEFUNC(void, EVP_CIPHER_CTX_cleanup, EVP_CIPHER_CTX *a, a, return, DUMMYARG)
+-DEFINEFUNC(void, EVP_CIPHER_CTX_init, EVP_CIPHER_CTX *a, a, return, DUMMYARG)
+-DEFINEFUNC4(int, EVP_CIPHER_CTX_ctrl, EVP_CIPHER_CTX *ctx, ctx, int type, type, int arg, arg, void *ptr, ptr, return 0, return);
++DEFINEFUNC(EVP_CIPHER_CTX *, EVP_CIPHER_CTX_new, void, DUMMYARG, return 0, return)
++DEFINEFUNC(void, EVP_CIPHER_CTX_free, EVP_CIPHER_CTX *a, a, return, DUMMYARG)
++DEFINEFUNC4(int, EVP_CIPHER_CTX_ctrl, EVP_CIPHER_CTX *ctx, ctx, int type, type, int arg, arg, void *ptr, ptr, return 0, return)
+ DEFINEFUNC2(int, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX *ctx, ctx, int keylen, keylen, return 0, return)
+-DEFINEFUNC5(int, EVP_CipherInit, EVP_CIPHER_CTX *ctx, ctx, const EVP_CIPHER *type, type, const unsigned char *key, key, const unsigned char *iv, iv, int enc, enc, return 0, return);
+-DEFINEFUNC5(int, EVP_CipherUpdate, EVP_CIPHER_CTX *ctx, ctx, unsigned char *out, out, int *outl, outl, const unsigned char *in, in, int inl, inl, return 0, return);
+-DEFINEFUNC3(int, EVP_CipherFinal, EVP_CIPHER_CTX *ctx, ctx, unsigned char *out, out, int *outl, outl, return 0, return);
++DEFINEFUNC5(int, EVP_CipherInit, EVP_CIPHER_CTX *ctx, ctx, const EVP_CIPHER *type, type, const unsigned char *key, key, const unsigned char *iv, iv, int enc, enc, return 0, return)
++DEFINEFUNC6(int, EVP_CipherInit_ex, EVP_CIPHER_CTX *ctx, ctx, const EVP_CIPHER *cipher, cipher, ENGINE *impl, impl, const unsigned char *key, key, const unsigned char *iv, iv, int enc, enc, return 0, return)
++DEFINEFUNC5(int, EVP_CipherUpdate, EVP_CIPHER_CTX *ctx, ctx, unsigned char *out, out, int *outl, outl, const unsigned char *in, in, int inl, inl, return 0, return)
++DEFINEFUNC3(int, EVP_CipherFinal, EVP_CIPHER_CTX *ctx, ctx, unsigned char *out, out, int *outl, outl, return 0, return)
+ DEFINEFUNC(const EVP_CIPHER *, EVP_des_cbc, DUMMYARG, DUMMYARG, return 0, return)
+ DEFINEFUNC(const EVP_CIPHER *, EVP_des_ede3_cbc, DUMMYARG, DUMMYARG, return 0, return)
+ DEFINEFUNC(const EVP_CIPHER *, EVP_rc2_cbc, DUMMYARG, DUMMYARG, return 0, return)
++DEFINEFUNC(const EVP_MD *, EVP_sha1, DUMMYARG, DUMMYARG, return 0, return)
+ DEFINEFUNC3(int, EVP_PKEY_assign, EVP_PKEY *a, a, int b, b, char *c, c, return -1, return)
+ DEFINEFUNC2(int, EVP_PKEY_set1_RSA, EVP_PKEY *a, a, RSA *b, b, return -1, return)
+ DEFINEFUNC2(int, EVP_PKEY_set1_DSA, EVP_PKEY *a, a, DSA *b, b, return -1, return)
+@@ -202,10 +349,8 @@ DEFINEFUNC3(int, i2t_ASN1_OBJECT, char *a, a, int b, b, ASN1_OBJECT *c, c, retur
+ DEFINEFUNC4(int, OBJ_obj2txt, char *a, a, int b, b, ASN1_OBJECT *c, c, int d, d, return -1, return)
+
+ DEFINEFUNC(int, OBJ_obj2nid, const ASN1_OBJECT *a, a, return NID_undef, return)
+-#ifdef SSLEAY_MACROS
+-DEFINEFUNC6(void *, PEM_ASN1_read_bio, d2i_of_void *a, a, const char *b, b, BIO *c, c, void **d, d, pem_password_cb *e, e, void *f, f, return 0, return)
+-DEFINEFUNC6(void *, PEM_ASN1_write_bio, d2i_of_void *a, a, const char *b, b, BIO *c, c, void **d, d, pem_password_cb *e, e, void *f, f, return 0, return)
+-#else
++
++#ifndef SSLEAY_MACROS
+ DEFINEFUNC4(EVP_PKEY *, PEM_read_bio_PrivateKey, BIO *a, a, EVP_PKEY **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+ DEFINEFUNC4(DSA *, PEM_read_bio_DSAPrivateKey, BIO *a, a, DSA **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+ DEFINEFUNC4(RSA *, PEM_read_bio_RSAPrivateKey, BIO *a, a, RSA **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+@@ -218,7 +363,7 @@ DEFINEFUNC7(int, PEM_write_bio_RSAPrivateKey, BIO *a, a, RSA *b, b, const EVP_CI
+ #ifndef OPENSSL_NO_EC
+ DEFINEFUNC7(int, PEM_write_bio_ECPrivateKey, BIO *a, a, EC_KEY *b, b, const EVP_CIPHER *c, c, unsigned char *d, d, int e, e, pem_password_cb *f, f, void *g, g, return 0, return)
+ #endif
+-#endif
++#endif // !SSLEAY_MACROS
+ DEFINEFUNC4(EVP_PKEY *, PEM_read_bio_PUBKEY, BIO *a, a, EVP_PKEY **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+ DEFINEFUNC4(DSA *, PEM_read_bio_DSA_PUBKEY, BIO *a, a, DSA **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+ DEFINEFUNC4(RSA *, PEM_read_bio_RSA_PUBKEY, BIO *a, a, RSA **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+@@ -234,23 +379,10 @@ DEFINEFUNC2(void, RAND_seed, const void *a, a, int b, b, return, DUMMYARG)
+ DEFINEFUNC(int, RAND_status, void, DUMMYARG, return -1, return)
+ DEFINEFUNC(RSA *, RSA_new, DUMMYARG, DUMMYARG, return 0, return)
+ DEFINEFUNC(void, RSA_free, RSA *a, a, return, DUMMYARG)
+-DEFINEFUNC(int, sk_num, STACK *a, a, return -1, return)
+-DEFINEFUNC2(void, sk_pop_free, STACK *a, a, void (*b)(void*), b, return, DUMMYARG)
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+-DEFINEFUNC(_STACK *, sk_new_null, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC2(void, sk_push, _STACK *a, a, void *b, b, return, DUMMYARG)
+-DEFINEFUNC(void, sk_free, _STACK *a, a, return, DUMMYARG)
+-DEFINEFUNC2(void *, sk_value, STACK *a, a, int b, b, return 0, return)
+-#else
+-DEFINEFUNC(STACK *, sk_new_null, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC2(void, sk_push, STACK *a, a, char *b, b, return, DUMMYARG)
+-DEFINEFUNC(void, sk_free, STACK *a, a, return, DUMMYARG)
+-DEFINEFUNC2(char *, sk_value, STACK *a, a, int b, b, return 0, return)
+-#endif
+ DEFINEFUNC(int, SSL_accept, SSL *a, a, return -1, return)
+ DEFINEFUNC(int, SSL_clear, SSL *a, a, return -1, return)
+-DEFINEFUNC3(char *, SSL_CIPHER_description, SSL_CIPHER *a, a, char *b, b, int c, c, return 0, return)
+-DEFINEFUNC2(int, SSL_CIPHER_get_bits, SSL_CIPHER *a, a, int *b, b, return 0, return)
++DEFINEFUNC3(char *, SSL_CIPHER_description, const SSL_CIPHER *a, a, char *b, b, int c, c, return 0, return)
++DEFINEFUNC2(int, SSL_CIPHER_get_bits, const SSL_CIPHER *a, a, int *b, b, return 0, return)
+ DEFINEFUNC(int, SSL_connect, SSL *a, a, return -1, return)
+ DEFINEFUNC(int, SSL_CTX_check_private_key, const SSL_CTX *a, a, return -1, return)
+ DEFINEFUNC4(long, SSL_CTX_ctrl, SSL_CTX *a, a, int b, b, long c, c, void *d, d, return -1, return)
+@@ -287,8 +419,6 @@ DEFINEFUNC(long, SSL_get_verify_result, const SSL *a, a, return -1, return)
+ #else
+ DEFINEFUNC(long, SSL_get_verify_result, SSL *a, a, return -1, return)
+ #endif
+-DEFINEFUNC(int, SSL_library_init, void, DUMMYARG, return -1, return)
+-DEFINEFUNC(void, SSL_load_error_strings, void, DUMMYARG, return, DUMMYARG)
+ DEFINEFUNC(SSL *, SSL_new, SSL_CTX *a, a, return 0, return)
+ DEFINEFUNC4(long, SSL_ctrl, SSL *a, a, int cmd, cmd, long larg, larg, void *parg, parg, return -1, return)
+ DEFINEFUNC3(int, SSL_read, SSL *a, a, void *b, b, int c, c, return -1, return)
+@@ -301,7 +431,6 @@ DEFINEFUNC(void, SSL_SESSION_free, SSL_SESSION *ses, ses, return, DUMMYARG)
+ DEFINEFUNC(SSL_SESSION*, SSL_get1_session, SSL *ssl, ssl, return 0, return)
+ DEFINEFUNC(SSL_SESSION*, SSL_get_session, const SSL *ssl, ssl, return 0, return)
+ #if OPENSSL_VERSION_NUMBER >= 0x10001000L
+-DEFINEFUNC5(int, SSL_get_ex_new_index, long argl, argl, void *argp, argp, CRYPTO_EX_new *new_func, new_func, CRYPTO_EX_dup *dup_func, dup_func, CRYPTO_EX_free *free_func, free_func, return -1, return)
+ DEFINEFUNC3(int, SSL_set_ex_data, SSL *ssl, ssl, int idx, idx, void *arg, arg, return 0, return)
+ DEFINEFUNC2(void *, SSL_get_ex_data, const SSL *ssl, ssl, int idx, idx, return NULL, return)
+ #endif
+@@ -310,51 +439,9 @@ DEFINEFUNC2(void, SSL_set_psk_client_callback, SSL* ssl, ssl, q_psk_client_callb
+ DEFINEFUNC2(void, SSL_set_psk_server_callback, SSL* ssl, ssl, q_psk_server_callback_t callback, callback, return, DUMMYARG)
+ DEFINEFUNC2(int, SSL_CTX_use_psk_identity_hint, SSL_CTX* ctx, ctx, const char *hint, hint, return 0, return)
+ #endif
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+-#ifndef OPENSSL_NO_SSL2
+-DEFINEFUNC(const SSL_METHOD *, SSLv2_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+-DEFINEFUNC(const SSL_METHOD *, SSLv3_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-DEFINEFUNC(const SSL_METHOD *, SSLv23_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC(const SSL_METHOD *, TLSv1_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-#if OPENSSL_VERSION_NUMBER >= 0x10001000L
+-DEFINEFUNC(const SSL_METHOD *, TLSv1_1_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC(const SSL_METHOD *, TLSv1_2_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-#ifndef OPENSSL_NO_SSL2
+-DEFINEFUNC(const SSL_METHOD *, SSLv2_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+-DEFINEFUNC(const SSL_METHOD *, SSLv3_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-DEFINEFUNC(const SSL_METHOD *, SSLv23_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC(const SSL_METHOD *, TLSv1_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-#if OPENSSL_VERSION_NUMBER >= 0x10001000L
+-DEFINEFUNC(const SSL_METHOD *, TLSv1_1_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC(const SSL_METHOD *, TLSv1_2_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-#else
+-#ifndef OPENSSL_NO_SSL2
+-DEFINEFUNC(SSL_METHOD *, SSLv2_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+-DEFINEFUNC(SSL_METHOD *, SSLv3_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-DEFINEFUNC(SSL_METHOD *, SSLv23_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC(SSL_METHOD *, TLSv1_client_method, DUMMYARG, DUMMYARG, return 0, return)
+-#ifndef OPENSSL_NO_SSL2
+-DEFINEFUNC(SSL_METHOD *, SSLv2_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+-DEFINEFUNC(SSL_METHOD *, SSLv3_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+-DEFINEFUNC(SSL_METHOD *, SSLv23_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-DEFINEFUNC(SSL_METHOD *, TLSv1_server_method, DUMMYARG, DUMMYARG, return 0, return)
+-#endif
+ DEFINEFUNC3(int, SSL_write, SSL *a, a, const void *b, b, int c, c, return -1, return)
+ DEFINEFUNC2(int, X509_cmp, X509 *a, a, X509 *b, b, return -1, return)
++DEFINEFUNC4(int, X509_digest, const X509 *x509, x509, const EVP_MD *type, type, unsigned char *md, md, unsigned int *len, len, return -1, return)
+ #ifndef SSLEAY_MACROS
+ DEFINEFUNC(X509 *, X509_dup, X509 *a, a, return 0, return)
+ #endif
+@@ -378,6 +465,7 @@ DEFINEFUNC2(int, ASN1_STRING_print, BIO *a, a, ASN1_STRING *b, b, return 0, retu
+ DEFINEFUNC2(int, X509_check_issued, X509 *a, a, X509 *b, b, return -1, return)
+ DEFINEFUNC(X509_NAME *, X509_get_issuer_name, X509 *a, a, return 0, return)
+ DEFINEFUNC(X509_NAME *, X509_get_subject_name, X509 *a, a, return 0, return)
++DEFINEFUNC(ASN1_INTEGER *, X509_get_serialNumber, X509 *a, a, return 0, return)
+ DEFINEFUNC(int, X509_verify_cert, X509_STORE_CTX *a, a, return -1, return)
+ DEFINEFUNC(int, X509_NAME_entry_count, X509_NAME *a, a, return 0, return)
+ DEFINEFUNC2(X509_NAME_ENTRY *, X509_NAME_get_entry, X509_NAME *a, a, int b, b, return 0, return)
+@@ -393,25 +481,8 @@ DEFINEFUNC2(int, X509_STORE_CTX_set_purpose, X509_STORE_CTX *a, a, int b, b, ret
+ DEFINEFUNC(int, X509_STORE_CTX_get_error, X509_STORE_CTX *a, a, return -1, return)
+ DEFINEFUNC(int, X509_STORE_CTX_get_error_depth, X509_STORE_CTX *a, a, return -1, return)
+ DEFINEFUNC(X509 *, X509_STORE_CTX_get_current_cert, X509_STORE_CTX *a, a, return 0, return)
+-DEFINEFUNC(STACK_OF(X509) *, X509_STORE_CTX_get_chain, X509_STORE_CTX *a, a, return 0, return)
+ DEFINEFUNC(X509_STORE_CTX *, X509_STORE_CTX_new, DUMMYARG, DUMMYARG, return 0, return)
+-#ifdef SSLEAY_MACROS
+-DEFINEFUNC2(int, i2d_DSAPrivateKey, const DSA *a, a, unsigned char **b, b, return -1, return)
+-DEFINEFUNC2(int, i2d_RSAPrivateKey, const RSA *a, a, unsigned char **b, b, return -1, return)
+-#ifndef OPENSSL_NO_EC
+-DEFINEFUNC2(int, i2d_ECPrivateKey, const EC_KEY *a, a, unsigned char **b, b, return -1, return)
+-#endif
+-DEFINEFUNC3(RSA *, d2i_RSAPrivateKey, RSA **a, a, unsigned char **b, b, long c, c, return 0, return)
+-DEFINEFUNC3(DSA *, d2i_DSAPrivateKey, DSA **a, a, unsigned char **b, b, long c, c, return 0, return)
+-#ifndef OPENSSL_NO_EC
+-DEFINEFUNC3(EC_KEY *, d2i_ECPrivateKey, EC_KEY **a, a, unsigned char **b, b, long c, c, return 0, return)
+-#endif
+-#endif
+-DEFINEFUNC(void, OPENSSL_add_all_algorithms_noconf, void, DUMMYARG, return, DUMMYARG)
+-DEFINEFUNC(void, OPENSSL_add_all_algorithms_conf, void, DUMMYARG, return, DUMMYARG)
+ DEFINEFUNC3(int, SSL_CTX_load_verify_locations, SSL_CTX *ctx, ctx, const char *CAfile, CAfile, const char *CApath, CApath, return 0, return)
+-DEFINEFUNC(long, SSLeay, void, DUMMYARG, return 0, return)
+-DEFINEFUNC(const char *, SSLeay_version, int a, a, return 0, return)
+ DEFINEFUNC2(int, i2d_SSL_SESSION, SSL_SESSION *in, in, unsigned char **pp, pp, return 0, return)
+ DEFINEFUNC3(SSL_SESSION *, d2i_SSL_SESSION, SSL_SESSION **a, a, const unsigned char **pp, pp, long length, length, return 0, return)
+ #if OPENSSL_VERSION_NUMBER >= 0x1000100fL && !defined(OPENSSL_NO_NEXTPROTONEG)
+@@ -694,8 +765,8 @@ static QPair loadOpenSsl()
+ #ifndef Q_OS_DARWIN
+ // second attempt: find the development files libssl.so and libcrypto.so
+ //
+- // disabled on OS X/iOS:
+- // OS X's /usr/lib/libssl.dylib, /usr/lib/libcrypto.dylib will be picked up in the third
++ // disabled on macOS/iOS:
++ // macOS's /usr/lib/libssl.dylib, /usr/lib/libcrypto.dylib will be picked up in the third
+ // attempt, _after_ /Contents/Frameworks has been searched.
+ // iOS does not ship a system libssl.dylib, libcrypto.dylib in the first place.
+ libssl->setFileNameAndVersion(QLatin1String("ssl"), -1);
+@@ -754,7 +825,11 @@ bool q_resolveOpenSslSymbols()
+ static bool symbolsResolved = false;
+ static bool triedToResolveSymbols = false;
+ #ifndef QT_NO_THREAD
++#if QT_CONFIG(opensslv11)
++ QMutexLocker locker(QMutexPool::globalInstanceGet((void *)&q_OPENSSL_init_ssl));
++#else
+ QMutexLocker locker(QMutexPool::globalInstanceGet((void *)&q_SSL_library_init));
++#endif
+ #endif
+ if (symbolsResolved)
+ return true;
+@@ -771,11 +846,145 @@ bool q_resolveOpenSslSymbols()
+ // failed to load them
+ return false;
+
++#if QT_CONFIG(opensslv11)
++
++ RESOLVEFUNC(OPENSSL_init_ssl)
++ RESOLVEFUNC(OPENSSL_init_crypto)
++ RESOLVEFUNC(ASN1_STRING_get0_data)
++ RESOLVEFUNC(EVP_CIPHER_CTX_reset)
++ RESOLVEFUNC(EVP_PKEY_base_id)
++ RESOLVEFUNC(RSA_bits)
++ RESOLVEFUNC(OPENSSL_sk_new_null)
++ RESOLVEFUNC(OPENSSL_sk_push)
++ RESOLVEFUNC(OPENSSL_sk_free)
++ RESOLVEFUNC(OPENSSL_sk_num)
++ RESOLVEFUNC(OPENSSL_sk_pop_free)
++ RESOLVEFUNC(OPENSSL_sk_value)
++ RESOLVEFUNC(DH_get0_pqg)
++ RESOLVEFUNC(SSL_CTX_set_options)
++ RESOLVEFUNC(SSL_get_client_random)
++ RESOLVEFUNC(SSL_SESSION_get_master_key)
++ RESOLVEFUNC(SSL_session_reused)
++ RESOLVEFUNC(SSL_get_session)
++ RESOLVEFUNC(CRYPTO_get_ex_new_index)
++ RESOLVEFUNC(TLS_method)
++ RESOLVEFUNC(TLS_client_method)
++ RESOLVEFUNC(TLS_server_method)
++ RESOLVEFUNC(X509_STORE_CTX_get0_chain)
++ RESOLVEFUNC(X509_getm_notBefore)
++ RESOLVEFUNC(X509_getm_notAfter)
++ RESOLVEFUNC(X509_get_version)
++ RESOLVEFUNC(X509_get_pubkey)
++ RESOLVEFUNC(X509_STORE_set_verify_cb)
++ RESOLVEFUNC(CRYPTO_free)
++ RESOLVEFUNC(OpenSSL_version_num)
++ RESOLVEFUNC(OpenSSL_version)
++ if (!_q_OpenSSL_version) {
++ // Apparently, we were built with OpenSSL 1.1 enabled but are now using
++ // a wrong library.
++ delete libs.first;
++ delete libs.second;
++ qCWarning(lcSsl, "Incompatible version of OpenSSL");
++ return false;
++ }
++
++ RESOLVEFUNC(SSL_SESSION_get_ticket_lifetime_hint)
++ RESOLVEFUNC(DH_bits)
++ RESOLVEFUNC(DSA_bits)
++
++#else // !opensslv11
++
++ RESOLVEFUNC(ASN1_STRING_data)
++
+ #ifdef SSLEAY_MACROS
+ RESOLVEFUNC(ASN1_dup)
++#endif // SSLEAY_MACROS
++ RESOLVEFUNC(BIO_new_file)
++ RESOLVEFUNC(ERR_clear_error)
++ RESOLVEFUNC(CRYPTO_free)
++ RESOLVEFUNC(CRYPTO_num_locks)
++ RESOLVEFUNC(CRYPTO_set_id_callback)
++ RESOLVEFUNC(CRYPTO_set_locking_callback)
++ RESOLVEFUNC(ERR_peek_last_error)
++ RESOLVEFUNC(ERR_free_strings)
++ RESOLVEFUNC(EVP_CIPHER_CTX_cleanup)
++ RESOLVEFUNC(EVP_CIPHER_CTX_init)
++
++#ifdef SSLEAY_MACROS // ### verify
++ RESOLVEFUNC(PEM_ASN1_read_bio)
++#endif // SSLEAY_MACROS
++
++ RESOLVEFUNC(sk_new_null)
++ RESOLVEFUNC(sk_push)
++ RESOLVEFUNC(sk_free)
++ RESOLVEFUNC(sk_num)
++ RESOLVEFUNC(sk_pop_free)
++ RESOLVEFUNC(sk_value)
++ RESOLVEFUNC(SSL_library_init)
++ RESOLVEFUNC(SSL_load_error_strings)
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++ RESOLVEFUNC(SSL_get_ex_new_index)
++#endif
++#ifndef OPENSSL_NO_SSL2
++ RESOLVEFUNC(SSLv2_client_method)
+ #endif
++#ifndef OPENSSL_NO_SSL3_METHOD
++ RESOLVEFUNC(SSLv3_client_method)
++#endif
++ RESOLVEFUNC(SSLv23_client_method)
++ RESOLVEFUNC(TLSv1_client_method)
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++ RESOLVEFUNC(TLSv1_1_client_method)
++ RESOLVEFUNC(TLSv1_2_client_method)
++#endif
++#ifndef OPENSSL_NO_SSL2
++ RESOLVEFUNC(SSLv2_server_method)
++#endif
++#ifndef OPENSSL_NO_SSL3_METHOD
++ RESOLVEFUNC(SSLv3_server_method)
++#endif
++ RESOLVEFUNC(SSLv23_server_method)
++ RESOLVEFUNC(TLSv1_server_method)
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++ RESOLVEFUNC(TLSv1_1_server_method)
++ RESOLVEFUNC(TLSv1_2_server_method)
++#endif
++ RESOLVEFUNC(X509_STORE_CTX_get_chain)
++#ifdef SSLEAY_MACROS
++ RESOLVEFUNC(i2d_DSAPrivateKey)
++ RESOLVEFUNC(i2d_RSAPrivateKey)
++ RESOLVEFUNC(d2i_DSAPrivateKey)
++ RESOLVEFUNC(d2i_RSAPrivateKey)
++#endif
++ RESOLVEFUNC(CONF_get1_default_config_file)
++ RESOLVEFUNC(OPENSSL_add_all_algorithms_noconf)
++ RESOLVEFUNC(OPENSSL_add_all_algorithms_conf)
++ RESOLVEFUNC(SSLeay)
++
++ if (!_q_SSLeay || q_SSLeay() >= 0x10100000L) {
++ // OpenSSL 1.1 has deprecated and removed SSLeay. We consider a failure to
++ // resolve this symbol as a failure to resolve symbols.
++ // The right operand of '||' above is ... a bit of paranoia.
++ delete libs.first;
++ delete libs.second;
++ qCWarning(lcSsl, "Incompatible version of OpenSSL");
++ return false;
++ }
++
++
++ RESOLVEFUNC(SSLeay_version)
++
++#ifndef OPENSSL_NO_EC
++#if OPENSSL_VERSION_NUMBER >= 0x10002000L
++ if (q_SSLeay() >= 0x10002000L)
++ RESOLVEFUNC(EC_curve_nist2nid)
++#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
++#endif // OPENSSL_NO_EC
++
++
++#endif // !opensslv11
++
+ RESOLVEFUNC(ASN1_INTEGER_get)
+- RESOLVEFUNC(ASN1_STRING_data)
+ RESOLVEFUNC(ASN1_STRING_length)
+ RESOLVEFUNC(ASN1_STRING_to_UTF8)
+ RESOLVEFUNC(BIO_ctrl)
+@@ -794,25 +1003,22 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(BN_is_word)
+ #endif
+ RESOLVEFUNC(BN_mod_word)
+- RESOLVEFUNC(CRYPTO_free)
+- RESOLVEFUNC(CRYPTO_num_locks)
+- RESOLVEFUNC(CRYPTO_set_id_callback)
+- RESOLVEFUNC(CRYPTO_set_locking_callback)
+ RESOLVEFUNC(DSA_new)
+ RESOLVEFUNC(DSA_free)
+ RESOLVEFUNC(ERR_error_string)
+ RESOLVEFUNC(ERR_get_error)
+- RESOLVEFUNC(ERR_free_strings)
+- RESOLVEFUNC(EVP_CIPHER_CTX_cleanup)
+- RESOLVEFUNC(EVP_CIPHER_CTX_init)
++ RESOLVEFUNC(EVP_CIPHER_CTX_new)
++ RESOLVEFUNC(EVP_CIPHER_CTX_free)
+ RESOLVEFUNC(EVP_CIPHER_CTX_ctrl)
+ RESOLVEFUNC(EVP_CIPHER_CTX_set_key_length)
+ RESOLVEFUNC(EVP_CipherInit)
++ RESOLVEFUNC(EVP_CipherInit_ex)
+ RESOLVEFUNC(EVP_CipherUpdate)
+ RESOLVEFUNC(EVP_CipherFinal)
+ RESOLVEFUNC(EVP_des_cbc)
+ RESOLVEFUNC(EVP_des_ede3_cbc)
+ RESOLVEFUNC(EVP_rc2_cbc)
++ RESOLVEFUNC(EVP_sha1)
+ RESOLVEFUNC(EVP_PKEY_assign)
+ RESOLVEFUNC(EVP_PKEY_set1_RSA)
+ RESOLVEFUNC(EVP_PKEY_set1_DSA)
+@@ -834,9 +1040,8 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(i2t_ASN1_OBJECT)
+ RESOLVEFUNC(OBJ_obj2txt)
+ RESOLVEFUNC(OBJ_obj2nid)
+-#ifdef SSLEAY_MACROS // ### verify
+- RESOLVEFUNC(PEM_ASN1_read_bio)
+-#else
++
++#ifndef SSLEAY_MACROS
+ RESOLVEFUNC(PEM_read_bio_PrivateKey)
+ RESOLVEFUNC(PEM_read_bio_DSAPrivateKey)
+ RESOLVEFUNC(PEM_read_bio_RSAPrivateKey)
+@@ -849,7 +1054,8 @@ bool q_resolveOpenSslSymbols()
+ #ifndef OPENSSL_NO_EC
+ RESOLVEFUNC(PEM_write_bio_ECPrivateKey)
+ #endif
+-#endif
++#endif // !SSLEAY_MACROS
++
+ RESOLVEFUNC(PEM_read_bio_PUBKEY)
+ RESOLVEFUNC(PEM_read_bio_DSA_PUBKEY)
+ RESOLVEFUNC(PEM_read_bio_RSA_PUBKEY)
+@@ -865,12 +1071,6 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(RAND_status)
+ RESOLVEFUNC(RSA_new)
+ RESOLVEFUNC(RSA_free)
+- RESOLVEFUNC(sk_new_null)
+- RESOLVEFUNC(sk_push)
+- RESOLVEFUNC(sk_free)
+- RESOLVEFUNC(sk_num)
+- RESOLVEFUNC(sk_pop_free)
+- RESOLVEFUNC(sk_value)
+ RESOLVEFUNC(SSL_CIPHER_description)
+ RESOLVEFUNC(SSL_CIPHER_get_bits)
+ RESOLVEFUNC(SSL_CTX_check_private_key)
+@@ -898,8 +1098,6 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(SSL_get_peer_cert_chain)
+ RESOLVEFUNC(SSL_get_peer_certificate)
+ RESOLVEFUNC(SSL_get_verify_result)
+- RESOLVEFUNC(SSL_library_init)
+- RESOLVEFUNC(SSL_load_error_strings)
+ RESOLVEFUNC(SSL_new)
+ RESOLVEFUNC(SSL_ctrl)
+ RESOLVEFUNC(SSL_read)
+@@ -912,7 +1110,6 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(SSL_get1_session)
+ RESOLVEFUNC(SSL_get_session)
+ #if OPENSSL_VERSION_NUMBER >= 0x10001000L
+- RESOLVEFUNC(SSL_get_ex_new_index)
+ RESOLVEFUNC(SSL_set_ex_data)
+ RESOLVEFUNC(SSL_get_ex_data)
+ #endif
+@@ -922,30 +1119,6 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(SSL_CTX_use_psk_identity_hint)
+ #endif
+ RESOLVEFUNC(SSL_write)
+-#ifndef OPENSSL_NO_SSL2
+- RESOLVEFUNC(SSLv2_client_method)
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+- RESOLVEFUNC(SSLv3_client_method)
+-#endif
+- RESOLVEFUNC(SSLv23_client_method)
+- RESOLVEFUNC(TLSv1_client_method)
+-#if OPENSSL_VERSION_NUMBER >= 0x10001000L
+- RESOLVEFUNC(TLSv1_1_client_method)
+- RESOLVEFUNC(TLSv1_2_client_method)
+-#endif
+-#ifndef OPENSSL_NO_SSL2
+- RESOLVEFUNC(SSLv2_server_method)
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+- RESOLVEFUNC(SSLv3_server_method)
+-#endif
+- RESOLVEFUNC(SSLv23_server_method)
+- RESOLVEFUNC(TLSv1_server_method)
+-#if OPENSSL_VERSION_NUMBER >= 0x10001000L
+- RESOLVEFUNC(TLSv1_1_server_method)
+- RESOLVEFUNC(TLSv1_2_server_method)
+-#endif
+ RESOLVEFUNC(X509_NAME_entry_count)
+ RESOLVEFUNC(X509_NAME_get_entry)
+ RESOLVEFUNC(X509_NAME_ENTRY_get_data)
+@@ -961,12 +1134,12 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(X509_STORE_CTX_get_error)
+ RESOLVEFUNC(X509_STORE_CTX_get_error_depth)
+ RESOLVEFUNC(X509_STORE_CTX_get_current_cert)
+- RESOLVEFUNC(X509_STORE_CTX_get_chain)
+ RESOLVEFUNC(X509_cmp)
+ #ifndef SSLEAY_MACROS
+ RESOLVEFUNC(X509_dup)
+ #endif
+ RESOLVEFUNC(X509_print)
++ RESOLVEFUNC(X509_digest)
+ RESOLVEFUNC(X509_EXTENSION_get_object)
+ RESOLVEFUNC(X509_free)
+ RESOLVEFUNC(X509_get_ext)
+@@ -982,20 +1155,11 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(X509_check_issued)
+ RESOLVEFUNC(X509_get_issuer_name)
+ RESOLVEFUNC(X509_get_subject_name)
++ RESOLVEFUNC(X509_get_serialNumber)
+ RESOLVEFUNC(X509_verify_cert)
+ RESOLVEFUNC(d2i_X509)
+ RESOLVEFUNC(i2d_X509)
+-#ifdef SSLEAY_MACROS
+- RESOLVEFUNC(i2d_DSAPrivateKey)
+- RESOLVEFUNC(i2d_RSAPrivateKey)
+- RESOLVEFUNC(d2i_DSAPrivateKey)
+- RESOLVEFUNC(d2i_RSAPrivateKey)
+-#endif
+- RESOLVEFUNC(OPENSSL_add_all_algorithms_noconf)
+- RESOLVEFUNC(OPENSSL_add_all_algorithms_conf)
+ RESOLVEFUNC(SSL_CTX_load_verify_locations)
+- RESOLVEFUNC(SSLeay)
+- RESOLVEFUNC(SSLeay_version)
+ RESOLVEFUNC(i2d_SSL_SESSION)
+ RESOLVEFUNC(d2i_SSL_SESSION)
+ #if OPENSSL_VERSION_NUMBER >= 0x1000100fL && !defined(OPENSSL_NO_NEXTPROTONEG)
+@@ -1019,27 +1183,14 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(EC_KEY_new_by_curve_name)
+ RESOLVEFUNC(EC_KEY_free)
+ RESOLVEFUNC(EC_get_builtin_curves)
+-#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+- if (q_SSLeay() >= 0x10002000L)
+- RESOLVEFUNC(EC_curve_nist2nid)
+-#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
+ #endif // OPENSSL_NO_EC
+ RESOLVEFUNC(PKCS12_parse)
+ RESOLVEFUNC(d2i_PKCS12_bio)
+ RESOLVEFUNC(PKCS12_free)
+
++ symbolsResolved = true;
+ delete libs.first;
+ delete libs.second;
+- if (!_q_SSLeay || q_SSLeay() >= 0x10100000L) {
+- // OpenSSL 1.1 deprecated and removed SSLeay. We consider a failure to
+- // resolve this symbol as a failure to resolve symbols.
+- // The right operand of '||' above ... a bit of paranoia.
+- qCWarning(lcSsl, "Incompatible version of OpenSSL");
+- return false;
+- }
+-
+- symbolsResolved = true;
+-
+ return true;
+ }
+ #endif // QT_CONFIG(library)
+diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h
+index b35a895d38..796bf2d4f5 100644
+--- a/src/network/ssl/qsslsocket_openssl_symbols_p.h
++++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h
+@@ -1,6 +1,6 @@
+ /****************************************************************************
+ **
+-** Copyright (C) 2016 The Qt Company Ltd.
++** Copyright (C) 2017 The Qt Company Ltd.
+ ** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+ ** Contact: https://www.qt.io/licensing/
+ **
+@@ -56,6 +56,7 @@
+ #ifndef QSSLSOCKET_OPENSSL_SYMBOLS_P_H
+ #define QSSLSOCKET_OPENSSL_SYMBOLS_P_H
+
++
+ //
+ // W A R N I N G
+ // -------------
+@@ -215,17 +216,20 @@ QT_BEGIN_NAMESPACE
+
+ #endif // !defined QT_LINKED_OPENSSL
+
++#if QT_CONFIG(opensslv11)
++#include "qsslsocket_openssl11_symbols_p.h"
++#else
++#include "qsslsocket_opensslpre11_symbols_p.h"
++#endif // QT_CONFIG
++
+ bool q_resolveOpenSslSymbols();
+ long q_ASN1_INTEGER_get(ASN1_INTEGER *a);
+-unsigned char * q_ASN1_STRING_data(ASN1_STRING *a);
+ int q_ASN1_STRING_length(ASN1_STRING *a);
+ int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b);
+ long q_BIO_ctrl(BIO *a, int b, long c, void *d);
+ Q_AUTOTEST_EXPORT int q_BIO_free(BIO *a);
+-Q_AUTOTEST_EXPORT BIO *q_BIO_new(BIO_METHOD *a);
+ BIO *q_BIO_new_mem_buf(void *a, int b);
+ int q_BIO_read(BIO *a, void *b, int c);
+-Q_AUTOTEST_EXPORT BIO_METHOD *q_BIO_s_mem();
+ Q_AUTOTEST_EXPORT int q_BIO_write(BIO *a, const void *b, int c);
+ int q_BN_num_bits(const BIGNUM *a);
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000L
+@@ -247,26 +251,23 @@ BN_ULONG q_BN_mod_word(const BIGNUM *a, BN_ULONG w);
+ const EC_GROUP* q_EC_KEY_get0_group(const EC_KEY* k);
+ int q_EC_GROUP_get_degree(const EC_GROUP* g);
+ #endif
+-int q_CRYPTO_num_locks();
+-void q_CRYPTO_set_locking_callback(void (*a)(int, int, const char *, int));
+-void q_CRYPTO_set_id_callback(unsigned long (*a)());
+-void q_CRYPTO_free(void *a);
+ DSA *q_DSA_new();
+ void q_DSA_free(DSA *a);
+ X509 *q_d2i_X509(X509 **a, const unsigned char **b, long c);
+ char *q_ERR_error_string(unsigned long a, char *b);
+ unsigned long q_ERR_get_error();
+-void q_ERR_free_strings();
+-void q_EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
+-void q_EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
++EVP_CIPHER_CTX *q_EVP_CIPHER_CTX_new();
++void q_EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);
+ int q_EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
+ int q_EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
+ int q_EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv, int enc);
++int q_EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc);
+ int q_EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl);
+ int q_EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
+ const EVP_CIPHER *q_EVP_des_cbc();
+ const EVP_CIPHER *q_EVP_des_ede3_cbc();
+ const EVP_CIPHER *q_EVP_rc2_cbc();
++const EVP_MD *q_EVP_sha1();
+ int q_EVP_PKEY_assign(EVP_PKEY *a, int b, char *c);
+ Q_AUTOTEST_EXPORT int q_EVP_PKEY_set1_RSA(EVP_PKEY *a, RSA *b);
+ int q_EVP_PKEY_set1_DSA(EVP_PKEY *a, DSA *b);
+@@ -310,7 +311,7 @@ int q_PEM_write_bio_RSAPrivateKey(BIO *a, RSA *b, const EVP_CIPHER *c, unsigned
+ int q_PEM_write_bio_ECPrivateKey(BIO *a, EC_KEY *b, const EVP_CIPHER *c, unsigned char *d,
+ int e, pem_password_cb *f, void *g);
+ #endif
+-#endif
++#endif // SSLEAY_MACROS
+ Q_AUTOTEST_EXPORT EVP_PKEY *q_PEM_read_bio_PUBKEY(BIO *a, EVP_PKEY **b, pem_password_cb *c, void *d);
+ DSA *q_PEM_read_bio_DSA_PUBKEY(BIO *a, DSA **b, pem_password_cb *c, void *d);
+ RSA *q_PEM_read_bio_RSA_PUBKEY(BIO *a, RSA **b, pem_password_cb *c, void *d);
+@@ -326,23 +327,10 @@ void q_RAND_seed(const void *a, int b);
+ int q_RAND_status();
+ RSA *q_RSA_new();
+ void q_RSA_free(RSA *a);
+-int q_sk_num(STACK *a);
+-void q_sk_pop_free(STACK *a, void (*b)(void *));
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+-_STACK *q_sk_new_null();
+-void q_sk_push(_STACK *st, void *data);
+-void q_sk_free(_STACK *a);
+-void * q_sk_value(STACK *a, int b);
+-#else
+-STACK *q_sk_new_null();
+-void q_sk_push(STACK *st, char *data);
+-void q_sk_free(STACK *a);
+-char * q_sk_value(STACK *a, int b);
+-#endif
+ int q_SSL_accept(SSL *a);
+ int q_SSL_clear(SSL *a);
+-char *q_SSL_CIPHER_description(SSL_CIPHER *a, char *b, int c);
+-int q_SSL_CIPHER_get_bits(SSL_CIPHER *a, int *b);
++char *q_SSL_CIPHER_description(const SSL_CIPHER *a, char *b, int c);
++int q_SSL_CIPHER_get_bits(const SSL_CIPHER *a, int *b);
+ int q_SSL_connect(SSL *a);
+ int q_SSL_CTX_check_private_key(const SSL_CTX *a);
+ long q_SSL_CTX_ctrl(SSL_CTX *a, int b, long c, void *d);
+@@ -374,8 +362,6 @@ int q_SSL_get_error(SSL *a, int b);
+ STACK_OF(X509) *q_SSL_get_peer_cert_chain(SSL *a);
+ X509 *q_SSL_get_peer_certificate(SSL *a);
+ long q_SSL_get_verify_result(const SSL *a);
+-int q_SSL_library_init();
+-void q_SSL_load_error_strings();
+ SSL *q_SSL_new(SSL_CTX *a);
+ long q_SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg);
+ int q_SSL_read(SSL *a, void *b, int c);
+@@ -388,7 +374,6 @@ void q_SSL_SESSION_free(SSL_SESSION *ses);
+ SSL_SESSION *q_SSL_get1_session(SSL *ssl);
+ SSL_SESSION *q_SSL_get_session(const SSL *ssl);
+ #if OPENSSL_VERSION_NUMBER >= 0x10001000L
+-int q_SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
+ int q_SSL_set_ex_data(SSL *ssl, int idx, void *arg);
+ void *q_SSL_get_ex_data(const SSL *ssl, int idx);
+ #endif
+@@ -399,49 +384,6 @@ typedef unsigned int (*q_psk_server_callback_t)(SSL *ssl, const char *identity,
+ void q_SSL_set_psk_server_callback(SSL *ssl, q_psk_server_callback_t callback);
+ int q_SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint);
+ #endif // OPENSSL_VERSION_NUMBER >= 0x10001000L && !defined(OPENSSL_NO_PSK)
+-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+-#ifndef OPENSSL_NO_SSL2
+-const SSL_METHOD *q_SSLv2_client_method();
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+-const SSL_METHOD *q_SSLv3_client_method();
+-#endif
+-const SSL_METHOD *q_SSLv23_client_method();
+-const SSL_METHOD *q_TLSv1_client_method();
+-const SSL_METHOD *q_TLSv1_1_client_method();
+-const SSL_METHOD *q_TLSv1_2_client_method();
+-#ifndef OPENSSL_NO_SSL2
+-const SSL_METHOD *q_SSLv2_server_method();
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+-const SSL_METHOD *q_SSLv3_server_method();
+-#endif
+-const SSL_METHOD *q_SSLv23_server_method();
+-const SSL_METHOD *q_TLSv1_server_method();
+-const SSL_METHOD *q_TLSv1_1_server_method();
+-const SSL_METHOD *q_TLSv1_2_server_method();
+-#else
+-#ifndef OPENSSL_NO_SSL2
+-SSL_METHOD *q_SSLv2_client_method();
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+-SSL_METHOD *q_SSLv3_client_method();
+-#endif
+-SSL_METHOD *q_SSLv23_client_method();
+-SSL_METHOD *q_TLSv1_client_method();
+-SSL_METHOD *q_TLSv1_1_client_method();
+-SSL_METHOD *q_TLSv1_2_client_method();
+-#ifndef OPENSSL_NO_SSL2
+-SSL_METHOD *q_SSLv2_server_method();
+-#endif
+-#ifndef OPENSSL_NO_SSL3_METHOD
+-SSL_METHOD *q_SSLv3_server_method();
+-#endif
+-SSL_METHOD *q_SSLv23_server_method();
+-SSL_METHOD *q_TLSv1_server_method();
+-SSL_METHOD *q_TLSv1_1_server_method();
+-SSL_METHOD *q_TLSv1_2_server_method();
+-#endif
+ int q_SSL_write(SSL *a, const void *b, int c);
+ int q_X509_cmp(X509 *a, X509 *b);
+ #ifdef SSLEAY_MACROS
+@@ -452,6 +394,7 @@ void *q_ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, char *x);
+ X509 *q_X509_dup(X509 *a);
+ #endif
+ void q_X509_print(BIO *a, X509*b);
++int q_X509_digest(const X509 *x509, const EVP_MD *type, unsigned char *md, unsigned int *len);
+ ASN1_OBJECT *q_X509_EXTENSION_get_object(X509_EXTENSION *a);
+ void q_X509_free(X509 *a);
+ X509_EXTENSION *q_X509_get_ext(X509 *a, int b);
+@@ -471,6 +414,7 @@ int q_ASN1_STRING_print(BIO *a, ASN1_STRING *b);
+ int q_X509_check_issued(X509 *a, X509 *b);
+ X509_NAME *q_X509_get_issuer_name(X509 *a);
+ X509_NAME *q_X509_get_subject_name(X509 *a);
++ASN1_INTEGER *q_X509_get_serialNumber(X509 *a);
+ int q_X509_verify_cert(X509_STORE_CTX *ctx);
+ int q_X509_NAME_entry_count(X509_NAME *a);
+ X509_NAME_ENTRY *q_X509_NAME_get_entry(X509_NAME *a,int b);
+@@ -488,7 +432,6 @@ int q_X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);
+ int q_X509_STORE_CTX_get_error(X509_STORE_CTX *ctx);
+ int q_X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx);
+ X509 *q_X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx);
+-STACK_OF(X509) *q_X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx);
+
+ // Diffie-Hellman support
+ DH *q_DH_new();
+@@ -522,34 +465,9 @@ int q_PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,
+ PKCS12 *q_d2i_PKCS12_bio(BIO *bio, PKCS12 **pkcs12);
+ void q_PKCS12_free(PKCS12 *pkcs12);
+
+-
+ #define q_BIO_get_mem_data(b, pp) (int)q_BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)
+ #define q_BIO_pending(b) (int)q_BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)
+-#ifdef SSLEAY_MACROS
+-int q_i2d_DSAPrivateKey(const DSA *a, unsigned char **pp);
+-int q_i2d_RSAPrivateKey(const RSA *a, unsigned char **pp);
+-RSA *q_d2i_RSAPrivateKey(RSA **a, unsigned char **pp, long length);
+-DSA *q_d2i_DSAPrivateKey(DSA **a, unsigned char **pp, long length);
+-#define q_PEM_read_bio_RSAPrivateKey(bp, x, cb, u) \
+- (RSA *)q_PEM_ASN1_read_bio( \
+- (void *(*)(void**, const unsigned char**, long int))q_d2i_RSAPrivateKey, PEM_STRING_RSA, bp, (void **)x, cb, u)
+-#define q_PEM_read_bio_DSAPrivateKey(bp, x, cb, u) \
+- (DSA *)q_PEM_ASN1_read_bio( \
+- (void *(*)(void**, const unsigned char**, long int))q_d2i_DSAPrivateKey, PEM_STRING_DSA, bp, (void **)x, cb, u)
+-#define q_PEM_write_bio_RSAPrivateKey(bp,x,enc,kstr,klen,cb,u) \
+- PEM_ASN1_write_bio((int (*)(void*, unsigned char**))q_i2d_RSAPrivateKey,PEM_STRING_RSA,\
+- bp,(char *)x,enc,kstr,klen,cb,u)
+-#define q_PEM_write_bio_DSAPrivateKey(bp,x,enc,kstr,klen,cb,u) \
+- PEM_ASN1_write_bio((int (*)(void*, unsigned char**))q_i2d_DSAPrivateKey,PEM_STRING_DSA,\
+- bp,(char *)x,enc,kstr,klen,cb,u)
+-#define q_PEM_read_bio_DHparams(bp, dh, cb, u) \
+- (DH *)q_PEM_ASN1_read_bio( \
+- (void *(*)(void**, const unsigned char**, long int))q_d2i_DHparams, PEM_STRING_DHPARAMS, bp, (void **)x, cb, u)
+-#endif
+-#define q_SSL_CTX_set_options(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL)
+ #define q_SSL_CTX_set_mode(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
+-#define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st)
+-#define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_sk_value)(st, i)
+ #define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num(GENERAL_NAME, (st))
+ #define q_sk_GENERAL_NAME_value(st, i) q_SKM_sk_value(GENERAL_NAME, (st), (i))
+ #define q_sk_X509_num(st) q_SKM_sk_num(X509, (st))
+@@ -558,18 +476,12 @@ DSA *q_d2i_DSAPrivateKey(DSA **a, unsigned char **pp, long length);
+ #define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i))
+ #define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \
+ q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
+-#define q_X509_get_notAfter(x) X509_get_notAfter(x)
+-#define q_X509_get_notBefore(x) X509_get_notBefore(x)
+ #define q_EVP_PKEY_assign_RSA(pkey,rsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\
+ (char *)(rsa))
+ #define q_EVP_PKEY_assign_DSA(pkey,dsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\
+ (char *)(dsa))
+ #define q_OpenSSL_add_all_algorithms() q_OPENSSL_add_all_algorithms_conf()
+-void q_OPENSSL_add_all_algorithms_noconf();
+-void q_OPENSSL_add_all_algorithms_conf();
+ int q_SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath);
+-long q_SSLeay();
+-const char *q_SSLeay_version(int type);
+ int q_i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp);
+ SSL_SESSION *q_d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length);
+
+diff --git a/src/network/ssl/qsslsocket_opensslpre11.cpp b/src/network/ssl/qsslsocket_opensslpre11.cpp
+new file mode 100644
+index 0000000000..e51888c5f2
+--- /dev/null
++++ b/src/network/ssl/qsslsocket_opensslpre11.cpp
+@@ -0,0 +1,424 @@
++/****************************************************************************
++**
++** Copyright (C) 2017 The Qt Company Ltd.
++** Copyright (C) 2014 Governikus GmbH & Co. KG
++** Contact: https://www.qt.io/licensing/
++**
++** This file is part of the QtNetwork module of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and The Qt Company. For licensing terms
++** and conditions see https://www.qt.io/terms-conditions. For further
++** information use the contact form at https://www.qt.io/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 3 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL3 included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU Lesser General Public License version 3 requirements
++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 2.0 or (at your option) the GNU General
++** Public license version 3 or any later version approved by the KDE Free
++** Qt Foundation. The licenses are as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
++** included in the packaging of this file. Please review the following
++** information to ensure the GNU General Public License requirements will
++** be met: https://www.gnu.org/licenses/gpl-2.0.html and
++** https://www.gnu.org/licenses/gpl-3.0.html.
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++/****************************************************************************
++**
++** In addition, as a special exception, the copyright holders listed above give
++** permission to link the code of its release of Qt with the OpenSSL project's
++** "OpenSSL" library (or modified versions of the "OpenSSL" library that use the
++** same license as the original version), and distribute the linked executables.
++**
++** You must comply with the GNU General Public License version 2 in all
++** respects for all of the code used other than the "OpenSSL" code. If you
++** modify this file, you may extend this exception to your version of the file,
++** but you are not obligated to do so. If you do not wish to do so, delete
++** this exception statement from your version of this file.
++**
++****************************************************************************/
++
++//#define QT_DECRYPT_SSL_TRAFFIC
++
++#include "qssl_p.h"
++#include "qsslsocket_openssl_p.h"
++#include "qsslsocket_openssl_symbols_p.h"
++#include "qsslsocket.h"
++#include "qsslkey.h"
++
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++QT_BEGIN_NAMESPACE
++
++/* \internal
++
++ From OpenSSL's thread(3) manual page:
++
++ OpenSSL can safely be used in multi-threaded applications provided that at
++ least two callback functions are set.
++
++ locking_function(int mode, int n, const char *file, int line) is needed to
++ perform locking on shared data structures. (Note that OpenSSL uses a
++ number of global data structures that will be implicitly shared
++ whenever multiple threads use OpenSSL.) Multi-threaded
++ applications will crash at random if it is not set. ...
++ ...
++ id_function(void) is a function that returns a thread ID. It is not
++ needed on Windows nor on platforms where getpid() returns a different
++ ID for each thread (most notably Linux)
++*/
++
++class QOpenSslLocks
++{
++public:
++ QOpenSslLocks()
++ : initLocker(QMutex::Recursive),
++ locksLocker(QMutex::Recursive)
++ {
++ QMutexLocker locker(&locksLocker);
++ int numLocks = q_CRYPTO_num_locks();
++ locks = new QMutex *[numLocks];
++ memset(locks, 0, numLocks * sizeof(QMutex *));
++ }
++ ~QOpenSslLocks()
++ {
++ QMutexLocker locker(&locksLocker);
++ for (int i = 0; i < q_CRYPTO_num_locks(); ++i)
++ delete locks[i];
++ delete [] locks;
++
++ QSslSocketPrivate::deinitialize();
++ }
++ QMutex *lock(int num)
++ {
++ QMutexLocker locker(&locksLocker);
++ QMutex *tmp = locks[num];
++ if (!tmp)
++ tmp = locks[num] = new QMutex(QMutex::Recursive);
++ return tmp;
++ }
++
++ QMutex *globalLock()
++ {
++ return &locksLocker;
++ }
++
++ QMutex *initLock()
++ {
++ return &initLocker;
++ }
++
++private:
++ QMutex initLocker;
++ QMutex locksLocker;
++ QMutex **locks;
++};
++
++Q_GLOBAL_STATIC(QOpenSslLocks, openssl_locks)
++
++extern "C" {
++static void locking_function(int mode, int lockNumber, const char *, int)
++{
++ QMutex *mutex = openssl_locks()->lock(lockNumber);
++
++ // Lock or unlock it
++ if (mode & CRYPTO_LOCK)
++ mutex->lock();
++ else
++ mutex->unlock();
++}
++static unsigned long id_function()
++{
++ return (quintptr)QThread::currentThreadId();
++}
++
++} // extern "C"
++
++static void q_OpenSSL_add_all_algorithms_safe()
++{
++#ifdef Q_OS_WIN
++ // Prior to version 1.0.1m an attempt to call OpenSSL_add_all_algorithms on
++ // Windows could result in 'exit' call from OPENSSL_config (QTBUG-43843).
++ // We can predict this and avoid OPENSSL_add_all_algorithms call.
++ // From OpenSSL docs:
++ // "An application does not need to add algorithms to use them explicitly,
++ // for example by EVP_sha1(). It just needs to add them if it (or any of
++ // the functions it calls) needs to lookup algorithms.
++ // The cipher and digest lookup functions are used in many parts of the
++ // library. If the table is not initialized several functions will
++ // misbehave and complain they cannot find algorithms. This includes the
++ // PEM, PKCS#12, SSL and S/MIME libraries. This is a common query in
++ // the OpenSSL mailing lists."
++ //
++ // Anyway, as a result, we chose not to call this function if it would exit.
++
++ if (q_SSLeay() < 0x100010DFL)
++ {
++ // Now, before we try to call it, check if an attempt to open config file
++ // will result in exit:
++ if (char *confFileName = q_CONF_get1_default_config_file()) {
++ BIO *confFile = q_BIO_new_file(confFileName, "r");
++ const auto lastError = q_ERR_peek_last_error();
++ q_CRYPTO_free(confFileName);
++ if (confFile) {
++ q_BIO_free(confFile);
++ } else {
++ q_ERR_clear_error();
++ if (ERR_GET_REASON(lastError) == ERR_R_SYS_LIB) {
++ qCWarning(lcSsl, "failed to open openssl.conf file");
++ return;
++ }
++ }
++ }
++ }
++#endif // Q_OS_WIN
++
++ q_OpenSSL_add_all_algorithms();
++}
++
++
++/*!
++ \internal
++*/
++void QSslSocketPrivate::deinitialize()
++{
++ q_CRYPTO_set_id_callback(0);
++ q_CRYPTO_set_locking_callback(0);
++ q_ERR_free_strings();
++}
++
++
++bool QSslSocketPrivate::ensureLibraryLoaded()
++{
++ if (!q_resolveOpenSslSymbols())
++ return false;
++
++ // Check if the library itself needs to be initialized.
++ QMutexLocker locker(openssl_locks()->initLock());
++
++ if (!s_libraryLoaded) {
++ s_libraryLoaded = true;
++
++ // Initialize OpenSSL.
++ q_CRYPTO_set_id_callback(id_function);
++ q_CRYPTO_set_locking_callback(locking_function);
++ if (q_SSL_library_init() != 1)
++ return false;
++ q_SSL_load_error_strings();
++ q_OpenSSL_add_all_algorithms_safe();
++
++#if OPENSSL_VERSION_NUMBER >= 0x10001000L
++ if (q_SSLeay() >= 0x10001000L)
++ QSslSocketBackendPrivate::s_indexForSSLExtraData = q_SSL_get_ex_new_index(0L, NULL, NULL, NULL, NULL);
++#endif
++
++ // Initialize OpenSSL's random seed.
++ if (!q_RAND_status()) {
++ qWarning("Random number generator not seeded, disabling SSL support");
++ return false;
++ }
++ }
++ return true;
++}
++
++void QSslSocketPrivate::ensureCiphersAndCertsLoaded()
++{
++ QMutexLocker locker(openssl_locks()->initLock());
++ if (s_loadedCiphersAndCerts)
++ return;
++ s_loadedCiphersAndCerts = true;
++
++ resetDefaultCiphers();
++ resetDefaultEllipticCurves();
++
++#if QT_CONFIG(library)
++ //load symbols needed to receive certificates from system store
++#if defined(Q_OS_WIN)
++ HINSTANCE hLib = LoadLibraryW(L"Crypt32");
++ if (hLib) {
++ ptrCertOpenSystemStoreW = (PtrCertOpenSystemStoreW)GetProcAddress(hLib, "CertOpenSystemStoreW");
++ ptrCertFindCertificateInStore = (PtrCertFindCertificateInStore)GetProcAddress(hLib, "CertFindCertificateInStore");
++ ptrCertCloseStore = (PtrCertCloseStore)GetProcAddress(hLib, "CertCloseStore");
++ if (!ptrCertOpenSystemStoreW || !ptrCertFindCertificateInStore || !ptrCertCloseStore)
++ qCWarning(lcSsl, "could not resolve symbols in crypt32 library"); // should never happen
++ } else {
++ qCWarning(lcSsl, "could not load crypt32 library"); // should never happen
++ }
++#elif defined(Q_OS_QNX)
++ s_loadRootCertsOnDemand = true;
++#elif defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
++ // check whether we can enable on-demand root-cert loading (i.e. check whether the sym links are there)
++ QList dirs = unixRootCertDirectories();
++ QStringList symLinkFilter;
++ symLinkFilter << QLatin1String("[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].[0-9]");
++ for (int a = 0; a < dirs.count(); ++a) {
++ QDirIterator iterator(QLatin1String(dirs.at(a)), symLinkFilter, QDir::Files);
++ if (iterator.hasNext()) {
++ s_loadRootCertsOnDemand = true;
++ break;
++ }
++ }
++#endif
++#endif // QT_CONFIG(library)
++ // if on-demand loading was not enabled, load the certs now
++ if (!s_loadRootCertsOnDemand)
++ setDefaultCaCertificates(systemCaCertificates());
++#ifdef Q_OS_WIN
++ //Enabled for fetching additional root certs from windows update on windows 6+
++ //This flag is set false by setDefaultCaCertificates() indicating the app uses
++ //its own cert bundle rather than the system one.
++ //Same logic that disables the unix on demand cert loading.
++ //Unlike unix, we do preload the certificates from the cert store.
++ if ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) >= QSysInfo::WV_6_0)
++ s_loadRootCertsOnDemand = true;
++#endif
++}
++
++long QSslSocketPrivate::sslLibraryVersionNumber()
++{
++ if (!supportsSsl())
++ return 0;
++
++ return q_SSLeay();
++}
++
++QString QSslSocketPrivate::sslLibraryVersionString()
++{
++ if (!supportsSsl())
++ return QString();
++
++ const char *versionString = q_SSLeay_version(SSLEAY_VERSION);
++ if (!versionString)
++ return QString();
++
++ return QString::fromLatin1(versionString);
++}
++
++void QSslSocketBackendPrivate::continueHandshake()
++{
++ Q_Q(QSslSocket);
++ // if we have a max read buffer size, reset the plain socket's to match
++ if (readBufferMaxSize)
++ plainSocket->setReadBufferSize(readBufferMaxSize);
++
++ if (q_SSL_ctrl((ssl), SSL_CTRL_GET_SESSION_REUSED, 0, NULL))
++ configuration.peerSessionShared = true;
++
++#ifdef QT_DECRYPT_SSL_TRAFFIC
++ if (ssl->session && ssl->s3) {
++ const char *mk = reinterpret_cast(ssl->session->master_key);
++ QByteArray masterKey(mk, ssl->session->master_key_length);
++ const char *random = reinterpret_cast(ssl->s3->client_random);
++ QByteArray clientRandom(random, SSL3_RANDOM_SIZE);
++
++ // different format, needed for e.g. older Wireshark versions:
++// const char *sid = reinterpret_cast(ssl->session->session_id);
++// QByteArray sessionID(sid, ssl->session->session_id_length);
++// QByteArray debugLineRSA("RSA Session-ID:");
++// debugLineRSA.append(sessionID.toHex().toUpper());
++// debugLineRSA.append(" Master-Key:");
++// debugLineRSA.append(masterKey.toHex().toUpper());
++// debugLineRSA.append("\n");
++
++ QByteArray debugLineClientRandom("CLIENT_RANDOM ");
++ debugLineClientRandom.append(clientRandom.toHex().toUpper());
++ debugLineClientRandom.append(" ");
++ debugLineClientRandom.append(masterKey.toHex().toUpper());
++ debugLineClientRandom.append("\n");
++
++ QString sslKeyFile = QDir::tempPath() + QLatin1String("/qt-ssl-keys");
++ QFile file(sslKeyFile);
++ if (!file.open(QIODevice::Append))
++ qCWarning(lcSsl) << "could not open file" << sslKeyFile << "for appending";
++ if (!file.write(debugLineClientRandom))
++ qCWarning(lcSsl) << "could not write to file" << sslKeyFile;
++ file.close();
++ } else {
++ qCWarning(lcSsl, "could not decrypt SSL traffic");
++ }
++#endif
++
++ // Cache this SSL session inside the QSslContext
++ if (!(configuration.sslOptions & QSsl::SslOptionDisableSessionSharing)) {
++ if (!sslContextPointer->cacheSession(ssl)) {
++ sslContextPointer.clear(); // we could not cache the session
++ } else {
++ // Cache the session for permanent usage as well
++ if (!(configuration.sslOptions & QSsl::SslOptionDisableSessionPersistence)) {
++ if (!sslContextPointer->sessionASN1().isEmpty())
++ configuration.sslSession = sslContextPointer->sessionASN1();
++ configuration.sslSessionTicketLifeTimeHint = sslContextPointer->sessionTicketLifeTimeHint();
++ }
++ }
++ }
++
++#if OPENSSL_VERSION_NUMBER >= 0x1000100fL && !defined(OPENSSL_NO_NEXTPROTONEG)
++
++ configuration.nextProtocolNegotiationStatus = sslContextPointer->npnContext().status;
++ if (sslContextPointer->npnContext().status == QSslConfiguration::NextProtocolNegotiationUnsupported) {
++ // we could not agree -> be conservative and use HTTP/1.1
++ configuration.nextNegotiatedProtocol = QByteArrayLiteral("http/1.1");
++ } else {
++ const unsigned char *proto = 0;
++ unsigned int proto_len = 0;
++#if OPENSSL_VERSION_NUMBER >= 0x10002000L
++ if (q_SSLeay() >= 0x10002000L) {
++ q_SSL_get0_alpn_selected(ssl, &proto, &proto_len);
++ if (proto_len && mode == QSslSocket::SslClientMode) {
++ // Client does not have a callback that sets it ...
++ configuration.nextProtocolNegotiationStatus = QSslConfiguration::NextProtocolNegotiationNegotiated;
++ }
++ }
++
++ if (!proto_len) { // Test if NPN was more lucky ...
++#else
++ {
++#endif
++ q_SSL_get0_next_proto_negotiated(ssl, &proto, &proto_len);
++ }
++
++ if (proto_len)
++ configuration.nextNegotiatedProtocol = QByteArray(reinterpret_cast(proto), proto_len);
++ else
++ configuration.nextNegotiatedProtocol.clear();
++ }
++#endif // OPENSSL_VERSION_NUMBER >= 0x1000100fL ...
++
++#if OPENSSL_VERSION_NUMBER >= 0x10002000L
++ if (q_SSLeay() >= 0x10002000L && mode == QSslSocket::SslClientMode) {
++ EVP_PKEY *key;
++ if (q_SSL_get_server_tmp_key(ssl, &key))
++ configuration.ephemeralServerKey = QSslKey(key, QSsl::PublicKey);
++ }
++#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L ...
++
++ connectionEncrypted = true;
++ emit q->encrypted();
++ if (autoStartHandshake && pendingClose) {
++ pendingClose = false;
++ q->disconnectFromHost();
++ }
++}
++
++QT_END_NAMESPACE
+diff --git a/src/network/ssl/ssl.pri b/src/network/ssl/ssl.pri
+index d2b0c2d60d..2783effaf1 100644
+--- a/src/network/ssl/ssl.pri
++++ b/src/network/ssl/ssl.pri
+@@ -60,13 +60,25 @@ qtConfig(ssl) {
+ HEADERS += ssl/qsslcontext_openssl_p.h \
+ ssl/qsslsocket_openssl_p.h \
+ ssl/qsslsocket_openssl_symbols_p.h
+- SOURCES += ssl/qsslcertificate_openssl.cpp \
+- ssl/qsslcontext_openssl.cpp \
++ SOURCES += ssl/qsslsocket_openssl_symbols.cpp \
+ ssl/qssldiffiehellmanparameters_openssl.cpp \
++ ssl/qsslcertificate_openssl.cpp \
+ ssl/qsslellipticcurve_openssl.cpp \
+ ssl/qsslkey_openssl.cpp \
+ ssl/qsslsocket_openssl.cpp \
+- ssl/qsslsocket_openssl_symbols.cpp
++ ssl/qsslcontext_openssl.cpp
++
++ qtConfig(opensslv11) {
++ HEADERS += ssl/qsslsocket_openssl11_symbols_p.h
++ SOURCES += ssl/qsslsocket_openssl11.cpp \
++ ssl/qsslcontext_openssl11.cpp
++
++ QMAKE_CXXFLAGS += -DOPENSSL_API_COMPAT=0x10100000L
++ } else {
++ HEADERS += ssl/qsslsocket_opensslpre11_symbols_p.h
++ SOURCES += ssl/qsslsocket_opensslpre11.cpp \
++ ssl/qsslcontext_opensslpre11.cpp
++ }
+
+ darwin:SOURCES += ssl/qsslsocket_mac_shared.cpp
+
diff --git a/pkgs/development/libraries/qt-5/5.9/qtbase.patch b/pkgs/development/libraries/qt-5/5.9/qtbase.patch
index 086ddf4fe3e7..f87c508a3800 100644
--- a/pkgs/development/libraries/qt-5/5.9/qtbase.patch
+++ b/pkgs/development/libraries/qt-5/5.9/qtbase.patch
@@ -994,28 +994,6 @@ index 9a24938284..74962b4ae2 100644
if (!lib.load())
return false;
}
-diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp
-index c92d8fc3f8..6008063bcf 100644
---- a/src/network/ssl/qsslcontext_openssl.cpp
-+++ b/src/network/ssl/qsslcontext_openssl.cpp
-@@ -351,7 +351,7 @@ init_context:
-
- const QVector qcurves = sslContext->sslConfiguration.ellipticCurves();
- if (!qcurves.isEmpty()) {
--#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
-+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && defined(SSL_CTRL_SET_CURVES) && !defined(OPENSSL_NO_EC)
- // Set the curves to be used
- if (q_SSLeay() >= 0x10002000L) {
- // SSL_CTX_ctrl wants a non-const pointer as last argument,
-@@ -364,7 +364,7 @@ init_context:
- sslContext->errorCode = QSslError::UnspecifiedError;
- }
- } else
--#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
-+#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && defined(SSL_CTRL_SET_CURVES) && !defined(OPENSSL_NO_EC)
- {
- // specific curves requested, but not possible to set -> error
- sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocket::tr("OpenSSL version too old, need at least v1.0.2"));
diff --git a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
index b5a0a5bbeb..6c20305f4d 100644
--- a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
diff --git a/pkgs/development/libraries/qt-5/modules/qtwebengine.nix b/pkgs/development/libraries/qt-5/modules/qtwebengine.nix
index 07fd048d6538..357c81fa4f61 100644
--- a/pkgs/development/libraries/qt-5/modules/qtwebengine.nix
+++ b/pkgs/development/libraries/qt-5/modules/qtwebengine.nix
@@ -20,8 +20,6 @@
with stdenv.lib;
-let qt56 = qtCompatVersion == "5.6"; in
-
qtModule {
name = "qtwebengine";
qtInputs = [ qtdeclarative qtquickcontrols qtlocation qtwebchannel ];
@@ -48,9 +46,9 @@ qtModule {
# Patch Chromium build files
+ optionalString (lib.versionOlder qtCompatVersion "5.12") ''
substituteInPlace ./src/3rdparty/chromium/build/common.gypi --replace /bin/echo ${coreutils}/bin/echo
- substituteInPlace ./src/3rdparty/chromium/v8/${if qt56 then "build" else "gypfiles"}/toolchain.gypi \
+ substituteInPlace ./src/3rdparty/chromium/v8/gypfiles/toolchain.gypi \
--replace /bin/echo ${coreutils}/bin/echo
- substituteInPlace ./src/3rdparty/chromium/v8/${if qt56 then "build" else "gypfiles"}/standalone.gypi \
+ substituteInPlace ./src/3rdparty/chromium/v8/gypfiles/standalone.gypi \
--replace /bin/echo ${coreutils}/bin/echo
''
# Patch library paths in Qt sources
@@ -219,7 +217,6 @@ EOF
description = "A web engine based on the Chromium web browser";
maintainers = with maintainers; [ matthewbauer ];
platforms = platforms.unix;
- broken = qt56; # 2018-09-13, no successful build since 2018-04-25
};
}
diff --git a/pkgs/development/libraries/shibboleth-sp/default.nix b/pkgs/development/libraries/shibboleth-sp/default.nix
index 74f861297d1a..dd9b01a0a01e 100644
--- a/pkgs/development/libraries/shibboleth-sp/default.nix
+++ b/pkgs/development/libraries/shibboleth-sp/default.nix
@@ -2,12 +2,12 @@
stdenv.mkDerivation rec {
name = "shibboleth-sp-${version}";
- version = "2.6.1";
+ version = "3.0.4.1";
src = fetchgit {
url = "https://git.shibboleth.net/git/cpp-sp.git";
rev = version;
- sha256 = "01q13p7gc0janjfml6zs46na8qnval8hc833fk2wrnmi4w9xw4fd";
+ sha256 = "1qb4dbz5gk10b9w1rf6f4vv7c2wb3a8bfzif6yiaq96ilqad7gdr";
};
nativeBuildInputs = [ autoreconfHook pkgconfig ];
diff --git a/pkgs/development/libraries/xml-security-c/cxx11.patch b/pkgs/development/libraries/xml-security-c/cxx11.patch
deleted file mode 100644
index bc87d4c1411e..000000000000
--- a/pkgs/development/libraries/xml-security-c/cxx11.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- xml-security-c-1.6.1/xsec/tools/checksig/InteropResolver.cpp.orig 2016-02-02 23:57:26.204655144 +0000
-+++ xml-security-c-1.6.1/xsec/tools/checksig/InteropResolver.cpp 2016-02-02 23:57:35.796692305 +0000
-@@ -645,7 +645,7 @@
-
- }
-
-- return false;
-+ return NULL;
-
- }
-
diff --git a/pkgs/development/libraries/xml-security-c/default.nix b/pkgs/development/libraries/xml-security-c/default.nix
index fec4bbe8efe2..35ae93e79392 100644
--- a/pkgs/development/libraries/xml-security-c/default.nix
+++ b/pkgs/development/libraries/xml-security-c/default.nix
@@ -2,20 +2,13 @@
stdenv.mkDerivation rec {
name = "xml-security-c-${version}";
- version = "1.7.3";
+ version = "2.0.2";
src = fetchurl {
url = "https://www.apache.org/dist/santuario/c-library/${name}.tar.gz";
- sha256 = "e5226e7319d44f6fd9147a13fb853f5c711b9e75bf60ec273a0ef8a190592583";
+ sha256 = "1prh5sxzipkqglpsh53iblbr7rxi54wbijxdjiahzjmrijqa40y3";
};
- patches = [ ./cxx11.patch ];
-
- postPatch = ''
- mkdir -p xsec/yes/lib
- sed -i -e 's/-O2 -DNDEBUG/-DNDEBUG/g' configure
- '';
-
configureFlags = [
"--with-openssl"
"--with-xerces"
diff --git a/pkgs/development/libraries/xml-tooling-c/default.nix b/pkgs/development/libraries/xml-tooling-c/default.nix
index 8e1d71fab3fa..fbe515f6217f 100644
--- a/pkgs/development/libraries/xml-tooling-c/default.nix
+++ b/pkgs/development/libraries/xml-tooling-c/default.nix
@@ -1,17 +1,19 @@
-{ stdenv, fetchgit, autoreconfHook, boost, curl, openssl, log4shib, xercesc, xml-security-c }:
+{ stdenv, fetchgit, autoreconfHook, pkgconfig
+, boost, curl, openssl, log4shib, xercesc, xml-security-c
+}:
stdenv.mkDerivation rec {
name = "xml-tooling-c-${version}";
- version = "1.6.3";
+ version = "3.0.4";
src = fetchgit {
url = "https://git.shibboleth.net/git/cpp-xmltooling.git";
rev = version;
- sha256 = "09z2pp3yy3kqx22vwgxyi3s0vlpdv9camw8dpi3q8piff6zxak3q";
+ sha256 = "0frj4w70l06nva6dvdcivgm1ax69rqbjdzzbgp0sxhiqhddslbas";
};
buildInputs = [ boost curl openssl log4shib xercesc xml-security-c ];
- nativeBuildInputs = [ autoreconfHook ];
+ nativeBuildInputs = [ autoreconfHook pkgconfig ];
enableParallelBuilding = true;
diff --git a/pkgs/development/mobile/xpwn/default.nix b/pkgs/development/mobile/xpwn/default.nix
index d62902e4f6e4..9ec5977d5947 100644
--- a/pkgs/development/mobile/xpwn/default.nix
+++ b/pkgs/development/mobile/xpwn/default.nix
@@ -1,12 +1,14 @@
-{ stdenv, fetchgit, cmake, zlib, libpng, bzip2, libusb, openssl }:
+{ stdenv, fetchFromGitHub, cmake, zlib, libpng, bzip2, libusb, openssl }:
-stdenv.mkDerivation {
- name = "xpwn-0.5.8git";
+stdenv.mkDerivation rec {
+ pname = "xpwn";
+ version = "0.5.8git";
- src = fetchgit {
- url = "git://github.com/dborca/xpwn.git";
- rev = "4534da88d4e8a32cdc9da9b5326e2cc482c95ef0";
- sha256 = "1h1ak40fg5bym0hifpii9q2hqdp2m387cwfzb4bl6qq36xpkd6wv";
+ src = fetchFromGitHub {
+ owner = "planetbeing";
+ repo = pname;
+ rev = "ac362d4ffe4d0489a26144a1483ebf3b431da899";
+ sha256 = "1qw9vbk463fpnvvvfgzxmn9add2p30k832s09mlycr7z1hrh3wyf";
};
preConfigure = ''
@@ -18,7 +20,9 @@ stdenv.mkDerivation {
sed -i -e '/install/d' CMakeLists.txt
'';
- buildInputs = [ cmake zlib libpng bzip2 libusb openssl ];
+ strictDeps = true;
+ nativeBuildInputs = [ cmake ];
+ buildInputs = [ zlib libpng bzip2 libusb openssl ];
meta = with stdenv.lib; {
homepage = "http://planetbeing.lighthouseapp.com/projects/15246-xpwn";
diff --git a/pkgs/development/python-modules/cheroot/default.nix b/pkgs/development/python-modules/cheroot/default.nix
index 96602c624a47..8c55c3ac8bbb 100644
--- a/pkgs/development/python-modules/cheroot/default.nix
+++ b/pkgs/development/python-modules/cheroot/default.nix
@@ -1,18 +1,22 @@
-{ stdenv, fetchPypi, buildPythonPackage
+{ stdenv, fetchPypi, buildPythonPackage, pythonAtLeast
, more-itertools, six, setuptools_scm, setuptools-scm-git-archive
, pytest, pytestcov, portend, pytest-testmon, pytest-mock
, backports_unittest-mock, pyopenssl, requests, trustme, requests-unixsocket
, backports_functools_lru_cache }:
+let inherit (stdenv) lib; in
+
buildPythonPackage rec {
pname = "cheroot";
- version = "6.5.5";
+ version = "6.5.6";
src = fetchPypi {
inherit pname version;
- sha256 = "f6a85e005adb5bc5f3a92b998ff0e48795d4d98a0fbb7edde47a7513d4100601";
+ sha256 = "b824f9961eb447809badeb051820a05770354e2f9ae5c355eecc21f22633c217";
};
+ patches = [ ./tests.patch ];
+
nativeBuildInputs = [ setuptools_scm setuptools-scm-git-archive ];
propagatedBuildInputs = [ more-itertools six backports_functools_lru_cache ];
@@ -20,14 +24,17 @@ buildPythonPackage rec {
checkInputs = [ pytest pytestcov portend backports_unittest-mock pytest-mock pytest-testmon pyopenssl requests trustme requests-unixsocket ];
# Disable doctest plugin because times out
+ # Disable xdist (-n arg) because it's incompatible with testmon
# Deselect test_bind_addr_unix on darwin because times out
# Deselect test_http_over_https_error on darwin because builtin cert fails
+ # Disable warnings-as-errors because of deprecation warnings from socks on python 3.7
checkPhase = ''
- substituteInPlace pytest.ini --replace "--doctest-modules" ""
- pytest ${stdenv.lib.optionalString stdenv.isDarwin "--deselect=cheroot/test/test_ssl.py::test_http_over_https_error --deselect=cheroot/test/test_server.py::test_bind_addr_unix"}
+ substituteInPlace pytest.ini --replace "--doctest-modules" "" --replace "-n auto" ""
+ ${lib.optionalString (pythonAtLeast "3.7") "sed -i '/warnings/,+2d' pytest.ini"}
+ pytest ${lib.optionalString stdenv.isDarwin "--deselect=cheroot/test/test_ssl.py::test_http_over_https_error --deselect=cheroot/test/test_server.py::test_bind_addr_unix"}
'';
- meta = with stdenv.lib; {
+ meta = with lib; {
description = "High-performance, pure-Python HTTP";
homepage = https://github.com/cherrypy/cheroot;
license = licenses.mit;
diff --git a/pkgs/development/python-modules/cheroot/tests.patch b/pkgs/development/python-modules/cheroot/tests.patch
new file mode 100644
index 000000000000..3de48a5a4684
--- /dev/null
+++ b/pkgs/development/python-modules/cheroot/tests.patch
@@ -0,0 +1,45 @@
+diff --git a/cheroot/test/test_ssl.py b/cheroot/test/test_ssl.py
+index fe8a0a0..92a77c1 100644
+--- a/cheroot/test/test_ssl.py
++++ b/cheroot/test/test_ssl.py
+@@ -316,11 +316,9 @@ def test_tls_client_auth(
+ expected_ssl_errors = (
+ requests.exceptions.SSLError,
+ OpenSSL.SSL.Error,
+- ) if PY34 else (
+- requests.exceptions.SSLError,
++ requests.exceptions.ConnectionError,
+ )
+- if IS_WINDOWS:
+- expected_ssl_errors += requests.exceptions.ConnectionError,
++
+ with pytest.raises(expected_ssl_errors) as ssl_err:
+ make_https_request()
+
+@@ -335,7 +333,7 @@ def test_tls_client_auth(
+ except AttributeError:
+ if PY34:
+ pytest.xfail('OpenSSL behaves wierdly under Python 3.4')
+- elif six.PY3 and IS_WINDOWS:
++ elif six.PY3:
+ err_text = str(ssl_err.value)
+ else:
+ raise
+@@ -348,8 +346,7 @@ def test_tls_client_auth(
+ if IS_MACOS and IS_PYPY and adapter_type == 'pyopenssl':
+ expected_substrings = ('tlsv1 alert unknown ca', )
+ if (
+- IS_WINDOWS
+- and tls_verify_mode in (
++ tls_verify_mode in (
+ ssl.CERT_REQUIRED,
+ ssl.CERT_OPTIONAL,
+ )
+@@ -361,6 +358,7 @@ def test_tls_client_auth(
+ "SysCallError(10054, 'WSAECONNRESET')",
+ "('Connection aborted.', "
+ 'OSError("(10054, \'WSAECONNRESET\')"))',
++ 'OSError("(104, \'ECONNRESET\')"))',
+ )
+ assert any(e in err_text for e in expected_substrings)
+
diff --git a/pkgs/development/python-modules/pysocks/default.nix b/pkgs/development/python-modules/pysocks/default.nix
index 0f4b2b688cd9..ae17ed351050 100644
--- a/pkgs/development/python-modules/pysocks/default.nix
+++ b/pkgs/development/python-modules/pysocks/default.nix
@@ -5,12 +5,12 @@
buildPythonPackage rec {
pname = "pysocks";
- version = "1.6.8";
+ version = "1.7.0";
src = fetchPypi {
pname = "PySocks";
inherit version;
- sha256 = "3fe52c55890a248676fd69dc9e3c4e811718b777834bcaab7a8125cf9deac672";
+ sha256 = "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr";
};
doCheck = false;
diff --git a/pkgs/development/python-modules/sipsimple/default.nix b/pkgs/development/python-modules/sipsimple/default.nix
index bf76166d73b4..7839a77f9f5e 100644
--- a/pkgs/development/python-modules/sipsimple/default.nix
+++ b/pkgs/development/python-modules/sipsimple/default.nix
@@ -1,6 +1,6 @@
-{ stdenv
+{ lib
, buildPythonPackage
-, fetchdarcs
+, fetchFromGitHub
, isPy3k
, pkgs
, cython
@@ -14,13 +14,14 @@
buildPythonPackage rec {
pname = "sipsimple";
- version = "3.1.1";
+ version = "3.4.2";
disabled = isPy3k;
- src = fetchdarcs {
- url = http://devel.ag-projects.com/repositories/python-sipsimple;
+ src = fetchFromGitHub {
+ owner = "AGProjects";
+ repo = "python-sipsimple";
rev = "release-${version}";
- sha256 = "0jdilm11f5aahxrzrkxrfx9sgjgkbla1r0wayc5dzd2wmjrdjyrg";
+ sha256 = "094xf343d6zjhg9jwbm3dr74zq264cyqnn22byvm2m88lnagmhmr";
};
preConfigure = ''
@@ -32,7 +33,7 @@ buildPythonPackage rec {
buildInputs = with pkgs; [ alsaLib ffmpeg libv4l sqlite libvpx ];
propagatedBuildInputs = [ cython pkgs.openssl dnspython dateutil xcaplib msrplib lxml python-otr ];
- meta = with stdenv.lib; {
+ meta = with lib; {
description = "SIP SIMPLE implementation for Python";
homepage = http://sipsimpleclient.org/;
license = licenses.gpl3;
diff --git a/pkgs/development/tools/git-series/default.nix b/pkgs/development/tools/git-series/default.nix
index 442ae4d15ec9..70fa18ceddb5 100644
--- a/pkgs/development/tools/git-series/default.nix
+++ b/pkgs/development/tools/git-series/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, rustPlatform, openssl, cmake, perl, pkgconfig, zlib }:
+{ stdenv, fetchFromGitHub, fetchpatch, rustPlatform, openssl_1_0_2, cmake, perl, pkgconfig, zlib }:
with rustPlatform;
@@ -27,7 +27,7 @@ buildRustPackage rec {
'';
nativeBuildInputs = [ cmake pkgconfig perl ];
- buildInputs = [ openssl zlib ];
+ buildInputs = [ openssl_1_0_2 zlib ];
postBuild = ''
install -D "$src/git-series.1" "$out/man/man1/git-series.1"
diff --git a/pkgs/development/tools/osslsigncode/default.nix b/pkgs/development/tools/osslsigncode/default.nix
index d49f649d18be..a867e3850e2e 100644
--- a/pkgs/development/tools/osslsigncode/default.nix
+++ b/pkgs/development/tools/osslsigncode/default.nix
@@ -3,7 +3,7 @@
, autoreconfHook
, libgsf
, pkgconfig
-, openssl_1_1
+, openssl
, curl
}:
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
sha256 = "02jnbr3xdsb5dpll3k65080ryrfr7agawmjavwxd0v40w0an5yq8";
};
- nativeBuildInputs = [ autoreconfHook libgsf pkgconfig openssl_1_1 curl ];
+ nativeBuildInputs = [ autoreconfHook libgsf pkgconfig openssl curl ];
meta = with stdenv.lib; {
homepage = "https://github.com/mtrojnar/osslsigncode";
diff --git a/pkgs/misc/tw-rs/default.nix b/pkgs/misc/tw-rs/default.nix
deleted file mode 100644
index 50fa1a9ef0ee..000000000000
--- a/pkgs/misc/tw-rs/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ stdenv, fetchFromGitHub, rustPlatform, perl, zlib, openssl, curl }:
-
-rustPlatform.buildRustPackage rec {
- name = "tw-rs-${version}";
- version = "0.1.26";
-
- src = fetchFromGitHub {
- owner = "vmchale";
- repo = "tw-rs";
- rev = "${version}";
- sha256 = "1s1gk2wcs3792gdzrngksczz3gma5kv02ni2jqrhib8l6z8mg9ia";
- };
-
- buildInputs = [ perl zlib openssl ]
- ++ stdenv.lib.optional stdenv.isDarwin curl;
-
- cargoSha256 = "00v0b2vjal1dar4kwqk246k44mjyi1zp18hyj15dsww2972bm3b7";
-
- meta = with stdenv.lib; {
- description = "Twitter command-line interface written in rust";
- homepage = https://github.com/vmchale/tw-rs;
- license = licenses.bsd3;
- maintainers = with maintainers; [ vmchale ];
- platforms = platforms.all;
- };
-}
diff --git a/pkgs/servers/computing/torque/default.nix b/pkgs/servers/computing/torque/default.nix
index 35c830dff8a5..5e78fe742ac3 100644
--- a/pkgs/servers/computing/torque/default.nix
+++ b/pkgs/servers/computing/torque/default.nix
@@ -1,46 +1,62 @@
-{ stdenv, fetchurl, openssl, flex, bison, pkgconfig, groff, libxml2, utillinux
-, file, libtool, which }:
+{ stdenv, fetchFromGitHub, openssl, flex, bison, pkgconfig, groff, libxml2, utillinux
+, file, libtool, which, boost, autoreconfHook
+}:
stdenv.mkDerivation rec {
- name = "torque-4.2.10";
+ pname = "torque";
+ version = "6.1.3h2";
- src = fetchurl {
- name = "${name}.tar.gz";
- url = "http://www.adaptivecomputing.com/index.php?wpfb_dl=2880";
- sha256 = "1qpsk3bla6b6m7m0i1xpr183yj79liy3p34xhnz1grgq0776wg5l";
+ src = fetchFromGitHub {
+ owner = "adaptivecomputing";
+ repo = pname;
+ # branch 6.1.3h2, as they aren't pushing tags
+ # https://github.com/adaptivecomputing/torque/issues/467
+ rev = "458883319157cfc5c509046d09f9eb8e68e8d398";
+ sha256 = "1b56bc5j9wg87kcywzmhf7234byyrwax9v1pqsr9xmv2x7saakrr";
};
- nativeBuildInputs = [ pkgconfig ];
- buildInputs = [ openssl flex bison groff libxml2 utillinux libtool
- which ];
+ strictDeps = true;
+ nativeBuildInputs = [ autoreconfHook pkgconfig flex bison libxml2 ];
+ buildInputs = [
+ openssl groff libxml2 utillinux libtool
+ which boost
+ ];
enableParallelBuilding = true;
# added to fix build with gcc7
- NIX_CFLAGS_COMPILE = [ "-fpermissive" ];
+ NIX_CFLAGS_COMPILE = [
+ "-Wno-error" "-fpermissive"
+ ];
+
+ postPatch = ''
+ substituteInPlace Makefile.am \
+ --replace "contrib/init.d contrib/systemd" ""
+ substituteInPlace src/cmds/Makefile.am \
+ --replace "/etc/" "$out/etc/"
+ '';
preConfigure = ''
- substituteInPlace ./configure \
- --replace '/usr/bin/file' '${file}/bin/file'
+ substituteInPlace ./configure \
+ --replace '/usr/bin/file' '${file}/bin/file'
- # fix broken libxml2 detection
- sed -i '/xmlLib\=/c\xmlLib=xml2' ./configure
+ # fix broken libxml2 detection
+ sed -i '/xmlLib\=/c\xmlLib=xml2' ./configure
- for s in fifo cray_t3e dec_cluster msic_cluster sgi_origin umn_cluster; do
- substituteInPlace src/scheduler.cc/samples/$s/Makefile.in \
- --replace "schedprivdir = " "schedprivdir = $out/"
- done
+ for s in fifo cray_t3e dec_cluster msic_cluster sgi_origin umn_cluster; do
+ substituteInPlace src/scheduler.cc/samples/$s/Makefile.in \
+ --replace "schedprivdir = " "schedprivdir = $out/"
+ done
- for f in $(find ./ -name Makefile.in); do
- echo patching $f...
- sed -i $f -e '/PBS_MKDIRS/d' -e '/chmod u+s/d'
- done
+ for f in $(find ./ -name Makefile.in); do
+ echo patching $f...
+ sed -i $f -e '/PBS_MKDIRS/d' -e '/chmod u+s/d'
+ done
+ patchShebangs buildutils
'';
postInstall = ''
- mv $out/sbin/* $out/bin/
- rmdir $out/sbin
cp -v buildutils/pbs_mkdirs $out/bin/
cp -v torque.setup $out/bin/
chmod +x $out/bin/pbs_mkdirs $out/bin/torque.setup
@@ -50,5 +66,6 @@ stdenv.mkDerivation rec {
homepage = http://www.adaptivecomputing.com/products/open-source/torque;
description = "Resource management system for submitting and controlling jobs on supercomputers, clusters, and grids";
platforms = platforms.linux;
+ license = "TORQUEv1.1";
};
}
diff --git a/pkgs/servers/dns/powerdns/default.nix b/pkgs/servers/dns/powerdns/default.nix
index 105e9f232c16..3c63b6d8eb75 100644
--- a/pkgs/servers/dns/powerdns/default.nix
+++ b/pkgs/servers/dns/powerdns/default.nix
@@ -5,11 +5,11 @@
stdenv.mkDerivation rec {
name = "powerdns-${version}";
- version = "4.1.10";
+ version = "4.1.13";
src = fetchurl {
url = "https://downloads.powerdns.com/releases/pdns-${version}.tar.bz2";
- sha256 = "1iqmrg0dhf39gr2mq9d8r3s5c6yqkb5mm8grbbla5anajbgcyijs";
+ sha256 = "09az5yp5d9wvzw8faifyzsljhmmc8ifm4j70m4n2sr83i9i9rsp7";
};
nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/servers/nosql/rethinkdb/default.nix b/pkgs/servers/nosql/rethinkdb/default.nix
index d6ee407e3418..a1a9072f5cab 100644
--- a/pkgs/servers/nosql/rethinkdb/default.nix
+++ b/pkgs/servers/nosql/rethinkdb/default.nix
@@ -61,5 +61,6 @@ stdenv.mkDerivation rec {
license = stdenv.lib.licenses.agpl3;
platforms = stdenv.lib.platforms.linux;
maintainers = with stdenv.lib.maintainers; [ thoughtpolice bluescreen303 ];
+ broken = true; # broken with openssl 1.1
};
}
diff --git a/pkgs/servers/openxpki/default.nix b/pkgs/servers/openxpki/default.nix
index 05ee7f343523..7bd0ee2eede1 100644
--- a/pkgs/servers/openxpki/default.nix
+++ b/pkgs/servers/openxpki/default.nix
@@ -78,5 +78,6 @@ perlPackages.buildPerlPackage {
license = stdenv.lib.licenses.asl20;
maintainers = with stdenv.lib.maintainers; [ tstrobel ];
platforms = with stdenv.lib.platforms; linux;
+ broken = true; # broken with openssl 1.1 (v2.x might fix this)
};
}
diff --git a/pkgs/servers/sql/postgresql/default.nix b/pkgs/servers/sql/postgresql/default.nix
index 5421bfb0f2f6..7e536e22d947 100644
--- a/pkgs/servers/sql/postgresql/default.nix
+++ b/pkgs/servers/sql/postgresql/default.nix
@@ -3,7 +3,7 @@ let
generic =
# dependencies
{ stdenv, lib, fetchurl, makeWrapper
- , glibc, zlib, readline, openssl, icu, systemd, libossp_uuid
+ , glibc, zlib, readline, openssl, openssl_1_0_2, icu, systemd, libossp_uuid
, pkgconfig, libxml2, tzdata
# This is important to obtain a version of `libpq` that does not depend on systemd.
@@ -32,9 +32,10 @@ let
setOutputFlags = false; # $out retains configureFlags :-/
buildInputs =
- [ zlib readline openssl libxml2 makeWrapper ]
+ [ zlib readline libxml2 makeWrapper ]
++ lib.optionals icuEnabled [ icu ]
++ lib.optionals enableSystemd [ systemd ]
+ ++ [ (if atLeast "9.5" then openssl else openssl_1_0_2) ]
++ lib.optionals (!stdenv.isDarwin) [ libossp_uuid ];
nativeBuildInputs = lib.optionals icuEnabled [ pkgconfig ];
diff --git a/pkgs/servers/squid/4.nix b/pkgs/servers/squid/4.nix
deleted file mode 100644
index 69a46533ba5d..000000000000
--- a/pkgs/servers/squid/4.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{ stdenv, fetchurl, perl, openldap, pam, db, cyrus_sasl, libcap
-, expat, libxml2, openssl }:
-
-stdenv.mkDerivation rec {
- name = "squid-4.8";
-
- src = fetchurl {
- url = "http://www.squid-cache.org/Versions/v4/${name}.tar.xz";
- sha256 = "0432m0ix046rkja7r7qpydgsm2kf1w393xym15nx6h9kv4jb7kbq";
- };
-
- buildInputs = [
- perl openldap db cyrus_sasl expat libxml2 openssl
- ] ++ stdenv.lib.optionals stdenv.isLinux [ libcap pam ];
-
- prePatch = ''
- substituteInPlace configure --replace "/usr/local/include/libxml2" "${libxml2.dev}/include/libxml2"
- '';
-
- configureFlags = [
- "--enable-ipv6"
- "--disable-strict-error-checking"
- "--disable-arch-native"
- "--with-openssl"
- "--enable-ssl-crtd"
- "--enable-storeio=ufs,aufs,diskd,rock"
- "--enable-removal-policies=lru,heap"
- "--enable-delay-pools"
- "--enable-x-accelerator-vary"
- ] ++ stdenv.lib.optional (stdenv.isLinux && !stdenv.hostPlatform.isMusl) "--enable-linux-netfilter";
-
- meta = with stdenv.lib; {
- description = "A caching proxy for the Web supporting HTTP, HTTPS, FTP, and more";
- homepage = http://www.squid-cache.org;
- license = licenses.gpl2;
- platforms = platforms.linux;
- maintainers = with maintainers; [ fpletz raskin ];
- };
-}
diff --git a/pkgs/servers/squid/default.nix b/pkgs/servers/squid/default.nix
index fde29dc7e80c..72a7fff7c475 100644
--- a/pkgs/servers/squid/default.nix
+++ b/pkgs/servers/squid/default.nix
@@ -1,22 +1,16 @@
{ stdenv, fetchurl, perl, openldap, pam, db, cyrus_sasl, libcap
-, expat, libxml2, openssl, fetchpatch }:
+, expat, libxml2, openssl, pkgconfig
+}:
stdenv.mkDerivation rec {
- name = "squid-3.5.28";
+ name = "squid-4.8";
src = fetchurl {
- url = "http://www.squid-cache.org/Versions/v3/3.5/${name}.tar.xz";
- sha256 = "1n4f55g56b11qz4fazrnvgzx5wp6b6637c4qkbd1lrjwwqibchgx";
+ url = "http://www.squid-cache.org/Versions/v4/${name}.tar.xz";
+ sha256 = "0432m0ix046rkja7r7qpydgsm2kf1w393xym15nx6h9kv4jb7kbq";
};
- patches = [
- (fetchpatch {
- name = "3.5-CVE-2019-13345.patch";
- url = "https://github.com/squid-cache/squid/commit/5730c2b5cb56e7639dc423dd62651c8736a54e35.patch";
- sha256 = "0955432g9a00vwxzcrwpjzx6vywspx1cxhr7bknr7jzbzam5sxi3";
- })
- ];
-
+ nativeBuildInputs = [ pkgconfig ];
buildInputs = [
perl openldap db cyrus_sasl expat libxml2 openssl
] ++ stdenv.lib.optionals stdenv.isLinux [ libcap pam ];
@@ -38,6 +32,6 @@ stdenv.mkDerivation rec {
homepage = http://www.squid-cache.org;
license = licenses.gpl2;
platforms = platforms.linux;
- maintainers = with maintainers; [ fpletz ];
+ maintainers = with maintainers; [ fpletz raskin ];
};
}
diff --git a/pkgs/shells/powershell/default.nix b/pkgs/shells/powershell/default.nix
index a434ef7e4fb4..3a6eb6378f0a 100644
--- a/pkgs/shells/powershell/default.nix
+++ b/pkgs/shells/powershell/default.nix
@@ -1,5 +1,5 @@
{ stdenv, autoPatchelfHook, fetchzip, libunwind, libuuid, icu, curl
-, darwin, makeWrapper, less, openssl, pam, lttng-ust }:
+, darwin, makeWrapper, less, openssl_1_0_2, pam, lttng-ust }:
let platformString = if stdenv.isDarwin then "osx"
else if stdenv.isLinux then "linux"
@@ -10,7 +10,7 @@ let platformString = if stdenv.isDarwin then "osx"
platformLdLibraryPath = if stdenv.isDarwin then "DYLD_FALLBACK_LIBRARY_PATH"
else if stdenv.isLinux then "LD_LIBRARY_PATH"
else throw "unsupported platform";
- libraries = [ libunwind libuuid icu curl openssl ] ++
+ libraries = [ libunwind libuuid icu curl openssl_1_0_2 ] ++
(if stdenv.isLinux then [ pam lttng-ust ] else [ darwin.Libsystem ]);
in
stdenv.mkDerivation rec {
diff --git a/pkgs/tools/backup/partimage/default.nix b/pkgs/tools/backup/partimage/default.nix
index a2e962d7f855..4a18deeb57c8 100644
--- a/pkgs/tools/backup/partimage/default.nix
+++ b/pkgs/tools/backup/partimage/default.nix
@@ -1,4 +1,13 @@
-{stdenv, fetchurl, fetchpatch, bzip2, zlib, newt, openssl, pkgconfig, slang
+{stdenv
+, fetchurl
+, fetchpatch
+, bzip2
+, zlib
+, newt
+, openssl
+, pkgconfig
+, slang
+, autoreconfHook
}:
stdenv.mkDerivation {
name = "partimage-0.6.9";
@@ -8,20 +17,19 @@ stdenv.mkDerivation {
url = mirror://sourceforge/partimage/partimage-0.6.9.tar.bz2;
sha256 = "0db6xiphk6xnlpbxraiy31c5xzj0ql6k4rfkmqzh665yyj0nqfkm";
};
+
configureFlags = [ "--with-ssl-headers=${openssl.dev}/include/openssl" ];
- nativeBuildInputs = [ pkgconfig ];
- buildInputs = [bzip2 zlib newt newt openssl slang
- # automake autoconf libtool gettext
- ];
+ nativeBuildInputs = [ pkgconfig autoreconfHook ];
+ buildInputs = [ bzip2 zlib newt newt openssl slang ];
patches = [
./gentoos-zlib.patch
(fetchpatch {
- name = "no-SSLv2.patch";
- url = "https://projects.archlinux.org/svntogit/community.git/plain/trunk"
- + "/use-SSLv3-by-default.patch?h=packages/partimage&id=7e95d1c6614e";
- sha256 = "17dfqwvwnkinz8vs0l3bjjbmfx3a7y8nv3wn67gjsqpmggcpdnd6";
+ name = "openssl-1.1.patch";
+ url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-block/partimage/files/"
+ + "partimage-0.6.9-openssl-1.1-compatibility.patch?id=3fe8e9910002b6523d995512a646b063565d0447";
+ sha256 = "1hs0krxrncxq1w36bhad02yk8yx71zcfs35cw87c82sl2sfwasjg";
})
];
diff --git a/pkgs/tools/compression/xar/default.nix b/pkgs/tools/compression/xar/default.nix
index 3421045fe4c6..a794296bfd95 100644
--- a/pkgs/tools/compression/xar/default.nix
+++ b/pkgs/tools/compression/xar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libxml2, lzma, openssl, zlib, bzip2, fts }:
+{ stdenv, fetchurl, libxml2, lzma, openssl, zlib, bzip2, fts, autoconf }:
stdenv.mkDerivation rec {
version = "1.6.1";
@@ -9,7 +9,15 @@ stdenv.mkDerivation rec {
sha256 = "0ghmsbs6xwg1092v7pjcibmk5wkyifwxw6ygp08gfz25d2chhipf";
};
- buildInputs = [ libxml2 lzma openssl zlib bzip2 fts ];
+ buildInputs = [ libxml2 lzma openssl zlib bzip2 fts autoconf ];
+
+ prePatch = ''
+ substituteInPlace configure.ac \
+ --replace 'OpenSSL_add_all_ciphers' 'OPENSSL_init_crypto' \
+ --replace 'openssl/evp.h' 'openssl/crypto.h'
+ '';
+
+ preConfigure = "./autogen.sh";
meta = {
homepage = https://mackyle.github.io/xar/;
diff --git a/pkgs/tools/misc/shallot/default.nix b/pkgs/tools/misc/shallot/default.nix
index 6c757ca224a9..ced15038b0c1 100644
--- a/pkgs/tools/misc/shallot/default.nix
+++ b/pkgs/tools/misc/shallot/default.nix
@@ -1,12 +1,10 @@
-{
- stdenv, fetchFromGitHub,
- openssl
+{ stdenv, fetchFromGitHub, fetchpatch
+, openssl
}:
-let
+stdenv.mkDerivation rec {
+ pname = "shallot";
version = "0.0.3";
-in stdenv.mkDerivation {
- name = "shallot-${version}";
src = fetchFromGitHub {
owner = "katmagic";
@@ -17,6 +15,21 @@ in stdenv.mkDerivation {
buildInputs = [ openssl ];
+ patches = [
+ (fetchpatch {
+ url = "https://github.com/katmagic/Shallot/commit/c913088dfaaaf249494514f20a62f2a17b5c6606.patch";
+ sha256 = "19l1ppbxpdb0736f7plhybj08wh6rqk1lr3bxsp8jpzpnkh114b2";
+ })
+ (fetchpatch {
+ url = "https://github.com/katmagic/Shallot/commit/cd6628d97b981325e700a38f408a43df426fd569.patch";
+ sha256 = "1gaffp5wp1l5p2qdk0ix3i5fhzpx4xphl0haa6ajhqn8db7hbr9y";
+ })
+ (fetchpatch {
+ url = "https://github.com/katmagic/Shallot/commit/5c7c1ccecbbad5a121c50ba7153cbbee7ee0ebf9.patch";
+ sha256 = "1zmll4iqz39zwk8vj40n1dpvyq3403l64p2127gsjgh2l2v91s4k";
+ })
+ ];
+
installPhase = ''
mkdir -p $out/bin
cp ./shallot $out/bin/
diff --git a/pkgs/tools/misc/vfdecrypt/default.nix b/pkgs/tools/misc/vfdecrypt/default.nix
deleted file mode 100644
index 83b91f6203ed..000000000000
--- a/pkgs/tools/misc/vfdecrypt/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ stdenv, fetchFromGitHub, openssl }:
-
-stdenv.mkDerivation rec {
- name = "vfdecrypt-${version}";
- version = "unstable-2010-08-13";
-
- src = fetchFromGitHub {
- owner = "Tomer1510";
- repo = "VFDecrypt";
- rev = "4e2fa32816254907e82886b936afcae9859a876c";
- sha256 = "0b945805f7f60bf48556c2db45c9ab26485fb05acbc6160a563d529b20cb56a3";
- };
-
- buildInputs = [ openssl ];
-
- installPhase = ''
- mkdir -p $out/bin
- cp vfdecrypt $out/bin
- '';
-
- meta = with stdenv.lib; {
- description = "A cross platform dmg decryption tool";
- license = licenses.mit;
- inherit (src.meta) homepage;
- };
-}
diff --git a/pkgs/tools/networking/dsniff/default.nix b/pkgs/tools/networking/dsniff/default.nix
index 50a3c98af0f7..9ddc1a35ce37 100644
--- a/pkgs/tools/networking/dsniff/default.nix
+++ b/pkgs/tools/networking/dsniff/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, autoreconfHook, libpcap, db, glib, libnet, libnids, symlinkJoin, openssl_1_1 }:
+{ stdenv, fetchFromGitLab, autoreconfHook, libpcap, db, glib, libnet, libnids, symlinkJoin, openssl }:
let
/*
dsniff's build system unconditionnaly wants static libraries and does not
@@ -33,8 +33,8 @@ let
dontDisableStatic = true;
});
ssl = symlinkJoin {
- inherit (openssl_1_1) name;
- paths = with openssl_1_1.override { static = true; }; [ out dev ];
+ inherit (openssl) name;
+ paths = with openssl.override { static = true; }; [ out dev ];
};
in stdenv.mkDerivation {
pname = "dsniff";
diff --git a/pkgs/tools/networking/mailsend/default.nix b/pkgs/tools/networking/mailsend/default.nix
index 642fd739335a..c888f354eae7 100644
--- a/pkgs/tools/networking/mailsend/default.nix
+++ b/pkgs/tools/networking/mailsend/default.nix
@@ -22,6 +22,13 @@ stdenv.mkDerivation {
configureFlags = [
"--with-openssl=${openssl.dev}"
];
+
+ patches = [
+ (fetchurl {
+ url = https://github.com/muquit/mailsend/commit/960df6d7a11eef90128dc2ae660866b27f0e4336.patch;
+ sha256 = "0vz373zcfl19inflybfjwshcq06rvhx0i5g0f4b021cxfhyb1sm0";
+ })
+ ];
meta = {
inherit (s) version;
description = ''CLI email sending tool'';
diff --git a/pkgs/tools/networking/p2p/libtorrent/default.nix b/pkgs/tools/networking/p2p/libtorrent/default.nix
index 524b75d5582d..f750e3b1bfe1 100644
--- a/pkgs/tools/networking/p2p/libtorrent/default.nix
+++ b/pkgs/tools/networking/p2p/libtorrent/default.nix
@@ -1,8 +1,8 @@
# NOTE: this is rakshava's version of libtorrent, used mainly by rtorrent
# This is NOT libtorrent-rasterbar, used by Deluge, qbitttorent, and others
-{ stdenv, fetchFromGitHub, pkgconfig
-, libtool, autoconf, automake, cppunit
-, openssl, libsigcxx, zlib }:
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+, cppunit, openssl, libsigcxx, zlib
+}:
stdenv.mkDerivation rec {
pname = "libtorrent";
@@ -15,10 +15,8 @@ stdenv.mkDerivation rec {
sha256 = "1h5y6ab3gs20yyprdfwcw8fh1c6czs4yrdj0kf54d2vp9qwz685r";
};
- nativeBuildInputs = [ pkgconfig ];
- buildInputs = [ libtool autoconf automake cppunit openssl libsigcxx zlib ];
-
- preConfigure = "./autogen.sh";
+ nativeBuildInputs = [ pkgconfig autoreconfHook ];
+ buildInputs = [ cppunit openssl libsigcxx zlib ];
meta = with stdenv.lib; {
homepage = "https://github.com/rakshasa/libtorrent";
diff --git a/pkgs/tools/networking/radsecproxy/default.nix b/pkgs/tools/networking/radsecproxy/default.nix
index 0ed1150159d2..9901194f3c62 100644
--- a/pkgs/tools/networking/radsecproxy/default.nix
+++ b/pkgs/tools/networking/radsecproxy/default.nix
@@ -1,15 +1,18 @@
-{ stdenv, fetchurl, openssl }:
+{ stdenv, fetchFromGitHub, openssl, autoreconfHook, nettle }:
stdenv.mkDerivation rec {
- name = "radsecproxy-${version}";
- version = "1.6.9";
+ pname = "radsecproxy";
+ version = "1.8.0";
- src = fetchurl {
- url = "https://software.nordu.net/radsecproxy/radsecproxy-${version}.tar.xz";
- sha256 = "6f2c7030236c222782c9ac2c52778baa63540a1865b75a7a6d8c1280ce6ad816";
+ src = fetchFromGitHub {
+ owner = pname;
+ repo = pname;
+ rev = version;
+ sha256 = "1268lbysa82b6h0101jzs0v6ixvmy3x0d0a8hw37sy95filsjmia";
};
- buildInputs = [ openssl ];
+ nativeBuildInputs = [ autoreconfHook ];
+ buildInputs = [ openssl nettle ];
configureFlags = [
"--with-ssl=${openssl.dev}"
diff --git a/pkgs/tools/networking/socat/2.x.nix b/pkgs/tools/networking/socat/2.x.nix
index 11af161893fb..99f0301c7c86 100644
--- a/pkgs/tools/networking/socat/2.x.nix
+++ b/pkgs/tools/networking/socat/2.x.nix
@@ -19,5 +19,6 @@ stdenv.mkDerivation rec {
platforms = platforms.unix;
license = licenses.gpl2;
maintainers = [ maintainers.eelco ];
+ broken = true; # broken with openssl 1.1
};
}
diff --git a/pkgs/tools/networking/uwimap/default.nix b/pkgs/tools/networking/uwimap/default.nix
index 7cb489a3f213..ad9eea0ecedd 100644
--- a/pkgs/tools/networking/uwimap/default.nix
+++ b/pkgs/tools/networking/uwimap/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, pam, openssl}:
+{ stdenv, fetchurl, fetchpatch, pam, openssl }:
stdenv.mkDerivation {
name = "uw-imap-2007f";
@@ -19,7 +19,12 @@ stdenv.mkDerivation {
buildInputs = [ openssl ]
++ stdenv.lib.optional (!stdenv.isDarwin) pam;
- patchPhase = ''
+ patches = [ (fetchpatch {
+ url = "https://anonscm.debian.org/cgit/collab-maint/uw-imap.git/plain/debian/patches/1006_openssl1.1_autoverify.patch?id=b4df81d246a6cdbfd035c21f43e844effda3582b";
+ sha256 = "09xb58awvkhzmmjhrkqgijzgv7ia381ablf0y7i1rvhcqkb5wga7";
+ }) ];
+
+ postPatch = ''
sed -i src/osdep/unix/Makefile -e 's,/usr/local/ssl,${openssl.dev},'
sed -i src/osdep/unix/Makefile -e 's,^SSLCERTS=.*,SSLCERTS=/etc/ssl/certs,'
sed -i src/osdep/unix/Makefile -e 's,^SSLLIB=.*,SSLLIB=${openssl.out}/lib,'
diff --git a/pkgs/tools/package-management/cargo-download/Cargo.nix b/pkgs/tools/package-management/cargo-download/Cargo.nix
index 9735bde199dc..21740ce2ead1 100644
--- a/pkgs/tools/package-management/cargo-download/Cargo.nix
+++ b/pkgs/tools/package-management/cargo-download/Cargo.nix
@@ -1,3138 +1,675 @@
-# Generated by carnix 0.7.2: carnix nix
-{ lib, buildPlatform, buildRustCrate, fetchgit }:
-let kernel = buildPlatform.parsed.kernel.name;
- abi = buildPlatform.parsed.abi.name;
- include = includedFiles: src: builtins.filterSource (path: type:
- lib.lists.any (f:
- let p = toString (src + ("/" + f)); in
- (path == p) || (type == "directory" && lib.strings.hasPrefix path p)
- ) includedFiles
- ) src;
- updateFeatures = f: up: functions: builtins.deepSeq f (lib.lists.foldl' (features: fun: fun features) (lib.attrsets.recursiveUpdate f up) functions);
- mapFeatures = features: map (fun: fun { features = features; });
- mkFeatures = feat: lib.lists.foldl (features: featureName:
- if feat.${featureName} or false then
- [ featureName ] ++ features
- else
- features
- ) [] (builtins.attrNames feat);
+# Generated by carnix 0.10.0: carnix generate-nix
+{ lib, buildPlatform, buildRustCrate, buildRustCrateHelpers, cratesIO, fetchgit }:
+with buildRustCrateHelpers;
+let inherit (lib.lists) fold;
+ inherit (lib.attrsets) recursiveUpdate;
in
rec {
- cargo_download = f: cargo_download_0_1_1 { features = cargo_download_0_1_1_features { cargo_download_0_1_1 = f; }; };
+ crates = cratesIO;
+ cargo_download = crates.crates.cargo_download."0.1.2" deps;
__all = [ (cargo_download {}) ];
- adler32_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "adler32";
- version = "1.0.3";
- authors = [ "Remi Rampin " ];
- sha256 = "1z3mvjgw02mbqk98kizzibrca01d5wfkpazsrp3vkkv3i56pn6fb";
- inherit dependencies buildDependencies features;
- };
- aho_corasick_0_5_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "aho-corasick";
- version = "0.5.3";
- authors = [ "Andrew Gallant " ];
- sha256 = "1igab46mvgknga3sxkqc917yfff0wsjxjzabdigmh240p5qxqlnn";
- libName = "aho_corasick";
- crateBin = [ { name = "aho-corasick-dot"; } ];
- inherit dependencies buildDependencies features;
- };
- ansi_term_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "ansi_term";
- version = "0.9.0";
- authors = [ "ogham@bsago.me" "Ryan Scheel (Havvy) " ];
- sha256 = "1vcd8m2hglrdi4zmqnkkz5zy3c73ifgii245k7vj6qr5dzpn9hij";
- inherit dependencies buildDependencies features;
- };
- ansi_term_0_11_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "ansi_term";
- version = "0.11.0";
- authors = [ "ogham@bsago.me" "Ryan Scheel (Havvy) " "Josh Triplett " ];
- sha256 = "08fk0p2xvkqpmz3zlrwnf6l8sj2vngw464rvzspzp31sbgxbwm4v";
- inherit dependencies buildDependencies features;
- };
- arrayvec_0_4_7_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "arrayvec";
- version = "0.4.7";
- authors = [ "bluss" ];
- sha256 = "0fzgv7z1x1qnyd7j32vdcadk4k9wfx897y06mr3bw1yi52iqf4z4";
- inherit dependencies buildDependencies features;
- };
- atty_0_2_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "atty";
- version = "0.2.11";
- authors = [ "softprops " ];
- sha256 = "0by1bj2km9jxi4i4g76zzi76fc2rcm9934jpnyrqd95zw344pb20";
- inherit dependencies buildDependencies features;
- };
- base64_0_9_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "base64";
- version = "0.9.2";
- authors = [ "Alice Maz " "Marshall Pierce " ];
- sha256 = "0g4xxl8jhwjhvr69qlxdmbzd521xcn5j67lhkr20nh7ajvl6k0l1";
- inherit dependencies buildDependencies features;
- };
- bitflags_0_9_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "bitflags";
- version = "0.9.1";
- authors = [ "The Rust Project Developers" ];
- sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws";
- inherit dependencies buildDependencies features;
- };
- bitflags_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "bitflags";
- version = "1.0.3";
- authors = [ "The Rust Project Developers" ];
- sha256 = "162p4w4h1ad76awq6b5yivmls3d50m9cl27d8g588lsps6g8s5rw";
- inherit dependencies buildDependencies features;
- };
- build_const_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "build_const";
- version = "0.2.1";
- authors = [ "Garrett Berg " ];
- sha256 = "15249xzi3qlm72p4glxgavwyq70fx2sp4df6ii0sdlrixrrp77pl";
- inherit dependencies buildDependencies features;
- };
- byteorder_1_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "byteorder";
- version = "1.2.3";
- authors = [ "Andrew Gallant " ];
- sha256 = "1xghv5f5rydzsam8lnfqhfk090i8a1knb77ikbs0ik44bvrw2ij3";
- inherit dependencies buildDependencies features;
- };
- bytes_0_4_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "bytes";
- version = "0.4.9";
- authors = [ "Carl Lerche " ];
- sha256 = "1jiqc94j85la9vs165vqpf6s1sah8n3ivnhsfapcjrvbhjawi6i6";
- inherit dependencies buildDependencies features;
- };
- cargo_download_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "cargo-download";
- version = "0.1.1";
- authors = [ "Karol Kuczmarski " ];
- sha256 = "1xiffk4df6i9cvwimzwyf1finv6w8f8gr0zjp21fzbiz5c0ksx65";
- crateBin = [ { name = "cargo-download"; } ];
- inherit dependencies buildDependencies features;
- };
- case_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "case";
- version = "0.1.0";
- authors = [ "Skyler Lipthay " ];
- sha256 = "06i1x3wqv30rkvlgj134qf9vzxhzz28bz41mm0rgki0i0f7gf96n";
- inherit dependencies buildDependencies features;
- };
- cc_1_0_18_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "cc";
- version = "1.0.18";
- authors = [ "Alex Crichton " ];
- sha256 = "0wcnpa54qvm5921wwrrkn8cwxd5y0p5f4gb1qgyh5imii7rdhpjx";
- inherit dependencies buildDependencies features;
- };
- cfg_if_0_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "cfg-if";
- version = "0.1.4";
- authors = [ "Alex Crichton " ];
- sha256 = "0n5baxk53dvqjymzwynq55wb805b24390qx1n16zi8fjzq90j7k4";
- inherit dependencies buildDependencies features;
- };
- chrono_0_2_25_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "chrono";
- version = "0.2.25";
- authors = [ "Kang Seonghoon " ];
- sha256 = "0gsvqk8cnmm43qj3xyngqvfqh50cbdbqas7ik0wjgnvknirmmca7";
- inherit dependencies buildDependencies features;
- };
- clap_2_32_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "clap";
- version = "2.32.0";
- authors = [ "Kevin K. " ];
- sha256 = "1hdjf0janvpjkwrjdjx1mm2aayzr54k72w6mriyr0n5anjkcj1lx";
- inherit dependencies buildDependencies features;
- };
- conv_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "conv";
- version = "0.3.3";
- authors = [ "Daniel Keep " ];
- sha256 = "08rl72k1a48xah0ar5l9v1bw19pp8jdw2pdkd3vvj9ijsyyg9yik";
- inherit dependencies buildDependencies features;
- };
- core_foundation_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "core-foundation";
- version = "0.2.3";
- authors = [ "The Servo Project Developers" ];
- sha256 = "1g0vpya5h2wa0nlz4a74jar6y8z09f0p76zbzfqrm3dbfsrld1pm";
- inherit dependencies buildDependencies features;
- };
- core_foundation_sys_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "core-foundation-sys";
- version = "0.2.3";
- authors = [ "The Servo Project Developers" ];
- sha256 = "19s0d03294m9s5j8cvy345db3gkhs2y02j5268ap0c6ky5apl53s";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- crc_1_8_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "crc";
- version = "1.8.1";
- authors = [ "Rui Hu " ];
- sha256 = "00m9jjqrddp3bqyanvyxv0hf6s56bx1wy51vcdcxg4n2jdhg109s";
- inherit dependencies buildDependencies features;
- };
- crossbeam_0_2_12_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "crossbeam";
- version = "0.2.12";
- authors = [ "Aaron Turon " ];
- sha256 = "0jkm95is7bwv4parwfq4aim6cigiwd4w9hz09cpild4hp5ry625i";
- inherit dependencies buildDependencies features;
- };
- crossbeam_deque_0_3_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "crossbeam-deque";
- version = "0.3.1";
- authors = [ "The Crossbeam Project Developers" ];
- sha256 = "1km0mavyp9ddwb7k7kcdmyryi3bwxf0nmr6jqcpyjzvzmxjlkqap";
- inherit dependencies buildDependencies features;
- };
- crossbeam_epoch_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "crossbeam-epoch";
- version = "0.4.3";
- authors = [ "The Crossbeam Project Developers" ];
- sha256 = "18xfgi7h9aq4lqqrqzy366xg885z1hlkbhvycl2i3zhkhkvadhv3";
- inherit dependencies buildDependencies features;
- };
- crossbeam_utils_0_3_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "crossbeam-utils";
- version = "0.3.2";
- authors = [ "The Crossbeam Project Developers" ];
- sha256 = "1byx31nkxl48la58571h40ssk94faky26jwz15w40v2gba3v4fql";
- inherit dependencies buildDependencies features;
- };
- custom_derive_0_1_7_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "custom_derive";
- version = "0.1.7";
- authors = [ "Daniel Keep " ];
- sha256 = "160q3pzri2fgrr6czfdkwy1sbddki2za96r7ivvyii52qp1523zs";
- inherit dependencies buildDependencies features;
- };
- derive_error_0_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "derive-error";
- version = "0.0.3";
- authors = [ "rushmorem " ];
- sha256 = "0239vzxn5xr9nm3i4d6hmqy7dv8llcjblgh1xixfk5dcgcqan77y";
- procMacro = true;
- inherit dependencies buildDependencies features;
- };
- dtoa_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "dtoa";
- version = "0.4.3";
- authors = [ "David Tolnay " ];
- sha256 = "1xysdxdm24sk5ysim7lps4r2qaxfnj0sbakhmps4d42yssx30cw8";
- inherit dependencies buildDependencies features;
- };
- either_1_5_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "either";
- version = "1.5.0";
- authors = [ "bluss" ];
- sha256 = "1f7kl2ln01y02m8fpd2zrdjiwqmgfvl9nxxrfry3k19d1gd2bsvz";
- inherit dependencies buildDependencies features;
- };
- encoding_rs_0_7_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "encoding_rs";
- version = "0.7.2";
- authors = [ "Henri Sivonen " ];
- sha256 = "1c23bi3q4qmi2ci8g7p5j4b4i5abyggvyg6hkl7w4p4r527c9g3q";
- inherit dependencies buildDependencies features;
- };
- exitcode_1_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "exitcode";
- version = "1.1.2";
- authors = [ "Ben Wilber " ];
- sha256 = "1cw9p4vzbscvyrbzv7z68gv2cairrns2d4wcb4nkahkcjk25phip";
- inherit dependencies buildDependencies features;
- };
- filetime_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "filetime";
- version = "0.2.1";
- authors = [ "Alex Crichton " ];
- sha256 = "1wmbj3jnpl39851lymw64j9ac1nmy1z96h1wymvlvypspl68w5y0";
- inherit dependencies buildDependencies features;
- };
- flate2_0_2_20_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "flate2";
- version = "0.2.20";
- authors = [ "Alex Crichton " ];
- sha256 = "1am0d2vmqym1vcg7rvv516vpcrbhdn1jisy0q03r3nbzdzh54ppl";
- inherit dependencies buildDependencies features;
- };
- foreign_types_0_3_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "foreign-types";
- version = "0.3.2";
- authors = [ "Steven Fackler " ];
- sha256 = "105n8sp2djb1s5lzrw04p7ss3dchr5qa3canmynx396nh3vwm2p8";
- inherit dependencies buildDependencies features;
- };
- foreign_types_shared_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "foreign-types-shared";
- version = "0.1.1";
- authors = [ "Steven Fackler " ];
- sha256 = "0b6cnvqbflws8dxywk4589vgbz80049lz4x1g9dfy4s1ppd3g4z5";
- inherit dependencies buildDependencies features;
- };
- fuchsia_zircon_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "fuchsia-zircon";
- version = "0.3.3";
- authors = [ "Raph Levien " ];
- sha256 = "0jrf4shb1699r4la8z358vri8318w4mdi6qzfqy30p2ymjlca4gk";
- inherit dependencies buildDependencies features;
- };
- fuchsia_zircon_sys_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "fuchsia-zircon-sys";
- version = "0.3.3";
- authors = [ "Raph Levien " ];
- sha256 = "08jp1zxrm9jbrr6l26bjal4dbm8bxfy57ickdgibsqxr1n9j3hf5";
- inherit dependencies buildDependencies features;
- };
- futures_0_1_23_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "futures";
- version = "0.1.23";
- authors = [ "Alex Crichton " ];
- sha256 = "075s7sv1iqzf2r3lvb4hk81k5c9xzfcyb8q92h2s35fnypxyqd21";
- inherit dependencies buildDependencies features;
- };
- futures_cpupool_0_1_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "futures-cpupool";
- version = "0.1.8";
- authors = [ "Alex Crichton " ];
- sha256 = "0ficd31n5ljiixy6x0vjglhq4fp0v1p4qzxm3v6ymsrb3z080l5c";
- inherit dependencies buildDependencies features;
- };
- httparse_1_3_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "httparse";
- version = "1.3.2";
- authors = [ "Sean McArthur " ];
- sha256 = "1mm10m2hv1inxzzvm85s6fdmwl9a3q9vik0nzh5qrx2hx5x8fcwl";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- hyper_0_11_27_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "hyper";
- version = "0.11.27";
- authors = [ "Sean McArthur " ];
- sha256 = "0q5as4lhvh31bzk4qm7j84snrmxyxyaqk040rfk72b42dn98mryi";
- inherit dependencies buildDependencies features;
- };
- hyper_tls_0_1_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "hyper-tls";
- version = "0.1.3";
- authors = [ "Sean McArthur " ];
- sha256 = "1dr5arj79pdyz9f2jggqmna1qpc578f9pdgsf2ana5amjpsp0j89";
- inherit dependencies buildDependencies features;
- };
- idna_0_1_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "idna";
- version = "0.1.5";
- authors = [ "The rust-url developers" ];
- sha256 = "1gwgl19rz5vzi67rrhamczhxy050f5ynx4ybabfapyalv7z1qmjy";
- inherit dependencies buildDependencies features;
- };
- iovec_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "iovec";
- version = "0.1.2";
- authors = [ "Carl Lerche " ];
- sha256 = "0vjymmb7wj4v4kza5jjn48fcdb85j3k37y7msjl3ifz0p9yiyp2r";
- inherit dependencies buildDependencies features;
- };
- isatty_0_1_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "isatty";
- version = "0.1.8";
- authors = [ "David Tolnay " ];
- sha256 = "1n5wzzkb1kxkfbcyv5vfrsybika0a1k01sp06ngad73ljx4kwj5h";
- inherit dependencies buildDependencies features;
- };
- itertools_0_6_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "itertools";
- version = "0.6.5";
- authors = [ "bluss" ];
- sha256 = "0gbhgn7s8qkxxw10i514fzpqnc3aissn4kcgylm2cvnv9zmg8mw1";
- inherit dependencies buildDependencies features;
- };
- itoa_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "itoa";
- version = "0.4.2";
- authors = [ "David Tolnay " ];
- sha256 = "193a744yd74rmk13hl8xvd9p2hqhdkyf8xkvi1mxm5s10bby0h8v";
- inherit dependencies buildDependencies features;
- };
- kernel32_sys_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "kernel32-sys";
- version = "0.2.2";
- authors = [ "Peter Atashian " ];
- sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj";
- libName = "kernel32";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- language_tags_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "language-tags";
- version = "0.2.2";
- authors = [ "Pyfisch " ];
- sha256 = "1zkrdzsqzzc7509kd7nngdwrp461glm2g09kqpzaqksp82frjdvy";
- inherit dependencies buildDependencies features;
- };
- lazy_static_0_2_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "lazy_static";
- version = "0.2.11";
- authors = [ "Marvin Löbel " ];
- sha256 = "1x6871cvpy5b96yv4c7jvpq316fp5d4609s9py7qk6cd6x9k34vm";
- inherit dependencies buildDependencies features;
- };
- lazy_static_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "lazy_static";
- version = "1.0.2";
- authors = [ "Marvin Löbel " ];
- sha256 = "0ix4dmy6zb4v3m75l4alg84fk06y145z52z9pyysc9labw2x5r3r";
- inherit dependencies buildDependencies features;
- };
- lazycell_0_6_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "lazycell";
- version = "0.6.0";
- authors = [ "Alex Crichton " "Nikita Pekin " ];
- sha256 = "1ax148clinbvp6alxcih8s5i2bg3mc5mi69n3hvzvzbwlm6k532r";
- inherit dependencies buildDependencies features;
- };
- libc_0_2_42_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "libc";
- version = "0.2.42";
- authors = [ "The Rust Project Developers" ];
- sha256 = "064v49hz1zpl081w8c4vwikrkhaxp06y4i9l7x7wx6bjpwp19pjx";
- inherit dependencies buildDependencies features;
- };
- libflate_0_1_16_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "libflate";
- version = "0.1.16";
- authors = [ "Takeru Ohta " ];
- sha256 = "0l15g61h10bznxsjirwq9c43w17mjpqx6wz0357agskardkdh14n";
- inherit dependencies buildDependencies features;
- };
- log_0_3_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "log";
- version = "0.3.9";
- authors = [ "The Rust Project Developers" ];
- sha256 = "19i9pwp7lhaqgzangcpw00kc3zsgcqcx84crv07xgz3v7d3kvfa2";
- inherit dependencies buildDependencies features;
- };
- log_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "log";
- version = "0.4.3";
- authors = [ "The Rust Project Developers" ];
- sha256 = "1gdmwrbm7s18zcdz4lcdhz975m4gwhi854c7j1rvj1gsr8aca250";
- inherit dependencies buildDependencies features;
- };
- maplit_0_1_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "maplit";
- version = "0.1.6";
- authors = [ "bluss" ];
- sha256 = "1f8kf5v7xra8ssvh5c10qlacbk4l0z2817pkscflx5s5q6y7925h";
- inherit dependencies buildDependencies features;
- };
- matches_0_1_7_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "matches";
- version = "0.1.7";
- authors = [ "Simon Sapin " ];
- sha256 = "0zx9gi5flyzkh9nx52fyc3k2zz08b9ww1c4yndlfrw72kr8m7yfy";
- libPath = "lib.rs";
- inherit dependencies buildDependencies features;
- };
- memchr_0_1_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "memchr";
- version = "0.1.11";
- authors = [ "Andrew Gallant " "bluss" ];
- sha256 = "0x73jghamvxxq5fsw9wb0shk5m6qp3q6fsf0nibn0i6bbqkw91s8";
- inherit dependencies buildDependencies features;
- };
- memoffset_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "memoffset";
- version = "0.2.1";
- authors = [ "Gilad Naaman " ];
- sha256 = "00vym01jk9slibq2nsiilgffp7n6k52a4q3n4dqp0xf5kzxvffcf";
- inherit dependencies buildDependencies features;
- };
- mime_0_3_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "mime";
- version = "0.3.8";
- authors = [ "Sean McArthur " ];
- sha256 = "1577adg9zvkd1qdb2nqqg1ryap33p5r4qsw01n9pw162xpisqjm3";
- inherit dependencies buildDependencies features;
- };
- mime_guess_2_0_0_alpha_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "mime_guess";
- version = "2.0.0-alpha.6";
- authors = [ "Austin Bonander " ];
- sha256 = "1k2mdq43gi2qr63b7m5zs624rfi40ysk33cay49jlhq97jwnk9db";
- inherit dependencies buildDependencies features;
- };
- miniz_sys_0_1_10_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "miniz-sys";
- version = "0.1.10";
- authors = [ "Alex Crichton " ];
- sha256 = "11vg6phafxil87nbxgrlhcx5hjr3145wsbwwkfmibvnmzxfdmvln";
- libPath = "lib.rs";
- libName = "miniz_sys";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- mio_0_6_15_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "mio";
- version = "0.6.15";
- authors = [ "Carl Lerche " ];
- sha256 = "0a93wxsmkh8x38wxivhn6qdj08pj9f0j3y46p4wv3xclbq8i4aaa";
- inherit dependencies buildDependencies features;
- };
- miow_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "miow";
- version = "0.2.1";
- authors = [ "Alex Crichton " ];
- sha256 = "14f8zkc6ix7mkyis1vsqnim8m29b6l55abkba3p2yz7j1ibcvrl0";
- inherit dependencies buildDependencies features;
- };
- native_tls_0_1_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "native-tls";
- version = "0.1.5";
- authors = [ "Steven Fackler " ];
- sha256 = "11f75qmbny5pnn6zp0vlvadrvc9ph9qsxiyn4n6q02xyd93pxxlf";
- inherit dependencies buildDependencies features;
- };
- net2_0_2_33_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "net2";
- version = "0.2.33";
- authors = [ "Alex Crichton " ];
- sha256 = "1qnmajafgybj5wyxz9iffa8x5wgbwd2znfklmhqj7vl6lw1m65mq";
- inherit dependencies buildDependencies features;
- };
- nodrop_0_1_12_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "nodrop";
- version = "0.1.12";
- authors = [ "bluss" ];
- sha256 = "1b9rxvdg8061gxjc239l9slndf0ds3m6fy2sf3gs8f9kknqgl49d";
- inherit dependencies buildDependencies features;
- };
- num_0_1_42_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "num";
- version = "0.1.42";
- authors = [ "The Rust Project Developers" ];
- sha256 = "1632gczzrmmxdsj3jignwcr793jq8vxw3qkdzpdvbip3vaf1ljgq";
- inherit dependencies buildDependencies features;
- };
- num_integer_0_1_39_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "num-integer";
- version = "0.1.39";
- authors = [ "The Rust Project Developers" ];
- sha256 = "1f42ls46cghs13qfzgbd7syib2zc6m7hlmv1qlar6c9mdxapvvbg";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- num_iter_0_1_37_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "num-iter";
- version = "0.1.37";
- authors = [ "The Rust Project Developers" ];
- sha256 = "1rglyvi4yjfxfvfm2s7i60g1dkl5xmsyi77g6vy53jb11r6wl8ly";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- num_traits_0_2_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "num-traits";
- version = "0.2.5";
- authors = [ "The Rust Project Developers" ];
- sha256 = "0ql203ca6lzppksy4fsfnpz3kq96vwlwvyn3ahvnd9g6k9f5ncj0";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- num_cpus_1_8_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "num_cpus";
- version = "1.8.0";
- authors = [ "Sean McArthur " ];
- sha256 = "1y6qnd9r8ga6y8mvlabdrr73nc8cshjjlzbvnanzyj9b8zzkfwk2";
- inherit dependencies buildDependencies features;
- };
- openssl_0_9_24_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "openssl";
- version = "0.9.24";
- authors = [ "Steven Fackler " ];
- sha256 = "0wzm3c11g3ndaqyzq36mcdcm1q4a8pmsyi33ibybhjz28g2z0f79";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- openssl_sys_0_9_33_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "openssl-sys";
- version = "0.9.33";
- authors = [ "Alex Crichton " "Steven Fackler " ];
- sha256 = "1q5f7ykkxgniwjrqifx1ssrqjzcf8fi4fzh770xrbyp8n6v14qr6";
- build = "build/main.rs";
- inherit dependencies buildDependencies features;
- };
- percent_encoding_1_0_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "percent-encoding";
- version = "1.0.1";
- authors = [ "The rust-url developers" ];
- sha256 = "04ahrp7aw4ip7fmadb0bknybmkfav0kk0gw4ps3ydq5w6hr0ib5i";
- libPath = "lib.rs";
- inherit dependencies buildDependencies features;
- };
- phf_0_7_22_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "phf";
- version = "0.7.22";
- authors = [ "Steven Fackler " ];
- sha256 = "0b58l863rhmqyqsfj2d89nmdzc21g9yvvvq1m4c3a615zpcykb3i";
- libPath = "src/lib.rs";
- inherit dependencies buildDependencies features;
- };
- phf_codegen_0_7_22_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "phf_codegen";
- version = "0.7.22";
- authors = [ "Steven Fackler " ];
- sha256 = "0k8yx4gr9m6cfrvh21s6bhnh1azz13j4xih88bvm06r6blfl89fs";
- inherit dependencies buildDependencies features;
- };
- phf_generator_0_7_22_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "phf_generator";
- version = "0.7.22";
- authors = [ "Steven Fackler " ];
- sha256 = "093gla320qb6rbk8z7wqqxl79zrh874sa7sxir31q2p7mrw4b70k";
- inherit dependencies buildDependencies features;
- };
- phf_shared_0_7_22_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "phf_shared";
- version = "0.7.22";
- authors = [ "Steven Fackler " ];
- sha256 = "0ij9flicfi0ab5vpzdwbizpdyxhk891qxa8nxsqlv4sg4abqang6";
- libPath = "src/lib.rs";
- inherit dependencies buildDependencies features;
- };
- pkg_config_0_3_12_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "pkg-config";
- version = "0.3.12";
- authors = [ "Alex Crichton " ];
- sha256 = "0k343rlyv9qmplxwxn8clzkyx1zbplhnvm0psjl6s111fjqmgsgh";
- inherit dependencies buildDependencies features;
- };
- quote_0_3_15_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "quote";
- version = "0.3.15";
- authors = [ "David Tolnay " ];
- sha256 = "09il61jv4kd1360spaj46qwyl21fv1qz18fsv2jra8wdnlgl5jsg";
- inherit dependencies buildDependencies features;
- };
- rand_0_3_22_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "rand";
- version = "0.3.22";
- authors = [ "The Rust Project Developers" ];
- sha256 = "0wrj12acx7l4hr7ag3nz8b50yhp8ancyq988bzmnnsxln67rsys0";
- inherit dependencies buildDependencies features;
- };
- rand_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "rand";
- version = "0.4.2";
- authors = [ "The Rust Project Developers" ];
- sha256 = "0h8pkg23wb67i8904sm76iyr1jlmhklb85vbpz9c9191a24xzkfm";
- inherit dependencies buildDependencies features;
- };
- redox_syscall_0_1_40_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "redox_syscall";
- version = "0.1.40";
- authors = [ "Jeremy Soller " ];
- sha256 = "132rnhrq49l3z7gjrwj2zfadgw6q0355s6a7id7x7c0d7sk72611";
- libName = "syscall";
- inherit dependencies buildDependencies features;
- };
- redox_termios_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "redox_termios";
- version = "0.1.1";
- authors = [ "Jeremy Soller " ];
- sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh";
- libPath = "src/lib.rs";
- inherit dependencies buildDependencies features;
- };
- regex_0_1_80_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "regex";
- version = "0.1.80";
- authors = [ "The Rust Project Developers" ];
- sha256 = "0y4s8ghhx6sgzb35irwivm3w0l2hhqhmdcd2px9hirqnkagal9l6";
- inherit dependencies buildDependencies features;
- };
- regex_syntax_0_3_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "regex-syntax";
- version = "0.3.9";
- authors = [ "The Rust Project Developers" ];
- sha256 = "1mzhphkbwppwd1zam2jkgjk550cqgf6506i87bw2yzrvcsraiw7m";
- inherit dependencies buildDependencies features;
- };
- relay_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "relay";
- version = "0.1.1";
- authors = [ "Sean McArthur " ];
- sha256 = "16csfaslbmj25iaxs88p8wcfh2zfpkh9isg9adid0nxjxvknh07r";
- inherit dependencies buildDependencies features;
- };
- remove_dir_all_0_5_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "remove_dir_all";
- version = "0.5.1";
- authors = [ "Aaronepower " ];
- sha256 = "1chx3yvfbj46xjz4bzsvps208l46hfbcy0sm98gpiya454n4rrl7";
- inherit dependencies buildDependencies features;
- };
- reqwest_0_8_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "reqwest";
- version = "0.8.6";
- authors = [ "Sean McArthur " ];
- sha256 = "0ka9ndgybhf65fn44badnjbasn1fi0mvjfa3sfiw485mgg21n3a0";
- inherit dependencies buildDependencies features;
- };
- safemem_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "safemem";
- version = "0.2.0";
- authors = [ "Austin Bonander " ];
- sha256 = "058m251q202n479ip1h6s91yw3plg66vsk5mpaflssn6rs5hijdm";
- inherit dependencies buildDependencies features;
- };
- schannel_0_1_13_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "schannel";
- version = "0.1.13";
- authors = [ "Steven Fackler " "Steffen Butzer " ];
- sha256 = "033zavvq2k6z5akk38vzaglzbxzljaixgmhj9am27nr21dgaj6b3";
- inherit dependencies buildDependencies features;
- };
- scoped_tls_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "scoped-tls";
- version = "0.1.2";
- authors = [ "Alex Crichton " ];
- sha256 = "0nblksgki698cqsclsnd6f1pq4yy34350dn2slaah9dlmx9z5xla";
- inherit dependencies buildDependencies features;
- };
- scopeguard_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "scopeguard";
- version = "0.3.3";
- authors = [ "bluss" ];
- sha256 = "0i1l013csrqzfz6c68pr5pi01hg5v5yahq8fsdmaxy6p8ygsjf3r";
- inherit dependencies buildDependencies features;
- };
- security_framework_0_1_16_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "security-framework";
- version = "0.1.16";
- authors = [ "Steven Fackler " ];
- sha256 = "1kxczsaj8gz4922jl5af2gkxh71rasb6khaf3dp7ldlnw9qf2sbm";
- inherit dependencies buildDependencies features;
- };
- security_framework_sys_0_1_16_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "security-framework-sys";
- version = "0.1.16";
- authors = [ "Steven Fackler " ];
- sha256 = "0ai2pivdr5fyc7czbkpcrwap0imyy0r8ndarrl3n5kiv0jha1js3";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- semver_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "semver";
- version = "0.9.0";
- authors = [ "Steve Klabnik " "The Rust Project Developers" ];
- sha256 = "0azak2lb2wc36s3x15az886kck7rpnksrw14lalm157rg9sc9z63";
- inherit dependencies buildDependencies features;
- };
- semver_parser_0_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "semver-parser";
- version = "0.7.0";
- authors = [ "Steve Klabnik " ];
- sha256 = "1da66c8413yakx0y15k8c055yna5lyb6fr0fw9318kdwkrk5k12h";
- inherit dependencies buildDependencies features;
- };
- serde_1_0_70_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "serde";
- version = "1.0.70";
- authors = [ "Erick Tryzelaar " "David Tolnay " ];
- sha256 = "1z1gyjf5rrs1k3j1civfzqjqs790651bwf8m31bw2pagclhnazs4";
- build = "build.rs";
- inherit dependencies buildDependencies features;
- };
- serde_json_1_0_24_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "serde_json";
- version = "1.0.24";
- authors = [ "Erick Tryzelaar " "David Tolnay " ];
- sha256 = "1wvvc3y0202my2p00ah8ygl1794nspar9pf39fz1525jd6m6k8a1";
- inherit dependencies buildDependencies features;
- };
- serde_urlencoded_0_5_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "serde_urlencoded";
- version = "0.5.2";
- authors = [ "Anthony Ramine " ];
- sha256 = "0m5pigng0665qrk4ii1z84pb4lchbsswhgb863yglljskmm056m0";
- inherit dependencies buildDependencies features;
- };
- siphasher_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "siphasher";
- version = "0.2.2";
- authors = [ "Frank Denis " ];
- sha256 = "0iyx7nlzfny9ly1634a6zcq0yvrinhxhypwas4p8ry3zqnn76qqr";
- inherit dependencies buildDependencies features;
- };
- slab_0_3_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "slab";
- version = "0.3.0";
- authors = [ "Carl Lerche " ];
- sha256 = "0y6lhjggksh57hyfd3l6p9wgv5nhvw9c6djrysq7jnalz8fih21k";
- inherit dependencies buildDependencies features;
- };
- slab_0_4_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "slab";
- version = "0.4.0";
- authors = [ "Carl Lerche " ];
- sha256 = "1qy2vkgwqgj5z4ygdkh040n9yh1vz80v5flxb1xrvw3i4wxs7yx0";
- inherit dependencies buildDependencies features;
- };
- slog_1_7_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "slog";
- version = "1.7.1";
- authors = [ "Dawid Ciężarkiewicz " ];
- sha256 = "1qhnwv2gbxmnwasaa0vlhddq6cdhq6n3l8d6h3ql73367h7aav65";
- inherit dependencies buildDependencies features;
- };
- slog_envlogger_0_5_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "slog-envlogger";
- version = "0.5.0";
- authors = [ "The Rust Project Developers" "Dawid Ciężarkiewicz " ];
- sha256 = "0ry9k2ppj7z6prdz2kf924w7l9y2kbysrigca6shni1kz2j163qb";
- libPath = "src/lib.rs";
- inherit dependencies buildDependencies features;
- };
- slog_extra_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "slog-extra";
- version = "0.1.2";
- authors = [ "Dawid Ciężarkiewicz " ];
- sha256 = "0jrw0xcc81wwcl59xx9qglfcv5l3ad5kbpcyp6ygk94p9kxfrhyj";
- libPath = "lib.rs";
- inherit dependencies buildDependencies features;
- };
- slog_stdlog_1_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "slog-stdlog";
- version = "1.1.0";
- authors = [ "Dawid Ciężarkiewicz " ];
- sha256 = "0ig4mjixr4y3dn3s53rlnrpplwkqb8b0z2zkaiiiwyv7nhjxdg46";
- libPath = "lib.rs";
- inherit dependencies buildDependencies features;
- };
- slog_stream_1_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "slog-stream";
- version = "1.2.1";
- authors = [ "Dawid Ciężarkiewicz " ];
- sha256 = "03dwzbydaamfzjpr16gm065i696lk86gqcpspv5qaqyv938fm2yj";
- libPath = "lib.rs";
- inherit dependencies buildDependencies features;
- };
- slog_term_1_5_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "slog-term";
- version = "1.5.0";
- authors = [ "Dawid Ciężarkiewicz " ];
- sha256 = "0zq2kyvm7jhqj6sc09w540wqfrrpa46yxf9sgzq7jqpkr66wsiar";
- libPath = "lib.rs";
- inherit dependencies buildDependencies features;
- };
- smallvec_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
- crateName = "smallvec";
- version = "0.2.1";
- authors = [ "Simon Sapin