darwin/makepkg.conf.inc (169 lines of code) (raw):

source "$(dirname "${BASH_SOURCE[0]}")/makepkg2.conf.inc" # brew install bash coreutils git libarchive makepkg python3.12 m4 texinfo export PATH="` `$(brew --prefix)/opt/coreutils/libexec/gnubin:` `$(brew --prefix python)/libexec/bin:` `$(brew --prefix libarchive)/bin:` `$(brew --prefix m4)/bin:` `$(brew --prefix texinfo)/bin:` `$PATH" # override apple command line tools make with brew make() { gmake "$@"; } case "$CARCH" in aarch64) _ARCH=arm64;; x86_64) _ARCH=x86_64;; *) echo "$CARCH is not supported" >&2 exit 1 ;; esac CHOST=$CARCH-apple-$(clang -dumpmachine | cut -d- -f3) SDKROOT=$(xcrun --sdk macosx --show-sdk-path) export MACOSX_DEPLOYMENT_TARGET='10.14' common_flags="-pipe -isysroot $SDKROOT -arch $_ARCH" export CFLAGS="$common_flags -D_FORTIFY_SOURCE=2 -O2" export CXXFLAGS="$CFLAGS" export LDFLAGS="$common_flags" INSTALL_NAME_TOOL=$(which install_name_tool) export AR=$(which ar) export CC=$(which clang) export CXX=$(which clang++) export OTOOL=$(which otool) export STRIP=$(which strip) tidy_strip() { if ! check_option 'strip' 'y'; then return fi msg2 'Removing unneeded symbols and architectures from binaries...' local file; while read -r file; do if [ "$(file --brief --mime-type "$file" | head -1)" = 'application/x-mach-binary' ]; then "$STRIP" -xS "$file" if [ "$(lipo -archs "$file")" != "$_ARCH" ]; then lipo "$file" -thin "$_ARCH" -output "$file" fi fi done < <(find "$PWD" -type f) } enter_fakeroot() { # brew fakeroot is crashing with brew bash # look for working bash in PATH and use it # local compatible_bash # # while read -r compatible_bash; do # if fakeroot -- "$compatible_bash" -c exit; then break; fi # done <<<"$(which -a bash)" msg "$(gettext "Entering %s environment...")" "fakeroot" FAKEROOTKEY="_" bash -$- "${BASH_SOURCE[-1]}" -F "${ARGLIST[@]}" || exit $? } remove_framework_versions() { local -r framework_dir=$1 local -r tmp_framework_dir=$(mktemp -d) mv "$framework_dir" "$tmp_framework_dir" mkdir "$framework_dir" cp -r \ "$tmp_framework_dir/Versions/Current/"* \ "$framework_dir/" rm -rf \ "$tmp_framework_dir" } # remove library version from given file path strip_library_version() { local -r library=$1 if [[ "$library" =~ (.*/[^.]*).*(\.dylib) ]]; then echo "${BASH_REMATCH[1]}${BASH_REMATCH[2]}" else echo "$library" fi } tidy_library_versions() { while read -r file; do local type=$(file --brief "$file") # remove library versions from all link references if [[ "$type" =~ Mach-O.*(shared.*library|bundle|executable) ]]; then "$OTOOL" -l "$file" | grep LC_LOAD_DYLIB -A2 | grep name | while read -r _ library _; do local library_without_version=$(strip_library_version "$library") # only check for libraries provided by package itself or dependencies local library_new= if [[ "$library" == "$PREFIX"* ]]; then library_new=${library_without_version/$PREFIX/@rpath} elif [ -f "$MAKEDEPENDS_PREFIX/${library#$PREFIX}" ]; then library_new="@rpath${library_without_version#$PREFIX}" fi if [ -n "$library_new" ]; then msg2 "Change install name in $file: $library -> $library_new" "$INSTALL_NAME_TOOL" "$file" -change "$library" "$library_new" fi done fi # remove library versions from file names and set rpath relative ids if [[ "$type" =~ Mach-O.*(shared.*library|bundle) ]]; then local library_without_version=$(strip_library_version "$file") if [ ! "$file" = "$library_without_version" ]; then msg2 "Renaming $file to $library_without_version" mv "$file" "$library_without_version" "$INSTALL_NAME_TOOL" "$library_without_version" \ -id "@rpath/${library_without_version#"$pkgdir$PREFIX/"}" fi fi # add rpath to executables if [[ "$type" =~ Mach-O.*executable ]]; then "$INSTALL_NAME_TOOL" "$file" -add_rpath "@executable_path/.." fi done < <(find $PWD -type f) } tidy_symlinks() { while read -r symlink; do msg2 "Removing symlink: $symlink" rm -rf "$symlink" done < <(find . -type l) } tidy_install() { tidy_install_original tidy_symlinks tidy_library_versions tidy_prefix } install_for_package() { local target=${1-install} local install_dir_spec=${2-DESTDIR} make "$install_dir_spec=$(temp_destdir)" $target -j {V,VERBOSE}=1 } package_dev() { local package_dev_name=${1-${pkgname[1]}} source /dev/stdin <<-EOF package_$package_dev_name() { cd "\$(temp_destdir)" while read -r dylib; do install -D "\$dylib" "\$pkgdir/\$dylib" done< <(find "./\$PREFIX/lib" -maxdepth 1 -type f -name \*\.dylib) if [ -d "./\$PREFIX/lib/pkgconfig" ]; then cp -r "./\$PREFIX/lib/pkgconfig" "\$pkgdir\$PREFIX/lib/pkgconfig" fi cp -r "./\$PREFIX/include" "\$pkgdir\$PREFIX/include" } EOF } package_dylib_with_dev() { local package_name=${1-${pkgname[0]}} local package_dev_name=${2-${pkgname[1]}} source /dev/stdin <<-EOF package_$package_name() { cd "\$(temp_destdir)" while read dylib; do ginstall -D "\$dylib" "\$pkgdir/\$dylib" done< <(find "./\$PREFIX/lib" -maxdepth 1 -type f -name \*\.dylib) if [ -d "./\$PREFIX/share" ]; then cp -r "./\$PREFIX/share" "\$pkgdir\$PREFIX/share" fi } EOF package_dev } package_application_with_dev() { local package_name=${1-${pkgname[0]}} local package_dev_name=${2-${pkgname[1]}} source /dev/stdin <<-EOF package_$package_name() { mkdir -p "\$pkgdir\$PREFIX" local dir; for dir in "bin" "lib" "share"; do cp -r "\$(temp_destdir)\$PREFIX/\$dir" "\$pkgdir\$PREFIX/\$dir" done } EOF package_dev } apply_patches() { local source for source in "${source[@]}"; do if [[ "$source" == *.patch ]]; then msg2 "Applying patch %s" "$source" patch -p1 <"$srcdir/$source" fi done }