MacPorts

Uses your system voice; voice and rate in settings.

Snapshot

≈ 7 min read

Names in other languages

No names in other languages are held for this entry yet.

Article bodies are English and are not machine-translated. A name in another language is not a translation of the article.

MacPorts, formerly DarwinPorts, is a package manager for macOS and Darwin. It is an open-source software project that aims to simplify the installation of other open source software. It is similar in function to Fink and the BSD ports collections. MacPorts supports universal binaries for PowerPC, Intel-based, and Apple silicon versions of macOS, but migrating from a PowerPC installation of MacPorts to a version on an Intel Mac requires reinstalling all installed ports.

MacPorts, formerly DarwinPorts, is a package manager for macOS and Darwin. It is an open-source software project that aims to simplify the installation of other open source software. It is similar in function to Fink and the BSD ports collections. MacPorts supports universal binaries for PowerPC, Intel-based, and Apple silicon versions of macOS, but migrating from a PowerPC installation of MacPorts to a version on an Intel Mac requires reinstalling all installed ports. As an example, one common task is to update outdated ports. This can be done by running the following: sudo port selfupdate sudo port upgrade outdated MacPorts supports logical operators such as and, or and not, as well as glob patterns (enabled by default) and regex (enabled via --regex ). For instance, to update outdated ports excluding all PHP versions, change the above command to the following: sudo port selfupdate sudo port upgrade outdated and not php* Users can indicate one or more packages that they wish to install via the install mode, and MacPorts will aim to install them and its dependencies. For example, both LibreOffice and Texmaker can be installed by running the following: sudo port install libreoffice texmaker Note that this will install the latest version as indicated by the local ports tree. Running selfupdate beforehand will make sure that the downloaded package is the newest version in MacPorts. For instance, the youtube-dl port provides an ffmpeg variant that is enabled by default. In return for adding two extra dependencies, this then allows for audio to be extracted. Variants can be included or removed using the + or - symbols, so the ffmpeg variant can be disabled by running the following: sudo port install youtube-dl -ffmpeg Multiple variants can be listed one after another by separating them with a space. As an example, it is possible to disable the default prefork MPM in the apache2 port in favour of worker MPM: sudo port install apache2 -preforkmpm +workermpm The variants of a port can be determined by running port variants packagename , or by searching for the port on the MacPorts website. For example, this is the portfile for Hashcat: -*- coding: utf-8; mode: _tcl; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- vim:fenc=utf-8:ft=tcl:et:sw=2:ts=2:sts=2 PortSystem 1.0 PortGroup github 1.0 PortGroup makefile 1.0 github.setup hashcat hashcat 6.2.3 v github.tarball_from archive categories security license MIT platforms darwin maintainers @gaming-hacker openmaintainer description World's fastest and most advanced password recovery utility. long_description hashcat is the world's fastest and most advanced \ password recovery utility, supporting five unique modes \ of attack for over 200 highly-optimized hashing algorithms. \ hashcat currently supports CPUs, GPUs, and other hardware \ accelerators on Linux, Windows, and macOS, and has \ facilities to help enable distributed password cracking homepage https://hashcat.net/hashcat/ build.target {} checksums rmd160 8bb501834a320aaac3de149c5ab39c2eb89ee968 \ sha256 c0be1c6693ee1f35c7bef1f79bf9e30a954f717ef42d00e37787aaeff3271e51 \ size 6222424 Each portfile has pre-defined stages that can be manually configured via the portfile. These include the following: Fetch First, MacPorts retrieves and downloads all the relevant files for the port from upstream. These are known as distfiles. In the case of hashcat, these files are retrieved from GitHub. They are removed, along with temporary build files, when the installation is complete. Checksum Checksums are always defined within the portfile, since they are different for different files. The checksums of the downloaded files are compared to those in the portfile to see whether they match. Only one compressed file is downloaded for Hashcat, so only one checksum is required in the portfile. Patch Sometimes, the code might need to be modified to make it installable via MacPorts. This could be for a variety of reasons, such as it installing in the wrong location by default. Patch files can be used to modify the source code in a readable format. In the above portfile, Hashcat does not require any changes to the code for the installation to work. Hence, there are no patch files required. When patches are required, the patch file would be stored with the portfile, and it would be referenced like the following (from wget): patchfiles prefix.patch Configure The project's configure script is run to prepare for the build process. Part of this involves determining whether the required libraries are present. For ports that do not have a configure script, this stage (as well as others when required) can be disabled. Since the configure stage is not referenced in the Portfile, hashcat is using the default configure setup as defined by MacPorts. This involves running the configure script via ./configure . Build The instructions in the portfile are then used to build the port. The commands that are executed can vary for different languages. The portfile for hashcat shows that it should be treated as a Makefile project. It will therefore be built by running make . Test Some ports define a test to verify that the build has succeeded. This is an optional phase that is only run if the user executes port test packagename . It is therefore not executed when installing a port. This hashcat port has not defined a test stage. When defined, it might look like the following (from ImageMagick): test.run yes test.target check test.env DYLD_LIBRARY_PATH=${worksrcpath}/magick/.libs Destroot The destroot stage is the first step in moving the built files into the correct location. MacPorts takes the approach of first staging the installation into an intermediate location (destroot) before placing the files in their correct positions (install). One advantage of this is that it makes it easy to record what files were created, allowing them to be cleanly uninstalled. As an example, a file that would normally be installed to /opt/local/lib/libfoo.a might first be installed to /tmp/stage/opt/local/lib/libfoo.a during the destroot stage, maintaining the relative directory structure. For hashcat, this is done by running make install , where one of the arguments ( DESTDIR ) specifies where to temporarily store the files. Note that in the majority of scenarios, only the stages below occur on the user's machine. This is because binaries for the ports are pre-built so that they do not need to be built from source locally. Install The destrooted files are archived safely. Since these files have not been activated yet, this allows for multiple different versions of the same port to be archived without interfering with each other. Activate When activating a port, the files in the destroot directory are moved to their correct location. This makes them accessible to the user, completing the installation process. If they wish to try a different version of the port, they can deactivate their current version and activate the new one. This does not uninstall the old port since it can easily be activated again from the archived files. When upgrading a port, MacPorts deactivates but does not uninstall the current version as a safety feature. This allows the user to easily revert to the old version if the update causes breaking changes.

Data collection

By default, MacPorts does not collect any statistics. However, users can optionally submit information by running sudo port install mpstats . This sends details once a week on which ports are installed, as well as various system properties. The information is then used to determine which hardware to support and to understand how quickly new MacPorts releases are adopted. Users can view analytics data on the MacPorts website.

See also

Fink Gentoo/Alt Homebrew Nix pkgsrc FreeBSD Ports Ports collection

References

External links

MacPorts Guide The MacPorts Wiki List of available ports

Text derived from https://en.wikipedia.org/w/index.php?oldid=1375162812 under CC BY-SA 4.0; modifications have been made.

Sources cited in this revision

Extracted from the cited revision's reference blocks; absent citations are not invented.