A collection of Makefile to generate signed standard macOS packages (.pkg) for applications and developer tools.
This project exists because of a personal preference to avoid auto-installed dependencies by other packaging schemes such as Homebrew and MacPorts. The overarching goal is to prevent bit-rot (orphaned files and binaries). By registering with the package manager and providing an uninstaller, it should be possible to completely remove all traces of the installed software between upgrades and on deletion.
All App Store downloads follow a similar methodology to accounts for all files installed by a particular piece of software.
To view a listing of all the currently installed packages on your system issue the following in a terminal window
pkgutil --packages
# output should be similar to
com.apple.pkg.Xcode
com.apple.pkg.XcodeSystemResources
com.apple.pkg.ConfigurationUtility
com.apple.pkg.TransporterApp
com.marclavergne.GitHub
com.marclavergne.GitLFS
...
To view files owned by a package issue the following in a terminal window
pkgutil --pkg-info com.marclavergne.firebase --files com.marclavergne.firebase
# output should be similar to
package-id: com.marclavergne.firebase
version: 8.1.1
volume: /
location: usr/local/firebase
install-time: 1587566967
bin
bin/firebase
bin/uninstall.sh
...
To view files contained in a package file issue the following in a terminal window
pkgutil --payload-files Firebase.pkg
All packages current use com.marclavergne.Package Name as an identifier. This is easily modified in the Makefile.
Every sub-project has a specific README, but have the following convention
# build the package
make all
# install the package
open Example.pkg
# uninstall the package
/usr/local/example/bin/uninstall.sh
- Android SDK (including emulator)
- AWS CLI
- Dart
- ffmpeg
- Firebase CLI
- FLutter SDK
- GitHub CLI
- GitLFS
- Haskell
- ImageMagick
- inetutils (telnet & ftp only)
- Java JRE
- jq
- Kotlin
- Mint
- nmap
- OpenOCD
- Pecker
- Scala
- STLink
- unar