#! perl
################################################################################
# Copyright (C) 2001-2009, Parrot Foundation.
# $Id: install_doc_files.pl 43406 2010-01-07 17:04:44Z fperrad $
################################################################################

=head1 TITLE

tools/dev/install_doc_files.pl - Copy documentation files to their correct locations

=head1 SYNOPSIS

    % perl tools/dev/install_doc_files.pl [options]

=head1 DESCRIPTION

Use a detailed MANIFEST to install a set of documentation files.

=head2 Options

=over 4

=item C<buildprefix>

The build prefix. Defaults to ''.

=item C<prefix>

The install prefix. Defaults to '/usr'.

=item C<exec_prefix>

The exec prefix. Defaults to '/usr'.

=item C<bindir>

The executables directory. Defaults to '/usr/bin'.

=item C<libdir>

The library directory. Defaults to '/usr/lib'.

=item C<includedir>

The header directory. Defaults to '/usr/include'.

=back

=head1 SEE ALSO

See F<lib/Parrot/Manifest.pm> for a detailed description of the MANIFEST
format.

=cut

################################################################################

use strict;
use warnings;
use File::Basename qw(basename);
use lib qw( lib );
use Parrot::Install qw(
    install_files
    create_directories
    lines_to_files
);

# When run from the makefile, which is probably the only time this
# script will ever be used, all of these defaults will get overridden.
my %options = (
    buildprefix => '',
    prefix      => '/usr',
    destdir     => '',
    exec_prefix => '/usr',
    bindir      => '/usr/bin',
    libdir      => '/usr/lib',       # parrot/ subdir added below
    includedir  => '/usr/include',   # parrot/ subdir added below
    docdir      => '/usr/share/doc', # parrot/ subdir added below
    datadir     => '/usr/share/',    # parrot/ subdir added below
    srcdir      => '/usr/src/',      # parrot/ subdir added below
    versiondir  => '',
    'dry-run'   => 0,
    packages    => 'doc|examples',
);

my @manifests;
foreach (@ARGV) {
    if (/^--([^=]+)=(.*)/) {
        $options{$1} = $2;
    }
    else {
        push @manifests, $_;
    }
}

my $parrotdir = $options{versiondir};

# Set up transforms on filenames
my(@transformorder) = (qw(doc examples));
my(%metatransforms) = (
    doc => {
        optiondir => 'doc',
        transform => sub {
            my($filehash) = @_;
            $filehash->{Dest} =~ s#^docs/resources#resources#; # resources go in the top level of docs
            $filehash->{Dest} =~ s/^docs/pod/; # other docs are actually raw Pod
            $filehash->{DestDirs} = [$parrotdir];
            return($filehash);
        },
    },
    examples => {
        optiondir => 'doc',
        transform => sub {
            my($filehash) = @_;
            $filehash->{DestDirs} = [$parrotdir];
            return($filehash);
        },
    },
);

my($filehashes, $directories) = lines_to_files(
    \%metatransforms, \@transformorder, \@manifests, \%options, $parrotdir
);

unless ( $options{'dry-run'} ) {
    create_directories($options{destdir}, $directories);
}
install_files($options{destdir}, $options{'dry-run'}, $filehashes);

print "Finished install_doc_files.pl\n";

# Local Variables:
#   mode: cperl
#   cperl-indent-level: 4
#   fill-column: 100
# End:
# vim: expandtab shiftwidth=4:
