#!/usr/bin/perl -w
#
# Update spec files across dlls that share an implementation
#
# Copyright 2011 Alexandre Julliard
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#

use strict;

my %funcs;
my $group_head;

my @dll_groups =
(
 [
  "msvcrt",
  "msvcirt",
  "msvcrt40",
  "msvcrt20",
  "msvcrtd",
  "crtdll",
 ],
 [
  "msvcrt",
  "msvcp90",
  "msvcp100",
  "msvcp110",
  "msvcp71",
  "msvcp80",
  "msvcp70",
  "msvcp60",
 ],
 [
  "d3dx9_36",
  "d3dx9_43",
  "d3dx9_42",
  "d3dx9_41",
  "d3dx9_40",
  "d3dx9_39",
  "d3dx9_38",
  "d3dx9_37",
  "d3dx9_35",
  "d3dx9_34",
  "d3dx9_33",
  "d3dx9_32",
  "d3dx9_31",
  "d3dx9_30",
  "d3dx9_29",
  "d3dx9_28",
  "d3dx9_27",
  "d3dx9_26",
  "d3dx9_25",
  "d3dx9_24",
 ],
 [
  "d3dx10_43",
  "d3dx10_42",
  "d3dx10_41",
  "d3dx10_40",
  "d3dx10_39",
  "d3dx10_38",
  "d3dx10_37",
  "d3dx10_36",
  "d3dx10_35",
  "d3dx10_34",
  "d3dx10_33",
 ],
 [
  "d3dx11_43",
  "d3dx11_42",
 ],
 [
  "d3dcompiler_43",
  "d3dcompiler_42",
  "d3dcompiler_41",
  "d3dcompiler_40",
  "d3dcompiler_39",
  "d3dcompiler_38",
  "d3dcompiler_37",
  "d3dcompiler_36",
  "d3dcompiler_35",
  "d3dcompiler_34",
  "d3dcompiler_33",
 ],
 [
  "xinput1_3",
  "xinput1_4",
  "xinput1_2",
  "xinput1_1",
  "xinput9_1_0",
 ],
 [
  "setupapi",
  "cfgmgr32",
 ],
 [
  "vcomp",
  "vcomp100",
  "vcomp90",
 ],
 [
  "advapi32",
  "api-ms-win-core-localregistry-l1-1-0",
  "api-ms-win-downlevel-advapi32-l1-1-0",
  "api-ms-win-downlevel-advapi32-l2-1-0",
  "api-ms-win-security-base-l1-1-0",
  "api-ms-win-core-registry-l1-1-0",
  "api-ms-win-eventing-provider-l1-1-0",
  "api-ms-win-security-base-l1-2-0",
  "api-ms-win-security-sddl-l1-1-0",
  "api-ms-win-service-core-l1-1-1",
  "api-ms-win-service-management-l1-1-0",
  "api-ms-win-service-winsvc-l1-2-0",
 ],
 [
  "kernel32",
  "api-ms-win-downlevel-normaliz-l1-1-0",
  "api-ms-win-core-processthreads-l1-1-0",
  "api-ms-win-core-processthreads-l1-1-1",
  "api-ms-win-core-debug-l1-1-1",
  "api-ms-win-core-errorhandling-l1-1-1",
  "api-ms-win-core-interlocked-l1-2-0",
  "api-ms-win-core-profile-l1-1-0",
  "api-ms-win-core-string-l1-1-0",
  "api-ms-win-core-sysinfo-l1-2-0",
  "api-ms-win-core-util-l1-1-0",
  "api-ms-win-core-synch-l1-2-0",
  "api-ms-win-core-console-l1-1-0",
  "api-ms-win-core-file-l1-2-0",
  "api-ms-win-core-handle-l1-1-0",
  "api-ms-win-core-heap-l1-2-0",
  "api-ms-win-core-heap-obsolete-l1-1-0",
  "api-ms-win-core-io-l1-1-1",
  "api-ms-win-core-kernel32-legacy-l1-1-0",
  "api-ms-win-core-libraryloader-l1-1-1",
  "api-ms-win-core-localization-l1-2-0",
  "api-ms-win-core-localization-obsolete-l1-1-0",
  "api-ms-win-core-memory-l1-1-1",
  "api-ms-win-core-namedpipe-l1-2-0",
  "api-ms-win-core-processenvironment-l1-2-0",
  "api-ms-win-core-psapi-l1-1-0",
  "api-ms-win-core-threadpool-legacy-l1-1-0",
  "api-ms-win-core-timezone-l1-1-0",
 ],
 [
  "ole32",
  "api-ms-win-downlevel-ole32-l1-1-0",
  "api-ms-win-core-com-l1-1-0",
 ],
 [
  "shell32",
  "api-ms-win-downlevel-shell32-l1-1-0",
 ],
 [
  "shlwapi",
  "api-ms-win-downlevel-shlwapi-l1-1-0",
  "api-ms-win-downlevel-shlwapi-l2-1-0",
  "api-ms-win-core-shlwapi-legacy-l1-1-0",
  "api-ms-win-core-url-l1-1-0",
 ],
 [
  "user32",
  "api-ms-win-downlevel-user32-l1-1-0",
  "api-ms-win-ntuser-dc-access-l1-1-0",
 ],
 [
  "version",
  "api-ms-win-downlevel-version-l1-1-0",
 ],
 [
  "msvcrt",
  "ntdll",
  "ntoskrnl.exe",
  "api-ms-win-core-rtlsupport-l1-2-0",
 ],
 [
  "gdi32",
  "ext-ms-win-gdi-devcaps-l1-1-0",
 ],
);

my $update_flags = 0;
my $show_duplicates = 0;

foreach my $arg (@ARGV)
{
    if ($arg eq "-f") { $update_flags = 1; }
    elsif ($arg eq "-d") { $show_duplicates = 1; }
}

sub update_file($)
{
    my $file = shift;
    my $ret = !(-f $file) || system "cmp $file $file.new >/dev/null";
    if (!$ret)
    {
        unlink "$file.new";
    }
    else
    {
        #system "diff -u $file $file.new";
        rename "$file.new", "$file";
        print "$file updated\n";
    }
    return $ret;
}

# parse a spec file line
sub parse_line($$$)
{
    my ($name, $line, $str) = @_;

    if ($str =~ /^\s*(\@|\d+)\s+(stdcall|cdecl|varargs|thiscall|stub|extern)\s+((?:-\S+\s+)*)([A-Za-z0-9_\@\$?]+)(?:\s*(\([^)]*\)))?(?:\s+([A-Za-z0-9_\@\$?.]+))?(\s*\#.*)?/)
    {
        return ( "ordinal" => $1, "callconv" => $2, "flags" => $3, "name" => $4, "args" => $5 || "",
                 "target" => $6 || $4, "comment" => $7, "spec" => $name );
    }
    return () if $str =~ /^\s*$/;
    return () if $str =~ /^\s*\#/;
    printf STDERR "$name.spec:$line: error: Unrecognized line $_\n";
}

sub read_spec_file($)
{
    my $name = shift;
    my $file = "dlls/$name/$name.spec";
    my %stubs;
    open SPEC, "<$file" or die "cannot open $file";
    while (<SPEC>)
    {
        chomp;
        my %descr = parse_line( $name, $., $_ );
        next unless %descr;

        my $func = $descr{name};
        next if defined $funcs{$func};
        $funcs{$func} = \%descr;
    }
    close SPEC;
}

sub update_spec_file($)
{
    my $name = shift;
    my $file = "dlls/$name/$name.spec";
    my %stubs;

    open SPEC, "<$file" or die "cannot open $file";
    open NEW, ">$file.new" or die "cannot create $file.new";
    while (<SPEC>)
    {
        chomp;

        my $commented_out = 0;
        my %descr = parse_line( $name, $., $_ );
        if (!%descr)
        {
            # check for commented out exports
            if (/^\s*\#\s*((?:\@|\d+)\s+)?((?:extern|stub|stdcall|cdecl|varargs|thiscall)\s+.*)/)
            {
                $commented_out = 1;
                %descr = parse_line( $name, $., ($1 || "\@ ") . $2 );
            }
        }
        goto done unless %descr;

        my $func = $descr{name};
        if (!defined $funcs{$func})
        {
            $funcs{$func} = \%descr unless $commented_out;
            goto done;
        }

        my %parent = %{$funcs{$func}};
        goto done if $parent{spec} eq $descr{spec};  # the definition is in this spec file
        goto done if $descr{comment} && $descr{comment} =~ /don't forward/;
        if ($descr{callconv} ne "stub" && $descr{target} !~ /\./ && !$commented_out)
        {
            printf "%s:%u: note: %s already defined in %s\n", $file, $., $func, $parent{spec} if $show_duplicates;
            goto done;
        }

        my $flags = $descr{flags};
        if ($parent{callconv} ne "stub" || $update_flags)
        {
            $flags = $parent{flags};
            $flags =~ s/-ordinal\s*// if $descr{ordinal} eq "@";
            $flags =~ s/-noname\s*// if $descr{ordinal} eq "@";
            if ($descr{flags} =~ /-private/)  # preserve -private flag
            {
                $flags = "-private " . $flags unless $flags =~ /-private/;
            }
        }

        if ($parent{callconv} ne "stub" || $parent{args})
        {
            my $callconv = $parent{callconv} ne "stub" ? $parent{callconv} :
                           $parent{spec} =~ /msvc/ ? "cdecl" : "stdcall";  # hack
            $_ = sprintf "$descr{ordinal} %s %s%s", $callconv, $flags, $func;

            if ($parent{target} =~ /$group_head\./)  # use the same forward as parent if possible
            {
                $_ .= sprintf "%s %s", $parent{args}, $parent{target};
            }
            else
            {
                $_ .= sprintf "%s %s.%s", $parent{args}, $parent{spec}, $func;
            }
        }
        else
        {
            $_ = sprintf "$descr{ordinal} stub %s%s", $flags, $func;
        }
        $_ .= $descr{comment} || "";

      done:
        print NEW "$_\n";
    }
    close SPEC;
    close NEW;
    update_file( $file );
}

sub sync_spec_files(@)
{
    %funcs = ();
    $group_head = shift;
    read_spec_file( $group_head );
    foreach my $spec (@_) { update_spec_file($spec); }
}

foreach my $group (@dll_groups)
{
    sync_spec_files( @{$group} );
}
