#!/usr/bin/perl
#############################################################################
##
## Copyright (C) 2010 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$
## Commercial Usage
## Licensees holding valid Qt Commercial licenses may use this file in
## accordance with the Qt Solutions Commercial License Agreement provided
## with the Software or, alternatively, in accordance with the terms
## contained in a written agreement between you and Nokia.
##
## 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.
##
## GNU General Public License Usage
## Alternatively, this file may be used under the terms of the GNU
## General Public License version 3.0 as published by the Free Software
## Foundation and appearing in the file LICENSE.GPL included in the
## packaging of this file.  Please review the following information to
## ensure the GNU General Public License version 3.0 requirements will be
## met: http://www.gnu.org/copyleft/gpl.html.
##
## Please note Third Party Software included with Qt Solutions may impose
## additional restrictions and it is the user's responsibility to ensure
## that they have met the licensing requirements of the GPL, LGPL, or Qt
## Solutions Commercial license and the relevant license of the Third
## Party Software they are using.
##
## If you are unsure which license is appropriate for your use, please
## contact the sales department at qt-sales@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;
    }
}

