#! /usr/bin/perl
#
# Generate AUTHORS and dlls/shell32/authors.h
#
open(AUTHORS,"<AUTHORS") or die "Can't open AUTHORS";
open(NEWAUTHORS,">AUTHORS.new");
while(<AUTHORS>)
  {
    print NEWAUTHORS;
    last if /^Wine is/;
  }
while(<AUTHORS>)
  {
    chop;
    s/^and //;
    s/[,.]$//;
    push @authors, $_;
  }

# Sort them
sub cmpnames
  {
    @anames = split(" ",$a);
    @bnames = split(" ",$b);
    $ret = $anames[-1] cmp $bnames[-1];
    $ret = $anames[0] cmp $bnames[0] unless $ret;
    return $ret;
  }
@authors = sort cmpnames @authors;

# Print authors
for ($i = 0; $i < $#authors; $i++)
  {
    print NEWAUTHORS "$authors[$i],\n";
  }
print NEWAUTHORS "and $authors[$#authors].\n";
print "Created AUTHORS.new\n";

# Build authors.h file
open(NEWAUTHORS_H,">dlls/shell32/authors.h");

print NEWAUTHORS_H <<EOF;
#ifndef __WINE_AUTHORS_H
#define __WINE_AUTHORS_H

static const char * const SHELL_People[] =
{
EOF

# Print authors
for ($i = 0; $i <= $#authors; $i++)
  {
    print NEWAUTHORS_H "    \"$authors[$i]\",\n";
  }
print NEWAUTHORS_H "    0\n};\n";
print NEWAUTHORS_H "\n#endif  /* __WINE_AUTHORS_H */\n";

print "Created dlls/shell32/authors.h\n";
