A MacPorts Portfile is a Tcl script, so it may contain any arbitrary Tcl code you may learn about in the Tcl documentation. However, few authors will use arbitrary Tcl code; the vast majority will use a subset of Tcl commands and a number of Tcl extensions that are coded within MacPorts for performing the most common tasks needed for Portfiles. The list below is a list of useful Tcl commands for Portfile development and Tcl extensions provided by MacPorts base.
The standard Tcl file command can be used for
a number of operations on files, such as moving, renaming, deleting,
or creating directories, among others. For a complete list, consult
the Tcl
reference manual for the file command,
or the Tcl file manpage in the n
section of manpages
on your machine using man n file
For the above operations provided by Tcl's file command, MacPorts provides the following shorthands. These should be used in preference to the Tcl commands above, as they may work around certain bugs.
xinstall copies files and creates directories; it is intended to be compatible with install(1).
Defaults:
owner -
group -
mode - 0755
Examples:
xinstall -m 640 ${worksrcpath}/README \ ${destroot}${prefix}/share/doc/${name}
xinstall -m 640 -W ${worksrcpath}/doc README INSTALL COPY \ ${destroot}${prefix}/share/doc/${name}
xinstall -m 640 {*}[glob ${worksrcpath}/doc/*] \ ${destroot}${prefix}/share/doc/${name}
xinstall -d ${destroot}${prefix}/share/doc/${name}
strsed can be used for string manipulations using regular expressions. It supports a small subset of the commands known from sed(1).
string
s/regex
/replacement
/
Replaces the first instance of
regex
with
replacement
. Refer to
re_format(7) for a definition of regular expression
syntax.
string
g/regex
/replacement
/
The same as the previous format, except all instances of the pattern will be replaced, not only the first (mnemonic: 'g' is for global).
Allows text specified by a regular expression to be replaced by new text, in-place (the file will be updated itself, no need to place output into a new file and rename).
locale
]
[-n]
[-W dir
]
[--] command
file
[file2 ...
]
Replace text given by the regular expression portion of the command with the replacement text, in all files specified.
Use -locale to set the locale. The default locale is en_US.UTF-8
.
For example, -locale C
will allow a non-UTF-8 file to be modified (which
may otherwise give the error "sed: RE error: illegal byte sequence"), but only operating
on ASCII characters. If you need it to work on non-ASCII characters you need to set a
locale with the correct charset for the file, e.g. "en_US.ISO8859-1".
-n is passed to sed to suppress echoing result
-W to set a common working directory for multiple files
Use -E to use the extended regular expression style (see re_format(7) for a description of the basic and extended styles)
Use -- to end option processing and allow any further dashes not to be treated as options.
Examples:
reinplace -W ${worksrcpath} "s|/usr/local|${prefix}|g" configure setup.py
reinplace "s|@@PREFIX@@|${prefix}|g" ${worksrcpath}/Makefile
Use only when ....