diff -r 000000000000 -r 1918ee327afb util/scripts/make_qfeatures_dot_h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/util/scripts/make_qfeatures_dot_h Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,197 @@ +#!/usr/bin/perl +############################################################################# +## +## Copyright (C) 2009 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 () { + 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) 2009 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 + */ + +'; + + +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;