#!/usr/bin/perl
use strict;
my @objects = (
    '.obj/qimage_compat.o',
    '.obj/qaccessible.o',
    '.obj/qaccessiblecache.o',
    '.obj/qaccessibleobject.o',
    '.obj/qaccessibleplugin.o',
    '.obj/qplatformaccessibility.o',
    '.obj/qaccessiblebridge.o',
    '.obj/qgenericpluginfactory.o',
    '.obj/qgenericplugin.o',
    '.obj/qwindowsysteminterface.o',
    '.obj/qplatforminputcontextfactory.o',
    '.obj/qplatforminputcontextplugin.o',
    '.obj/qplatforminputcontext.o',
    '.obj/qplatformintegration.o',
    '.obj/qplatformdrag.o',
    '.obj/qplatformscreen.o',
    '.obj/qplatformintegrationfactory.o',
    '.obj/qplatformintegrationplugin.o',
    '.obj/qplatformtheme.o',
    '.obj/qplatformthemefactory.o',
    '.obj/qplatformthemeplugin.o',
    '.obj/qplatformwindow.o',
    '.obj/qplatformoffscreensurface.o',
    '.obj/qplatformcursor.o',
    '.obj/qplatformclipboard.o',
    '.obj/qplatformnativeinterface.o',
    '.obj/qsessionmanager.o',
    '.obj/qshapedpixmapdndwindow.o',
    '.obj/qsimpledrag.o',
    '.obj/qsurfaceformat.o',
    '.obj/qguiapplication.o',
    '.obj/qwindow.o',
    '.obj/qoffscreensurface.o',
    '.obj/qplatformsurface.o',
    '.obj/qsurface.o',
    '.obj/qclipboard.o',
    '.obj/qcursor.o',
    '.obj/qdrag.o',
    '.obj/qdnd.o',
    '.obj/qevent.o',
    '.obj/qinputmethod.o',
    '.obj/qkeysequence.o',
    '.obj/qkeymapper.o',
    '.obj/qpalette.o',
    '.obj/qguivariant.o',
    '.obj/qscreen.o',
    '.obj/qshortcutmap.o',
    '.obj/qstylehints.o',
    '.obj/qtouchdevice.o',
    '.obj/qplatformsharedgraphicscache.o',
    '.obj/qplatformdialoghelper.o',
    '.obj/qplatformservices.o',
    '.obj/qplatformsystemtrayicon.o',
    '.obj/qplatformsessionmanager.o',
    '.obj/qplatformmenu.o',
    '.obj/qpixelformat.o',
    '.obj/qpaintdevicewindow.o',
    '.obj/qrasterwindow.o',
    '.obj/qplatformopenglcontext.o',
    '.obj/qopenglcontext.o',
    '.obj/qopenglwindow.o',
    '.obj/qbitmap.o',
    '.obj/qimage.o',
    '.obj/qimage_conversions.o',
    '.obj/qimageiohandler.o',
    '.obj/qimagereader.o',
    '.obj/qimagewriter.o',
    '.obj/qpaintengine_pic.o',
    '.obj/qpicture.o',
    '.obj/qpictureformatplugin.o',
    '.obj/qpixmap.o',
    '.obj/qpixmapcache.o',
    '.obj/qplatformpixmap.o',
    '.obj/qmovie.o',
    '.obj/qpixmap_raster.o',
    '.obj/qpixmap_blitter.o',
    '.obj/qnativeimage.o',
    '.obj/qimagepixmapcleanuphooks.o',
    '.obj/qicon.o',
    '.obj/qiconloader.o',
    '.obj/qiconengine.o',
    '.obj/qiconengineplugin.o',
    '.obj/qbmphandler.o',
    '.obj/qppmhandler.o',
    '.obj/qxbmhandler.o',
    '.obj/qxpmhandler.o',
    '.obj/qpnghandler.o',
    '.obj/qfont.o',
    '.obj/qfontengine.o',
    '.obj/qfontsubset.o',
    '.obj/qfontmetrics.o',
    '.obj/qfontdatabase.o',
    '.obj/qtextengine.o',
    '.obj/qtextlayout.o',
    '.obj/qtextformat.o',
    '.obj/qtextobject.o',
    '.obj/qtextoption.o',
    '.obj/qfragmentmap.o',
    '.obj/qtextdocument.o',
    '.obj/qtextdocument_p.o',
    '.obj/qtexthtmlparser.o',
    '.obj/qabstracttextdocumentlayout.o',
    '.obj/qtextdocumentlayout.o',
    '.obj/qtextcursor.o',
    '.obj/qtextdocumentfragment.o',
    '.obj/qtextimagehandler.o',
    '.obj/qtexttable.o',
    '.obj/qtextlist.o',
    '.obj/qtextdocumentwriter.o',
    '.obj/qsyntaxhighlighter.o',
    '.obj/qcssparser.o',
    '.obj/qzip.o',
    '.obj/qtextodfwriter.o',
    '.obj/qstatictext.o',
    '.obj/qrawfont.o',
    '.obj/qglyphrun.o',
    '.obj/qdistancefield.o',
    '.obj/qfontengine_qpf2.o',
    '.obj/qplatformfontdatabase.o',
    '.obj/qharfbuzzng.o',
    '.obj/qbackingstore.o',
    '.obj/qbezier.o',
    '.obj/qblendfunctions.o',
    '.obj/qblittable.o',
    '.obj/qbrush.o',
    '.obj/qcolor.o',
    '.obj/qcolor_p.o',
    '.obj/qcosmeticstroker.o',
    '.obj/qcssutil.o',
    '.obj/qdrawhelper.o',
    '.obj/qemulationpaintengine.o',
    '.obj/qgammatables.o',
    '.obj/qgrayraster.o',
    '.obj/qimagescale.o',
    '.obj/qmatrix.o',
    '.obj/qmemrotate.o',
    '.obj/qoutlinemapper.o',
    '.obj/qpagedpaintdevice.o',
    '.obj/qpagelayout.o',
    '.obj/qpagesize.o',
    '.obj/qpaintdevice.o',
    '.obj/qpaintengine.o',
    '.obj/qpaintengineex.o',
    '.obj/qpaintengine_blitter.o',
    '.obj/qpaintengine_raster.o',
    '.obj/qpainter.o',
    '.obj/qpainterpath.o',
    '.obj/qpathclipper.o',
    '.obj/qpdf.o',
    '.obj/qpdfwriter.o',
    '.obj/qpen.o',
    '.obj/qpolygon.o',
    '.obj/qrasterizer.o',
    '.obj/qregion.o',
    '.obj/qstroker.o',
    '.obj/qtextureglyphcache.o',
    '.obj/qtransform.o',
    '.obj/qplatformbackingstore.o',
    '.obj/qpaintbuffer.o',
    '.obj/qpathsimplifier.o',
    '.obj/qdesktopservices.o',
    '.obj/qvalidator.o',
    '.obj/qgridlayoutengine.o',
    '.obj/qabstractlayoutstyleinfo.o',
    '.obj/qlayoutpolicy.o',
    '.obj/qgenericmatrix.o',
    '.obj/qmatrix4x4.o',
    '.obj/qquaternion.o',
    '.obj/qvector2d.o',
    '.obj/qvector3d.o',
    '.obj/qvector4d.o',
    '.obj/qopengl.o',
    '.obj/qopenglfunctions.o',
    '.obj/qopenglframebufferobject.o',
    '.obj/qopenglpaintdevice.o',
    '.obj/qopenglbuffer.o',
    '.obj/qopenglshaderprogram.o',
    '.obj/qopenglgradientcache.o',
    '.obj/qopengltexturecache.o',
    '.obj/qopenglengineshadermanager.o',
    '.obj/qopengl2pexvertexarray.o',
    '.obj/qopenglpaintengine.o',
    '.obj/qopenglcustomshaderstage.o',
    '.obj/qtriangulatingstroker.o',
    '.obj/qopengltextureglyphcache.o',
    '.obj/qtriangulator.o',
    '.obj/qopenglversionfunctions.o',
    '.obj/qopenglversionfunctionsfactory.o',
    '.obj/qopenglvertexarrayobject.o',
    '.obj/qopengldebug.o',
    '.obj/qopengltextureblitter.o',
    '.obj/qopengltexture.o',
    '.obj/qopengltexturehelper.o',
    '.obj/qopenglpixeltransferoptions.o',
    '.obj/qopenglfunctions_es2.o',
    '.obj/qguivariantanimation.o',
    '.obj/qstandarditemmodel.o',
    '.obj/qimage_sse2.o',
    '.obj/qdrawhelper_sse2.o',
    '.obj/qimage_ssse3.o',
    '.obj/qdrawhelper_ssse3.o',
    '.obj/moc_qaccessible.o',
    '.obj/moc_qaccessiblecache_p.o',
    '.obj/moc_qaccessibleplugin.o',
    '.obj/moc_qaccessiblebridge.o',
    '.obj/moc_qgenericplugin.o',
    '.obj/moc_qplatforminputcontext.o',
    '.obj/moc_qplatforminputcontextplugin_p.o',
    '.obj/moc_qplatformintegrationplugin.o',
    '.obj/moc_qplatformthemeplugin.o',
    '.obj/moc_qplatformnativeinterface.o',
    '.obj/moc_qplatformmenu.o',
    '.obj/moc_qshapedpixmapdndwindow_p.o',
    '.obj/moc_qoffscreensurface.o',
    '.obj/moc_qclipboard.o',
    '.obj/moc_qdrag.o',
    '.obj/moc_qdnd_p.o',
    '.obj/moc_qevent.o',
    '.obj/moc_qkeysequence.o',
    '.obj/moc_qkeymapper_p.o',
    '.obj/moc_qpalette.o',
    '.obj/moc_qsessionmanager.o',
    '.obj/moc_qscreen.o',
    '.obj/moc_qstylehints.o',
    '.obj/moc_qplatformsharedgraphicscache.o',
    '.obj/moc_qplatformdialoghelper.o',
    '.obj/moc_qpaintdevicewindow.o',
    '.obj/moc_qrasterwindow.o',
    '.obj/moc_qopenglcontext.o',
    '.obj/moc_qopenglwindow.o',
    '.obj/moc_qimageiohandler.o',
    '.obj/moc_qpictureformatplugin.o',
    '.obj/moc_qiconengineplugin.o',
    '.obj/moc_qfont.o',
    '.obj/moc_qfontdatabase.o',
    '.obj/moc_qtextformat.o',
    '.obj/moc_qtextobject.o',
    '.obj/moc_qtextdocument.o',
    '.obj/moc_qtextimagehandler_p.o',
    '.obj/moc_qtexttable.o',
    '.obj/moc_qtextlist.o',
    '.obj/moc_qbrush.o',
    '.obj/moc_qpainter.o',
    '.obj/moc_qpdfwriter.o',
    '.obj/moc_qplatformbackingstore.o',
    '.obj/moc_qvalidator.o',
    '.obj/moc_qopenglshaderprogram.o',
    '.obj/moc_qopenglengineshadermanager_p.o'
);
my @keep = ();

my $rx1 = qr/\Qlto1: internal compiler error: Segmentation fault\E/;

print "Starting, ";
while (1) {
    # Remove one entry from @objects and see if we still get the compilation errors
    print "$#objects objects remaining\n";

    # drop the first, see if we have any effect
    my $inspecting = shift @objects or last;
    #next unless $inspecting =~ m,^/home,;
    print "Testing $inspecting...";

    # try to compile
    my $list = join(' ', @keep, @objects);
    my $cmdline = "~/gcc5.0/bin/g++ -pipe -march=core-avx2 -mno-rtm -mno-hle -Wl,-O1 -Wl,--as-needed -Wl,-z,relro -Wl,--enable-new-dtags -fuse-linker-plugin -Wl,--no-undefined -std=c++0x -O3 -g -maccumulate-outgoing-args -fvisibility=hidden -fvisibility-inlines-hidden -flto=4 -fno-fat-lto-objects -Wl,-rpath,/home/thiago/obj/qt/qt5-release/qtbase/lib -shared -Wl,--dynamic-list,/home/thiago/src/qt/qt5/qtbase/src/gui/QtGui.dynlist -fPIC -Wl,-soname,libQt5Gui.so.5 -o /dev/null $list -L/home/thiago/obj/qt/qt5-release/qtbase/lib -lQt5Core -lpthread -lpng -lqtharfbuzzng -lz -lGLESv2 2>&1";
    my $output = `$cmdline`;
    unless ($? && $output =~ m/$rx1/) {
        print "failed (compilation succeeded!)\n" unless ($?);
        print "failed (errors disappeared)\n" if ($?);
        print "=> Keeping $inspecting (won't test it again), ";
        push @keep, $inspecting;
        next;
    }

    # drop this file
    print "succeeded\n";
    print "=> Dropping $inspecting, ";
}

print "Reduced object list to:\n";
print join("\n", @keep);
