#!/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",
  "msvcp120",
  "msvcp71",
  "msvcp80",
  "msvcp70",
  "msvcp60",
 ],
 [
  "msvcr120",
  "msvcr120_app",
 ],
 [
  "ucrtbase",
  "api-ms-win-crt-conio-l1-1-0",
  "api-ms-win-crt-convert-l1-1-0",
  "api-ms-win-crt-environment-l1-1-0",
  "api-ms-win-crt-filesystem-l1-1-0",
  "api-ms-win-crt-heap-l1-1-0",
  "api-ms-win-crt-locale-l1-1-0",
  "api-ms-win-crt-math-l1-1-0",
  "api-ms-win-crt-multibyte-l1-1-0",
  "api-ms-win-crt-private-l1-1-0",
  "api-ms-win-crt-process-l1-1-0",
  "api-ms-win-crt-runtime-l1-1-0",
  "api-ms-win-crt-stdio-l1-1-0",
  "api-ms-win-crt-string-l1-1-0",
  "api-ms-win-crt-time-l1-1-0",
  "api-ms-win-crt-utility-l1-1-0",
  "vcruntime140",
 ],
 [
  "msvcp120",
  "msvcp120_app",
 ],
 [
  "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_47",
  "d3dcompiler_46",
  "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",
  "vcomp120",
  "vcomp110",
  "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-debug-l1-1-0",
  "api-ms-win-core-debug-l1-1-1",
  "api-ms-win-core-errorhandling-l1-1-0",
  "api-ms-win-core-errorhandling-l1-1-1",
  "api-ms-win-core-interlocked-l1-1-0",
  "api-ms-win-core-interlocked-l1-2-0",
  "api-ms-win-core-misc-l1-1-0",
  "api-ms-win-core-profile-l1-1-0",
  "api-ms-win-core-string-l1-1-0",
  "api-ms-win-core-sysinfo-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-1-0",
  "api-ms-win-core-synch-l1-2-0",
  "api-ms-win-core-console-l1-1-0",
  "api-ms-win-core-file-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-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-localization-l1-2-0",
  "api-ms-win-core-localization-obsolete-l1-1-0",
  "api-ms-win-core-memory-l1-1-0",
  "api-ms-win-core-memory-l1-1-1",
  "api-ms-win-core-processenvironment-l1-1-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",
  "api-ms-win-core-file-l2-1-1",
  "api-ms-win-core-sysinfo-l1-2-1",
  "api-ms-win-core-processthreads-l1-1-2",
  "api-ms-win-core-fibers-l1-1-0",
  "api-ms-win-core-fibers-l1-1-1",
  "api-ms-win-core-file-l2-1-0",
  "api-ms-win-core-localization-l1-2-1",
  "api-ms-win-core-datetime-l1-1-0",
  "api-ms-win-core-datetime-l1-1-1",
  "api-ms-win-core-xstate-l2-1-0",
  "api-ms-win-core-errorhandling-l1-1-2",
 ],
 [
  "kernel32",
  "user32",
  "api-ms-win-core-libraryloader-l1-1-0",
  "api-ms-win-core-libraryloader-l1-1-1",
 ],
 [
  "kernel32",
  "advapi32",
  "api-ms-win-core-namedpipe-l1-1-0",
  "api-ms-win-core-namedpipe-l1-2-0",
  "api-ms-win-core-processthreads-l1-1-1",
 ],
 [
  "ole32",
  "api-ms-win-downlevel-ole32-l1-1-0",
  "api-ms-win-core-com-l1-1-0",
  "combase",
 ],
 [
  "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-1-0",
  "api-ms-win-core-rtlsupport-l1-2-0",
 ],
 [
  "gdi32",
  "ext-ms-win-gdi-devcaps-l1-1-0",
 ],
 [
  "combase",
  "api-ms-win-core-winrt-l1-1-0",
  "api-ms-win-core-winrt-string-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|ucrtbase)/ ? "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} );
}
