NAME
Sys::Path - provide autoconf-style installation directories
SYNOPSIS
Default paths when Perl's installation prefix is /usr:
use Sys::Path;
print Sys::Path->sysconfdir, "\n";
# /etc
print Sys::Path->datadir, "\n";
# /usr/share
print Sys::Path->logdir, "\n";
# /var/log
print Sys::Path->sharedstatedir, "\n";
# /var/lib
Default paths when Perl's installation prefix is /home/daxim/local:
print Sys::Path->sysconfdir, "\n";
# /home/daxim/local/etc
print Sys::Path->datadir, "\n";
# /home/daxim/local/share
print Sys::Path->logdir, "\n";
# /home/daxim/local/var/log
print Sys::Path->sharedstatedir, "\n";
# /home/daxim/local/var/lib
Default paths when Strawberry Perl's installation prefix is
C:\Strawberry:
print Sys::Path->sysconfdir, "\n";
# C:\Strawberry\etc
print Sys::Path->datadir, "\n";
# C:\Strawberry\share
print Sys::Path->logdir, "\n";
# C:\Strawberry\var\log
print Sys::Path->sharedstatedir, "\n";
# C:\Strawberry\var\lib
DESCRIPTION
Sys::Path provides a common set of installation-directory accessors.
When Perl's installation prefix is /usr, their defaults follow the
Filesystem Hierarchy Standard . Otherwise,
defaults are derived from Perl's own prefix.
"perl Build.PL" prompts for each path. The build writes the selected
values into "Sys::Path::SPc", so installed consumers read the values
configured for this Sys::Path installation.
The module also provides helper methods for distribution builds and
configuration-file installation. Module::Build::SysPath integrates these
methods with Module::Build.
BUILD TIME CONFIGURATION
PERL_MM_USE_DEFAULT=1 perl Build.PL \
--sp-prefix=/usr/local \
--sp-sysconfdir=/usr/local/etc \
--sp-localstatedir=/var/local
Each accessor has a canonical "--sp-" option. The legacy
"--sp-cache", "--sp-log", "--sp-spool", "--sp-run", "--sp-lock", and
"--sp-state" aliases remain available.
STATUS
Sys::Path was published as an experiment in system-path configuration,
build system integration, and path naming. The original documentation
warned that its interfaces might change and directed discussion to
.
WHY?
The Filesystem Hierarchy Standard defines shared directory locations for
Unix distributions, packages, and systems. Sys::Path uses those
locations when Perl's prefix is /usr. For other installations, including
a Perl installed under a home directory or C:\Strawberry, it derives
defaults beneath Perl's prefix. This keeps a non-system Perl
installation self-contained by default.
PATHS
Each entry lists the default for a Perl prefix of /usr, followed by the
default for any other prefix.
prefix
/usr - $Config::Config{'prefix'}
Base path used to derive several other paths. Applications should
normally use the more specific accessors below.
localstatedir
/var - $prefix/var
Base path used for variable data. Applications should normally use the
more specific accessors below.
sysconfdir
/etc - $prefix/etc
Host-specific system configuration. See
.
datadir
/usr/share - $prefix/share
Read-only, architecture-independent data. See
.
docdir
/usr/share/doc - $prefix/share/doc
See "datadir"
localedir
/usr/share/locale - $prefix/share/locale
See "datadir"
cachedir
/var/cache - $localstatedir/cache
Application cache data. See
.
logdir
/var/log - $localstatedir/log
Application log files. See
.
spooldir
/var/spool - $localstatedir/spool
Data awaiting later processing. See
.
rundir
/var/run - $localstatedir/run
Runtime state describing the system since boot. See
.
lockdir
/var/lock - $localstatedir/lock
Lock files. See
.
sharedstatedir
/var/lib - $localstatedir/lib
Modifiable, architecture-independent application state. See
.
srvdir
/srv - $prefix/srv
Data served by the system. See
.
webdir
/var/www - $localstatedir/www
Static web content installed by distributions.
HOW IT WORKS
Default selection starts with Perl's configured prefix:
use Config;
if ($Config::Config{'prefix'} eq '/usr') { ... }
For a prefix of /usr, Sys::Path selects the listed FHS defaults. For any
other prefix, "localstatedir" is var beneath that prefix, and the
remaining defaults are derived from "prefix" or "localstatedir" as shown
above. Sys::Path::SPc implements the accessors; the build replaces its
temporary configuration logic with the selected literal values.
METHODS
prefix
localstatedir
sysconfdir
datadir
docdir
localedir
cachedir
logdir
spooldir
rundir
lockdir
sharedstatedir
webdir
srvdir
BUILD AND INSTALLATION HELPERS
find_distribution_root(__PACKAGE__)
Load the named module if necessary, then search its parent directories
for MANIFEST, Build.PL, or Makefile.PL. If the module cannot be loaded,
start at the current working directory. Return the first matching
directory; throw an exception if no distribution root is found.
The current-working-directory fallback applies only when the named
module is not installed. Errors raised while compiling or initializing
an installed module are propagated.
$module_name is required. Loading a module can execute its compile-time
code.
prompt_cfg_file_changed($src_file, $dst_file, $prompt_function)
Ask whether $src_file should replace the modified $dst_file. The
callback receives the prompt text and the default answer, "N". Return
true for "Y" or "I", and false for "N" or "O".
"D" prints a unified diff and prompts again. "Z" starts the user's login
shell and prompts again after the shell exits. These options write
directly to standard output.
changed_since_install($dest_file, $file)
Return true when the MD5 checksum of $file differs from the checksum
recorded for $dest_file. $file defaults to $dest_file. A destination
without a recorded checksum is considered changed.
The method reads the entire comparison file and propagates read and
decode errors from its dependencies.
install_checksums(%filenames_with_checksums)
Return the filename/checksum pairs stored in
sharedstatedir/syspath/install-checksums.json. With arguments, merge the
supplied pairs into the registry and return the resulting pairs.
The parent directory must already exist. Reading a missing registry
creates an empty JSON file and therefore requires write permission.
Access is serialized through a persistent lock file, and "IO::Any"
replaces the registry through its atomic-output mode. The lock
coordinates cooperating callers; lock and replacement failures from the
host platform are propagated.
SEE ALSO
Module::Build::SysPath
AUTHOR
Jozef Kutej, ""
CONTRIBUTORS
The following people contributed code, patches, bug reports, questions,
and suggestions (in no particular order):
Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯
Emmanuel Rodriguez
Salve J. Nilsen
Daniel Perrett
Jose Luis Perez Diez
Petr Písař
Mohammad S Anwar
COPYRIGHT & LICENSE
Copyright 2009 Jozef Kutej, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.