Group
Extension

Dist-Zilla-PluginBundle-Author-TABULO/lib/Zest/Author/TABULO/Util/ShareDir.pm

use strict;
use warnings;

package Zest::Author::TABULO::Util::ShareDir;
our $VERSION = '1.000014';

use Path::Tiny;
use File::ShareDir ();

use Exporter::Shiny qw( dist_file dist_dir);

#region: #== UTILITY FUNCTIONS (EXPORT_OK) ==

sub dist_file {
    my $pkg = shift;
    eval { path( dist_dir($pkg)->child(@_) ) };
}

sub dist_dir {

    # Code adopted from L<File::Share>, which unfortunately does not work when we are in BUILD dir (blib/lib).
    my ($dist) = (@_);
    $dist =~ s![.]pm$!!;   # strip trailing .pm (if any)
    $dist =~ s!(::|/)!-!g; # e.g. ==> Pod-Wordlist-Author-TABULO

    ( my $inc = $dist ) =~ s!(-|::)!/!g; # e.g.        Pod/Wordlist/Author/TABULO
    $inc .= '.pm';                       # e.g.:                    Pod/Wordlist/Author/TABULO.pm'
    my $pth = $INC{$inc} || '';          # e.g.: $BUILD(/blib)?/lib/Pod/Wordlist/Author/TABULO.pm'
    $pth =~ s/$inc$//;                   # e.g.: $BUILD(/blib)?/lib'

    # Handle the case where t looks like we are in a build directory or a in a development repo
    for ( $pth || () ) {

        my $path = path($pth);                               # convert to Path::Tiny object
        $path = $path->parent->realpath;                     # strip trailing /lib
        $path = $path->parent if $path->basename eq "blib";  # In case the module might have been loaded from blib/lib.
         # $path should now refer to $BUILD (or $REPO), hopefully.
        next unless $path;

        # Does it look like we are in a development repo (rather than in an installed location) ?
        my $in_repo;
        foreach (qw/.gitignore Changes META.json Meta.yml README README.md dist.ini/) {
            $path->child($_)->exists and do { $in_repo=1; last };
        }
        next unless $in_repo // 0;

        next unless ($path = $path->child("share"))->is_dir;
        return $path;
    }
    require File::ShareDir;
    return eval { path( File::ShareDir::dist_dir($dist) ) };
}



#endregion (UTILITY FUNCTIONS)

1;

=pod

=encoding UTF-8

=for :stopwords Tabulo[n]

=head1 NAME

Zest::Author::TABULO::Util::ShareDir - DZIL-related utility functions used by TABULO's authoring dist

=head1 VERSION

version 1.000014

=for Pod::Coverage dist_file dist_dir

=head1 AUTHORS

Tabulo[n] <dev@tabulo.net>

=head1 LEGAL

This software is copyright (c) 2023 by Tabulo[n].

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut

__END__

#ABSTRACT: DZIL-related utility functions used by TABULO's authoring dist

## TODO: Actually document some of the below


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.