# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: Title = #: documentation/content/en/books/porters-handbook/plist/_index.adoc:1 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:14 #, no-wrap msgid "Advanced pkg-plist Practices" msgstr "" #. type: YAML Front Matter: title #: documentation/content/en/books/porters-handbook/plist/_index.adoc:1 #, no-wrap msgid "Chapter 8. Advanced pkg-plist Practices" msgstr "" #. type: Title == #: documentation/content/en/books/porters-handbook/plist/_index.adoc:52 #, no-wrap msgid "Changing pkg-plist Based on Make Variables" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:59 msgid "" "Some ports, particularly the `p5-` ports, need to change their " "[.filename]#pkg-plist# depending on what options they are configured with " "(or version of `perl`, in the case of `p5-` ports). To make this easy, any " "instances in [.filename]#pkg-plist# of `%%OSREL%%`, `%%PERL_VER%%`, and `%" "%PERL_VERSION%%` will be substituted appropriately. The value of `%%OSREL%" "%` is the numeric revision of the operating system (for example, `4.9`). `%" "%PERL_VERSION%%` and `%%PERL_VER%%` is the full version number of `perl` " "(for example, `5.8.9`). Several other `%%_VARS_%%` related to port's " "documentation files are described in crossref:makefiles[install-" "documentation,the relevant section]." msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:61 msgid "" "To make other substitutions, set `PLIST_SUB` with a list of `_VAR=VALUE_` " "pairs and instances of `%%_VAR_%%` will be substituted with _VALUE_ in " "[.filename]#pkg-plist#." msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:64 msgid "" "For instance, if a port installs many files in a version-specific " "subdirectory, use a placeholder for the version so that [.filename]#pkg-" "plist# does not have to be regenerated every time the port is updated. For " "example, set:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:69 #, no-wrap msgid "" "OCTAVE_VERSION=\t${PORTREVISION}\n" "PLIST_SUB=\tOCTAVE_VERSION=${OCTAVE_VERSION}\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:73 msgid "" "in the [.filename]#Makefile# and use `%%OCTAVE_VERSION%%` wherever the " "version shows up in [.filename]#pkg-plist#. When the port is upgraded, it " "will not be necessary to edit dozens (or in some cases, hundreds) of lines " "in [.filename]#pkg-plist#." msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:76 msgid "" "If files are installed conditionally on the options set in the port, the " "usual way of handling it is prefixing [.filename]#pkg-plist# lines with a `%" "%OPT%%` for lines needed when the option is enabled, or `%%NO_OPT%%` when " "the option is disabled, and adding `OPTIONS_SUB=yes` to the " "[.filename]#Makefile#. See crossref:makefiles[options_sub,`OPTIONS_SUB`] " "for more information." msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:78 msgid "" "For instance, if there are files that are only installed when the `X11` " "option is enabled, and [.filename]#Makefile# has:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:83 #, no-wrap msgid "" "OPTIONS_DEFINE=\tX11\n" "OPTIONS_SUB=\tyes\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:86 msgid "" "In [.filename]#pkg-plist#, put `%%X11%%` in front of the lines only being " "installed when the option is enabled, like this :" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:90 #, no-wrap msgid "%%X11%%bin/foo-gui\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:95 msgid "" "This substitution will be done between the `pre-install` and `do-install` " "targets, by reading from [.filename]#PLIST# and writing to " "[.filename]#TMPPLIST# (default: [.filename]#WRKDIR/.PLIST.mktmp#). So if " "the port builds [.filename]#PLIST# on the fly, do so in or before `pre-" "install`. Also, if the port needs to edit the resulting file, do so in " "`post-install` to a file named [.filename]#TMPPLIST#." msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:101 msgid "" "Another way of modifying a port's packing list is based on setting the " "variables `PLIST_FILES` and `PLIST_DIRS`. The value of each variable is " "regarded as a list of pathnames to write to [.filename]#TMPPLIST# along with " "[.filename]#PLIST# contents. While names listed in `PLIST_FILES` and " "`PLIST_DIRS` are subject to `%%_VAR_%%` substitution as described above, it " "is better to use the `${_VAR_}` directly. Except for that, names from " "`PLIST_FILES` will appear in the final packing list unchanged, while `@dir` " "will be prepended to names from `PLIST_DIRS`. To take effect, `PLIST_FILES` " "and `PLIST_DIRS` must be set before [.filename]#TMPPLIST# is written, that " "is, in `pre-install` or earlier." msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:105 msgid "" "From time to time, using `OPTIONS_SUB` is not enough. In those cases, " "adding a specific `_TAG_` to `PLIST_SUB` inside the [.filename]#Makefile# " "with a special value of `@comment`, makes package tools to ignore the line. " "For instance, if some files are only installed when the `X11` option is on " "and the architecture is `i386`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:109 #, no-wrap msgid ".include \n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:115 #, no-wrap msgid "" ".if ${PORT_OPTIONS:MX11} && ${ARCH} == \"i386\"\n" "PLIST_SUB+=\tX11I386=\"\"\n" ".else\n" "PLIST_SUB+=\tX11I386=\"@comment \"\n" ".endif\n" msgstr "" #. type: Title == #: documentation/content/en/books/porters-handbook/plist/_index.adoc:118 #, no-wrap msgid "Empty Directories" msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:121 #, no-wrap msgid "Cleaning Up Empty Directories" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:127 msgid "" "When being de-installed, a port has to remove empty directories it created. " "Most of these directories are removed automatically by man:pkg[8], but for " "directories created outside of [.filename]#${PREFIX}#, or empty directories, " "some more work needs to be done. This is usually accomplished by adding " "`@dir` lines for those directories. Subdirectories must be deleted before " "deleting parent directories." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:133 #, no-wrap msgid "" "[...]\n" "@dir /var/games/oneko/saved-games\n" "@dir /var/games/oneko\n" msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:136 #, no-wrap msgid "Creating Empty Directories" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:141 msgid "" "Empty directories created during port installation need special attention. " "They must be present when the package is created. If they are not created " "by the port code, create them in the [.filename]#Makefile#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:146 #, no-wrap msgid "" "post-install:\n" "\t${MKDIR} ${STAGEDIR}${PREFIX}/some/directory\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:150 msgid "" "Add the directory to [.filename]#pkg-plist# like any other. For example:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:154 #, no-wrap msgid "@dir some/directory\n" msgstr "" #. type: Title == #: documentation/content/en/books/porters-handbook/plist/_index.adoc:157 #, no-wrap msgid "Configuration Files" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:161 msgid "" "If the port installs configuration files to [.filename]#PREFIX/etc# (or " "elsewhere) do _not_ list them in [.filename]#pkg-plist#. That will cause " "`pkg delete` to remove files that have been carefully edited by the user, " "and a re-installation will wipe them out." msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:165 msgid "" "Instead, install sample files with a [.filename]#filename.sample# " "extension. The `@sample` macro automates this, see crossref:plist[plist-" "keywords-sample, Expanding Package List with Keywords] for what it does " "exactly. For each sample file, add a line to [.filename]#pkg-plist#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:169 #, no-wrap msgid "@sample etc/orbit.conf.sample\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:173 msgid "" "If there is a very good reason not to install a working configuration file " "by default, only list the sample filename in [.filename]#pkg-plist#, without " "the `@sample` followed by a space part, and add a crossref:pkg-files[porting-" "message,message] pointing out that the user must copy and edit the file " "before the software will work." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:178 msgid "" "When a port installs its configuration in a subdirectory of [.filename]#$" "{PREFIX}/etc#, use `ETCDIR`, which defaults to `${PREFIX}/etc/${PORTNAME}`, " "it can be overridden in the ports [.filename]#Makefile# if there is a " "convention for the port to use some other directory. The `%%ETCDIR%%` macro " "will be used in its stead in [.filename]#pkg-plist#." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:184 msgid "" "The sample configuration files should always have the [.filename]#.sample# " "suffix. If for some historical reason using the standard suffix is not " "possible, or if the sample files come from some other directory, use this " "construct:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:188 #, no-wrap msgid "@sample etc/orbit.conf-dist etc/orbit.conf\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:191 msgid "or" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:195 #, no-wrap msgid "@sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:198 msgid "The format is `@sample _sample-file actual-config-file_`." msgstr "" #. type: Title == #: documentation/content/en/books/porters-handbook/plist/_index.adoc:201 #, no-wrap msgid "Dynamic Versus Static Package List" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:205 msgid "" "A _static package list_ is a package list which is available in the Ports " "Collection either as [.filename]#pkg-plist# (with or without variable " "substitution), or embedded into the [.filename]#Makefile# via `PLIST_FILES` " "and `PLIST_DIRS`. Even if the contents are auto-generated by a tool or a " "target in the Makefile _before_ the inclusion into the Ports Collection by a " "committer (for example, using `make makeplist`), this is still considered a " "static list, since it is possible to examine it without having to download " "or compile the distfile." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:208 msgid "" "A _dynamic package list_ is a package list which is generated at the time " "the port is compiled based upon the files and directories which are " "installed. It is not possible to examine it before the source code of the " "ported application is downloaded and compiled, or after running a `make " "clean`." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:212 msgid "" "While the use of dynamic package lists is not forbidden, maintainers should " "use static package lists wherever possible, as it enables users to " "man:grep[1] through available ports to discover, for example, which port " "installs a certain file. Dynamic lists should be primarily used for complex " "ports where the package list changes drastically based upon optional " "features of the port (and thus maintaining a static package list is " "infeasible), or ports which change the package list based upon the version " "of dependent software used. For example, ports which generate docs with " "Javadoc." msgstr "" #. type: Title == #: documentation/content/en/books/porters-handbook/plist/_index.adoc:214 #, no-wrap msgid "Automated Package List Creation" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:219 msgid "" "First, make sure the port is almost complete, with only [.filename]#pkg-" "plist# missing. Running `make makeplist` will show an example for " "[.filename]#pkg-plist#. The output of `makeplist` must be double checked " "for correctness as it tries to automatically guess a few things, and can get " "it wrong." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:224 msgid "" "User configuration files should be installed as " "[.filename]#filename.sample#, as it is described in crossref:plist[plist-" "config, Configuration Files]. [.filename]#info/dir# must not be listed and " "appropriate [.filename]#install-info# lines must be added as noted in the " "crossref:makefiles[makefile-info,info files] section. Any libraries " "installed by the port must be listed as specified in the " "crossref:special[porting-shlibs,shared libraries] section." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:226 #, no-wrap msgid "Expanding `PLIST_SUB` with Regular Expressions" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:230 msgid "" "Strings to be replaced sometimes need to be very specific to avoid undesired " "replacements. This is a common problem with shorter values." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:232 msgid "" "To address this problem, for each `_PLACEHOLDER_=_value_`, a " "`PLACEHOLDER_regex=regex` can be set, with the `_regex_` part matching " "_value_ more precisely." msgstr "" #. type: Block title #: documentation/content/en/books/porters-handbook/plist/_index.adoc:234 #, no-wrap msgid "Using PLIST_SUB with Regular Expressions" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:242 msgid "" "Perl ports can install architecture dependent files in a specific tree. On " "FreeBSD to ease porting, this tree is called `mach`. For example, a port " "that installs a file whose path contains `mach` could have that part of the " "path string replaced with the wrong values. Consider this " "[.filename]#Makefile#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:250 #, no-wrap msgid "" "PORTNAME=\tMachine-Build\n" "DISTVERSION=\t1\n" "CATEGORIES=\tdevel perl5\n" "MASTER_SITES=\tCPAN\n" "PKGNAMEPREFIX=\tp5-\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:254 #, no-wrap msgid "" "MAINTAINER=\tperl@FreeBSD.org\n" "COMMENT=\tBuilding machine\n" "WWW=\t\thttps://search.cpan.org/dist/Machine-Build\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:257 #, no-wrap msgid "" "USES=\t\tperl5\n" "USE_PERL5=\tconfigure\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:259 #, no-wrap msgid "PLIST_SUB=\tPERL_ARCH=mach\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:262 msgid "The files installed by the port are:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:270 #, no-wrap msgid "" "/usr/local/bin/machine-build\n" "/usr/local/lib/perl5/site_perl/man/man1/machine-build.1.gz\n" "/usr/local/lib/perl5/site_perl/man/man3/Machine::Build.3.gz\n" "/usr/local/lib/perl5/site_perl/Machine/Build.pm\n" "/usr/local/lib/perl5/site_perl/mach/5.20/Machine/Build/Build.so\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:273 msgid "Running `make makeplist` wrongly generates:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:281 #, no-wrap msgid "" "bin/%%PERL_ARCH%%ine-build\n" "%%PERL5_MAN1%%/%%PERL_ARCH%%ine-build.1.gz\n" "%%PERL5_MAN3%%/Machine::Build.3.gz\n" "%%SITE_PERL%%/Machine/Build.pm\n" "%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:284 msgid "Change the `PLIST_SUB` line from the [.filename]#Makefile# to:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:289 #, no-wrap msgid "" "PLIST_SUB=\tPERL_ARCH=mach \\\n" "\t\tPERL_ARCH_regex=\\bmach\\b\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:292 msgid "Now `make makeplist` correctly generates:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:300 #, no-wrap msgid "" "bin/machine-build\n" "%%PERL5_MAN1%%/machine-build.1.gz\n" "%%PERL5_MAN3%%/Machine::Build.3.gz\n" "%%SITE_PERL%%/Machine/Build.pm\n" "%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n" msgstr "" #. type: Title == #: documentation/content/en/books/porters-handbook/plist/_index.adoc:305 #, no-wrap msgid "Expanding Package List with Keywords" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:311 msgid "" "All keywords can also take optional arguments in parentheses. The arguments " "are owner, group, and mode. This argument is used on the file or directory " "referenced. To change the owner, group, and mode of a configuration file, " "use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:315 #, no-wrap msgid "@sample(games,games,640) etc/config.sample\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:319 msgid "" "The arguments are optional. If only the group and mode need to be changed, " "use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:323 #, no-wrap msgid "@sample(,games,660) etc/config.sample\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:329 msgid "" "If a keyword is used on an crossref:makefiles[makefile-options,optional] " "entry, it must to be added after the helper:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:333 #, no-wrap msgid "%%FOO%%@sample etc/orbit.conf.sample\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:337 msgid "" "This is because the options plist helpers are used to comment out the line, " "so they need to be put first. See " "crossref:makefiles[options_sub,`OPTIONS_SUB`] for more information." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:340 #, no-wrap msgid "`@desktop-file-utils`" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:344 msgid "" "Will run `update-desktop-database -q` after installation and " "deinstallation. _Never_ use directly, add crossref:uses[uses-desktop-file-" "utils,`USES=desktop-file-utils`] to the [.filename]#Makefile#." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:346 #, no-wrap msgid "`@fc` _directory_" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:349 msgid "" "Add a `@dir` entry for the directory passed as an argument, and run `fc-" "cache -fs` on that directory after installation and deinstallation." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:351 #, no-wrap msgid "`@fontsdir` _directory_" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:355 msgid "" "Add a `@dir` entry for the directory passed as an argument, and run " "`mkfontscale` and `mkfontdir` on that directory after installation and " "deinstallation. Additionally, on deinstallation, it removes the " "[.filename]#fonts.scale# and [.filename]#fonts.dir# cache files if they are " "empty." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:357 #, no-wrap msgid "`@info` _file_" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:363 msgid "" "Add the file passed as argument to the plist, and updates the info document " "index on installation and deinstallation. Additionally, it removes the " "index if empty on deinstallation. This should never be used manually, but " "always through `INFO`. See crossref:makefiles[makefile-info,Info Files] for " "more information." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:365 #, no-wrap msgid "`@kld` _directory_" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:369 msgid "" "Runs `kldxref` on the directory on installation and deinstallation. " "Additionally, on deinstallation, it will remove the directory if empty." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:371 #, no-wrap msgid "`@rmtry` _file_" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:374 msgid "" "Will remove the file on deinstallation, and not give an error if the file is " "not there." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:376 #, no-wrap msgid "`@sample` _file_ [_file_]" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:380 msgid "" "This is used to handle installation of configuration files, through example " "files bundled with the package. The \"actual\", non-sample, file is either " "the second filename, if present, or the first filename without the " "[.filename]#.sample# extension." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:385 msgid "" "This does three things. First, add the first file passed as argument, the " "sample file, to the plist. Then, on installation, if the actual file is not " "found, copy the sample file to the actual file. And finally, on " "deinstallation, remove the actual file if it has not been modified. See " "crossref:plist[plist-config, Configuration Files] for more information." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:387 #, no-wrap msgid "`@shared-mime-info` _directory_" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:390 msgid "" "Runs `update-mime-database` on the directory on installation and " "deinstallation." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:392 #, no-wrap msgid "`@shell` _file_" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:395 msgid "Add the file passed as argument to the plist." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:398 msgid "" "On installation, add the full path to _file_ to [.filename]#/etc/shells#, " "while making sure it is not added twice. On deinstallation, remove it from " "[.filename]#/etc/shells#." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:400 #, no-wrap msgid "`@terminfo`" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:404 msgid "" "Do not use by itself. If the port installs [.filename]#*.terminfo# files, " "add crossref:uses[uses-terminfo,`USES=terminfo`] to its " "[.filename]#Makefile#." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:406 msgid "" "On installation and deinstallation, if `tic` is present, refresh " "[.filename]#${PREFIX}/shared/misc/terminfo.db# from the " "[.filename]#*.terminfo# files in [.filename]#${PREFIX}/shared/misc#." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:408 #, no-wrap msgid "Base Keywords" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:411 msgid "" "There are a few keywords that are hardcoded, and documented in man:pkg-" "create[8]. For the sake of completeness, they are also documented here." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:413 #, no-wrap msgid "`@` [_file_]" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:417 msgid "" "The empty keyword is a placeholder to use when the file's owner, group, or " "mode need to be changed. For example, to set the group of the file to " "`games` and add the setgid bit, add:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:421 #, no-wrap msgid "@(,games,2755) sbin/daemon\n" msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:424 #, no-wrap msgid "`@preexec` _command_, `@postexec` _command_, `@preunexec` _command_, `@postunexec` _command_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:427 msgid "" "Execute _command_ as part of the package installation or deinstallation " "process." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:428 #, no-wrap msgid "`@preexec` _command_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:430 msgid "Execute _command_ as part of the [.filename]#pre-install# scripts." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:431 #, no-wrap msgid "`@postexec` _command_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:433 msgid "Execute _command_ as part of the [.filename]#post-install# scripts." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:434 #, no-wrap msgid "`@preunexec` _command_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:436 msgid "Execute _command_ as part of the [.filename]#pre-deinstall# scripts." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:437 #, no-wrap msgid "`@postunexec` _command_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:439 msgid "Execute _command_ as part of the [.filename]#post-deinstall# scripts." msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:442 msgid "" "If _command_ contains any of these sequences somewhere in it, they are " "expanded inline. For these examples, assume that `@cwd` is set to " "[.filename]#/usr/local# and the last extracted file was [.filename]#bin/" "emacs#." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:443 #, no-wrap msgid "`%F`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:446 msgid "" "Expand to the last filename extracted (as specified). In the example case " "[.filename]#bin/emacs#." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:447 #, no-wrap msgid "`%D`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:450 msgid "" "Expand to the current directory prefix, as set with `@cwd`. In the example " "case [.filename]#/usr/local#." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:451 #, no-wrap msgid "`%B`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:454 msgid "" "Expand to the basename of the fully qualified filename, that is, the current " "directory prefix plus the last filespec, minus the trailing filename. In " "the example case, that would be [.filename]#/usr/local/bin#." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:455 #, no-wrap msgid "`%f`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:458 msgid "" "Expand to the filename part of the fully qualified name, or the converse of " "`%B`. In the example case, [.filename]#emacs#." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:463 msgid "" "These keywords are here to help you set up the package so that it is as " "ready to use as possible. They _must not_ be abused to start services, stop " "services, or run any other commands that will modify the currently running " "system." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:466 #, no-wrap msgid "`@mode` _mode_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:471 msgid "" "Set default permission for all subsequently extracted files to _mode_. " "Format is the same as that used by man:chmod[1]. Use without an arg to set " "back to default permissions (mode of the file while being packed)." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:476 msgid "" "This must be a numeric mode, like `644`, `4755`, or `600`. It cannot be a " "relative mode like `u+s`." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:479 #, no-wrap msgid "`@owner` _user_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:483 msgid "" "Set default ownership for all subsequent files to _user_. Use without an " "argument to set back to default ownership (`root`)." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:485 #, no-wrap msgid "`@group` _group_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:489 msgid "" "Set default group ownership for all subsequent files to _group_. Use " "without an arg to set back to default group ownership (`wheel`)." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:491 #, no-wrap msgid "`@comment` _string_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:494 msgid "This line is ignored when packing." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:496 #, no-wrap msgid "`@dir` _directory_" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:502 msgid "" "Declare directory name. By default, directories created under `PREFIX` by a " "package installation are automatically removed. Use this when an empty " "directory under `PREFIX` needs to be created, or when the directory needs to " "have non default owner, group, or mode. Directories outside of `PREFIX` " "need to be registered. For example, [.filename]#/var/db/${PORTNAME}# needs " "to have a `@dir` entry whereas [.filename]#${PREFIX}/shared/${PORTNAME}# " "does not if it contains files or uses the default owner, group, and mode." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:504 #, no-wrap msgid "`@exec` _command_, `@unexec` _command_ (Deprecated)" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:508 msgid "" "Execute _command_ as part of the installation or deinstallation process. " "Please use crossref:plist[plist-keywords-base-exec, `@preexec` _command_, " "`@postexec` _command_, `@preunexec` _command_, `@postunexec` _command_] " "instead." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:510 #, no-wrap msgid "`@dirrm` _directory_ (Deprecated)" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:514 msgid "" "Declare directory name to be deleted at deinstall time. By default, " "directories created under `PREFIX` by a package installation are deleted " "when the package is deinstalled." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:516 #, no-wrap msgid "`@dirrmtry` _directory_ (Deprecated)" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:519 msgid "" "Declare directory name to be removed, as for `@dirrm`, but does not issue a " "warning if the directory cannot be removed." msgstr "" #. type: Title === #: documentation/content/en/books/porters-handbook/plist/_index.adoc:521 #, no-wrap msgid "Creating New Keywords" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:526 msgid "" "Package list files can be extended by keywords that are defined in the " "[.filename]#${PORTSDIR}/Keywords# directory. The settings for each keyword " "are stored in a UCL file named [.filename]#keyword.ucl#. The file must " "contain at least one of these sections:" msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:528 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:537 #, no-wrap msgid "`attributes`" msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:529 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:550 #, no-wrap msgid "`action`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:530 msgid "`pre-install`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:531 msgid "`post-install`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:532 msgid "`pre-deinstall`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:533 msgid "`post-deinstall`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:534 msgid "`pre-upgrade`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:535 msgid "`post-upgrade`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:543 msgid "" "Changes the owner, group, or mode used by the keyword. Contains an " "associative array where the possible keys are `owner`, `group`, and `mode`. " "The values are, respectively, a user name, a group name, and a file mode. " "For example:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:547 #, no-wrap msgid "attributes: { owner: \"games\", group: \"games\", mode: 0555 }\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:553 msgid "" "Defines what happens to the keyword's parameter. Contains an array where the " "possible values are:" msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:554 #, no-wrap msgid "`setprefix`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:556 msgid "Set the prefix for the next plist entries." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:557 #, no-wrap msgid "`dir`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:559 msgid "Register a directory to be created on install and removed on deinstall." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:560 #, no-wrap msgid "`dirrm`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:563 msgid "Register a directory to be deleted on deinstall. Deprecated." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:564 #, no-wrap msgid "`dirrmtry`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:567 msgid "Register a directory to try and deleted on deinstall. Deprecated." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:568 #, no-wrap msgid "`file`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:570 msgid "Register a file." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:571 #, no-wrap msgid "`setmode`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:573 msgid "Set the mode for the next plist entries." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:574 #, no-wrap msgid "`setowner`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:576 msgid "Set the owner for the next plist entries." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:577 #, no-wrap msgid "`setgroup`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:579 msgid "Set the group for the next plist entries." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:580 #, no-wrap msgid "`comment`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:582 msgid "Does not do anything, equivalent to not entering an `action` section." msgstr "" #. type: Labeled list #: documentation/content/en/books/porters-handbook/plist/_index.adoc:583 #, no-wrap msgid "`ignore_next`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:585 msgid "Ignore the next entry in the plist." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:587 #, no-wrap msgid "`arguments`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:591 msgid "" "If set to `true`, adds argument handling, splitting the whole line, `%@`, " "into numbered arguments, `%1`, `%2`, and so on. For example, for this line:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:595 #, no-wrap msgid "@foo some.content other.content\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:598 msgid "`%1` and `%2` will contain:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:603 #, no-wrap msgid "" "some.content\n" "other.content\n" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:608 msgid "" "It also affects how the crossref:plist[plist-keywords-action,`action`] entry " "works. When there is more than one argument, the argument number must be " "specified. For example:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:612 #, no-wrap msgid "actions: [file(1)]\n" msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:615 #, no-wrap msgid "`pre-install`, `post-install`, `pre-deinstall`, `post-deinstall`, `pre-upgrade`, `post-upgrade`" msgstr "" #. type: Plain text #: documentation/content/en/books/porters-handbook/plist/_index.adoc:620 msgid "" "These keywords contains a man:sh[1] script to be executed before or after " "installation, deinstallation, or upgrade of the package. In addition to the " "usual `@exec %_foo_` placeholders described in crossref:plist[plist-keywords-" "base-exec, `@preexec` _command_, `@postexec` _command_, `@preunexec` " "_command_, `@postunexec` _command_], there is a new one, `%@`, which " "represents the argument of the keyword." msgstr "" #. type: Title ==== #: documentation/content/en/books/porters-handbook/plist/_index.adoc:622 #, no-wrap msgid "Custom Keyword Examples" msgstr "" #. type: Block title #: documentation/content/en/books/porters-handbook/plist/_index.adoc:625 #, no-wrap msgid "Example of a `@dirrmtryecho` Keyword" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:630 msgid "" "This keyword does two things, it adds a `@dirrmtry _directory_` line to the " "packing list, and echoes the fact that the directory is removed when " "deinstalling the package." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/plist/_index.adoc:637 #, no-wrap msgid "" "actions: [dirrmtry]\n" "post-deinstall: <