aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2013-06-28 09:58:26 -0700
committerThiago Macieira <thiago.macieira@intel.com>2013-07-01 21:17:46 +0200
commite72ee7b709156a02a5d2fbf34aaddf8bacfa4ba0 (patch)
treea38e1187ca473b328f296d97ae3d98fe13f8ad37
parenta65420c29010082ae4c62724163eee733d5f59c1 (diff)
Add the script to do header diffsv5.1.0-packaging
This is the script as used for the Qt 5.1.0 release. Change-Id: I06d0bcbd2db876bee36118a4f2fd8fb6c1033b4e Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
-rwxr-xr-xrelease-tools/header-diff.pl128
1 files changed, 128 insertions, 0 deletions
diff --git a/release-tools/header-diff.pl b/release-tools/header-diff.pl
new file mode 100755
index 000000000..377ae8cc6
--- /dev/null
+++ b/release-tools/header-diff.pl
@@ -0,0 +1,128 @@
+#!/usr/bin/perl
+#############################################################################
+##
+## Copyright (C) 2013 Intel Corporation.
+## Contact: http://www.qt-project.org/legal
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+## of its contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+use strict;
+use warnings;
+
+sub help {
+ print "Usage: header-diff <revision-range> [srcdir] [builddir]\n" .
+ "\n" .
+ "revision-range arguments to git diff, like v5.0.0..v5.1.0-rc1\n" .
+ "srcdir the source qtsdk directory, "." if not provided\n" .
+ "builddir the build qtsdk directory, equal to srcdir if not provided\n";
+ exit 0;
+}
+
+help() unless scalar @ARGV;
+my $revrange = shift @ARGV;
+my $srcdir = scalar @ARGV ? shift @ARGV : ".";
+my $builddir = scalar @ARGV ? shift @ARGV : $srcdir;
+my $includedir = "$builddir/qtbase/include";
+
+# Sanity check
+die("Not a qtsdk source directory at $srcdir: no qtbase found")
+ unless (-d "$srcdir/qtbase");
+die("Not a qtsdk build directory at $builddir: no qtbase/include found")
+ unless (-d $includedir);
+
+my @modules_pro;
+for my $repo (<$srcdir/*>) {
+ next unless -d $repo && -d "$repo/src";
+ push @modules_pro, <$repo/src/*/*.pro>;
+}
+
+PRO: for my $pro (@modules_pro) {
+ #print "Processing .pro file $pro\n";
+ open PRO, "<", $pro
+ or die("Could not open $pro: $!");
+ my $name;
+ while (<PRO>) {
+ next PRO if /TEMPLATE\s*=\s*subdir\b/;
+ next unless /^\s*TARGET\s*=\s*(\w+)/;
+ $name = $1;
+ last;
+ }
+ close PRO;
+
+ next unless defined $name;
+ print "Found module $name in $pro\n";
+
+ # Find the corresponding headers.pri
+ unless (open HEADERS, "<", "$includedir/$name/headers.pri") {
+ print " - No public headers for module $name\n";
+ next;
+ }
+ my @headers;
+ while (<HEADERS>) {
+ next unless /SYNCQT.HEADER_FILES\s*=\s*(.*)\s*/;
+ @headers = split /\s+/, $1;
+ last;
+ }
+ close HEADERS;
+
+ # strip out headers outside the Git sources
+ @headers = grep {!m,^\.\./,} @headers;
+
+ unless (scalar @headers) {
+ print " - No public headers for module $name\n";
+ next;
+ }
+
+ print " - Module has " . (scalar @headers) . " public headers now\n";
+
+ open OUTPUT, ">", "$name.diff"
+ or die("Could not open $name.diff for writing: $!");
+ my $oldpwd = $ENV{PWD};
+ $pro =~ s,/[^/]+$,,;
+ chdir($pro) or die;
+
+ # Get the git diff
+ open DIFF, "-|", 'git', 'diff', '--diff-filter=M', '-w', '-b', $revrange, '--', @headers
+ or die("Could not run git diff: $!");
+ my $wrote_anything = 0;
+ while (<DIFF>) {
+ $wrote_anything = 1;
+ print OUTPUT $_;
+ }
+
+ chdir($oldpwd);
+ close OUTPUT;
+ close DIFF or unlink("$name.diff");
+ unlink("$name.diff") unless ($wrote_anything);
+}