summaryrefslogtreecommitdiffstats
path: root/bin/tqt20fix
diff options
context:
space:
mode:
Diffstat (limited to 'bin/tqt20fix')
-rwxr-xr-xbin/tqt20fix259
1 files changed, 259 insertions, 0 deletions
diff --git a/bin/tqt20fix b/bin/tqt20fix
new file mode 100755
index 000000000..a303717bf
--- /dev/null
+++ b/bin/tqt20fix
@@ -0,0 +1,259 @@
+#!/usr/bin/perl -w
+#
+# in sh/bash/zsh:
+# make 2>&1 | .../qt/bin/tqt20fix
+# in csh/tcsh
+# make |& .../qt/bin/tqt20fix
+#
+# repeat as long as tqt20fix says to. if your make supports the -k
+# flag, that speeds up the process a bit.
+#
+# tqt20fix tends to fix a bit over half of the remaining problems in
+# each run.
+#
+# if you don't use gcc, you will need to change parseline.
+#
+
+
+# this function must accept one line, which is presumed to be an error
+# message, and return an array of three strings: the file name, the
+# line number and the variable that is undefined.
+#
+# it may also return an empty list, if the line isn't an error message.
+#
+# the function is called on each line in turn and only once on each
+# line, so it's possible to save state.
+#
+
+sub parseline{
+ my( $line ) = @_;
+
+ chomp $line;
+
+ if ( $line =~ m%^([-a-zA-Z0-9_\./]+\.[a-zA-Z]+):(\d+):\s*\`(.+)\' undeclared% ) {
+ @r = ($1,$2,$3);
+ $r[0] = $currentdir . $r[0] if ( defined($currentdir) &&
+ $r[0] =~ m%^[^/]% );
+ return @r;
+ } elsif ( $line =~ m%^([-a-zA-Z0-9_\./]+\.[a-zA-Z]+):(\d+):\s*\`(.+)\' was not declared% ) {
+ @r = ($1,$2,$3);
+ $r[0] = $currentdir . $r[0] if ( defined($currentdir) &&
+ $r[0] =~ m%^[^/]% );
+ return @r;
+ } elsif ( $line =~ m%^g?make\[(\d+)\]: Entering directory \`(.*)\'% ) {
+ # make[1]: Entering directory `/home/agulbra/2x/src/ui'
+ my( $l, $c ) = ( $1, $2 );
+ $c =~ s-/?$-/-;
+ $dirs[$l] = $c;
+ $currentdir = $c;
+ print "$line\n";
+ } elsif ( $line =~ m%make\[(\d+)\]: Leaving directory \`.*\'$% ) {
+ # make[1]: Leaving directory `/home/agulbra/2x/src/ui'
+ $currentdir = defined( $dirs[$1 - 1] ) ? $dirs[$1 - 1] : "";
+ print "$line\n";
+ } elsif ( $line =~ m%^\S+:(?:\d+:)?\s+\S% ) {
+ # other compiler message - skip it
+ } else {
+ print "$line\n";
+ }
+
+ return ();
+}
+
+
+#
+# this is the big array of globals and their replacements. add stuff
+# at will.
+#
+
+%globals =
+(
+ "Event_None" => "QEvent::None",
+ "Event_Timer" => "QEvent::Timer",
+ "Event_MouseButtonPress" => "QEvent::MouseButtonPress",
+ "Event_MouseButtonRelease" => "QEvent::MouseButtonRelease",
+ "Event_MouseButtonDblClick" => "QEvent::MouseButtonDblClick",
+ "Event_MouseMove" => "QEvent::MouseMove",
+ "Event_KeyPress" => "QEvent::KeyPress",
+ "Event_KeyRelease" => "QEvent::KeyRelease",
+ "Event_FocusIn" => "QEvent::FocusIn",
+ "Event_FocusOut" => "QEvent::FocusOut",
+ "Event_Enter" => "QEvent::Enter",
+ "Event_Leave" => "QEvent::Leave",
+ "Event_Paint" => "QEvent::Paint",
+ "Event_Move" => "QEvent::Move",
+ "Event_Resize" => "QEvent::Resize",
+ "Event_Create" => "QEvent::Create",
+ "Event_Destroy" => "QEvent::Destroy",
+ "Event_Show" => "QEvent::Show",
+ "Event_Hide" => "QEvent::Hide",
+ "Event_Close" => "QEvent::Close",
+ "Event_Quit" => "QEvent::Quit",
+ "Event_Accel" => "QEvent::Accel",
+ "Event_Clipboard" => "QEvent::Clipboard",
+ "Event_SockAct" => "QEvent::SockAct",
+ "Event_DragEnter" => "QEvent::DragEnter",
+ "Event_DragMove" => "QEvent::DragMove",
+ "Event_DragLeave" => "QEvent::DragLeave",
+ "Event_Drop" => "QEvent::Drop",
+ "Event_DragResponse" => "QEvent::DragResponse",
+ "Event_ChildInserted" => "QEvent::ChildInserted",
+ "Event_ChildRemoved" => "QEvent::ChildRemoved",
+ "Event_LayoutHint" => "QEvent::LayoutHint",
+ "Event_User" => "QEvent::User",
+
+ "color0" => "Qt::color0",
+ "color1" => "Qt::color1",
+ "black" => "Qt::black",
+ "white" => "Qt::white",
+ "darkGray" => "Qt::darkGray",
+ "gray" => "Qt::gray",
+ "lightGray" => "Qt::lightGray",
+ "red" => "Qt::red",
+ "green" => "Qt::green",
+ "blue" => "Qt::blue",
+ "cyan" => "Qt::cyan",
+ "magenta" => "Qt::magenta",
+ "yellow" => "Qt::yellow",
+ "darkRed" => "Qt::darkRed",
+ "darkGreen" => "Qt::darkGreen",
+ "darkBlue" => "Qt::darkBlue",
+ "darkCyan" => "Qt::darkCyan",
+ "darkMagenta" => "Qt::darkMagenta",
+ "darkYellow" => "Qt::darkYellow",
+
+ "AlignLeft" => "Qt::AlignLeft",
+ "AlignRight" => "Qt::AlignRight",
+ "AlignHCenter" => "Qt::AlignHCenter",
+ "AlignTop" => "Qt::AlignTop",
+ "AlignBottom" => "Qt::AlignBottom",
+ "AlignVCenter" => "Qt::AlignVCenter",
+ "AlignCenter" => "Qt::AlignCenter",
+ "SingleLine" => "Qt::SingleLine",
+ "DontClip" => "Qt::DontClip",
+ "ExpandTabs" => "Qt::ExpandTabs",
+ "ShowPrefix" => "Qt::ShowPrefix",
+ "WordBreak" => "Qt::WordBreak",
+ "DontPrint" => "Qt::DontPrint",
+
+ "TransparentMode" => "Qt::TransparentMode",
+ "OpaqueMode" => "Qt::OpaqueMode",
+
+ "PixelUnit" => "Qt::PixelUnit",
+ "LoMetricUnit" => "Qt::LoMetricUnit",
+ "HiMetricUnit" => "Qt::HiMetricUnit",
+ "LoEnglishUnit" => "Qt::LoEnglishUnit",
+ "HiEnglishUnit" => "Qt::HiEnglishUnit",
+ "TwipsUnit" => "Qt::TwipsUnit",
+
+ "WindowsStyle" => "Qt::WindowsStyle",
+ "MotifStyle" => "Qt::MotifStyle",
+
+ "Horizontal" => "Qt::Horizontal",
+ "Vertical" => "Qt::Vertical",
+
+ "PenStyle" => "Qt::PenStyle",
+ "NoPen" => "Qt::NoPen",
+ "SolidLine" => "Qt::SolidLine",
+ "DashLine" => "Qt::DashLine",
+ "DotLine" => "Qt::DotLine",
+ "DashDotLine" => "Qt::DashDotLine",
+ "DashDotDotLine" => "Qt::DashDotDotLine",
+
+ "BrushStyle" => "Qt::BrushStyle",
+ "NoBrush" => "Qt::NoBrush",
+ "SolidPattern" => "Qt::SolidPattern",
+ "Dense1Pattern" => "Qt::Dense1Pattern",
+ "Dense2Pattern" => "Qt::Dense2Pattern",
+ "Dense3Pattern" => "Qt::Dense3Pattern",
+ "Dense4Pattern" => "Qt::Dense4Pattern",
+ "Dense5Pattern" => "Qt::Dense5Pattern",
+ "Dense6Pattern" => "Qt::Dense6Pattern",
+ "Dense7Pattern" => "Qt::Dense7Pattern",
+ "HorPattern" => "Qt::HorPattern",
+ "VerPattern" => "Qt::VerPattern",
+ "CrossPattern" => "Qt::CrossPattern",
+ "BDiagPattern" => "Qt::BDiagPattern",
+ "FDiagPattern" => "Qt::FDiagPattern",
+ "DiagCrossPattern" => "Qt::DiagCrossPattern",
+ "CustomPattern" => "Qt::CustomPattern",
+
+ "arrowCursor" => "Qt::arrowCursor",
+ "upArrowCursor" => "Qt::upArrowCursor",
+ "crossCursor" => "Qt::crossCursor",
+ "waitCursor" => "Qt::waitCursor",
+ "ibeamCursor" => "Qt::ibeamCursor",
+ "sizeVerCursor" => "Qt::sizeVerCursor",
+ "sizeHorCursor" => "Qt::sizeHorCursor",
+ "sizeBDiagCursor" => "Qt::sizeBDiagCursor",
+ "sizeFDiagCursor" => "Qt::sizeFDiagCursor",
+ "sizeAllCursor" => "Qt::sizeAllCursor",
+ "blankCursor" => "Qt::blankCursor",
+ "splitVCursor" => "Qt::splitVCursor",
+ "splitHCursor" => "Qt::splitHCursor",
+ "pointingHandCursor" => "Qt::pointingHandCursor"
+);
+
+if ( defined( $ENV{"QTDIR"} ) &&
+ open( I, "< ". $ENV{"QTDIR"} . "/src/kernel/ntq1xcompatibility.h" ) ) {
+ while( <I> ) {
+ if ( /\#define\s+([a-zA-Z0-9_]+)\s+(\S+)/ ) {
+ if ( !defined( $globals{$1} ) ) {
+ $globals{$1} = $2;
+ } elsif ( $globals{$1} ne $2 ) {
+ #print "conflict: $1 is mapped to $2 and $globals{$1}\n";
+ }
+ }
+ }
+ close I;
+}
+
+#
+# do the do
+#
+
+while( <STDIN> ) {
+ @r = parseline($_);
+ next unless @r;
+ ($file, $line, $variable) = @r;
+ if ( defined( $variable ) && defined($globals{$variable}) ) {
+ if ( !defined($lastfile) || ($file ne $lastfile) ) {
+ $lastfile = undef if ( !$changes );
+ if ( defined( $lastfile ) ) {
+ open( O, "> $lastfile" ) ||
+ die "cannot write to $lastfile, stopped";
+ print "tqt20fix: writing $lastfile (changes: $changes)\n";
+ print O @currentfile;
+ close O;
+ }
+ open( I, "< $file" ) || die "cannot read $file, stopped";
+ @currentfile = <I>;
+ close I;
+ $lastfile = $file;
+ $changes = 0;
+ }
+ next unless ( defined( $currentfile[$line-1] ) );
+ next unless ( $currentfile[$line-1] =~ /\b$variable\b/ );
+ if ( $currentfile[$line-1] =~ s/([^a-zA-Z0-9])::$variable\b/$1$globals{$variable}/ ||
+ $currentfile[$line-1] =~ s/([^a-zA-Z0-9:])$variable\b/$1$globals{$variable}/ ) {
+ print "$file:$line:replaced \`$variable\' with \`$globals{$variable}\'\n";
+ $changes++;
+ $totalchanges++
+ }
+ } elsif ( defined( $variable ) ) {
+ print "$file:$line: unknown undefined variable $variable\n";
+ }
+}
+
+if ( defined( $changes) && $changes > 0 && defined( $lastfile ) ) {
+ open( O, "> $lastfile" ) ||
+ die "cannot write to $lastfile, stopped";
+ print "tqt20fix: writing $lastfile (changes: $changes)\n";
+ print O @currentfile;
+ close O;
+}
+
+
+if ( defined( $totalchanges) && $totalchanges > 0 ) {
+ print "tqt20fix: total changes: $totalchanges\ntqt20fix: rerun recommended\n";
+}