#!/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 Qt Mobility Components.
##
## $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$
##
#############################################################################

use strict;
use warnings;

use File::Basename;
use File::stat;
use File::Path;

my $allow_non_exported = 1;
if ( @ARGV && $ARGV[0] eq "-needs-export" ) {
    shift(@ARGV);
    $allow_non_exported = 0;
}

my $outdir = shift(@ARGV) or usage();
mkpath($outdir);

my $indir = shift(@ARGV) or usage();
processFile($indir);

exit 0;

sub usage
{
    print "Usage:  syncheaders [-needs-export] outdir indir\n";
    print "        Processes all public header files <indir>\n";
    exit 2;
}

sub processFile
{
    my ( $read_dir ) = @_;
    my @allFiles;
    my $filename;

    opendir( THISDIR, $read_dir) or die "Can't read $read_dir";
    #process all header files
    @allFiles = grep /\.h/,  readdir THISDIR;
    #don't include private headers
    @allFiles = grep !/_p\.h/, @allFiles;

    for $filename (@allFiles) {
        open INPUT, "$indir/$filename" or die "Can't read $filename";

        my $src_s = stat("$indir/$filename");
        my $now = $src_s->mtime;

        while (<INPUT>) {
            if ( /^\s*class\s+.*_EXPORT\s+([^\s:]+)/ ||
                 ($allow_non_exported && /^\s*class\s+([^\s:<]+)/ && index($_, ";") == -1) ||
                 /syncqtopia\s+header\s+([^\s:]+)/ )
            {
                # Skip preprocessor-related items
                next if ( $1 =~ /#/ );

                my $outfile = "$outdir/$1";

                print "Create header $outfile\n";

                #system("install", "-m", "0644", $filename, $outfile);
                open OUT, ">$outfile" or die "Can't write $outfile";
                print OUT "#include \"".basename($filename)."\"\n";
                close OUT;
            }
        }
        close INPUT;
    }
}

