summaryrefslogtreecommitdiffstats
path: root/util/scripts/make_qfeatures_dot_h
diff options
context:
space:
mode:
Diffstat (limited to 'util/scripts/make_qfeatures_dot_h')
-rwxr-xr-xutil/scripts/make_qfeatures_dot_h198
1 files changed, 198 insertions, 0 deletions
diff --git a/util/scripts/make_qfeatures_dot_h b/util/scripts/make_qfeatures_dot_h
new file mode 100755
index 0000000000..bacb0e759a
--- /dev/null
+++ b/util/scripts/make_qfeatures_dot_h
@@ -0,0 +1,198 @@
+#!/usr/bin/perl
+#############################################################################
+##
+## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+## Contact: Nokia Corporation (qt-info@nokia.com)
+##
+## This file is part of the test suite of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## No Commercial Usage
+## This file contains pre-release code and may not be distributed.
+## You may use this file in accordance with the terms and conditions
+## contained in the Technology Preview License Agreement accompanying
+## this package.
+##
+## GNU Lesser General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU Lesser
+## General Public License version 2.1 as published by the Free Software
+## Foundation and appearing in the file LICENSE.LGPL included in the
+## packaging of this file. Please review the following information to
+## ensure the GNU Lesser General Public License version 2.1 requirements
+## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+##
+## In addition, as a special exception, Nokia gives you certain additional
+## rights. These rights are described in the Nokia Qt LGPL Exception
+## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info@nokia.com.
+##
+##
+##
+##
+##
+##
+##
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+#
+# Usage: make_qfeatures_dot_h
+#
+# Generates src/corelib/global/qfeatures.h from src/corelib/global/qfeatures.txt.
+#
+# The qfeatures.txt file can contain redundancies, and this program
+# will show them.
+#
+
+if ($ENV{QTSRCDIR} ne '') {
+ $qtbase=$ENV{QTSRCDIR};
+} else {
+ $qtbase=$ENV{QTDIR};
+}
+
+open FL, "$qtbase/src/corelib/global/qfeatures.txt"
+ or die "Cannot open $qtbase/src/corelib/global/qfeatures.txt";
+
+while (<FL>) {
+ if ( /^Feature: (\S*)/ ) {
+ print STDERR "Duplicate: $1\n" if $macro{$1};
+ $macro{$macro=$1}=1;
+ } elsif ( /^Requires: (.*?)\s*$/ ) {
+ $deps{$macro}=$1;
+ map { $dep{"$macro $_"}=1 } split /\s+/, $1;
+ } elsif ( /^Name: (.*?)\s*$/ ) {
+ $label{$macro}=$1;
+ }
+}
+
+close FL;
+
+sub depends {
+ my($x,$y) = @_;
+ return 1 if $dep{"$x $y"};
+ return 0 if $dep{"$y $x"};
+ return 0 if $x eq $y;
+ my $d;
+ for $d (split /\s+/, $deps{$x}) {
+ return 1 if depends($d,$y);
+ }
+ return 0;
+}
+sub dependants_rec {
+ my($x) = @_;
+ my $n = 0;
+ my $d = 0;
+ $dependants_rec_count++;
+ if ( $dependants_rec_count > $dependants_rec_limit ) {
+ if ( $circularity_start eq $x ) {
+ print STDERR "Circular dependency: $circularity\n";
+ exit;
+ }
+ $circularity_start=$x if !$circularity_start;
+ $circularity="$x $circularity";
+ }
+ for $d (split /\s+/, $deps{$x}) {
+ $n += 1 + dependants_rec($d);
+ }
+ $dependants_rec_count--;
+ return $n;
+}
+sub dependants {
+ $dependants_rec_limit=keys %macro if !$dependants_rec_limit;
+ $dependants_rec_count=0;
+ return dependants_rec @_;
+}
+sub dependencysort {
+ my($x, $y) = @_;
+ my $xd = dependants($x);
+ my $yd = dependants($y);
+ return $xd-$yd if $xd != $yd;
+ return $x cmp $y;
+}
+
+@macros = sort { dependencysort($a,$b) } keys %macro;
+
+for $macro ( @macros ) {
+ for $d1 (split /\s+/, $deps{$macro} ) {
+ for $d2 (split /\s+/, $deps{$macro} ) {
+ print STDERR "Redundancy in $macro - $d1 depends on $d2\n" if depends($d1,$d2);
+ }
+ print STDERR "Unknown in $macro - $d1\n" if !$macro{$d1};
+ }
+}
+
+open OUT, ">$qtbase/src/corelib/global/qfeatures.h"
+ or die "Cannot open $qtbase/src/corelib/global/qfeatures.h for writing";
+
+print OUT
+'/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*
+ * All features and their dependencies.
+ *
+ * This list is generated from $QTDIR/src/corelib/global/qfeatures.txt
+ * by $QTSRCDIR/util/scripts/make_qfeatures_dot_h
+ */
+
+';
+
+
+for $macro ( @macros ) {
+ print OUT "// $label{$macro}\n";
+ if ( $deps{$macro} ) {
+ print OUT "#if !defined(QT_NO_$macro)";
+ print OUT " && (", (join " || ", map { "defined(QT_NO_$_)" } split /\s+/, $deps{$macro}), ")";
+ print OUT "\n";
+ print OUT "#define QT_NO_$macro\n";
+ print OUT "#endif\n";
+ } else {
+ print OUT "//#define QT_NO_$macro\n";
+ }
+ print OUT "\n";
+}
+
+close OUT;