#!/usr/bin/perl

# qtguess.pl : check how Qt was compiled. Issue a list of all defined QT_NO_* macros, one per line.
#
# author:  germain Garand <germain@ebooksfrance.com>
# licence: GPL v.2

# options: -q: be tquieter
#	   -o file: redirect output to "file". (default: ./qtdefines)
#	   -t [0..15]: set the testing threshold (see below)
#	   -f "flags": additional compiler flags/parameters

use Getopt::Std;

use vars qw/$opt_f $opt_o $opt_p/;

getopts('qo:f:t:');

# Threshold :
#	 0 - test basic Qt types/classes
#	 5 - test higher level, non-gui classes
#	 8 - test options of the above (ex: QT_NO_IMAGE_SMOOTHSCALE)
#	10 - test basic widgets
#	12 - test composite widgets
#	13 - test widgets inheriting composite widgets
#	15 - test goodies (default)

my $default_threshold = @qt_test_threshold@;
my $cc = "@CXX@";
my $ccflags = $opt_f || "@CXXFLAGS@";

my $nspaces = 50;

my %qtdefs=();
my %qtundefs=();

my $tmp = gettmpfile();
my $qtinc = '@qt_includes@';
my $allinc = '@all_includes@';
my $alllib = '@all_libraries@';
my $qtflags ='@LIB_QT@';
my %x;
$x{'LIBPNG'}  =   '@LIBPNG@';
$x{'LIBJPEG'} =   '@LIBJPEG@';
$x{'LIBSM'}   =   '@LIBSM@';
$x{'LIBSOCKET'} = '@LIBSOCKET@';
$x{'LIBDL'}      = '@LIBDL@';
$x{'LIBRESOLV'}  = '@LIBRESOLV@';
$x{'LIB_X11'} =   '@LIB_X11@';
$x{'X_PRE_LIBS'} = '@X_PRE_LIBS@';
$x{'LIB_X11'} =~ s/\$\((.*?)\)/$x{$1}/g;

$qtflags =~ s/\$\((.*?)\)/$x{$1}/g;

 -e "$qtinc/qglobal.h" or die "Invalid Qt directory.\n";

my $ccmd = "$cc $ccflags $allinc $alllib -o $tmp $tmp.cpp $qtflags";

my $threshold = defined($opt_t)?$opt_t : $default_threshold;
$threshold >= 0 or die "invalid testing threshold: $threshold\n";

print "Checking how Qt was built... \n";
print "Threshold is set to $threshold\n" unless $opt_q;

my($count, $used, $total);
map{ $tests{$_}->[2]>=$threshold ? ($used++, $total++):$total++ } keys %tests;

print "Number of defines to be tested : $used/$total\n\n" unless $opt_q;
open( TQTDEFS, ">".($opt_o || "qtdefines") ) or die "Can't open output file: $!\n";

grab_qglobal_symbols();
preliminary_test();
perform_all_tests();

print +scalar(keys %qtdefs) . " defines found.\n";

print TQTDEFS join("\n", keys %qtdefs), "\n";
close;

#--------------------------------------------------------------#

sub gettmpfile
{
	my $tmpdir = $ENV{'TMP'} || ".";
	my $tmpname = $$."-qtguess";
	while( -e "$tmpdir/$tmpname" || -e "$tmpdir/${tmpname}.cpp" )
	{
		$tmpname .= int (rand * 9);
	}
	return "$tmpdir/$tmpname";
}

#--------------------------------------------------------------#

sub grab_qglobal_symbols
{
	my $cmd = "$cc -E -D__cplusplus -dM -I$qtinc $qtinc/qglobal.h 2>/dev/null";
	my $symbols = `$cmd`;
        for(0..1)
        {
	    if( check_exit_status($?) )
	    {
		while( $symbols =~/^#\s*define\s*(QT_\S+)\s*$/gm )
		{
			$qtdefs{$1} = 1;
		}
		print "Found ". scalar( keys %qtdefs )." predefined symbol".((scalar( keys %qtdefs ) -1)?"s":"")." in qglobal.h\n" unless ($opt_q or !(keys %qtdefs));
		while( $symbols =~/^#\s*define\s*TQT_MODULE_(\S+)\s*$/gm )
		{
			$qtundefs{"QT_NO_$1"} = 1;
		}
		print "Found ". scalar( keys %qtundefs )." undefined symbol".((scalar( keys %qtundefs ) -1)?"s":"")." in qglobal.h\n" unless ($opt_q or !(keys %qtundefs));
                last;
	    }
	    elsif(! $_) # first try
	    {
		print  "Failed to run $cmd.\nTrying without __cplusplus (might be already defined)\n";
                $cmd = "$cc -E -dM -I$qtinc $qtinc/qglobal.h 2>/dev/null";
                $symbols = `$cmd`;
                next;
	    }
        }
}

#--------------------------------------------------------------#

sub preliminary_test
{
	my $msg = "Trying to compile and link a small program...";
	print $msg, " " x ($nspaces - length($msg) + 8);
	open( OUT, ">${tmp}.cpp" ) or die "Failed to open temp file ${tmp}.cpp: $!\n";
	my $simple=q�
		#include <qapplication.h>
		int main( int argc, char **argv )
		{
			TQApplication foo( argc, argv );
			return 0;
		}
	�;
	print OUT $simple;
	close OUT;
        my $out = `$ccmd 2>&1`;
	if( !check_exit_status($?) )
	{
		die <<"EOF";

FAILED : check your configuration.
Failed program was:
$simple
Compiled with:
$ccmd
Compiler output:
$out
EOF
	}
	else
	{
		print "OK\n";
	}
}

#--------------------------------------------------------------#

sub perform_all_tests
{
	foreach ( sort { $tests{$a}->[2] <=> $tests{$b}->[2]} keys %tests)
	{
		$tests{$_}->[2] < $threshold and next;
		($qtdefs{$_} || $qtundefs{$_}) and do
		{
			print "\rSkipping $_ (in qglobal.h)".( " " x (($nspaces-16) - length($_)) ).($qtundefs{$_}?"*Undefined*":" [Defined]").($opt_q?"":"\n");
			next
		};
		print "\rTesting $_".( " " x ($nspaces - length($_)) );
		open( OUT, ">${tmp}.cpp" ) or die "Failed to open temp file ${tmp}.cpp: $!\n";
		foreach $def(keys %qtdefs)
		{
			print OUT "#define $def\n";
		}
		foreach $inc(split /,\s*/, $tests{$_}->[0])
		{
			print OUT "#include <$inc>\n";
		}
		print OUT "#include <qfeatures.h>\n";
		print OUT $tests{$_}->[3] if $tests{$_}->[3]; # need to define some classes ?
		print OUT qq�

		int main( int argc, char **argv )
		{
		$tests{$_}->[1]
		return 0;
		}
		�;
		close OUT;

                my $out = `$ccmd 2>&1`;

		my $ok = check_exit_status($?);
		if( !$ok )
		{
			$qtdefs{$_} = 1;
		}
		print +$opt_q ? ++$count."/$used" : ( $ok ? "*Undefined*\n" : " [Defined]\n" );
	}
	$opt_q && print "\n";
}

#--------------------------------------------------------------#

sub check_exit_status
{
	my $a = 0xFFFF & shift;
	if( !$a )
	{
		return 1;
	}
	elsif( $a == 0xFF00 )
	{
		die "\nSystem call failed: $!\n";
	}
	elsif( $a > 0x80 )
	{
		# non-zero status.
	}
	else
	{
		if( $a & 0x80 )
		{
			die "\n$cc coredumped with signal ". ($a & ~0x80);
		}
		die "\n$cc interrupted by signal $a\n";
	}
	return 0;
}

#--------------------------------------------------------------#

END
{
	unlink $tmp if -e $tmp;
	unlink "${tmp}.cpp" if -e "${tmp}.cpp";
}

#--------------------------------------------------------------#

BEGIN {

# "DEFINE" => ["header-1.h,... header-n.h", "main() code", priority, "Definitions (if needed)"]

our %tests = (
	"QT_NO_ACCEL" => 		["qaccel.h", "TQAccel foo( (TQWidget*)NULL );", 5],
	"QT_NO_ACTION" =>		["qaction.h", "TQAction foo( (TQObject*)NULL );", 5],
	"QT_NO_ASYNC_IO" =>		["qasyncio.h", "TQAsyncIO foo();", 5],
	"QT_NO_ASYNC_IMAGE_IO"=>	["qasyncimageio.h", "TQImageDecoder foo( (TQImageConsumer*) NULL );", 5],
	"QT_NO_BIG_CODECS" => 		["qbig5codec.h", "TQBig5Codec foo();", 5],
	"QT_NO_BUTTON" =>		["qbutton.h", "TQButton foo( (TQWidget*)NULL );", 10],
 	"QT_NO_BUTTONGROUP" =>		["qbuttongroup.h", "TQButtonGroup foo( (TQWidget*)NULL );", 12],
 	"QT_NO_CANVAS" =>		["qcanvas.h", "TQCanvas foo( (TQObject*)NULL );", 10],
 	"QT_NO_CHECKBOX" =>		["qcheckbox.h", "TQCheckBox( (TQWidget*)NULL );", 10],
	"QT_NO_CLIPBOARD" => 		["qapplication.h, qclipboard.h", q�
						TQApplication foo( argc, argv );
						TQClipboard *baz= foo.clipboard();
					�, 5],
 	"QT_NO_COLORDIALOG" =>		["qcolordialog.h", "TQColorDialog::customCount();", 12],
 	"QT_NO_COMBOBOX" =>		["qcombobox.h", "TQComboBox( (TQWidget*)NULL );", 10],
	"QT_NO_COMPAT" =>		["qfontmetrics.h", q�
						TQFontMetrics *foo= new TQFontMetrics( TQFont() );
						int bar = foo->width( 'c' );
					�, 0],
	"QT_NO_COMPONENT" =>		["qapplication.h", q�
 						TQApplication foo( argc, argv );
 						foo.addLibraryPath( TQString::null );
					�, 5],
 	"QT_NO_CURSOR" =>		["qcursor.h", "TQCursor foo;", 5],
 	"QT_NO_DATASTREAM" =>		["qdatastream.h", "TQDataStream foo;", 5],
 	"QT_NO_DATETIMEEDIT" =>		["qdatetimeedit.h", "TQTimeEdit foo;", 12],
	"QT_NO_DIAL" =>			["qdial.h", "TQDial foo;", 10],
	"QT_NO_DIALOG" =>		["qdialog.h", "TQDialog foo;", 12],
	"QT_NO_DIR" =>			["qdir.h", "TQDir foo;", 5],
	"QT_NO_DNS" =>			["qdns.h", "TQDns foo;", 5],
	"QT_NO_DOM" =>			["qdom.h", "TQDomDocumentType foo;", 5],
	"QT_NO_DRAGANDDROP" =>		["qevent.h", "TQDropEvent foo( TQPoint(1,1) );", 5],
	"QT_NO_DRAWUTIL" =>		["qdrawutil.h, qcolor.h", "qDrawPlainRect( (TQPainter *) NULL, 0, 0, 0, 0, TQColor() );", 10],
	"QT_NO_ERRORMESSAGE" => 	["qerrormessage.h", "TQErrorMessage foo( (TQWidget*) NULL );", 13],
	"QT_NO_FILEDIALOG" =>		["qfiledialog.h", "TQFileIconProvider foo;", 13],

	"QT_NO_FONTDATABASE" =>		["qfontdatabase.h", "TQFontDatabase foo;", 5],
	"QT_NO_FONTDIALOG" => 		["qfontdialog.h",   "TQFontDialog::getFont( (bool *)NULL );", 12],
	"QT_NO_FRAME" => 		["qframe.h", "TQFrame foo;", 10],
	"QT_NO_GRID" =>			["qgrid.h", "TQGrid foo(5);", 12],
	"QT_NO_GRIDVIEW" =>		["qgridview.h", "TQFoo foo;", 13, q�
						class TQFoo: public TQGridView
						{
						public:
							TQFoo(){};
							~TQFoo(){};
							void paintCell(TQPainter *, int, int){};
						};
					�],
	"QT_NO_GROUPBOX" =>		["qgroupbox.h", "TQGroupBox foo;", 12],
	"QT_NO_HBOX" =>			["qhbox.h", "TQHBox foo;", 12],
	"QT_NO_HBUTTONGROUP" =>		["qhbuttongroup.h", "TQHButtonGroup foo;", 13],
	"QT_NO_HEADER" =>		["qheader.h", "TQHeader foo;", 10],
	"QT_NO_HGROUPBOX" =>		["qhgroupbox.h", "TQHGroupBox foo;", 13],
	"QT_NO_ICONSET" =>		["qiconset.h", "TQIconSet foo;", 8],

	"QT_NO_ICONVIEW" =>		["qiconview.h", "TQIconView foo;", 13],
	"QT_NO_IMAGEFORMATPLUGIN" =>	["qimageformatplugin.h, qstringlist.h", "TQFoo foo;", 5, q�

						class TQFoo: public TQImageFormatPlugin
						{
						public:
						    TQFoo() {};
						    ~TQFoo() {};
						    TQStringList keys() const { return TQStringList(); };
						    bool installIOHandler( const TQString &format ) { return true; };
						};
						Q_EXPORT_PLUGIN( TQFoo )
					�],
 	"QT_NO_IMAGE_DITHER_TO_1" =>	["qimage.h", q�
						TQImage *foo = new TQImage;
						foo->createAlphaMask();
					�, 8],
 	"QT_NO_IMAGE_HEURISTIC_MASK" =>	["qimage.h", q�
						TQImage *foo = new TQImage;
						foo->createHeuristicMask();
					�, 8],
	"QT_NO_IMAGE_MIRROR" =>	["qimage.h", q�
						TQImage *foo = new TQImage;
						foo->mirror();
					�, 8],
 	"QT_NO_IMAGE_SMOOTHSCALE" =>	["qimage.h", q�
						TQImage *foo = new TQImage;
						foo->smoothScale( 10, 10);
					�, 8],
 	"QT_NO_IMAGE_TEXT" =>		["qimage.h", "TQImageTextKeyLang foo;", 8],
 	"QT_NO_IMAGE_TRANSFORMATION" =>	["qimage.h", q�
						TQImage *foo = new TQImage;
						foo->scale( 10, 10);
					�, 8],
 	"QT_NO_IMAGE_TRUECOLOR" =>	["qimage.h", q�
						TQImage *foo = new TQImage;
						foo->convertDepthWithPalette( 1, (TQRgb*) NULL, 1 );
					�, 8],
	"QT_NO_INPUTDIALOG" =>		["qinputdialog.h, qstring.h", q�QInputDialog::getText( TQString::null, TQString::null);�, 13],
	"QT_NO_IMAGEIO" => 		["qbitmap.h, qstring.h", q�
						TQBitmap foo( TQString::fromLatin1("foobar") );
					�, 5],
	"QT_NO_IMAGEIO_JPEG" =>		["qjpegio.h", "qInitJpegIO();", 8],
	"QT_NO_IMAGEIO_MNG" =>		["qmngio.h", "qInitMngIO();", 8],
	"QT_NO_IMAGEIO_PNG" =>		["qpngio.h", "qInitPngIO();", 8],
	"QT_NO_LABEL" =>		["qlabel.h", "TQLabel foo( (TQWidget*) NULL );", 10],
	"QT_NO_LAYOUT" =>		["qlayout.h", "TQFoo foo;", 10, q�

 						class TQFoo: public TQLayout
 						{
 						public:
 						    TQFoo() {};
 						    ~TQFoo() {};
 						    void addItem( TQLayoutItem * ) { };
						    TQSize sizeHint() const { return TQSize(); }
 						    TQLayoutIterator iterator() { return TQLayoutIterator( (TQGLayoutIterator *) NULL ); };
						    void setGeometry( const TQRect & ) { };
 						};
 					�],
	"QT_NO_LCDNUMBER" =>		["qlcdnumber.h", "TQLCDNumber foo;", 12],
	"QT_NO_LINEEDIT" =>		["qlineedit.h", "TQLineEdit foo( (TQWidget *) NULL );", 12],
	"QT_NO_LISTBOX" =>		["qlistbox.h", "TQListBox foo;", 13],
	"QT_NO_LISTVIEW" =>		["qlistview.h", "TQListView foo;", 13],
	"QT_NO_MAINWINDOW" =>		["qmainwindow.h", "TQMainWindow foo;", 13],
	"QT_NO_MENUBAR" =>		["qmenubar.h", "TQMenuBar foo;", 13],
	"QT_NO_MOVIE" =>		["qmovie.h", "TQMovie foo;", 5],
	"QT_NO_MENUDATA" =>		["qmenudata.h", "TQMenuData foo;", 9],
	"QT_NO_MESSAGEBOX" =>		["qmessagebox.h", "TQMessageBox foo;", 13],
	"QT_NO_MIME" =>			["qmime.h", "TQMimeSourceFactory foo;", 5],
 	"QT_NO_MIMECLIPBOARD" => 	["qapplication.h, qclipboard.h", q�
 						TQApplication foo( argc, argv );
 						TQClipboard *baz= foo.clipboard();
						baz->data();
					�, 8],

	"QT_NO_MULTILINEEDIT" =>	["qmultilineedit.h", "TQMultiLineEdit foo;", 14],
	"QT_NO_NETWORK" =>		["qnetwork.h", "qInitNetworkProtocols();", 5],
	"QT_NO_NETWORKPROTOCOL" =>	["qnetworkprotocol.h", "TQNetworkProtocol foo;", 8],
 	"QT_NO_NETWORKPROTOCOL_FTP" =>	["qftp.h", "TQFtp foo;", 9],
	"QT_NO_PALETTE" =>		["qpalette.h", "TQColorGroup foo;", 5],
	"QT_NO_PICTURE" =>		["qpicture.h", "TQPicture foo;", 5],
	"QT_NO_PIXMAP_TRANSFORMATION" =>["qbitmap.h, qwmatrix.h", q�
						TQBitmap *foo= new TQBitmap();
						TQWMatrix bar;
						foo->xForm( bar );
					�, 5],
	"QT_NO_POPUPMENU" =>		["qpopupmenu.h", "TQPopupMenu foo;", 12],
	"QT_NO_PRINTER" =>		["qprinter.h", "TQPrinter foo;", 5],
	"QT_NO_PRINTDIALOG" =>		["qprintdialog.h", "TQPrintDialog foo( (TQPrinter*) NULL );", 13],
	"QT_NO_PROCESS" =>		["qprocess.h", "TQProcess foo;", 5],
	"QT_NO_PROGRESSBAR" =>		["qprogressbar.h", "TQProgressBar foo;", 12],
	"QT_NO_PROGRESSDIALOG" =>	["qprogressdialog.h", "TQProgressDialog foo;", 13],
	"QT_NO_PUSHBUTTON" =>		["qpushbutton.h", "TQPushButton foo( (TQWidget *) NULL );", 12],
	"QT_NO_PROPERTIES" =>		["qmetaobject.h", "TQMetaProperty foo;", 0],
#	"QT_NO_QTMULTILINEEDIT" =>	["qtmultilineedit.h", "QtMultiLineEdit foo;", 15],
#	"QT_NO_QTTABLEVIEW" =>		["qttableview.h", "TQFoo foo;", 16, q�
#						class TQFoo: public QtTableView
#						{
#						public:
#							TQFoo() {};
#							~TQFoo() {};
#							void paintCell( TQPainter *, int, int) {};
#						};
#						�],
	"QT_NO_QUUID_STRING" =>		["quuid.h", "TQUuid foo( TQString::null );", 8],
	"QT_NO_RANGECONTROL" =>		["qrangecontrol.h", "TQRangeControl foo;", 10],
	"QT_NO_REGEXP" =>		["qregexp.h", "TQRegExp foo;", 5],
	"QT_NO_REGEXP_WILDCARD" =>	["qregexp.h", q�
						TQRegExp foo;
						foo.wildcard();
					�, 8],
	"QT_NO_REMOTE" =>		["qapplication.h", q�
   						TQApplication foo( argc, argv );
   						foo.remoteControlEnabled();
					�, 15],
	"QT_NO_RADIOBUTTON" =>		["qradiobutton.h", "TQRadioButton foo( (TQWidget *) NULL );", 12],
	"QT_NO_RICHTEXT" =>		["qsimplerichtext.h, qstring.h, qfont.h", "TQSimpleRichText foo( TQString::null, TQFont() );", 10],
	"QT_NO_SCROLLBAR" =>		["qscrollbar.h", "TQScrollBar foo( (TQWidget *) NULL );", 12],
	"QT_NO_SCROLLVIEW" =>		["qscrollview.h", "TQScrollView foo;", 12],
	"QT_NO_SEMIMODAL" =>		["qsemimodal.h", "TQSemiModal foo;", 10],
	"QT_NO_SESSIONMANAGER" =>	["qapplication.h", q�
  						TQApplication foo( argc, argv );
  						foo.sessionId();
					�, 15],
	"QT_NO_SETTINGS" =>		["qsettings.h", "TQSettings foo;", 5],
	"QT_NO_SIGNALMAPPER" =>		["qsignalmapper.h", "TQSignalMapper foo( (TQObject *) NULL );", 0],
	"QT_NO_SIZEGRIP" =>		["qsizegrip.h", "TQSizeGrip foo( (TQWidget *) NULL );", 10],
	"QT_NO_SLIDER" =>		["qslider.h", "TQSlider foo( (TQWidget *) NULL );", 12],
	"QT_NO_SOUND" =>		["qsound.h", "TQSound foo( TQString::null );", 5],


	"QT_NO_SPINWIDGET" =>		["qrangecontrol.h", "TQSpinWidget foo;", 10],
	"QT_NO_SPRINTF" =>		["qcolor.h", q�
						TQColor foo;
						foo.name();
					�, 0],



	"QT_NO_SQL" =>			["qsqlcursor.h", "TQSqlCursor foo;", 5],
	"QT_NO_STRINGLIST" =>		["qstringlist.h", "TQStringList foo;", 0],
	"QT_NO_STYLE" =>		["qapplication.h", q�
   						TQApplication foo( argc, argv );
   						foo.style();
 					�, 15],

#	"QT_NO_STYLE_CDE" =>		["qcdestyle.h", "TQCDEStyle foo;", 16],
# 	"QT_NO_STYLE_COMPACT" =>	["qcompactstyle.h", "TQCompactStyle foo;", 16],
#	"QT_NO_STYLE_INTERLACE" =>	["qinterlacestyle.h", "TQInterlaceStyle foo;", 16],
#	"QT_NO_STYLE_PLATINUM" =>	["qplatinumstyle.h", "TQPlatinumStyle foo;", 16],
#	"QT_NO_STYLE_MOTIF" =>		["qmotifstyle.h", "TQMotifStyle foo;", 16],
#	"QT_NO_STYLE_MOTIFPLUS" =>	["qmotifplusstyle.h", "TQMotifPlusStyle foo;", 16],
#	"QT_NO_STYLE_SGI" =>		["qsgistyle.h", "TQSGIStyle foo;", 16],
#	"QT_NO_STYLE_WINDOWS" =>	["qwindowsstyle.h", "TQWindowsStyle foo;", 16],
        "QT_NO_TABBAR" =>               ["qtabbar.h", "TQTabBar foo;", 10],
        "QT_NO_TABDIALOG" =>            ["qtabdialog.h", "TQTabDialog foo;", 12],
        "QT_NO_TABLE" =>                ["qtable.h", "TQTable foo;", 10],
        "QT_NO_TABWIDGET" =>            ["qtabwidget.h", "TQTabWidget foo;", 10],
        "QT_NO_TEXTBROWSER" =>          ["qtextbrowser.h", "TQTextBrowser foo;", 14],
        "QT_NO_TEXTCODEC" =>            ["qtextcodec.h", "TQTextCodec::codecForIndex(1);", 5],
        "QT_NO_TEXTCODECPLUGIN" =>      ["qtextcodecplugin.h, qstringlist.h, qvaluelist.h, qtextcodec.h", "TQFoo foo;", 6, q� 
	
						class TQFoo: public TQTextCodecPlugin
						{
						public:
						    TQFoo() {};
						    ~TQFoo() {};
                                                    TQStringList names() const {return TQStringList();}
                                                    TQValueList<int>mibEnums() const {return TQValueList<int>();}
                                                    TQTextCodec *createForName( const TQString & name ) {return (TQTextCodec *)NULL;}
                                                    TQTextCodec *createForMib( int mib ) {return (TQTextCodec *)NULL;}
						};
						Q_EXPORT_PLUGIN( TQFoo )
					�],
 	"QT_NO_TEXTEDIT" =>		["qtextedit.h", "TQTextEdit foo;", 13], 
        "QT_NO_TEXTSTREAM" =>           ["qtextstream.h", "TQTextStream foo;", 5],
        "QT_NO_TEXTVIEW" =>             ["qtextview.h", "TQTextView foo;", 14], #Obsolete
        "QT_NO_TOOLBAR" =>              ["qtoolbar.h", "TQToolBar foo;", 10],
        "QT_NO_TOOLBUTTON" =>           ["qtoolbutton.h", "TQToolButton foo((TQWidget *) NULL );", 12],
        "QT_NO_TOOLTIP" =>              ["qtooltip.h", "TQToolTip::hide();", 10],
        
	"QT_NO_TRANSFORMATIONS" =>	["qpainter.h", q�
						TQPainter *foo= new TQPainter();
						foo->setViewXForm( true );�, 5],
        "QT_NO_VARIANT" =>              ["qvariant.h", "TQVariant foo;", 0],
        "QT_NO_WHATSTHIS" =>            ["qwhatsthis.h", "TQWhatsThis::inWhatsThisMode();", 10],
	"QT_NO_WHEELEVENT" =>		["qevent.h", "TQWheelEvent foo( TQPoint(1,1), 1, 1 );", 5],
        "QT_NO_WIDGET_TOPEXTRA" =>      ["qwidget.h", "TQWidget foo; foo.caption();", 9],
        "QT_NO_WIDGETSTACK" =>          ["qwidgetstack.h", "TQWidgetStack foo;", 13],
        "QT_NO_WIZARD" =>               ["qwizard.h", "TQWizard foo;", 13],
	"QT_NO_WMATRIX" =>		["qwmatrix.h", "TQWMatrix foo;", 0],
	"QT_NO_XML" =>			["qxml.h", "TQXmlNamespaceSupport foo;", 5],
	);

}