wiki:FAQ

Version 20 (modified by mww@…, 13 years ago) (diff)

--

General Questions

Is MacPorts Universal?

MacPorts works on both Intel- and PowerPC-based Macs, but the ports you install will be compiled only for the architecture you're currently running on. This means that if you migrate from, say, a PowerPC Mac to an Intel one and use Migration Assistant to copy your data to the new machine, you should reinstall all your ports on the new machine to rebuild them for Intel. It may be simpler to completely remove all of MacPorts and start fresh. See below for uninstallation instructions, but be sure to keep any configuration files you need.

For many ports, there's now an alternative: select the +universal variant when you build each port, and MacPorts will create universal binaries that work on both Intel and PowerPC. This can be useful if you anticipate migrating to a different Mac soon, or if you want to install MacPorts on an external hard drive that's used by both Intel- and PowerPC-based Macs. But note that because +universal is new, it may not work correctly for all ports, even if no error message is shown during installation. If you find a port that will not build with +universal, or if it builds but then does not work correctly, please file a bug report. If you can provide a patch to fix the problem, that's even better.

Some ports may only work on PowerPC Macs or only on Intel Macs. In some cases, these are bugs that need to be fixed. If there is a newer version of the software available, you should report this to the port maintainer. Maybe the new version works correctly on both architectures. If the port is already using the latest version, report the problem to the upstream authors of the software; the software may need to be updated. In other cases, the software may be specifically written for one processor architecture such that it will not be possible to make it available to the other.

See also Universal for a list of ports that were tested for +universal support and the results.

Why is /opt/local the default install location for MacPorts?

/opt/local was chosen so as to avoid stomping on other various installations (e.g. fink uses /sw to do the same); /usr/local is not a viable choice for several reasons:

  1. Some software (especially auto* tools from Gnu) look in /usr/local as a default location, which means MacPorts can't be easily isolated when needed
  2. /usr/local is usually reserved for the given system's admin to install items local to that system, and tends to be a bad choice to have taken over by a non-system port system
  3. gcc considers /usr/local to be a standard system directory, causing (at least) the include directory to be unable to appear early in the list of include directories, and hence causing MacPorts-installed items to be difficult to use properly for items which need them (where another version is installed elsewhere, like /usr/X11R6)

Some responses concerning /usr/local have been aired on the mailing list over time.

How do I remove or uninstall MacPorts?

MacPorts can be removed by issuing the following command from within Terminal:

sudo rm -rf \
/opt/local \
/Applications/MacPorts \
/Library/Tcl/macports1.0 \
/Library/LaunchDaemons/org.macports.* \
/Library/StartupItems/DarwinPortsStartup

Please note that this command removes all software installed using MacPorts as well as MacPorts itself. This includes configuration files for any ports which were installed; if you need to keep them, back them up before the rm (they should be in /opt/local/etc).

This command does not remove files installed to locations outside the agreed directory tree. Thus ports that write in other places should be removed manually before removing MacPorts altogether. This includes at least xfig and transfig, but probably other X11 ports as well.

sudo port uninstall xfig
sudo port uninstall transfig

Why do I get an error about configure.cflags-append?

When running port for the first time, you may see this error message:

unable to open port: invalid name "configure.cflags-append"

This is a feature which was added recently, and it means you do not have the latest version of MacPorts installed. To resolve it, update to the latest version of MacPorts by running:

sudo port selfupdate

What are the folders in `${prefix}/var/macports/ for and why do they take up so much space?

man porthier says: "MacPorts runtime data", but it contains some more subfolders:

build

Is used during the building of ports, usually it contains only empty folders, does not take much space. During the building of a port there is a soft link ${prefix}/var/macports/sources/rsync.macports.org/release/ports/<category>/<name>/work pointing to the corresponding folder here.

distfiles

The downloaded sources of each built port, could be removed with port clean --dist <port>.

packages

Containing the binary archive of each installed port. Could be removed with port clean --archive <port> <version>+<variant>. These files are helpfull for uninstalling and later reinstalling the exact same ports (eg. for testing something). Only unpacking the archive is needed and no build will be performed. If these archives are never needed they can be disabled in ${prefix}/etc/ports/ports.conf with the portarchivemode option.

receipts

Contains detail information about each installed port, eg. which files belong to the port with corresponding checksums.

software

Contains the installed software itself. If a port is activated its files are hard links in the ${prefix} folders to the corresponding files here. port uninstall <port> <version>+<variant> would remove it from here, but then this port can not be used anymore.

sources

In the subfolder rsync.rsync.darwinports.org_dpupdate1 are the MacPorts sources themselves (e.g., for the port(1) command). A port selfupdate updates this from the OpenDarwin rsync server. In the subfolder rsync.rsync.darwinports.org_dpupdate_dports are folders for each port category and the ports themselves therein, where the corresponding Portfile and patches are found. port sync and also port selfupdate update this from the OpenDarwin rsync server.

I get Error: checksum (md5/sha1/rmd160) mismatch for port. What can I do about it?

MacPorts computes checksums of downloaded files to ensure they aren't corrupted and haven't been tampered with. Each portfile lists the checksums for the files that the port will download (using md5, sha1 or rmb160). If the computed checksum of the downloaded file doesn't match the one listed in the portfile, that means the file you downloaded is not the one the port designer used when creating the port, and so MacPorts stops the installation.

The first thing you should do if you get a checksum error is update your ports with sudo port sync — can you install the port now? If so, it means somebody else encountered the same checksum mismatch before and already fixed it.

If updating doesn't help, then you should attempt to discover why there is a checksum mismatch. There are several possible reasons:

  1. The file is corrupt. If it was corrupted by the transfer, download it again (port clean --dist <portname> and port install <portname>). If it is corrupted on the server, there is not much you can do about it. Open a bug in Bugzilla and assign it to the port's maintainer. As for solving the problem: if there are other mirrors, try one of them. You can also ask if someone has a complete file they can send you on the MacPorts mailinglist.
  2. The developer has performed a "stealth upgrade". Sometimes upstream developers make "stealth upgrades" in which they change the contents of their distribution archive but not its version number, without informing MacPorts of this change. Perhaps the developer has repackaged the distribution with a different archiving program, or has fixed typos in the included documentation or made other presumably minor changes that did not warrant a regular release. This practice is not recommended because of the obvious difficulties it presents to MacPorts and other port systems that compute package checksums. Attempt to get confirmation from the developer of the software that this has occurred. If the developer cannot be reached, attempt to determine yourself whether a stealth upgrade has happened. Search the Internet and try to locate the older version of the archive that matches the checksum in the portfile. Also download the version currently available on the developer's site, extract both, and compare the contents (for example with diff -r -u <old> <new>). If the changes look minor and benign, or there are no changes at all, then it is safe for you to update the checksum in the portfile, and the port maintainer should be informed of this so that they can make the change official. If you cannot determine whether a stealth upgrade has taken place, ask for help on the mailing list.
  3. The file has been tampered with. It is perhaps somewhat unlikely yet theoretically possible (and it has happened a few times in practice) that the archive being distributed by the developer (or by a mirror) has been genuinely compromised. If a hacker was able to manipulate the developer's (or the mirror's) server, the hacker could have uploaded a revised archive containing malware (a virus, a trojan horse, a spam-sending platform, etc.) of the hacker's choosing, and you would certainly not want to install such software. You must attempt to determine, as above, whether this has occurred by contacting the developer, or by locating an older version of the archive and comparing them. You can also contact the port maintainer or the mailing list.

Where can I find a GUI frontend for MacPorts?

There are several GUIs for MacPorts in development.

  • PortAuthority has been around for a long time. It's shareware and costs $20.
  • Pallet is a new GUI under development which can be installed with MacPorts by running sudo port install pallet.
  • Porticus is another new GUI currently in development.

Software Questions

When I install the port of PHP 5, MacPorts wants to install Apache 1.3 even though I use Apache 2. What do I need to do?

Use "variants." The command port variants <portname> (where portname is the port in question) lists available build variations that support differences you may desire. For instance, to install PHP 5 for use with Apache 2 and MySQL, you'd type port install php5 +apache2 +mysql.

Python fails to build

If you get an error building Python like

Python/mactoolboxglue.c:440: warning: return makes integer from pointer without a cast Python/mactoolboxglue.c:440

your XCode installation is incomplete (you are missing e.g. the Quicktime SDK).

How do I get readline support for MacPort's Python?

If you're using python24, install the py-readline port.

If you're using python25, install py25-readline.

Why can't I import foo in Python 2.5?

A number of "standard python modules" are built separately from the python25 port:

  • zlib (py25-zlib)
  • _hashlib (py25-hashlib)
  • _ssl (py25-socket-ssl)
  • _bsddb (py25-bsddb)
  • _sqlite3 (py25-sqlite3)
  • _tkinter (py25-tkinter)
  • bz2 (py25-bz2)
  • gdbm (py25-gdbm)
  • readline (py25-readline)
  • _curses, _curses_panel (py25-curses)

For further information about readline support in python25, see the above FAQ question. People with a FreeBSD background will find themselves familiar with this schema.

Will MacPorts link to system libraries rather than its own?

No, MacPorts maintains its own libraries.

Why is MacPorts using its own libraries?

There are several reasons to do so. First, it makes ports more compatible across different versions of Darwin/OS X. If we can rely on e. g. openssl 0.9.8 from MacPorts, we don't have to test every port that needs ssl for every available openssl installation. Apple's software tends to break from time to time (e. g. openssl refuses to build with an old zlib, but Apple shipped the old headers of the vulnerable zlib version). Third reason is up-to-dateness: Apple only features e. g. Python 2.3, not 2.4, with which some software does not work. The drawbacks on this behaviour also are minimal: Wasting 10MB for a Python installation is next to nothing if you have a GB-harddisk and gain consistency all the way in return.

GNOME has an empty menu

See the GNOME section of this Wiki for more information.

Portfile Development and Maintenance Questions

Is it possible to have a dependency on a specific variant of another port? E.g. "postgresql8 +server"?

No. The current state of the dependency engine is unable to handle specifying anything beyond "port X requires port Y" or "port X requires a file which can be provided by port Y." There have been discussions on revamping the engine (see the mailing list archives) but nothing concrete as yet. This is why the most useful variants really shouldn't be variants at all but rolled into the port itself.

Why won't portindex work? I have a local repository set up

Your local repository needs the ports to be nested within a category for portindex to work. The Documentation needs to be updated to reflect this requirement.

What is the process for becoming a committer?

The process is pretty much the same as for any other open source project. See this email to the MacPorts mailing list which is more specific. Also have a look at the New commiters guide for what commit access to MacPorts entails.

Runtime Errors

I try to disable a variant, but it just informs me of the proper usage for the port command

When using

port <command> <portname> -<variant>

the dash in the command is going to be interpreted as an option, hence getting the usage message. It needs to be escaped away with a double-dash:

port <command> <portname> -- -<variant>

When uninstalling a port I get an error like port uninstall failed: invalid command name "portuninstall::uninstall". What's going on?

This is a known error caused by left overs from old MacPorts installations, specifically the ${prefix}/share/darwinports/Tcl/port1.0/portuninstall.tcl file that is no longer in the MacPorts source code (${prefix} expanding to whatever path was chosen upon initial installation of MacPorts, /opt/local by default). However, a reinstallation of the infrastructure (most commonly through port selfudpate) does not remove this file and therefore manual intervention is needed:

rm -f ${prefix}/share/darwinports/Tcl/port1.0/portuninstall.tcl
port -f selfupdate

These steps will remove the stray file and force a rebuild of the infrastructure, overriding the release number comparison done by "selfupdate" between the local copy and the one on OpenDarwin servers. If this workaround does not clear the problem for you, please refer to the main mailing list with as much information as possible.

Be sure you have the latest MacPorts before removing portuninstall.tcl. I had the same problem that I couldn't uninstall ports and so I first ran a sudo port selfupdate to get the latest version of MacPorts and removed the tcl file afterwards. But when running sudo port -f selfupdate it gave me this error message: Failed to initialize ports system, couldn't read file "/opt/local/share/darwinports/Tcl/port1.0/portuninstall.tcl": no such file or directory and stopped working.