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.