App-mkpkgconfig

 view release on metacpan or  search on metacpan

script/mkpkgconfig  view on Meta::CPAN

use File::Basename;
use File::Spec::Functions;
use Carp;

our $VERSION = 'v2.0.1';

use constant {
    ALL_VARS       => 1,
    REQUESTED_VARS => 2,
    NEEDED_VARS    => 3,
};

our %VarsAuto = (
    exec_prefix => '${prefix}',

    bindir  => '${exec_prefix}/bin',
    sbindir => '${exec_prefix}/sbin',

    libdir     => '${exec_prefix}/lib',
    pkg_libdir => '${libdir}/${package}',

    libexecdir     => '${exec_prefix}/libexec',
    pkg_libexecdir => '${libexecdir}/${package}',

    datarootdir => '${prefix}/share',

    datadir     => '${datarootdir}',
    pkg_datadir => '${datadir}/${package}',

    sysconfdir     => '${prefix}/etc',
    pkg_sysconfdir => '${sysconfdir}/${package}',

    localstatedir     => '${prefix}/var',
    pkg_localstatedir => '${localstatedir}/${package}',

    includedir     => '${prefix}/include',
    pkg_includedir => '${includedir}/${package}',

    docdir  => '${datarootdir}/doc/${package}',
    infodir => '${datarootdir}/info',
    mandir  => '${datarootdir}/man',
);

my %KeywordOptions = (
    Name               => { required => 1 },
    Description        => { required => 1 },
    Requires           => { required => 0 },
    Libs               => { required => 0 },
    Conflicts          => { required => 0 },
    Cflags             => { required => 0 },
    URL                => { required => 0 },
);




main( @ARGV ) unless caller;

sub main {

    local @ARGV = @_;

    # save original options for output;
    my @sARGV = @ARGV;
    my $opt   = parse_opts();

    require App::mkpkgconfig::PkgConfig;

    my $conf = App::mkpkgconfig::PkgConfig->new;

    # add standard variables
    $conf->add_variable( prefix  => $opt->prefix )  if defined $opt->prefix;
    $conf->add_variable( package => $opt->package ) if defined $opt->package;
    $conf->add_variable( version => $opt->modversion );

    # add auto generated variables
    $conf->add_variables( \%VarsAuto )
      if defined $opt->auto;

    # override from user
    $conf->add_variables( $opt->var );

    # add standard keywords
    $conf->add_keyword( Name        => $opt->name );
    $conf->add_keyword( Description => $opt->description );
    $conf->add_keyword( Version     => '${version}' );
    for my $kwd ( qw(  Requires Libs Conflicts Cflags ) ) {
        my $mth = lc $kwd;
        $conf->add_keyword( $kwd => $opt->$mth )
          if defined $opt->$mth;
    }

    # override from user
    $conf->add_keywords( $opt->kwd );

    #<<< no tidy
    my @vars_needed =
      # output all variables, used or not
        $opt->usevars == ALL_VARS       ? $conf->variables
      # output only requested  + keyword dependencies
      : $opt->usevars == REQUESTED_VARS ? ( keys %{ $opt->var } , @{ $opt->auto // [] } )
      # only variables actually used by keywords
      : $opt->usevars == NEEDED_VARS    ? ()
      :                                   die( "unknown filter for variables: ", $opt->usevars, "\n" );
    #>>>

    $conf->write(
        $opt->output,
        write    => ( $opt->usevars == ALL_VARS ? 'all' : 'req' ),
        vars     => \@vars_needed,
        comments => [
            "This file was created by $0 ($VERSION) via",
            join( ' ', $0, @sARGV ) ] );
}


sub parse_opts {

    my %Map_usevars = (
        'all'       => ALL_VARS,
        'requested' => REQUESTED_VARS,

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 6.108 seconds using v1.00-cache-2.02-grep-82fe00e-cpan-c30982ac1bc3 )