1. Introduction
2. Installing MacPorts
2.1. Install X11
2.2. Install Xcode
2.3. Install MacPorts
2.4. MacPorts Upgrade
2.5. Uninstall
2.6. MacPorts and the Shell
3. Using MacPorts
3.1. The port Command
3.2. Port Variants
3.3. Common Tasks
3.4. Port Binaries
4. Portfile Development
4.1. Portfile Introduction
4.2. Creating a Portfile
4.3. Example Portfiles
4.4. Port Variants
4.5. Patch Files
4.6. Local Portfile Repositories
4.7. Portfile Best Practices
4.8. MacPorts' buildbot
5. Portfile Reference
5.1. Global Keywords
5.2. Global Variables
5.3. Port Phases
5.4. Dependencies
5.5. Variants
5.6. Tcl Extensions
5.7. StartupItems
5.8. Livecheck / Distcheck
5.9. PortGroups
6. MacPorts Internals
6.1. File Hierarchy
6.2. Configuration Files
6.3. Port Images
6.4. APIs and Libs
6.5. The MacPorts Registry
7. MacPorts Project
7.1. Using Trac for tickets
7.2. Contributing to MacPorts
7.3. Port Update Policies
7.4. MacPorts Membership
7.5. The PortMgr Team
8. MacPorts Guide Terms
Glossary
Single Page Chunked

A MacPorts Portfile is a Tcl script, so it may contain any arbitrary Tcl code you may learn about in a Tcl reference manual. However, few authors will use arbitrary Tcl code; the vast majority will use Tcl extensions that are coded within MacPorts for performing the most common tasks needed for Portfiles. The list below is a list of Tcl extensions provided by MacPorts base.

file

Description.

file copy

file rename

file delete [-force]

file mkdir

macros

Description.

copy

Shorthand alternative to file copy.

move

Shorthand alternative to file rename.

delete file ...

Deletes each of the given files/directories. Behaves similarly to file delete -force except that file delete -force will fail to delete directories properly on 10.3 systems.

touch

Mimics the BSD touch command.

ln

Mimics the BSD ln command.

xinstall

xinstall copies files and creates directories; it is intended to be compatible with install(1).

xinstall [-o owner] [-g group] [-m mode] [file1 file2 ...] directory

Install the specified file(s) to a destination directory.

xinstall [-o owner] [-g group] [-m mode] [-W dir] [file1 file2 ...] directory

Change to dir and install file(s) to a destination directory.

eval xinstall [-o owner] [-g group] [-m mode] [glob pattern] directory

Install the file(s) matching the glob pattern to a destination directory.

xinstall -d [-o owner] [-g group] [-m mode] directory

Create a directory including parent directories if necessary.

Defaults:

  • owner -

  • group -

  • mode -

Examples:

xinstall -m 640 ${worksrcpath}/doc README \
   ${destroot}${prefix}/share/doc/${name}
xinstall -m 640 -W ${worksrcpath}/doc README INSTALL COPY \
   ${destroot}${prefix}/share/doc/${name}
eval xinstall -m 640 [glob ${worksrcpath}/doc/*] \
   ${destroot}${prefix}/share/doc/${name}
xinstall -d ${destroot}${prefix}/share/doc/${name}
strsed

strsed can be used for string manipulations using regular expressions. It supports a small subset of the commands known from sed(1).

strsed string s/regex/replacement/

Replaces the first instance of regex with replacement. Refer to re_format(7) for a definition of regular expression syntax.

strsed 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).

reinplace

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).

reinplace [-E] [--] command file ...

Replace text given by the regular expression portion of the command with the replacement text, in all files specified.

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 "s|/usr/local|${prefix}|g" ${worksrcpath}/configure
reinplace "s|@@PREFIX@@|${prefix}|g" ${worksrcpath}/Makefile
user/group

adduser username [uid=uid] [gid=gid] [passwd=passwd] [realname=realname] [home=home] [shell=shell]

Add a new local user to the system with the specified uid, gid, password, real name, home directory and login shell.

existsuser username

Check if a local user exists. Returns the uid for the given user, or 0 if the user wasn't found. Checking for the root user is not supported because its uid is 0, and it will always exist anyway.

nextuid

Returns the highest used uid plus one.

addgroup group [gid=gid] [passwd=passwd] [realname=realname] [users=users]

Add a new local group to the system, with the specified gid, password, real name, and with a list users as members.

existsgroup group

Check if a local group exists and return the corresponding gid. This can be used with adduser:

addgroup foo
adduser foo gid=[existsgroup foo]
nextgid

Returns the highest used gid plus one.

External program execution

Use only when ....