#! /usr/bin/perl
#
# Generate AUTHORS and dlls/shell32/authors.h
#
# Copyright 1998 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

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";
