diff --git a/0001-Create-reproducible-builds.patch b/0001-Create-reproducible-builds.patch new file mode 100644 index 0000000..443519b --- /dev/null +++ b/0001-Create-reproducible-builds.patch @@ -0,0 +1,128 @@ +From dbd50f94d0f5a794f89a537692973edab38d694d Mon Sep 17 00:00:00 2001 +From: Hrvoje Senjan +Date: Mon, 20 Apr 2015 02:29:19 +0200 +Subject: [PATCH 1/1] Create reproducible builds + +By using QHash we get randomness on each build of policy files, which is definately not needed for names, comments and descriptions. With QMap we get nice alphabetic +sorting, and builds of packages that use kauth_install_actions macro have identical builds. + +REVIEW: 123430 +--- + src/backends/polkit-1/kauth-policy-gen-polkit1.cpp | 16 ++++++++-------- + src/policy-gen/policy-gen.cpp | 6 +++--- + src/policy-gen/policy-gen.h | 6 +++--- + 3 files changed, 14 insertions(+), 14 deletions(-) + +diff --git a/src/backends/polkit-1/kauth-policy-gen-polkit1.cpp b/src/backends/polkit-1/kauth-policy-gen-polkit1.cpp +index 2dfd6beb59fc99437b726181e2dbba2bb436c36a..b3a706e0e3bb8c2772f7ae4edec7f93d6a270ac3 100644 +--- a/src/backends/polkit-1/kauth-policy-gen-polkit1.cpp ++++ b/src/backends/polkit-1/kauth-policy-gen-polkit1.cpp +@@ -39,7 +39,7 @@ const char policy_tag[] = "" + + const char dent[] = " "; + +-void output(QList actions, QHash domain) ++void output(QList actions, QMap domain) + { + QTextStream out(stdout); + out.setCodec("UTF-8"); +@@ -47,11 +47,11 @@ void output(QList actions, QHash domain) + out << header; + + // Blacklisted characters + replacements +- QHash< QChar, QString > blacklist; ++ QMap< QChar, QString > blacklist; + blacklist.insert(QLatin1Char('&'), QLatin1String("&")); + + if (domain.contains(QLatin1String("vendor"))) { +- QHash< QChar, QString >::const_iterator blI; ++ QMap< QChar, QString >::const_iterator blI; + QString vendor = domain[QLatin1String("vendor")]; + for (blI = blacklist.constBegin(); blI != blacklist.constEnd(); ++blI) { + vendor.replace(blI.key(), blI.value()); +@@ -69,13 +69,13 @@ void output(QList actions, QHash domain) + out << dent << "\n"; + + // Not a typo, messages and descriptions are actually inverted +- for (QHash< QString, QString >::const_iterator i = action.messages.constBegin(); i != action.messages.constEnd(); ++i) { ++ for (QMap< QString, QString >::const_iterator i = action.messages.constBegin(); i != action.messages.constEnd(); ++i) { + out << dent << dent << "::const_iterator blI; ++ QMap< QChar, QString >::const_iterator blI; + QString description = i.value(); + for (blI = blacklist.constBegin(); blI != blacklist.constEnd(); ++blI) { + description.replace(blI.key(), blI.value()); +@@ -84,8 +84,8 @@ void output(QList actions, QHash domain) + out << '>' << description << "\n"; + } + +- QHash< QString, QString >::const_iterator i; +- for (QHash< QString, QString >::const_iterator i = action.descriptions.constBegin(); ++ QMap< QString, QString >::const_iterator i; ++ for (QMap< QString, QString >::const_iterator i = action.descriptions.constBegin(); + i != action.descriptions.constEnd(); + ++i) { + out << dent << dent << " actions, QHash domain) + out << " xml:lang=\"" << i.key() << '"'; + } + +- QHash< QChar, QString >::const_iterator blI; ++ QMap< QChar, QString >::const_iterator blI; + QString message = i.value(); + for (blI = blacklist.constBegin(); blI != blacklist.constEnd(); ++blI) { + message.replace(blI.key(), blI.value()); +diff --git a/src/policy-gen/policy-gen.cpp b/src/policy-gen/policy-gen.cpp +index 99bb0855fa8e9543f45286c4595fdd984ab663b8..9f77af994053982772d64be03aa4162562458068 100644 +--- a/src/policy-gen/policy-gen.cpp ++++ b/src/policy-gen/policy-gen.cpp +@@ -33,7 +33,7 @@ + using namespace std; + + QList parse(QSettings &ini); +-QHash parseDomain(QSettings &ini); ++QMap parseDomain(QSettings &ini); + + int main(int argc, char **argv) + { +@@ -151,9 +151,9 @@ QList parse(QSettings &ini) + return actions; + } + +-QHash parseDomain(QSettings &ini) ++QMap parseDomain(QSettings &ini) + { +- QHash rethash; ++ QMap rethash; + + if (ini.childGroups().contains(QString::fromLatin1("Domain"))) { + if (ini.contains(QString::fromLatin1("Domain/Name"))) { +diff --git a/src/policy-gen/policy-gen.h b/src/policy-gen/policy-gen.h +index 5bdda1cffcfbf9a2220d3f85f0b5ca621a9d26f5..113d59b1731a4d1028e4e7be48955fba42e14d57 100644 +--- a/src/policy-gen/policy-gen.h ++++ b/src/policy-gen/policy-gen.h +@@ -28,14 +28,14 @@ + struct Action { + QString name; + +- QHash descriptions; +- QHash messages; ++ QMap descriptions; ++ QMap messages; + + QString policy; + QString policyInactive; + QString persistence; + }; + +-extern void output(QList actions, QHash domain); ++extern void output(QList actions, QMap domain); + + #endif +-- +2.3.5 + diff --git a/kauth.changes b/kauth.changes index ff704c3..6f062a4 100644 --- a/kauth.changes +++ b/kauth.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Apr 20 00:29:49 UTC 2015 - hrvoje.senjan@gmail.com + +- Added 0001-Create-reproducible-builds.patch: makes packages that + create polkit policies via KAuth have reproducible builds + ------------------------------------------------------------------- Sat Apr 4 14:40:55 UTC 2015 - hrvoje.senjan@gmail.com diff --git a/kauth.spec b/kauth.spec index b590d1a..c62fe70 100644 --- a/kauth.spec +++ b/kauth.spec @@ -40,6 +40,8 @@ Group: System/GUI/KDE Url: http://www.kde.org Source: http://download.kde.org/stable/frameworks/%{_tar_path}/%{name}-%{version}.tar.xz Source1: baselibs.conf +# PATCH-FIX-UPSTREAM 0001-Create-reproducible-builds.patch +Patch0: 0001-Create-reproducible-builds.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -70,6 +72,7 @@ Development files. %lang_package -n %lname %prep %setup -q +%patch0 -p1 %build %cmake_kf5 -d build -- -DSYSCONF_INSTALL_DIR=%{_kf5_sysconfdir}