2 # Setup development environment on macOS (tested with 10.6.8 and Xcode
3 # 3.2.6 and with 10.12.4 and Xcode 8.3).
5 # Copyright 2011 Michael Tuexen, Joerg Mayer, Guy Harris (see AUTHORS file)
7 # Wireshark - Network traffic analyzer
8 # By Gerald Combs <gerald@wireshark.org>
9 # Copyright 1998 Gerald Combs
11 # SPDX-License-Identifier: GPL-2.0-or-later
18 # Get the major version of Darwin, so we can check the major macOS
21 DARWIN_MAJOR_VERSION
=$
(uname
-r |
sed 's/\([0-9]*\).*/\1/')
24 # The minimum supported version of Qt is 5.15, so the minimum supported version
25 # of macOS is OS X 10.13 (High Sierra), aka Darwin 17.0.
27 if [[ $DARWIN_MAJOR_VERSION -lt 17 ]]; then
28 echo "This script does not support any versions of macOS before High Sierra" 1>&2
33 # Get the processor architecture of Darwin. Currently supported: arm, i386
35 DARWIN_PROCESSOR_ARCH
=$
(uname
-m)
37 if [ "$DARWIN_PROCESSOR_ARCH" != "arm64" ] && [ "$DARWIN_PROCESSOR_ARCH" != "x86_64" ]; then
38 echo "This script does not support this processor architecture" 1>&2
43 # Versions of packages to download and install.
47 # We use curl, but older versions of curl in older macOS releases can't
48 # handle some sites - including the xz site. We also use the --fail-with-body
49 # flag, which was added in curl 7.76.0.
51 # If the version of curl in the system is older than 7.76.0, download
52 # curl and install it.
54 current_curl_version
=$
( curl
--version |
sed -n 's/curl \([0-9.]*\) .*/\1/p' )
55 current_curl_major_version
="$( expr "$current_curl_version" : '\([0-9][0-9]*\).*' )"
56 current_curl_minor_version
="$(expr "$current_curl_version" : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
57 if [[ $current_curl_major_version -lt 7 ||
58 ($current_curl_major_version -eq 7 &&
59 $current_curl_minor_version -lt 54) ]]; then
60 CURL_VERSION
=${CURL_VERSION-7.88.1}
64 # Some packages need xz to unpack their current source.
65 # XXX: tar, since macOS 10.9, can uncompress xz'ed tarballs,
66 # so perhaps we could get rid of this now?
68 # DO NOT UPDATE THIS TO A COMPROMISED VERSION; see
70 # https://www.openwall.com/lists/oss-security/2024/03/29/4
72 # https://access.redhat.com/security/cve/CVE-2024-3094
74 # https://nvd.nist.gov/vuln/detail/CVE-2024-3094
79 # CMake is required to do the build - and to build some of the
82 CMAKE_VERSION
=${CMAKE_VERSION-3.21.4}
85 # Ninja isn't required, as make is provided with Xcode, but it is
86 # claimed to build faster than make.
87 # Comment it out if you don't want it.
89 NINJA_VERSION
=${NINJA_VERSION-1.12.1}
90 NINJA_SHA256
=89a287444b5b3e98f88a945afa50ce937b8ffd1dcc59c555ad9b1baf855298c9
93 # The following libraries and tools are required even to build only TShark.
95 GETTEXT_VERSION
=0.22.5
97 if [ "$GLIB_VERSION" ]; then
98 GLIB_MAJOR_VERSION
="$( expr $GLIB_VERSION : '\([0-9][0-9]*\).*' )"
99 GLIB_MINOR_VERSION
="$( expr $GLIB_VERSION : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
101 # GLIB_DOTDOT_VERSION="$( expr $GLIB_VERSION : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
102 # GLIB_MAJOR_MINOR_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION
103 # GLIB_MAJOR_MINOR_DOTDOT_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_DOTDOT_VERSION
105 PKG_CONFIG_VERSION
=0.29.2
107 # libgpg-error is required for libgcrypt.
109 LIBGPG_ERROR_VERSION
=1.47
111 # libgcrypt is required.
113 LIBGCRYPT_VERSION
=1.10.2
115 # libpcre2 is required.
120 # One or more of the following libraries are required to build Wireshark.
122 # To override the version of Qt call the script with some of the variables
123 # set to the new values. Setting the variable to empty will disable building
124 # the toolkit and will uninstall # any version previously installed by the
126 # "QT_VERSION=5.10.1 ./macos-setup.sh"
127 # will build and install with QT 5.10.1.
129 QT_VERSION
=${QT_VERSION-6.2.4}
131 if [ "$QT_VERSION" ]; then
132 QT_MAJOR_VERSION
="$( expr "$QT_VERSION" : '\([0-9][0-9]*\).*' )"
133 QT_MINOR_VERSION
="$( expr "$QT_VERSION" : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
134 QT_DOTDOT_VERSION
="$( expr "$QT_VERSION" : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
135 QT_MAJOR_MINOR_VERSION
=$QT_MAJOR_VERSION.
$QT_MINOR_VERSION
136 QT_MAJOR_MINOR_DOTDOT_VERSION
=$QT_MAJOR_VERSION.
$QT_MINOR_VERSION.
$QT_DOTDOT_VERSION
140 # The following libraries are optional.
141 # Comment them out if you don't want them, but note that some of
142 # the optional libraries are required by other optional libraries.
146 GNUTLS_SHA256
=2bea4e154794f3f00180fa2a5c51fe8b005ac7a31cd58bd44cdfa7f36ebc3a9b
147 if [ "$GNUTLS_VERSION" ]; then
149 # We'll be building GnuTLS, so we may need some additional libraries.
150 # We assume GnuTLS can work with Nettle; newer versions *only* use
151 # Nettle, not libgcrypt.
153 GNUTLS_MAJOR_VERSION
="$( expr $GNUTLS_VERSION : '\([0-9][0-9]*\).*' )"
154 GNUTLS_MINOR_VERSION
="$( expr $GNUTLS_VERSION : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
158 # And, in turn, Nettle requires GMP.
164 P11KIT_VERSION
=0.25.3
166 # Which requires libtasn1
167 LIBTASN1_VERSION
=4.19.0
169 # lua_bitop.c has been ported to 5.3 and 5.4 so use the latest release.
170 # We may still need to check for compatibility issues (we'd want Lua
171 # scripts to work with 5.1 through 5.4, as long as they only use Lua
172 # features present in all versions)
177 LIBXML2_VERSION
=2.11.9 # Matches vcpkg
178 LIBXML2_SHA256
=780157a1efdb57188ec474dca87acaee67a3a839c2525b2214d318228451809f
182 LIBSSH_VERSION
=0.11.1
184 MAXMINDDB_VERSION
=1.9.1
185 NGHTTP2_VERSION
=1.62.1
186 NGHTTP3_VERSION
=1.1.0
187 SPANDSP_VERSION
=0.0.6
188 SPEEXDSP_VERSION
=1.2.1
189 if [ "$SPANDSP_VERSION" ]; then
191 # SpanDSP depends on libtiff.
193 LIBTIFF_VERSION
=3.8.1
196 # libilbc 3.0.0 & later link with absiel, which is released under Apache 2.0
198 OPENCORE_AMR_VERSION
=0.1.6
199 OPENCORE_AMR_SHA256
=483eb4061088e2b34b358e47540b5d495a96cd468e361050fae615b1809dc4a1
202 # Falco libs (libsinsp and libscap) and their dependencies. Unset for now.
203 #FALCO_LIBS_VERSION=0.18.1
204 if [ "$FALCO_LIBS_VERSION" ] ; then
205 FALCO_LIBS_SHA256
=1812e8236c4cb51d3fe5dd066d71be99f25da7ed22d8feeeebeed09bdc26325f
206 JSONCPP_VERSION
=1.9.5
207 ONETBB_VERSION
=2021.11.0
208 # 2023-06-01 and later require Abseil.
209 RE2_VERSION
=2022-06-01
213 # Is /usr/bin/python3 a working version of Python? It may be, as it
214 # might be a wrapper that runs the Python 3 that's part of Xcode.
216 if /usr
/bin
/python3
--version >/dev
/null
2>&1
219 # Yes - don't bother installing Python 3 from elsewhere
224 # No - install a Python package.
226 PYTHON3_VERSION
=3.12.1
230 MINIZIPNG_VERSION
=4.0.7
232 # Uncomment to enable automatic updates using Sparkle
233 #SPARKLE_VERSION=2.2.2
236 # Asciidoctor is required to build the documentation.
238 # As the Asciidoctor Homebrew formula shows, managing all of the various
239 # dependencies can become quite hairy:
240 # https://github.com/Homebrew/homebrew-core/blob/master/Formula/a/asciidoctor.rb
241 # Maybe we should install a JRE and use AsciidoctorJ instead?
242 ASCIIDOCTOR_VERSION
=${ASCIIDOCTOR_VERSION-2.0.16}
243 ASCIIDOCTORPDF_VERSION
=${ASCIIDOCTORPDF_VERSION-1.6.1}
244 # css_parser 1.13 and later require Ruby 2.7
246 CSS_PARSER_VERSION
=${CSS_PARSER_VERSION-1.12.0}
248 # GNU autotools. They're not supplied with the macOS versions we
249 # support, and we currently use them for minizip.
251 AUTOCONF_VERSION
=2.71
252 AUTOMAKE_VERSION
=1.16.5
253 LIBTOOL_VERSION
=2.4.6
256 if [ "$CURL_VERSION" ] && [ ! -f "curl-$CURL_VERSION-done" ] ; then
257 echo "Downloading, building, and installing curl:"
258 [ -f "curl-$CURL_VERSION.tar.bz2" ] || curl
--fail --location --remote-name "https://curl.haxx.se/download/curl-$CURL_VERSION.tar.bz2"
259 $no_build && echo "Skipping installation" && return
260 bzcat
"curl-$CURL_VERSION.tar.bz2" |
tar xf
-
261 cd "curl-$CURL_VERSION"
262 .
/configure
"${CONFIGURE_OPTS[@]}"
263 make "${MAKE_BUILD_OPTS[@]}"
266 touch "curl-$CURL_VERSION-done"
271 if [ -n "$installed_curl_version" ] ; then
272 echo "Uninstalling curl:"
273 cd "curl-$installed_curl_version"
277 rm "curl-$installed_curl_version-done"
279 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
281 # Get rid of the previously downloaded and unpacked version.
283 rm -rf "curl-$installed_curl_version"
284 rm -rf "curl-$installed_curl_version.tar.bz2"
287 installed_curl_version
=""
292 if [ "$XZ_VERSION" ] && [ ! -f xz-
$XZ_VERSION-done ] ; then
293 echo "Downloading, building, and installing xz:"
294 [ -f xz-
$XZ_VERSION.
tar.bz2
] || curl
"${CURL_REMOTE_NAME_OPTS[@]}" https
://tukaani.org
/xz
/xz-
$XZ_VERSION.
tar.bz2
295 $no_build && echo "Skipping installation" && return
296 bzcat xz-
$XZ_VERSION.
tar.bz2 |
tar xf
-
299 # This builds and installs liblzma, which libxml2 uses, and
300 # Wireshark uses libxml2, so we need to build this with
301 # all the minimum-deployment-version and SDK stuff.
303 CFLAGS
="$CFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS
="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
304 .
/configure
"${CONFIGURE_OPTS[@]}"
305 make "${MAKE_BUILD_OPTS[@]}"
308 touch xz-
$XZ_VERSION-done
313 if [ -n "$installed_xz_version" ] ; then
314 echo "Uninstalling xz:"
315 cd "xz-$installed_xz_version"
319 rm "xz-$installed_xz_version-done"
321 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
323 # Get rid of the previously downloaded and unpacked version.
325 rm -rf "xz-$installed_xz_version"
326 rm -rf "xz-$installed_xz_version.tar.bz2"
329 installed_xz_version
=""
334 if [ -n "$installed_lzip_version" ] ; then
335 echo "Uninstalling lzip:"
336 cd "lzip-$installed_lzip_version"
340 rm "lzip-$installed_lzip_version-done"
342 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
344 # Get rid of the previously downloaded and unpacked version.
346 rm -rf "lzip-$installed_lzip_version"
347 rm -rf "lzip-$installed_lzip_version.tar.gz"
350 installed_lzip_version
=""
355 if [ -n "$installed_pcre_version" ] ; then
356 echo "Uninstalling leftover pcre:"
357 cd "pcre-$installed_pcre_version"
361 rm "pcre-$installed_pcre_version-done"
363 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
365 # Get rid of the previously downloaded and unpacked version.
367 rm -rf "pcre-$installed_pcre_version"
368 rm -rf "pcre-$installed_pcre_version.tar.bz2"
371 installed_pcre_version
=""
376 if [ "$PCRE2_VERSION" ] && [ ! -f "pcre2-$PCRE2_VERSION-done" ] ; then
377 echo "Downloading, building, and installing pcre2:"
378 [ -f "pcre2-$PCRE2_VERSION.tar.bz2" ] || curl
"${CURL_REMOTE_NAME_OPTS[@]}" "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-$PCRE2_VERSION/pcre2-10.39.tar.bz2"
379 $no_build && echo "Skipping installation" && return
380 bzcat
"pcre2-$PCRE2_VERSION.tar.bz2" |
tar xf
-
381 cd "pcre2-$PCRE2_VERSION"
384 # https://github.com/Homebrew/homebrew-core/blob/master/Formula/pcre2.rb
385 # https://github.com/microsoft/vcpkg/blob/master/ports/pcre2/portfile.cmake
386 "${DO_CMAKE[@]}" -DBUILD_STATIC_LIBS=OFF
-DBUILD_SHARED_LIBS=ON
-DPCRE2_SUPPORT_JIT=ON
-DPCRE2_SUPPORT_UNICODE=ON ..
387 make "${MAKE_BUILD_OPTS[@]}"
390 touch "pcre2-$PCRE2_VERSION-done"
395 if [ -n "$installed_pcre2_version" ] && [ -s "pcre2-$installed_pcre2_version/build_dir/install_manifest.txt" ] ; then
396 echo "Uninstalling pcre2:"
397 # PCRE2 10.39 installs pcre2unicode.3 twice, so this will return an error.
398 while read -r ; do $DO_RM -v "$REPLY" ; done < <(cat "pcre2-$installed_pcre2_version/build_dir/install_manifest.txt"; echo)
399 rm "pcre2-$installed_pcre2_version-done"
401 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
403 # Get rid of the previously downloaded and unpacked version.
405 rm -rf "pcre2-$installed_pcre2_version"
406 rm -rf "pcre2-$installed_pcre2_version.tar.bz2"
409 installed_pcre2_version
=""
414 if [ "$AUTOCONF_VERSION" -a ! -f autoconf-
$AUTOCONF_VERSION-done ] ; then
415 echo "Downloading, building and installing GNU autoconf..."
416 [ -f autoconf-
$AUTOCONF_VERSION.
tar.xz
] || curl
"${CURL_REMOTE_NAME_OPTS[@]}" https
://ftp.gnu.org
/gnu
/autoconf
/autoconf-
$AUTOCONF_VERSION.
tar.xz
417 $no_build && echo "Skipping installation" && return
418 xzcat autoconf-
$AUTOCONF_VERSION.
tar.xz |
tar xf
-
419 cd autoconf-
$AUTOCONF_VERSION
420 .
/configure
"${CONFIGURE_OPTS[@]}"
421 make "${MAKE_BUILD_OPTS[@]}"
424 touch autoconf-
$AUTOCONF_VERSION-done
428 uninstall_autoconf
() {
429 if [ -n "$installed_autoconf_version" ] ; then
431 # automake and libtool depend on this, so uninstall them.
433 uninstall_libtool
"$@"
434 uninstall_automake
"$@"
436 echo "Uninstalling GNU autoconf:"
437 cd autoconf-
$installed_autoconf_version
441 rm autoconf-
$installed_autoconf_version-done
443 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
445 # Get rid of the previously downloaded and unpacked version.
447 rm -rf autoconf-
$installed_autoconf_version
448 rm -rf autoconf-
$installed_autoconf_version.
tar.xz
451 installed_autoconf_version
=""
456 if [ "$AUTOMAKE_VERSION" -a ! -f automake-
$AUTOMAKE_VERSION-done ] ; then
457 echo "Downloading, building and installing GNU automake..."
458 [ -f automake-
$AUTOMAKE_VERSION.
tar.xz
] || curl
"${CURL_REMOTE_NAME_OPTS[@]}" https
://ftp.gnu.org
/gnu
/automake
/automake-
$AUTOMAKE_VERSION.
tar.xz
459 $no_build && echo "Skipping installation" && return
460 xzcat automake-
$AUTOMAKE_VERSION.
tar.xz |
tar xf
-
461 cd automake-
$AUTOMAKE_VERSION
462 .
/configure
"${CONFIGURE_OPTS[@]}"
463 make "${MAKE_BUILD_OPTS[@]}"
466 touch automake-
$AUTOMAKE_VERSION-done
470 uninstall_automake
() {
471 if [ -n "$installed_automake_version" ] ; then
473 # libtool depends on this(?), so uninstall it.
475 uninstall_libtool
"$@"
477 echo "Uninstalling GNU automake:"
478 cd automake-
$installed_automake_version
482 rm automake-
$installed_automake_version-done
484 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
486 # Get rid of the previously downloaded and unpacked version.
488 rm -rf automake-
$installed_automake_version
489 rm -rf automake-
$installed_automake_version.
tar.xz
492 installed_automake_version
=""
497 if [ "$LIBTOOL_VERSION" -a ! -f libtool-
$LIBTOOL_VERSION-done ] ; then
498 echo "Downloading, building and installing GNU libtool..."
499 [ -f libtool-
$LIBTOOL_VERSION.
tar.xz
] || curl
"${CURL_REMOTE_NAME_OPTS[@]}" https
://ftp.gnu.org
/gnu
/libtool
/libtool-
$LIBTOOL_VERSION.
tar.xz
500 $no_build && echo "Skipping installation" && return
501 xzcat libtool-
$LIBTOOL_VERSION.
tar.xz |
tar xf
-
502 cd libtool-
$LIBTOOL_VERSION
503 .
/configure
"${CONFIGURE_OPTS[@]}" --program-prefix=g
504 make "${MAKE_BUILD_OPTS[@]}"
507 touch libtool-
$LIBTOOL_VERSION-done
511 uninstall_libtool
() {
512 if [ -n "$installed_libtool_version" ] ; then
513 echo "Uninstalling GNU libtool:"
514 cd libtool-
$installed_libtool_version
515 $DO_MV "$installation_prefix/bin/glibtool" "$installation_prefix/bin/libtool"
516 $DO_MV "$installation_prefix/bin/glibtoolize" "$installation_prefix/bin/libtoolize"
520 rm libtool-
$installed_libtool_version-done
522 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
524 # Get rid of the previously downloaded and unpacked version.
526 rm -rf libtool-
$installed_libtool_version
527 rm -rf libtool-
$installed_libtool_version.
tar.xz
530 installed_libtool_version
=""
535 if [ "$NINJA_VERSION" ] && [ ! -f "ninja-$NINJA_VERSION-done" ] ; then
536 echo "Downloading and installing Ninja:"
538 # Download the zipball, unpack it, and move the binary to
539 # $installation_prefix/bin.
541 [ -f "ninja-mac-v$NINJA_VERSION.zip" ] || curl
"${CURL_LOCAL_NAME_OPTS[@]}" "ninja-mac-v$NINJA_VERSION.zip" https
://github.com
/ninja-build
/ninja
/releases
/download
/v
$NINJA_VERSION/ninja-mac.
zip
542 echo "$NINJA_SHA256 ninja-mac-v$NINJA_VERSION.zip" | shasum
--algorithm 256 --check
543 $no_build && echo "Skipping installation" && return
544 unzip "ninja-mac-v$NINJA_VERSION.zip"
545 sudo
mv ninja
"$installation_prefix/bin"
546 touch "ninja-$NINJA_VERSION-done"
551 if [ -n "$installed_ninja_version" ]; then
552 echo "Uninstalling Ninja:"
553 $DO_RM "$installation_prefix/bin/ninja"
554 rm "ninja-$installed_ninja_version-done"
555 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
556 rm -f "ninja-mac-v$installed_ninja_version.zip"
559 installed_ninja_version
=""
563 install_asciidoctor
() {
564 if [ ! -f asciidoctor-
${ASCIIDOCTOR_VERSION}-done ]; then
565 echo "Downloading and installing Asciidoctor:"
566 $no_build && echo "Skipping installation" && return
567 sudo gem
install -V asciidoctor
--version "=${ASCIIDOCTOR_VERSION}"
568 touch asciidoctor-
${ASCIIDOCTOR_VERSION}-done
572 uninstall_asciidoctor
() {
573 if [ -n "$installed_asciidoctor_version" ]; then
574 echo "Uninstalling Asciidoctor:"
575 sudo gem uninstall
-V asciidoctor
--version "=${installed_asciidoctor_version}"
576 rm asciidoctor-
$installed_asciidoctor_version-done
578 ##if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
580 # Get rid of the previously downloaded and unpacked version,
581 # whatever it might happen to be called.
583 ## rm -f asciidoctor-$installed_asciidoctor_version
585 installed_asciidoctor_version
=""
589 install_asciidoctorpdf
() {
590 if [ ! -f asciidoctorpdf-
${ASCIIDOCTORPDF_VERSION}-done ]; then
591 ## XXX gem does not track dependencies that are installed for asciidoctor-pdf
592 ## record them for uninstallation
593 ## ttfunk, pdf-core, prawn, prawn-table, Ascii85, ruby-rc4, hashery, afm, pdf-reader, prawn-templates, public_suffix, addressable, css_parser, prawn-svg, prawn-icon, safe_yaml, thread_safe, polyglot, treetop, asciidoctor-pdf
594 echo "Downloading and installing Asciidoctor-pdf:"
595 $no_build && echo "Skipping installation" && return
596 sudo gem
install -V css_parser
--version "=${CSS_PARSER_VERSION}"
597 sudo gem
install -V asciidoctor-pdf
--version "=${ASCIIDOCTORPDF_VERSION}"
598 touch asciidoctorpdf-
${ASCIIDOCTORPDF_VERSION}-done
602 uninstall_asciidoctorpdf
() {
603 if [ -n "$installed_asciidoctorpdf_version" ]; then
604 echo "Uninstalling Asciidoctor:"
605 sudo gem uninstall
-V asciidoctor-pdf
--version "=${installed_asciidoctorpdf_version}"
606 ## XXX uninstall dependencies
607 rm asciidoctorpdf-
$installed_asciidoctorpdf_version-done
609 ##if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
611 # Get rid of the previously downloaded and unpacked version,
612 # whatever it might happen to be called.
614 ## rm -f asciidoctorpdf-$installed_asciidoctorpdf_version
616 installed_asciidoctorpdf_version
=""
621 if [ ! -f cmake-
$CMAKE_VERSION-done ]; then
622 echo "Downloading and installing CMake:"
623 $no_build && echo "Skipping installation" && return
624 CMAKE_MAJOR_VERSION
="$( expr "$CMAKE_VERSION" : '\([0-9][0-9]*\).*' )"
625 CMAKE_MINOR_VERSION
="$( expr "$CMAKE_VERSION" : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
626 CMAKE_MAJOR_MINOR_VERSION
=$CMAKE_MAJOR_VERSION.
$CMAKE_MINOR_VERSION
629 # NOTE: the "64" in "Darwin64" doesn't mean "64-bit-only"; the
630 # package in question supports both 32-bit and 64-bit x86.
632 case "$CMAKE_MAJOR_VERSION" in
635 echo "CMake $CMAKE_VERSION" is too old
1>&2
640 # Download the DMG and do a drag install, where "drag" means
643 # 3.1.1 to 3.19.1 have a Darwin-x86_64 DMG.
644 # 3.19.2 has a macos-universal DMG for 10.10 and later
645 # 3.19.3 and later have a macos-universal DMG for 10.13 and later,
646 # and a macos10.10-universal DMG for 10.10 and later.
648 if [ "$CMAKE_MINOR_VERSION" -lt 10 ]; then
649 echo "CMake $CMAKE_VERSION" is too old
1>&2
650 elif [ "$CMAKE_MINOR_VERSION" -lt 19 -o \
651 "$CMAKE_VERSION" = 3.19.0 -o \
652 "$CMAKE_VERSION" = 3.19.1 ]; then
654 elif [ "$CMAKE_VERSION" = 3.19.2 -o \
655 "$DARWIN_MAJOR_VERSION" -ge 17 ]; then
656 type="macos-universal"
658 type="macos10.0-universal"
660 [ -f cmake-
$CMAKE_VERSION-$type.dmg
] || curl
"${CURL_REMOTE_NAME_OPTS[@]}" https
://cmake.org
/files
/v
$CMAKE_MAJOR_MINOR_VERSION/cmake-
$CMAKE_VERSION-$type.dmg
661 $no_build && echo "Skipping installation" && return
662 sudo hdiutil attach cmake-
$CMAKE_VERSION-$type.dmg
663 sudo ditto
/Volumes
/cmake-
$CMAKE_VERSION-$type/CMake.app
/Applications
/CMake.app
666 # Plant the appropriate symbolic links in $installation_prefix/bin.
667 # It's a drag-install, so there's no installer to make them,
668 # and the CMake code to put them in place is lame, as
670 # 1) it defaults to /usr/bin, not $installation_prefix/bin;
671 # 2) it doesn't request the necessary root privileges;
672 # 3) it can't be run from the command line;
674 # so we do it ourselves.
676 for i
in ccmake cmake cmake-gui cmakexbuild cpack ctest
678 sudo
ln -s /Applications
/CMake.app
/Contents
/bin
/$i "$installation_prefix/bin/$i"
680 sudo hdiutil detach
/Volumes
/cmake-
$CMAKE_VERSION-$type
686 touch cmake-
$CMAKE_VERSION-done
691 if [ -n "$installed_cmake_version" ]; then
692 echo "Uninstalling CMake:"
693 installed_cmake_major_version
="$( expr "$installed_cmake_version" : '\([0-9][0-9]*\).*' )"
694 case "$installed_cmake_major_version" in
697 echo "CMake $installed_cmake_version" is too old
1>&2
701 sudo
rm -rf /Applications
/CMake.app
702 for i
in ccmake cmake cmake-gui cmakexbuild cpack ctest
704 sudo
rm -f "$installation_prefix/bin/$i"
706 rm cmake-
$installed_cmake_version-done
710 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
712 # Get rid of the previously downloaded and unpacked version,
713 # whatever it might happen to be called.
715 rm -f cmake-
$installed_cmake_version-Darwin-x86_64.dmg
716 rm -f cmake-
$installed_cmake_version-macos-universal.dmg
717 rm -f cmake-
$installed_cmake_version-macos10.0
-universal.dmg
720 installed_cmake_version
=""
726 # Install Meson with pip3 if we don't have it already.
728 if $MESON --version >/dev
/null
2>&1
733 $no_build && echo "Skipping installation" && return
734 sudo pip3
install meson
741 # If we installed Meson, uninstal it with pip3.
743 if [ -f meson-done
] ; then
744 sudo pip3 uninstall meson
751 # Install pytest with pip3 if we don't have it already.
753 if python3
-m pytest
--version &> /dev
/null || pytest
--version &> /dev
/null
758 sudo pip3
install pytest pytest-xdist
765 # If we installed pytest, uninstal it with pip3.
767 if [ -f pytest-done
] ; then
768 sudo pip3 uninstall pytest pytest-xdist
774 if [ ! -f gettext-
$GETTEXT_VERSION-done ] ; then
775 echo "Downloading, building, and installing GNU gettext:"
776 [ -f gettext-
$GETTEXT_VERSION.
tar.gz
] || curl
"${CURL_REMOTE_NAME_OPTS[@]}" https
://ftp.gnu.org
/pub
/gnu
/gettext
/gettext-
$GETTEXT_VERSION.
tar.gz
777 $no_build && echo "Skipping installation" && return
778 gzcat gettext-
$GETTEXT_VERSION.
tar.gz |
tar xf
-
779 cd gettext-
$GETTEXT_VERSION
780 CFLAGS
="$CFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS
="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
781 .
/configure
"${CONFIGURE_OPTS[@]}"
782 make "${MAKE_BUILD_OPTS[@]}"
785 touch gettext-
$GETTEXT_VERSION-done
789 uninstall_gettext
() {
790 if [ -n "$installed_gettext_version" ] ; then
792 # GLib depends on this, so uninstall it.
796 echo "Uninstalling GNU gettext:"
797 cd gettext-
$installed_gettext_version
801 rm gettext-
$installed_gettext_version-done
803 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
805 # Get rid of the previously downloaded and unpacked version.
807 rm -rf gettext-
$installed_gettext_version
808 rm -rf gettext-
$installed_gettext_version.
tar.gz
811 installed_gettext_version
=""
815 install_pkg_config
() {
816 if [ ! -f pkg-config-
$PKG_CONFIG_VERSION-done ] ; then
817 echo "Downloading, building, and installing pkg-config:"
818 [ -f pkg-config-
$PKG_CONFIG_VERSION.
tar.gz
] || curl
"${CURL_REMOTE_NAME_OPTS[@]}" https
://pkgconfig.freedesktop.org
/releases
/pkg-config-
$PKG_CONFIG_VERSION.
tar.gz
819 $no_build && echo "Skipping installation" && return
820 gzcat pkg-config-
$PKG_CONFIG_VERSION.
tar.gz |
tar xf
-
821 cd pkg-config-
$PKG_CONFIG_VERSION
822 CFLAGS
="$CFLAGS -Wno-int-conversion" .
/configure
"${CONFIGURE_OPTS[@]}" --with-internal-glib
823 make "${MAKE_BUILD_OPTS[@]}"
826 touch pkg-config-
$PKG_CONFIG_VERSION-done
830 uninstall_pkg_config
() {
831 if [ -n "$installed_pkg_config_version" ] ; then
832 echo "Uninstalling pkg-config:"
833 cd pkg-config-
$installed_pkg_config_version
837 rm pkg-config-
$installed_pkg_config_version-done
839 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
841 # Get rid of the previously downloaded and unpacked version.
843 rm -rf pkg-config-
$installed_pkg_config_version
844 rm -rf pkg-config-
$installed_pkg_config_version.
tar.gz
847 installed_pkg_config_version
=""
852 if [ ! -f glib-
$GLIB_VERSION-done ] ; then
853 echo "Downloading, building, and installing GLib:"
854 glib_dir
=$
( expr "$GLIB_VERSION" : '\([0-9][0-9]*\.[0-9][0-9]*\).*' )
856 # Starting with GLib 2.28.8, xz-compressed tarballs are available.
858 [ -f glib-
$GLIB_VERSION.
tar.xz
] || curl
"${CURL_REMOTE_NAME_OPTS[@]}" "https://download.gnome.org/sources/glib/$glib_dir/glib-$GLIB_VERSION.tar.xz"
859 $no_build && echo "Skipping installation" && return
860 xzcat glib-
$GLIB_VERSION.
tar.xz |
tar xf
-
861 cd glib-
$GLIB_VERSION
863 # First, determine where the system include files are.
864 # (It's not necessarily /usr/include.) There's a bit of a
865 # greasy hack here; pre-5.x versions of the developer tools
866 # don't support the --show-sdk-path option, and will produce
867 # no output, so includedir will be set to /usr/include
868 # (in those older versions of the developer tools, there is
869 # a /usr/include directory).
871 # We need this for several things we do later.
873 includedir
=$
( SDKROOT
="$SDKPATH" xcrun
--show-sdk-path 2>/dev
/null
)/usr
/include
875 # GLib's configuration procedure, whether autotools-based or
876 # Meson-based, really likes to use pkg-config to find libraries,
879 # At least some versions of macOS provide libffi, but, as macOS
880 # doesn't provide pkg-config, they don't provide a .pc file for
881 # it, so the autotools-based configuration needs some trickery
882 # to get it to find the OS-supplied libffi, and the Meson-based
883 # configuration simply won't find it at all.
885 # So, if we have a system-provided libffi, but pkg-config
886 # doesn't find libffi, we construct a .pc file for that libffi,
887 # and install it in $installation_prefix/lib/pkgconfig.
889 # First, check whether pkg-config finds libffi but thinks its
890 # header files are in a non-existent directory. That probaby
891 # means that we generated the .pc file when some SDK was the
892 # appropriate choice, but Xcode has been updated since then
893 # and that SDK is no longer present. If so, we remove it,
894 # so that we will regenerate it if necessary, rather than
895 # trying to build with a bogus include directory. (Yes, this
896 # can happen, and has happened, causing mysterius build
897 # failures when "#include <ffi.h>" fails.)
899 if pkg-config libffi
; then
900 # We have a .pc file for libffi; what does it say the
901 # include directory is?
902 incldir
=$
( pkg-config
--variable=includedir libffi
)
903 if [ -n "$incldir" -a ! -d "$incldir" ] ; then
904 # Bogus - remove it, assuming
905 $DO_RM "$installation_prefix/lib/pkgconfig/libffi.pc"
908 if pkg-config libffi
; then
909 # It found libffi; no need to install a .pc file, and we
910 # don't want to overwrite what's there already.
912 elif [ ! -e "$includedir"/ffi
/ffi.h
] ; then
913 # We don't appear to have libffi as part of the system, so
914 # let the configuration process figure out what to do.
916 # We test for the header file, not the library, because, in
917 # Big Sur and later, there's no guarantee that, for a system
918 # shared library, there's a corresponding dylib file in
923 # We have libffi, but pkg-config didn't find it; generate
924 # and install the .pc file.
928 # Now generate the .pc file.
930 # We generate the contents of the .pc file by using cat with
931 # a here document containing a template for the file and
932 # piping that to a sed command that replaces @INCLUDEDIR@ in
933 # the template with the include directory we discovered
934 # above, so that the .pc file gives the compiler flags
935 # necessary to find the libffi headers (which are *not*
936 # necessarily in /usr/include, as per the above).
938 # The EOF marker for the here document is in quotes, to tell
939 # the shell not to do shell expansion, as .pc files use a
940 # syntax to refer to .pc file variables that looks like the
941 # syntax to refer to shell variables.
943 # The writing of the libffi.pc file is a greasy hack - the
944 # process of generating the contents of the .pc file writes
945 # to the standard output, but running the last process in
946 # the pipeline as root won't allow the shell that's
947 # *running* it to open the .pc file if we don't have write
948 # permission on $installation_prefix/lib/pkgconfig, so we need a
949 # program that creates a file and then reads from the
950 # standard input and writes to that file. UN*Xes have a
951 # program that does that; it's called "tee". :-)
953 # However, it *also* writes the file to the standard output,
954 # so we redirect that to /dev/null when we run it.
956 cat <<"EOF" | sed "s;@INCLUDEDIR@;$includedir;" | $DO_TEE_TO_PC_FILE "$installation_prefix/lib/pkgconfig/libffi.pc" >/dev/null
959 includedir=@INCLUDEDIR@
962 Description: Library supporting Foreign Function Interfaces
964 Libs: -L${libdir} -lffi
965 Cflags: -I${includedir}/ffi
970 # GLib 2.59.1 and later use Meson+Ninja as the build system.
972 case $GLIB_MAJOR_VERSION in
975 echo "GLib $GLIB_VERSION" is too old 1>&2
979 case $GLIB_MINOR_VERSION in
981 [0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9])
982 echo "GLib $GLIB_VERSION" is too old 1>&2
986 if [ ! -f ./configure ]; then
987 LIBTOOLIZE=glibtoolize ./autogen.sh
990 # At least with the version of Xcode that comes with
991 # Leopard, /usr/include/ffi/fficonfig.h doesn't define
992 # MACOSX, which causes the build of GLib to fail for at
993 # least some versions of GLib. If we don't find
994 # "#define.*MACOSX" in /usr/include/ffi/fficonfig.h,
995 # explicitly define it.
997 # While we're at it, suppress -Wformat-nonliteral to
998 # avoid a case where clang's stricter rules on when not
999 # to complain about non-literal format arguments cause
1000 # it to complain about code that's safe but it wasn't
1001 # told that. See my comment #25 in GNOME bug 691608:
1003 # https://bugzilla.gnome.org/show_bug.cgi?id=691608#c25
1005 if grep -qs '#define.*MACOSX' "$includedir/ffi/fficonfig.h"
1007 # It's defined, nothing to do
1008 CFLAGS="$CFLAGS -Wno-format-nonliteral $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS -Wno-format-nonliteral $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1009 ./configure "${CONFIGURE_OPTS[@]}"
1011 CFLAGS="$CFLAGS -DMACOSX -Wno-format-nonliteral $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS -DMACOSX -Wno-format-nonliteral $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1012 ./configure "${CONFIGURE_OPTS[@]}"
1014 make "${MAKE_BUILD_OPTS[@]}"
1018 59|[6-9][0-9]|[1-9][0-9][0-9])
1020 # 2.59.0 doesn't require Meson and Ninja, but it
1021 # supports it, and I'm too lazy to add a dot-dot
1024 # Disable tests to work around
1026 # https://gitlab.gnome.org/GNOME/glib/-/issues/2902
1028 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1029 $MESON -Dprefix="$installation_prefix" -Dtests=false _build
1034 echo "Glib's put out 1000 2.x releases?" 1>&2
1040 touch glib-$GLIB_VERSION-done
1045 if [ -n "$installed_glib_version" ] ; then
1046 echo "Uninstalling GLib:"
1047 cd "glib-$installed_glib_version"
1048 installed_glib_major_version="$( expr "$installed_glib_version" : '\([0-9][0-9]*\).*' )"
1049 installed_glib_minor_version="$( expr "$installed_glib_version" : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
1050 # installed_glib_dotdot_version="$( expr $installed_glib_version : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
1051 # installed_glib_major_minor_version=$installed_glib_major_version.$installed_glib_minor_version
1052 # installed_glib_major_minor_dotdot_version=$installed_glib_major_version.$installed_glib_minor_version.$installed_glib_dotdot_version
1054 # GLib 2.59.1 and later use Meson+Ninja as the build system.
1056 case $installed_glib_major_version in
1061 # This appears to delete dependencies out from under other
1062 # Makefiles in the tree, causing it to fail. At least until
1063 # that gets fixed, if it ever gets fixed, we just ignore the
1064 # exit status of "make distclean"
1067 make distclean || echo "Ignoring make distclean failure" 1>&2
1071 case $installed_glib_minor_version in
1073 [0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-8])
1076 # This appears to delete dependencies out from under other
1077 # Makefiles in the tree, causing it to fail. At least until
1078 # that gets fixed, if it ever gets fixed, we just ignore the
1079 # exit status of "make distclean"
1082 make distclean || echo "Ignoring make distclean failure" 1>&2
1085 59|[6-9][0-9]|[1-9][0-9][0-9])
1087 # 2.59.0 doesn't require Meson and Ninja, but it
1088 # supports it, and I'm too lazy to add a dot-dot
1093 # For Meson+Ninja, we do the build in an _build
1094 # subdirectory, so the equivalent of "make distclean"
1095 # is just to remove the directory tree.
1101 echo "Glib's put out 1000 2.x releases?" 1>&2
1106 rm glib-$installed_glib_version-done
1108 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
1110 # Get rid of the previously downloaded and unpacked version.
1112 rm -rf glib-$installed_glib_version
1113 rm -rf glib-$installed_glib_version.tar.xz
1116 installed_glib_version=""
1121 if [ "$QT_VERSION" -a ! -f qt-$QT_VERSION-done ]; then
1122 echo "Downloading and installing Qt:"
1124 # What you get for this URL might just be a 302 Found reply, so use
1125 # -L so we get redirected.
1127 # 5.0 - 5.1: qt-mac-opensource-{version}-clang-offline.dmg
1128 # 5.2.0: qt-mac-opensource-{version}.dmg
1129 # 5.2.1: qt-opensource-mac-x64-clang-{version}.dmg
1130 # 5.3 - 5.8: qt-opensource-mac-x64-clang-{version}.dmg
1131 # 5.9 - 5.14: qt-opensource-mac-x64-{version}.dmg
1132 # 5.15 - 6.0: Offline installers no longer provided.
1133 # ( https://download.qt.io/archive/qt/5.15/5.15.0/OFFLINE_README.txt )
1134 # XXX: We need a different approach for QT >= 5.15. One option would be to
1135 # install https://github.com/miurahr/aqtinstall, either permanently or into
1138 case $QT_MAJOR_VERSION in
1141 echo "Qt $QT_VERSION" is too old 1>&2
1145 case $QT_MINOR_VERSION in
1147 0|1|2|3|4|5|6|7|8|9|10|11|12|13|14)
1148 echo "Qt $QT_VERSION" is too old 1>&2
1152 echo "The Qt Company no longer provides open source offline installers for Qt $QT_VERSION" 1>&2
1156 [ -f $QT_VOLUME.dmg ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://download.qt.io/archive/qt/$QT_MAJOR_MINOR_VERSION/$QT_MAJOR_MINOR_DOTDOT_VERSION/$QT_VOLUME.dmg
1157 $no_build && echo "Skipping installation" && return
1158 sudo hdiutil attach $QT_VOLUME.dmg
1161 # Run the installer executable directly, so that we wait for
1162 # it to finish. Then unmount the volume.
1164 /Volumes/$QT_VOLUME/$QT_VOLUME.app/Contents/MacOS/$QT_VOLUME
1165 sudo hdiutil detach /Volumes/$QT_VOLUME
1166 touch qt-$QT_VERSION-done
1169 echo "The Qt Company no longer provides open source offline installers for Qt $QT_VERSION" 1>&2
1176 if [ -n "$installed_qt_version" ] ; then
1177 echo "Uninstalling Qt:"
1178 rm -rf $HOME/Qt$installed_qt_version
1179 rm qt-$installed_qt_version-done
1181 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
1183 # Get rid of the previously downloaded version.
1185 # 5.0 - 5.1: qt-mac-opensource-{version}-clang-offline.dmg
1186 # 5.2.0: qt-mac-opensource-{version}.dmg
1187 # 5.2.1: qt-opensource-mac-x64-clang-{version}.dmg
1188 # 5.3 - 5.8: qt-opensource-mac-x64-clang-{version}.dmg
1189 # 5.9 - 5.14: qt-opensource-mac-x64-{version}.dmg
1191 installed_qt_major_version="$( expr "$installed_qt_version" : '\([0-9][0-9]*\).*' )"
1192 installed_qt_minor_version="$( expr "$installed_qt_version" : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
1193 # installed_qt_dotdot_version="$( expr "$installed_qt_version" : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
1194 case $installed_qt_major_version in
1197 echo "Qt $installed_qt_version" is too old 1>&2
1201 case $installed_qt_minor_version in
1203 0|1|2|3|4|5|6|7|8|9|10|11)
1204 echo "Qt $installed_qt_version" is too old 1>&2
1208 installed_qt_volume=qt-opensource-mac-x64-$installed_qt_version.dmg
1212 rm -f $installed_qt_volume
1215 installed_qt_version=""
1220 if [ "$LIBSMI_VERSION" -a ! -f libsmi-$LIBSMI_VERSION-done ] ; then
1221 echo "Downloading, building, and installing libsmi:"
1222 [ -f libsmi-$LIBSMI_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://www.ibr.cs.tu-bs.de/projects/libsmi/download/libsmi-$LIBSMI_VERSION.tar.gz
1223 $no_build && echo "Skipping installation" && return
1224 gzcat libsmi-$LIBSMI_VERSION.tar.gz | tar xf -
1225 cd libsmi-$LIBSMI_VERSION
1226 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" ./configure "${CONFIGURE_OPTS[@]}"
1227 make "${MAKE_BUILD_OPTS[@]}"
1230 touch libsmi-$LIBSMI_VERSION-done
1234 uninstall_libsmi() {
1235 if [ -n "$installed_libsmi_version" ] ; then
1236 echo "Uninstalling libsmi:"
1237 cd libsmi-$installed_libsmi_version
1241 rm libsmi-$installed_libsmi_version-done
1243 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
1245 # Get rid of the previously downloaded and unpacked version.
1247 rm -rf libsmi-$installed_libsmi_version
1248 rm -rf libsmi-$installed_libsmi_version.tar.gz
1251 installed_libsmi_version=""
1255 install_libgpg_error() {
1256 if [ "$LIBGPG_ERROR_VERSION" -a ! -f libgpg-error-$LIBGPG_ERROR_VERSION-done ] ; then
1257 echo "Downloading, building, and installing libgpg-error:"
1258 [ -f libgpg-error-$LIBGPG_ERROR_VERSION.tar.bz2 ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://www.gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-$LIBGPG_ERROR_VERSION.tar.bz2
1259 $no_build && echo "Skipping installation" && return
1260 bzcat libgpg-error-$LIBGPG_ERROR_VERSION.tar.bz2 | tar xf -
1261 cd libgpg-error-$LIBGPG_ERROR_VERSION
1262 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" ./configure "${CONFIGURE_OPTS[@]}"
1263 make "${MAKE_BUILD_OPTS[@]}"
1266 touch libgpg-error-$LIBGPG_ERROR_VERSION-done
1270 uninstall_libgpg_error() {
1271 if [ -n "$installed_libgpg_error_version" ] ; then
1273 # libgcrypt depends on this, so uninstall it.
1275 uninstall_libgcrypt "$@"
1277 echo "Uninstalling libgpg-error:"
1278 cd libgpg-error-$installed_libgpg_error_version
1282 rm libgpg-error-$installed_libgpg_error_version-done
1284 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
1286 # Get rid of the previously downloaded and unpacked version.
1288 rm -rf libgpg-error-$installed_libgpg_error_version
1289 rm -rf libgpg-error-$installed_libgpg_error_version.tar.bz2
1292 installed_libgpg_error_version=""
1296 install_libgcrypt() {
1297 if [ "$LIBGCRYPT_VERSION" -a ! -f libgcrypt-$LIBGCRYPT_VERSION-done ] ; then
1299 # libgpg-error is required for libgcrypt.
1301 if [ -z $LIBGPG_ERROR_VERSION ]
1303 echo "libgcrypt requires libgpg-error, but you didn't install libgpg-error." 1>&2
1307 echo "Downloading, building, and installing libgcrypt:"
1308 [ -f libgcrypt-$LIBGCRYPT_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-$LIBGCRYPT_VERSION.tar.gz
1309 $no_build && echo "Skipping installation" && return
1310 gzcat libgcrypt-$LIBGCRYPT_VERSION.tar.gz | tar xf -
1311 cd libgcrypt-$LIBGCRYPT_VERSION
1313 # The assembler language code is not compatible with the macOS
1314 # x86 assembler (or is it an x86-64 vs. x86-32 issue?).
1316 # libgcrypt expects gnu89, not c99/gnu99, semantics for
1317 # "inline". See, for example:
1319 # https://lists.freebsd.org/pipermail/freebsd-ports-bugs/2010-October/198809.html
1321 # We specify "unix" as the random number generator so that we
1322 # don't try to use getentropy, because random/rndgetentropy.c
1323 # *REQUIRES* Linux getrandom(), which we don't have. (This should
1324 # not matter, as we only use this for decryption, as far as I know.)
1326 CFLAGS="$CFLAGS -std=gnu89 $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1327 ./configure "${CONFIGURE_OPTS[@]}" --disable-asm --enable-random=unix
1328 make "${MAKE_BUILD_OPTS[@]}"
1331 touch libgcrypt-$LIBGCRYPT_VERSION-done
1335 uninstall_libgcrypt() {
1336 if [ -n "$installed_libgcrypt_version" ] ; then
1337 echo "Uninstalling libgcrypt:"
1338 cd libgcrypt-$installed_libgcrypt_version
1342 rm libgcrypt-$installed_libgcrypt_version-done
1344 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
1346 # Get rid of the previously downloaded and unpacked version.
1348 rm -rf libgcrypt-$installed_libgcrypt_version
1349 rm -rf libgcrypt-$installed_libgcrypt_version.tar.gz
1352 installed_libgcrypt_version=""
1357 if [ "$GMP_VERSION" ] && [ ! -f "gmp-$GMP_VERSION-done" ] ; then
1358 echo "Downloading, building, and installing GMP:"
1359 [ -f "gmp-$GMP_VERSION.tar.xz" ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://gmplib.org/download/gmp/gmp-$GMP_VERSION.tar.xz
1360 $no_build && echo "Skipping installation" && return
1361 xzcat "gmp-$GMP_VERSION.tar.xz" | tar xf -
1362 cd "gmp-$GMP_VERSION"
1364 # Create a fat binary: https://gmplib.org/manual/Notes-for-Package-Builds.html
1368 # https://www.mail-archive.com/gmp-bugs@gmplib.org/msg01492.html
1370 # and other pages, the Shiny New Linker in Xcode 15 causes this
1371 # build to fail with "ld: branch8 out of range 384833 in
1372 # ___gmpn_add_nc_x86_64"; linking with -ld64 is a workaround.
1374 # For now, link with -ld64 on Xcode 15 and later.
1376 XCODE_VERSION=$( xcodebuild -version | sed -n 's;Xcode \(.*\);\1;p' )
1377 XCODE_MAJOR_VERSION="$( expr "$XCODE_VERSION" : '\([0-9][0-9]*\).*' )"
1378 # XCODE_MINOR_VERSION="$( expr $XCODE_VERSION : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
1379 # XCODE_DOTDOT_VERSION="$( expr $XCODE_VERSION : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
1380 if [ "$XCODE_MAJOR_VERSION" -ge 15 ]
1386 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS $LD64_FLAG" \
1387 ./configure "${CONFIGURE_OPTS[@]}" --enable-fat
1388 make "${MAKE_BUILD_OPTS[@]}"
1391 touch "gmp-$GMP_VERSION-done"
1396 if [ -n "$installed_gmp_version" ] ; then
1398 # Nettle depends on this, so uninstall it.
1400 uninstall_nettle "$@"
1402 echo "Uninstalling GMP:"
1403 cd "gmp-$installed_gmp_version"
1407 rm "gmp-$installed_gmp_version-done"
1409 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
1411 # Get rid of the previously downloaded and unpacked version.
1413 rm -rf "gmp-$installed_gmp_version"
1414 rm -rf "gmp-$installed_gmp_version.tar.xz"
1417 installed_gmp_version=""
1421 install_libtasn1() {
1422 if [ "$LIBTASN1_VERSION" ] && [ ! -f "libtasn1-$LIBTASN1_VERSION-done" ] ; then
1423 echo "Downloading, building, and installing libtasn1:"
1424 [ -f "libtasn1-$LIBTASN1_VERSION.tar.gz" ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" "https://ftp.gnu.org/gnu/libtasn1/libtasn1-$LIBTASN1_VERSION.tar.gz"
1425 $no_build && echo "Skipping installation" && return
1426 gzcat "libtasn1-$LIBTASN1_VERSION.tar.gz" | tar xf -
1427 cd "libtasn1-$LIBTASN1_VERSION"
1428 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1429 ./configure "${CONFIGURE_OPTS[@]}"
1430 make "${MAKE_BUILD_OPTS[@]}"
1433 touch "libtasn1-$LIBTASN1_VERSION-done"
1437 uninstall_libtasn1() {
1438 if [ -n "$installed_libtasn1_version" ] ; then
1440 # p11-kit depends on this, so uninstall it.
1442 uninstall_p11_kit "$@"
1444 echo "Uninstalling libtasn1:"
1445 cd "libtasn1-$installed_libtasn1_version"
1449 rm "libtasn1-$installed_libtasn1_version-done"
1451 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
1453 # Get rid of the previously downloaded and unpacked version.
1455 rm -rf "libtasn1-$installed_libtasn1_version"
1456 rm -rf "libtasn1-$installed_libtasn1_version.tar.gz"
1459 installed_libtasn1_version=""
1464 if [ "$P11KIT_VERSION" ] && [ ! -f "p11-kit-$P11KIT_VERSION-done" ] ; then
1465 echo "Downloading, building, and installing p11-kit:"
1466 [ -f "p11-kit-$P11KIT_VERSION.tar.xz" ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" "https://github.com/p11-glue/p11-kit/releases/download/$P11KIT_VERSION/p11-kit-$P11KIT_VERSION.tar.xz"
1467 $no_build && echo "Skipping installation" && return
1468 xzcat "p11-kit-$P11KIT_VERSION.tar.xz" | tar xf -
1469 cd "p11-kit-$P11KIT_VERSION"
1471 # Prior to Catalina, the libffi that's supplied with macOS
1472 # doesn't support ffi_closure_alloc() or ffi_prep_closure_loc(),
1473 # both of which are required by p11-kit if built with libffi.
1477 # https://p11-glue.github.io/p11-glue/p11-kit/manual/devel-building.html
1479 # libffi is used "for sharing of PKCS#11 modules between
1480 # multiple callers in the same process. It is highly recommended
1481 # that this dependency be treated as a required dependency.",
1482 # but it's not clear that this matters to us, so we just
1483 # configure p11-kit not to use libffi.
1485 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LIBS=-lintl \
1486 ./configure "${CONFIGURE_OPTS[@]}" --without-libffi --without-trust-paths
1487 make "${MAKE_BUILD_OPTS[@]}"
1490 touch "p11-kit-$P11KIT_VERSION-done"
1494 uninstall_p11_kit() {
1495 if [ -n "$installed_p11_kit_version" ] ; then
1497 # Nettle depends on this, so uninstall it.
1499 uninstall_nettle "$@"
1501 echo "Uninstalling p11-kit:"
1502 cd "p11-kit-$installed_p11_kit_version"
1506 rm "p11-kit-$installed_p11_kit_version-done"
1508 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
1510 # Get rid of the previously downloaded and unpacked version.
1512 rm -rf "p11-kit-$installed_p11_kit_version"
1513 rm -rf "p11-kit-$installed_p11_kit_version.tar.xz"
1516 installed_p11_kit_version=""
1521 if [ "$NETTLE_VERSION" ] && [ ! -f "nettle-$NETTLE_VERSION-done" ] ; then
1522 echo "Downloading, building, and installing Nettle:"
1523 [ -f "nettle-$NETTLE_VERSION.tar.gz" ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" "https://ftp.gnu.org/gnu/nettle/nettle-$NETTLE_VERSION.tar.gz"
1524 $no_build && echo "Skipping installation" && return
1525 gzcat "nettle-$NETTLE_VERSION.tar.gz" | tar xf -
1526 cd "nettle-$NETTLE_VERSION"
1527 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1528 ./configure "${CONFIGURE_OPTS[@]}"
1529 make "${MAKE_BUILD_OPTS[@]}"
1532 touch "nettle-$NETTLE_VERSION-done"
1536 uninstall_nettle() {
1537 if [ -n "$installed_nettle_version" ] ; then
1539 # GnuTLS depends on this, so uninstall it.
1541 uninstall_gnutls "$@"
1543 echo "Uninstalling Nettle:"
1544 cd "nettle-$installed_nettle_version"
1548 rm "nettle-$installed_nettle_version-done"
1550 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
1552 # Get rid of the previously downloaded and unpacked version.
1554 rm -rf "nettle-$installed_nettle_version"
1555 rm -rf "nettle-$installed_nettle_version.tar.gz"
1558 installed_nettle_version=""
1563 if [ "$GNUTLS_VERSION" ] && [ ! -f "gnutls-$GNUTLS_VERSION-done" ] ; then
1565 # GnuTLS requires Nettle.
1567 if [ -z "$NETTLE_VERSION" ]
1569 echo "GnuTLS requires Nettle, but you didn't install Nettle" 1>&2
1573 echo "Downloading, building, and installing GnuTLS:"
1574 [ -f gnutls-$GNUTLS_VERSION.tar.xz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" "https://www.gnupg.org/ftp/gcrypt/gnutls/v$GNUTLS_MAJOR_VERSION.$GNUTLS_MINOR_VERSION/gnutls-$GNUTLS_VERSION.tar.xz"
1575 echo "$GNUTLS_SHA256 gnutls-$GNUTLS_VERSION.tar.xz" | shasum --algorithm 256 --check
1576 $no_build && echo "Skipping installation" && return
1577 tar -xf gnutls-$GNUTLS_VERSION.tar.xz
1578 cd gnutls-$GNUTLS_VERSION
1579 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1580 ./configure "${CONFIGURE_OPTS[@]}" --with-included-unistring --disable-guile
1581 make "${MAKE_BUILD_OPTS[@]}"
1584 touch gnutls-$GNUTLS_VERSION-done
1588 uninstall_gnutls() {
1589 if [ -n "$installed_gnutls_version" ] ; then
1590 echo "Uninstalling GnuTLS:"
1591 cd "gnutls-$installed_gnutls_version"
1595 rm "gnutls-$installed_gnutls_version-done" s
1597 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
1599 # Get rid of the previously downloaded and unpacked version.
1601 rm -rf "gnutls-$installed_gnutls_version"
1602 rm -rf "gnutls-$installed_gnutls_version.tar.bz2"
1605 installed_gnutls_version=""
1610 if [ "$LUA_VERSION" -a ! -f lua-$LUA_VERSION-done ] ; then
1611 echo "Downloading, building, and installing Lua:"
1612 [ -f lua-$LUA_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://www.lua.org/ftp/lua-$LUA_VERSION.tar.gz
1613 $no_build && echo "Skipping installation" && return
1614 gzcat lua-$LUA_VERSION.tar.gz | tar xf -
1616 make INSTALL_TOP="$installation_prefix" MYCFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" MYLDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" macosx
1617 $DO_MAKE INSTALL_TOP="$installation_prefix" install
1619 touch lua-$LUA_VERSION-done
1624 if [ -n "$installed_lua_version" ] ; then
1625 echo "Uninstalling Lua:"
1627 # Lua has no "make uninstall", so just remove stuff manually.
1628 # There's no configure script, so there's no need for
1629 # "make distclean", either; just do "make clean".
1631 (cd "$installation_prefix/bin"; $DO_RM -f lua luac)
1632 (cd "$installation_prefix/include"; $DO_RM -f lua.h luaconf.h lualib.h lauxlib.h lua.hpp)
1633 (cd "$installation_prefix/lib"; $DO_RM -f liblua.a)
1634 (cd "$installation_prefix/man/man1"; $DO_RM -f lua.1 luac.1)
1635 cd lua-$installed_lua_version
1638 rm lua-$installed_lua_version-done
1640 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
1642 # Get rid of the previously downloaded and unpacked version.
1644 rm -rf lua-$installed_lua_version
1645 rm -rf lua-$installed_lua_version.tar.gz
1648 installed_lua_version=""
1653 if [ "$SNAPPY_VERSION" -a ! -f snappy-$SNAPPY_VERSION-done ] ; then
1654 echo "Downloading, building, and installing snappy:"
1655 [ -f snappy-$SNAPPY_VERSION.tar.gz ] || curl "${CURL_LOCAL_NAME_OPTS[@]}" snappy-$SNAPPY_VERSION.tar.gz https://github.com/google/snappy/archive/$SNAPPY_VERSION.tar.gz
1656 $no_build && echo "Skipping installation" && return
1657 gzcat snappy-$SNAPPY_VERSION.tar.gz | tar xf -
1658 cd snappy-$SNAPPY_VERSION
1659 if [ "$SNAPPY_VERSION" = "1.1.10" ] ; then
1660 # This patch corresponds to https://github.com/google/snappy/commit/27f34a580be4a3becf5f8c0cba13433f53c21337
1661 patch -p0 < "${topdir}/tools/macos-setup-patches/snappy-signed.patch"
1666 # Build a shared library, because we'll be linking libwireshark,
1667 # which is a C library, with libsnappy, and libsnappy is a C++
1668 # library and requires the C++ run time; the shared library
1669 # will carry that dependency with it, so linking with it should
1672 "${DO_CMAKE[@]}" -DBUILD_SHARED_LIBS=YES -DSNAPPY_BUILD_BENCHMARKS=NO -DSNAPPY_BUILD_TESTS=NO ..
1673 make "${MAKE_BUILD_OPTS[@]}"
1676 touch snappy-$SNAPPY_VERSION-done
1680 uninstall_snappy() {
1681 if [ -n "$installed_snappy_version" ] ; then
1682 echo "Uninstalling snappy:"
1683 cd snappy-$installed_snappy_version
1685 # snappy uses cmake and doesn't support "make uninstall";
1686 # just remove what we know it installs.
1688 # $DO_MAKE_UNINSTALL
1689 if [ -s build_dir/install_manifest.txt ] ; then
1690 while read -r ; do $DO_RM -v "$REPLY" ; done < <(cat build_dir/install_manifest.txt; echo)
1692 $DO_RM -f "$installation_prefix/lib/libsnappy.1.1.8.dylib" \
1693 "$installation_prefix/lib/libsnappy.1.dylib" \
1694 "$installation_prefix/lib/libsnappy.dylib" \
1695 "$installation_prefix/include/snappy-c.h" \
1696 "$installation_prefix/include/snappy-sinksource.h" \
1697 "$installation_prefix/include/snappy-stubs-public.h" \
1698 "$installation_prefix/include/snappy.h" \
1699 "$installation_prefix/lib/cmake/Snappy/SnappyConfig.cmake" \
1700 "$installation_prefix/lib/cmake/Snappy/SnappyConfigVersion.cmake" \
1701 "$installation_prefix/lib/cmake/Snappy/SnappyTargets-noconfig.cmake" \
1702 "$installation_prefix/lib/cmake/Snappy/SnappyTargets.cmake"
1705 # snappy uses cmake and doesn't support "make distclean";
1706 #.just remove the entire build directory.
1711 rm snappy-$installed_snappy_version-done
1713 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
1715 # Get rid of the previously downloaded and unpacked version.
1717 rm -rf snappy-$installed_snappy_version
1718 rm -rf snappy-$installed_snappy_version.tar.gz
1721 installed_snappy_version=""
1726 if [ "$ZSTD_VERSION" ] && [ ! -f zstd-$ZSTD_VERSION-done ] ; then
1727 echo "Downloading, building, and installing zstd:"
1728 [ -f zstd-$ZSTD_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://github.com/facebook/zstd/releases/download/v$ZSTD_VERSION/zstd-$ZSTD_VERSION.tar.gz
1729 $no_build && echo "Skipping installation" && return
1730 gzcat zstd-$ZSTD_VERSION.tar.gz | tar xf -
1731 cd zstd-$ZSTD_VERSION
1732 # We shouldn't have to specify DESTDIR.
1733 # https://github.com/facebook/zstd/issues/3146
1734 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1735 make PREFIX="$installation_prefix" DESTDIR="$installation_prefix" "${MAKE_BUILD_OPTS[@]}"
1736 $DO_MAKE PREFIX="$installation_prefix" install
1738 touch zstd-$ZSTD_VERSION-done
1743 if [ -n "$installed_zstd_version" ] ; then
1744 echo "Uninstalling zstd:"
1745 cd "zstd-$installed_zstd_version"
1748 # zstd has no configure script, so there's no need for
1749 # "make distclean", and the Makefile supplied with it
1750 # has no "make distclean" rule; just do "make clean".
1754 rm "zstd-$installed_zstd_version-done"
1756 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
1758 # Get rid of the previously downloaded and unpacked version.
1760 rm -rf "zstd-$installed_zstd_version"
1761 rm -rf "zstd-$installed_zstd_version.tar.gz"
1764 installed_zstd_version=""
1769 if [ "$ZLIBNG_VERSION" ] && [ ! -f zlib-ng-$ZLIBNG_VERSION-done ] ; then
1770 echo "Downloading, building, and installing zlib-ng:"
1771 [ -f $ZLIBNG_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://github.com/zlib-ng/zlib-ng/archive/refs/tags/$ZLIBNG_VERSION.tar.gz
1772 $no_build && echo "Skipping installation" && return
1773 gzcat $ZLIBNG_VERSION.tar.gz | tar xf -
1774 cd zlib-ng-$ZLIBNG_VERSION
1778 make "${MAKE_BUILD_OPTS[@]}"
1781 touch zlib-ng-$ZLIBNG_VERSION-done
1785 uninstall_zlibng() {
1786 if [ -n "$installed_zstd_version" ] ; then
1787 echo "Uninstalling zlibng:"
1788 cd "zlib-ng-$installed_zlibng_version"
1791 # XXX not sure what to do here...
1795 rm "zlib-ng-$installed_zlibng_version-done"
1797 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
1799 # Get rid of the previously downloaded and unpacked version.
1801 rm -rf "zlib-ng-$installed_zlibng_version"
1802 rm -rf "zlib-ng-$installed_zlibng_version.tar.gz"
1805 installed_zlibng_version=""
1809 if [ "$LIBXML2_VERSION" ] && [ ! -f libxml2-$LIBXML2_VERSION-done ] ; then
1810 echo "Downloading, building, and installing libxml2:"
1811 LIBXML2_MAJOR_VERSION="$( expr "$LIBXML2_VERSION" : '\([0-9][0-9]*\).*' )"
1812 LIBXML2_MINOR_VERSION="$( expr "$LIBXML2_VERSION" : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
1813 LIBXML2_MAJOR_MINOR_VERSION=$LIBXML2_MAJOR_VERSION.$LIBXML2_MINOR_VERSION
1814 [ -f libxml2-$LIBXML2_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" "https://download.gnome.org/sources/libxml2/$LIBXML2_MAJOR_MINOR_VERSION/libxml2-$LIBXML2_VERSION.tar.xz"
1815 echo "$LIBXML2_SHA256 libxml2-$LIBXML2_VERSION.tar.xz" | shasum --algorithm 256 --check
1816 $no_build && echo "Skipping installation" && return
1817 xzcat libxml2-$LIBXML2_VERSION.tar.xz | tar xf -
1818 cd "libxml2-$LIBXML2_VERSION"
1820 # At least on macOS 12.0.1 with Xcode 13.1, when we build
1821 # libxml2, the linker complains that we don't have the right
1822 # to link with the Python framework, so don't build with
1825 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1826 ./configure "${CONFIGURE_OPTS[@]}" --without-python
1827 make "${MAKE_BUILD_OPTS[@]}"
1830 touch libxml2-$LIBXML2_VERSION-done
1834 uninstall_libxml2() {
1835 if [ -n "$installed_libxml2_version" ] ; then
1836 echo "Uninstalling libxml2:"
1837 cd "libxml2-$installed_libxml2_version"
1841 rm "libxml2-$installed_libxml2_version-done"
1843 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
1845 # Get rid of the previously downloaded and unpacked version.
1847 rm -rf "libxml2-$installed_libxml2_version"
1848 rm -rf "libxml2-$installed_libxml2_version.tar.xz"
1851 installed_libxml2_version=""
1856 if [ "$LZ4_VERSION" ] && [ ! -f lz4-$LZ4_VERSION-done ] ; then
1857 echo "Downloading, building, and installing lz4:"
1859 # lz4 switched from sequentially numbered releases, named rN,
1860 # to vX.Y.Z-numbered releases.
1862 # The old sequentially-numbered releases were in tarballs
1863 # at https://github.com/lz4/lz4/archive/rN.tar.gz, which
1864 # extract into an lz4-rN directory.
1866 # THe new vX.Y.Z-numbered releases are in tarballs at
1867 # https://github.com/lz4/lz4/archive/vX.Y.Z.tar.gz, which
1868 # extract into an lz4-X.Y.Z directory - no, not lz4-vX.Y.Z,
1871 # We expect LZ4_VERSION to be set to rN for the sequentially-
1872 # numbered releases and X.Y.Z - not vX.Y.Z - for the vX.Y.Z-
1873 # numbered releases. We also tell Curl to download the tarball
1874 # with a name that corresponds to the name of the target
1875 # directory, so that it begins with "lz4-" and ends with either
1876 # "rN" or "X.Y.Z", to match what almost all of the other
1877 # support libraries do.
1879 if [[ "$LZ4_VERSION" == r* ]]
1881 [ -f lz4-$LZ4_VERSION.tar.gz ] || curl "${CURL_LOCAL_NAME_OPTS[@]}" lz4-$LZ4_VERSION.tar.gz https://github.com/lz4/lz4/archive/$LZ4_VERSION.tar.gz
1883 [ -f lz4-$LZ4_VERSION.tar.gz ] || curl "${CURL_LOCAL_NAME_OPTS[@]}" lz4-$LZ4_VERSION.tar.gz https://github.com/lz4/lz4/archive/v$LZ4_VERSION.tar.gz
1885 $no_build && echo "Skipping installation" && return
1886 gzcat lz4-$LZ4_VERSION.tar.gz | tar xf -
1889 # No configure script here, but it appears that if MOREFLAGS is
1890 # set, that's added to CFLAGS, and those are combined with LDFLAGS
1891 # and CXXFLAGS into FLAGS, which is used when building source
1892 # files and libraries.
1894 MOREFLAGS="-D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" \
1895 make PREFIX="$installation_prefix" "${MAKE_BUILD_OPTS[@]}"
1896 $DO_MAKE PREFIX="$installation_prefix" install
1898 touch lz4-$LZ4_VERSION-done
1903 if [ -n "$installed_lz4_version" ] ; then
1904 echo "Uninstalling lz4:"
1905 cd "lz4-$installed_lz4_version"
1908 # lz4's Makefile doesn't support "make distclean"; just do
1909 # "make clean". Perhaps not using autotools means that
1910 # there's no need for "make distclean".
1915 rm "lz4-$installed_lz4_version-done"
1917 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
1919 # Get rid of the previously downloaded and unpacked version.
1921 # "make install" apparently causes some stuff to be
1922 # modified in the build tree, so, as it's done as
1923 # root, that leaves stuff owned by root in the build
1924 # tree. Therefore, we have to remove the build tree
1927 sudo rm -rf "lz4-$installed_lz4_version"
1928 rm -rf "lz4-$installed_lz4_version.tar.gz"
1931 installed_lz4_version=""
1936 if [ "$SBC_VERSION" -a ! -f sbc-$SBC_VERSION-done ] ; then
1937 echo "Downloading, building, and installing sbc:"
1938 [ -f sbc-$SBC_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://www.kernel.org/pub/linux/bluetooth/sbc-$SBC_VERSION.tar.gz
1939 $no_build && echo "Skipping installation" && return
1940 gzcat sbc-$SBC_VERSION.tar.gz | tar xf -
1942 if [ "$DARWIN_PROCESSOR_ARCH" = "arm64" ] ; then
1943 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS -U__ARM_NEON__" CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1944 ./configure "${CONFIGURE_OPTS[@]}" --disable-tools --disable-tester --disable-shared
1946 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1947 ./configure "${CONFIGURE_OPTS[@]}" --disable-tools --disable-tester --disable-shared
1949 make "${MAKE_BUILD_OPTS[@]}"
1952 touch sbc-$SBC_VERSION-done
1957 if [ -n "$installed_sbc_version" ] ; then
1958 echo "Uninstalling sbc:"
1959 cd sbc-$installed_sbc_version
1963 rm sbc-$installed_sbc_version-done
1965 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
1967 # Get rid of the previously downloaded and unpacked version.
1969 rm -rf sbc-$installed_sbc_version
1970 rm -rf sbc-$installed_sbc_version.tar.gz
1973 installed_sbc_version=""
1977 install_maxminddb() {
1978 if [ "$MAXMINDDB_VERSION" -a ! -f maxminddb-$MAXMINDDB_VERSION-done ] ; then
1979 echo "Downloading, building, and installing MaxMindDB API:"
1980 [ -f libmaxminddb-$MAXMINDDB_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://github.com/maxmind/libmaxminddb/releases/download/$MAXMINDDB_VERSION/libmaxminddb-$MAXMINDDB_VERSION.tar.gz
1981 $no_build && echo "Skipping installation" && return
1982 gzcat libmaxminddb-$MAXMINDDB_VERSION.tar.gz | tar xf -
1983 cd libmaxminddb-$MAXMINDDB_VERSION
1984 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
1985 ./configure "${CONFIGURE_OPTS[@]}"
1986 make "${MAKE_BUILD_OPTS[@]}"
1989 touch maxminddb-$MAXMINDDB_VERSION-done
1993 uninstall_maxminddb() {
1994 if [ -n "$installed_maxminddb_version" ] ; then
1995 echo "Uninstalling MaxMindDB API:"
1996 cd libmaxminddb-$installed_maxminddb_version
2000 rm maxminddb-$installed_maxminddb_version-done
2002 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2004 # Get rid of the previously downloaded and unpacked version.
2006 rm -rf libmaxminddb-$installed_maxminddb_version
2007 rm -rf libmaxminddb-$installed_maxminddb_version.tar.gz
2010 installed_maxminddb_version=""
2015 if [ "$CARES_VERSION" -a ! -f c-ares-$CARES_VERSION-done ] ; then
2016 echo "Downloading, building, and installing C-Ares API:"
2017 # https://github.com/c-ares/c-ares/releases/download/v1.31.0/c-ares-1.31.0.tar.gz
2018 [ -f c-ares-$CARES_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://github.com/c-ares/c-ares/releases/download/v$CARES_VERSION/c-ares-$CARES_VERSION.tar.gz
2019 $no_build && echo "Skipping installation" && return
2020 gzcat c-ares-$CARES_VERSION.tar.gz | tar xf -
2021 cd c-ares-$CARES_VERSION
2022 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2023 ./configure "${CONFIGURE_OPTS[@]}"
2024 make "${MAKE_BUILD_OPTS[@]}"
2027 touch c-ares-$CARES_VERSION-done
2031 uninstall_c_ares() {
2032 if [ -n "$installed_cares_version" ] ; then
2033 echo "Uninstalling C-Ares API:"
2034 cd c-ares-$installed_cares_version
2038 rm c-ares-$installed_cares_version-done
2040 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2042 # Get rid of the previously downloaded and unpacked version.
2044 rm -rf c-ares-$installed_cares_version
2045 rm -rf c-ares-$installed_cares_version.tar.gz
2048 installed_cares_version=""
2053 if [ "$LIBSSH_VERSION" -a ! -f libssh-$LIBSSH_VERSION-done ] ; then
2054 echo "Downloading, building, and installing libssh:"
2055 LIBSSH_MAJOR_VERSION="$( expr "$LIBSSH_VERSION" : '\([0-9][0-9]*\).*' )"
2056 LIBSSH_MINOR_VERSION="$( expr "$LIBSSH_VERSION" : '[0-9][0-9]*\.\([0-9][0-9]*\).*' )"
2057 LIBSSH_MAJOR_MINOR_VERSION=$LIBSSH_MAJOR_VERSION.$LIBSSH_MINOR_VERSION
2058 [ -f libssh-$LIBSSH_VERSION.tar.xz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://www.libssh.org/files/$LIBSSH_MAJOR_MINOR_VERSION/libssh-$LIBSSH_VERSION.tar.xz
2059 $no_build && echo "Skipping installation" && return
2060 xzcat libssh-$LIBSSH_VERSION.tar.xz | tar xf -
2061 cd "libssh-$LIBSSH_VERSION"
2062 patch -p1 < "${topdir}/tools/macos-setup-patches/libssh-werror.patch"
2065 "${DO_CMAKE[@]}" -DWITH_GCRYPT=1 ..
2066 make "${MAKE_BUILD_OPTS[@]}"
2069 touch libssh-$LIBSSH_VERSION-done
2073 uninstall_libssh() {
2074 if [ -n "$installed_libssh_version" ] ; then
2075 echo "Uninstalling libssh:"
2076 cd libssh-$installed_libssh_version
2078 # libssh uses cmake and doesn't support "make uninstall";
2079 # just remove what we know it installs.
2081 # $DO_MAKE_UNINSTALL
2082 $DO_RM -rf "$installation_prefix"/lib/libssh* \
2083 "$installation_prefix"/include/libssh \
2084 "$installation_prefix"/lib/pkgconfig/libssh* \
2085 "$installation_prefix"/lib/cmake/libssh
2087 # libssh uses cmake and doesn't support "make distclean";
2088 # just remove the entire build directory.
2093 rm libssh-$installed_libssh_version-done
2095 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2097 # Get rid of the previously downloaded and unpacked version.
2099 rm -rf libssh-$installed_libssh_version
2100 rm -rf libssh-$installed_libssh_version.tar.gz
2103 installed_libssh_version=""
2108 if [ "$NGHTTP2_VERSION" -a ! -f nghttp2-$NGHTTP2_VERSION-done ] ; then
2109 echo "Downloading, building, and installing nghttp2:"
2110 [ -f nghttp2-$NGHTTP2_VERSION.tar.xz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://github.com/nghttp2/nghttp2/releases/download/v$NGHTTP2_VERSION/nghttp2-$NGHTTP2_VERSION.tar.xz
2111 $no_build && echo "Skipping installation" && return
2112 xzcat nghttp2-$NGHTTP2_VERSION.tar.xz | tar xf -
2113 cd nghttp2-$NGHTTP2_VERSION
2114 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2115 ./configure "${CONFIGURE_OPTS[@]}" --enable-lib-only
2116 make "${MAKE_BUILD_OPTS[@]}"
2119 touch nghttp2-$NGHTTP2_VERSION-done
2123 uninstall_nghttp2() {
2124 if [ -n "$installed_nghttp2_version" ] ; then
2125 echo "Uninstalling nghttp2:"
2126 cd nghttp2-$installed_nghttp2_version
2130 rm nghttp2-$installed_nghttp2_version-done
2132 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2134 # Get rid of the previously downloaded and unpacked version.
2136 rm -rf nghttp2-$installed_nghttp2_version
2137 rm -rf nghttp2-$installed_nghttp2_version.tar.xz
2140 installed_nghttp2_version=""
2145 if [ "$NGHTTP3_VERSION" -a ! -f nghttp3-$NGHTTP3_VERSION-done ] ; then
2146 echo "Downloading, building, and installing nghttp3:"
2147 [ -f nghttp3-$NGHTTP3_VERSION.tar.xz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://github.com/ngtcp2/nghttp3/releases/download/v$NGHTTP3_VERSION/nghttp3-$NGHTTP3_VERSION.tar.xz
2148 $no_build && echo "Skipping installation" && return
2149 xzcat nghttp3-$NGHTTP3_VERSION.tar.xz | tar xf -
2150 cd nghttp3-$NGHTTP3_VERSION
2151 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2152 ./configure "${CONFIGURE_OPTS[@]}" --enable-lib-only
2153 make "${MAKE_BUILD_OPTS[@]}"
2156 touch nghttp3-$NGHTTP3_VERSION-done
2160 uninstall_nghttp3() {
2161 if [ -n "$installed_nghttp3_version" ] ; then
2162 echo "Uninstalling nghttp3:"
2163 cd nghttp3-$installed_nghttp3_version
2167 rm nghttp3-$installed_nghttp3_version-done
2169 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2171 # Get rid of the previously downloaded and unpacked version.
2173 rm -rf nghttp3-$installed_nghttp3_version
2174 rm -rf nghttp3-$installed_nghttp3_version.tar.xz
2177 installed_nghttp3_version=""
2182 if [ "$LIBTIFF_VERSION" -a ! -f tiff-$LIBTIFF_VERSION-done ] ; then
2183 echo "Downloading, building, and installing libtiff:"
2184 [ -f tiff-$LIBTIFF_VERSION.tar.gz ] ||
2185 curl "${CURL_REMOTE_NAME_OPTS[@]}" https://download.osgeo.org/libtiff/tiff-$LIBTIFF_VERSION.tar.gz ||
2186 curl "${CURL_REMOTE_NAME_OPTS[@]}" https://download.osgeo.org/libtiff/old/tiff-$LIBTIFF_VERSION.tar.gz ||
2188 $no_build && echo "Skipping installation" && return
2189 gzcat tiff-$LIBTIFF_VERSION.tar.gz | tar xf -
2190 cd tiff-$LIBTIFF_VERSION
2191 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2192 ./configure "${CONFIGURE_OPTS[@]}"
2193 make "${MAKE_BUILD_OPTS[@]}"
2196 touch tiff-$LIBTIFF_VERSION-done
2200 uninstall_libtiff() {
2201 if [ -n "$installed_libtiff_version" ] ; then
2202 echo "Uninstalling libtiff:"
2203 cd tiff-$installed_libtiff_version
2207 rm tiff-$installed_libtiff_version-done
2209 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2211 # Get rid of the previously downloaded and unpacked version.
2213 rm -rf tiff-$installed_libtiff_version
2214 rm -rf tiff-$installed_libtiff_version.tar.gz
2217 installed_libtiff_version=""
2222 if [ "$SPANDSP_VERSION" -a ! -f spandsp-$SPANDSP_VERSION-done ] ; then
2223 echo "Downloading, building, and installing SpanDSP:"
2224 [ -f spandsp-$SPANDSP_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://www.soft-switch.org/downloads/spandsp/spandsp-$SPANDSP_VERSION.tar.gz
2225 $no_build && echo "Skipping installation" && return
2226 gzcat spandsp-$SPANDSP_VERSION.tar.gz | tar xf -
2227 cd spandsp-$SPANDSP_VERSION
2229 # Don't use -Wunused-but-set-variable, as it's not supported
2230 # by all the gcc versions in the versions of Xcode that we
2233 patch -p0 < "${topdir}/tools/macos-setup-patches/spandsp-configure-patch"
2234 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2235 ./configure "${CONFIGURE_OPTS[@]}"
2236 make "${MAKE_BUILD_OPTS[@]}"
2239 touch spandsp-$SPANDSP_VERSION-done
2243 uninstall_spandsp() {
2244 if [ -n "$installed_spandsp_version" ] ; then
2245 echo "Uninstalling SpanDSP:"
2246 cd spandsp-$installed_spandsp_version
2250 rm spandsp-$installed_spandsp_version-done
2252 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2254 # Get rid of the previously downloaded and unpacked version.
2256 rm -rf spandsp-$installed_spandsp_version
2257 rm -rf spandsp-$installed_spandsp_version.tar.gz
2260 installed_spandsp_version=""
2264 install_speexdsp() {
2265 if [ "$SPEEXDSP_VERSION" -a ! -f speexdsp-$SPEEXDSP_VERSION-done ] ; then
2266 echo "Downloading, building, and installing SpeexDSP:"
2267 [ -f speexdsp-$SPEEXDSP_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://ftp.osuosl.org/pub/xiph/releases/speex/speexdsp-$SPEEXDSP_VERSION.tar.gz
2268 $no_build && echo "Skipping installation" && return
2269 gzcat speexdsp-$SPEEXDSP_VERSION.tar.gz | tar xf -
2270 cd speexdsp-$SPEEXDSP_VERSION
2271 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2272 ./configure "${CONFIGURE_OPTS[@]}"
2273 make "${MAKE_BUILD_OPTS[@]}"
2276 touch speexdsp-$SPEEXDSP_VERSION-done
2280 uninstall_speexdsp() {
2281 if [ -n "$installed_speexdsp_version" ] ; then
2282 echo "Uninstalling SpeexDSP:"
2283 cd speexdsp-$installed_speexdsp_version
2287 rm speexdsp-$installed_speexdsp_version-done
2289 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2291 # Get rid of the previously downloaded and unpacked version.
2293 rm -rf speexdsp-$installed_speexdsp_version
2294 rm -rf speexdsp-$installed_speexdsp_version.tar.gz
2297 installed_speexdsp_version=""
2302 if [ "$BCG729_VERSION" -a ! -f bcg729-$BCG729_VERSION-done ] ; then
2303 echo "Downloading, building, and installing bcg729:"
2304 [ -f bcg729-$BCG729_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://gitlab.linphone.org/BC/public/bcg729/-/archive/$BCG729_VERSION/bcg729-$BCG729_VERSION.tar.gz
2305 $no_build && echo "Skipping installation" && return
2306 gzcat bcg729-$BCG729_VERSION.tar.gz | tar xf -
2307 cd bcg729-$BCG729_VERSION
2311 make "${MAKE_BUILD_OPTS[@]}"
2314 touch bcg729-$BCG729_VERSION-done
2318 uninstall_bcg729() {
2319 if [ -n "$installed_bcg729_version" ] ; then
2320 echo "Uninstalling bcg729:"
2321 cd bcg729-$installed_bcg729_version
2323 # bcg729 uses cmake on macOS and doesn't support "make uninstall";
2324 # just remove what we know it installs.
2326 # $DO_MAKE_UNINSTALL
2327 $DO_RM -rf "$installation_prefix"/share/Bcg729 \
2328 "$installation_prefix"/lib/libbcg729* \
2329 "$installation_prefix"/include/bcg729 \
2330 "$installation_prefix"/lib/pkgconfig/libbcg729*
2332 # bcg729 uses cmake on macOS and doesn't support "make distclean";
2333 # just remove the enire build directory.
2338 rm bcg729-$installed_bcg729_version-done
2340 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2342 # Get rid of the previously downloaded and unpacked version.
2344 rm -rf bcg729-$installed_bcg729_version
2345 rm -rf bcg729-$installed_bcg729_version.tar.gz
2348 installed_bcg729_version=""
2353 if [ -n "$ILBC_VERSION" ] && [ ! -f ilbc-$ILBC_VERSION-done ] ; then
2354 echo "Downloading, building, and installing iLBC:"
2355 [ -f libilbc-$ILBC_VERSION.tar.bz ] || curl --location --remote-name https://github.com/TimothyGu/libilbc/releases/download/v$ILBC_VERSION/libilbc-$ILBC_VERSION.tar.bz2
2356 $no_build && echo "Skipping installation" && return
2357 bzcat libilbc-$ILBC_VERSION.tar.bz2 | tar xf -
2358 cd libilbc-$ILBC_VERSION
2359 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2360 ./configure "${CONFIGURE_OPTS[@]}"
2361 make "${MAKE_BUILD_OPTS[@]}"
2364 touch ilbc-$ILBC_VERSION-done
2369 if [ -n "$installed_ilbc_version" ] ; then
2370 echo "Uninstalling iLBC:"
2371 cd "libilbc-$installed_ilbc_version"
2375 rm "ilbc-$installed_ilbc_version-done"
2377 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
2379 # Get rid of the previously downloaded and unpacked version.
2381 rm -rf "libilbc-$installed_ilbc_version"
2382 rm -rf "libilbc-$installed_ilbc_version.tar.bz2"
2385 installed_ilbc_version=""
2389 install_opencore_amr() {
2390 if [ "$OPENCORE_AMR_VERSION" ] && [ ! -f opencore-amr-$OPENCORE_AMR_VERSION-done ] ; then
2391 echo "Downloading, building, and installing opencore-amr:"
2392 [ -f opencore-amr-$OPENCORE_AMR_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://downloads.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-$OPENCORE_AMR_VERSION.tar.gz
2393 echo "$OPENCORE_AMR_SHA256 opencore-amr-$OPENCORE_AMR_VERSION.tar.gz" | shasum --algorithm 256 --check
2394 $no_build && echo "Skipping installation" && return
2395 tar -xf opencore-amr-$OPENCORE_AMR_VERSION.tar.gz
2396 cd opencore-amr-$OPENCORE_AMR_VERSION
2397 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2398 ./configure "${CONFIGURE_OPTS[@]}"
2399 make "${MAKE_BUILD_OPTS[@]}"
2402 touch opencore-amr-$OPENCORE_AMR_VERSION-done
2406 uninstall_opencore_amr() {
2407 if [ -n "$installed_opencore_amr_version" ] ; then
2408 echo "Uninstalling opencore-amr:"
2409 cd "opencore-amr-$installed_opencore_amr_version"
2413 rm "opencore-amr-$installed_opencore_amr_version-done"
2415 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
2417 # Get rid of the previously downloaded and unpacked version.
2419 rm -rf "opencore-amr-$installed_opencore_amr_version"
2420 rm -rf "opencore-amr-$installed_opencore_amr_version.tar.gz"
2423 installed_opencore_amr_version=""
2428 if [ "$OPUS_VERSION" -a ! -f opus-$OPUS_VERSION-done ] ; then
2429 echo "Downloading, building, and installing opus:"
2430 [ -f opus-$OPUS_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://downloads.xiph.org/releases/opus/opus-$OPUS_VERSION.tar.gz
2431 $no_build && echo "Skipping installation" && return
2432 gzcat opus-$OPUS_VERSION.tar.gz | tar xf -
2433 cd opus-$OPUS_VERSION
2434 CFLAGS="$CFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2435 ./configure "${CONFIGURE_OPTS[@]}"
2436 make "${MAKE_BUILD_OPTS[@]}"
2439 touch opus-$OPUS_VERSION-done
2444 if [ -n "$installed_opus_version" ] ; then
2445 echo "Uninstalling opus:"
2446 cd opus-$installed_opus_version
2450 rm opus-$installed_opus_version-done
2452 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2454 # Get rid of the previously downloaded and unpacked version.
2456 rm -rf opus-$installed_opus_version
2457 rm -rf opus-$installed_opus_version.tar.gz
2460 installed_opus_version=""
2465 if [ "$JSONCPP_VERSION" ] && [ ! -f "jsoncpp-$JSONCPP_VERSION-done" ] ; then
2466 echo "Downloading, building, and installing JsonCpp:"
2467 [ -f "jsoncpp-$JSONCPP_VERSION.tar.gz" ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" --remote-header-name "https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/$JSONCPP_VERSION.tar.gz"
2468 $no_build && echo "Skipping installation" && return
2469 tar -xf "jsoncpp-$JSONCPP_VERSION.tar.gz"
2470 cd "jsoncpp-$JSONCPP_VERSION"
2473 "${DO_CMAKE[@]}" -DBUILD_OBJECT_LIBS=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF ..
2474 make "${MAKE_BUILD_OPTS[@]}"
2477 touch "jsoncpp-$JSONCPP_VERSION-done"
2481 uninstall_jsoncpp() {
2482 if [ "$installed_jsoncpp_version" ] && [ -s "jsoncpp-$installed_jsoncpp_version/build_dir/install_manifest.txt" ] ; then
2483 echo "Uninstalling JsonCpp:"
2484 while read -r ; do $DO_RM -v "$REPLY" ; done < <(cat "jsoncpp-$installed_jsoncpp_version/build_dir/install_manifest.txt"; echo)
2485 rm "jsoncpp-$JSONCPP_VERSION-done"
2487 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
2489 # Get rid of the previously downloaded and unpacked version.
2491 rm -rf "jsoncpp-$installed_jsoncpp_version"
2492 rm -rf "jsoncpp-$installed_jsoncpp_version.tar.gz"
2495 installed_jsoncpp_version=""
2500 if [ "$ONETBB_VERSION" ] && [ ! -f "onetbb-$ONETBB_VERSION-done" ] ; then
2501 echo "Downloading, building, and installing oneTBB:"
2502 [ -f "oneTBB-$ONETBB_VERSION.tar.gz" ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" --remote-header-name "https://github.com/oneapi-src/oneTBB/archive/refs/tags/v$ONETBB_VERSION.tar.gz"
2503 $no_build && echo "Skipping installation" && return
2504 tar -xf "oneTBB-$ONETBB_VERSION.tar.gz"
2505 cd "oneTBB-$ONETBB_VERSION"
2508 "${DO_CMAKE[@]}" -DBUILD_SHARED_LIBS=ON -DTBB_TEST=OFF ..
2509 make "${MAKE_BUILD_OPTS[@]}" tbb
2512 touch "onetbb-$ONETBB_VERSION-done"
2516 uninstall_onetbb() {
2517 if [ "$installed_onetbb_version" ] && [ -s "oneTBB-$installed_onetbb_version/build_dir/install_manifest.txt" ] ; then
2518 echo "Uninstalling oneTBB:"
2519 while read -r ; do $DO_RM -v "$REPLY" ; done < <(cat "oneTBB-$installed_onetbb_version/build_dir/install_manifest.txt"; echo)
2520 rm "onetbb-$installed_onetbb_version-done"
2522 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
2524 # Get rid of the previously downloaded and unpacked version.
2526 rm -rf "oneTBB-$installed_onetbb_version"
2527 rm -rf "oneTBB-$installed_onetbb_version.tar.gz"
2530 installed_onetbb_version=""
2535 if [ "$RE2_VERSION" ] && [ ! -f "re2-$RE2_VERSION-done" ] ; then
2536 echo "Downloading, building, and installing RE2:"
2537 [ -f "re2-$RE2_VERSION.tar.gz" ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" --remote-header-name "https://github.com/google/re2/archive/refs/tags/$RE2_VERSION.tar.gz"
2538 $no_build && echo "Skipping installation" && return
2539 tar -xf "re2-$RE2_VERSION.tar.gz"
2540 cd "re2-$RE2_VERSION"
2543 "${DO_CMAKE[@]}" -DBUILD_SHARED_LIBS=ON -DRE2_BUILD_TESTING=OFF ..
2544 make "${MAKE_BUILD_OPTS[@]}"
2547 touch "re2-$RE2_VERSION-done"
2552 if [ -n "$installed_re2_version" ] && [ -s "re2-$installed_re2_version/build_dir/install_manifest.txt" ] ; then
2553 echo "Uninstalling RE2:"
2554 while read -r ; do $DO_RM -v "$REPLY" ; done < <(cat "re2-$installed_re2_version/build_dir/install_manifest.txt"; echo)
2555 rm "re2-$installed_re2_version-done"
2557 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
2559 # Get rid of the previously downloaded and unpacked version.
2561 rm -rf "re2-$installed_re2_version"
2562 rm -rf "re2-$installed_re2_version.tar.gz"
2565 installed_re2_version=""
2569 install_falco_libs() {
2570 if [ "$FALCO_LIBS_VERSION" ] && [ ! -f "falco-libs-$FALCO_LIBS_VERSION-done" ] ; then
2571 echo "Downloading, building, and installing libsinsp and libscap:"
2572 [ -f "falco-libs-$FALCO_LIBS_VERSION.tar.gz" ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" --remote-header-name "https://github.com/falcosecurity/libs/archive/refs/tags/$FALCO_LIBS_VERSION.tar.gz"
2573 [ -f "falco-libs-$FALCO_LIBS_VERSION.tar.gz" ] || mv "libs-$FALCO_LIBS_VERSION.tar.gz" "falco-libs-$FALCO_LIBS_VERSION.tar.gz"
2574 $no_build && echo "Skipping installation" && return
2575 echo "$FALCO_LIBS_SHA256 falco-libs-$FALCO_LIBS_VERSION.tar.gz" | shasum --algorithm 256 --check
2576 tar -xf "falco-libs-$FALCO_LIBS_VERSION.tar.gz"
2577 mv "libs-$FALCO_LIBS_VERSION" "falco-libs-$FALCO_LIBS_VERSION"
2578 cd "falco-libs-$FALCO_LIBS_VERSION"
2579 patch -p1 < "${topdir}/tools/macos-setup-patches/falco-uthash_h-install.patch"
2580 patch -p1 < "${topdir}/tools/macos-setup-patches/falco-include-dirs.patch"
2583 "${DO_CMAKE[@]}" -DFALCOSECURITY_LIBS_VERSION="$FALCO_LIBS_VERSION" \
2584 -DBUILD_SHARED_LIBS=ON -DMINIMAL_BUILD=ON -DCREATE_TEST_TARGETS=OFF \
2585 -DUSE_BUNDLED_DEPS=ON -DUSE_BUNDLED_CARES=OFF -DUSE_BUNDLED_ZLIB=OFF \
2586 -DUSE_BUNDLED_JSONCPP=OFF -DUSE_BUNDLED_TBB=OFF -DUSE_BUNDLED_RE2=OFF \
2588 make "${MAKE_BUILD_OPTS[@]}"
2591 touch "falco-libs-$FALCO_LIBS_VERSION-done"
2595 uninstall_falco_libs() {
2596 if [ -n "$installed_falco_libs_version" ] && [ -s "falco-libs-$installed_falco_libs_version/build_dir/install_manifest.txt" ] ; then
2597 echo "Uninstalling Falco libs:"
2598 $DO_RM "$installation_prefix"/include/falcosecurity/uthash.h
2599 while read -r ; do $DO_RM -v "$REPLY" ; done < <(cat "falco-libs-$installed_falco_libs_version/build_dir/install_manifest.txt"; echo)
2600 rm "falco-libs-$installed_falco_libs_version-done"
2602 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
2604 # Get rid of the previously downloaded and unpacked version.
2606 rm -rf "falco-libs-$installed_falco_libs_version"
2607 rm -rf "falco-libs-$installed_falco_libs_version.tar.gz"
2610 installed_falco_libs_version=""
2615 # The macos11 universal2 installer can be deployed to older versions,
2616 # down to 10.9 (Mavericks). The 10.9 installer was deprecated in 3.9.8
2617 # and stopped being released after 3.9.13
2619 if [ "$PYTHON3_VERSION" -a ! -f python3-$PYTHON3_VERSION-done ] ; then
2620 echo "Downloading and installing python3:"
2621 [ -f python-$PYTHON3_VERSION-macos$macver.pkg ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://www.python.org/ftp/python/$PYTHON3_VERSION/python-$PYTHON3_VERSION-macos$macver.pkg
2622 $no_build && echo "Skipping installation" && return
2623 sudo installer -target / -pkg python-$PYTHON3_VERSION-macos$macver.pkg
2624 touch python3-$PYTHON3_VERSION-done
2627 # On macOS, the pip3 installed from Python packages appears to
2628 # install scripts /Library/Frameworks/Python.framework/Versions/M.N/bin,
2629 # where M.N is the major and minor version of Python (the dot-dot
2630 # release is irrelevant).
2632 # Strip off any dot-dot component in $PYTHON3_VERSION.
2634 python_version=$( echo "$PYTHON3_VERSION" | sed 's/\([1-9][0-9]*\.[1-9][0-9]*\).*/\1/' )
2636 # Now treat Meson as being in the directory in question.
2638 MESON="/Library/Frameworks/Python.framework/Versions/$python_version/bin/meson"
2641 # We're using the Python 3 that's in /usr/bin, the pip3 for
2642 # which installs scripts in /usr/local/bin, so, when we
2643 # install Meson, look for it there.
2645 MESON=/usr/local/bin/meson
2649 uninstall_python3() {
2650 # Major version (e.g. "3.7")
2651 local PYTHON_VERSION=${installed_python3_version%.*}
2652 if [ -n "$installed_python3_version" ] ; then
2653 echo "Uninstalling python3:"
2654 frameworkdir="/Library/Frameworks/Python.framework/Versions/$PYTHON_VERSION"
2655 sudo rm -rf "$frameworkdir"
2656 sudo rm -rf "/Applications/Python $PYTHON_VERSION"
2657 sudo find "$installation_prefix"/bin -maxdepth 1 -lname "*$frameworkdir/bin/*" -delete
2658 # Remove three symlinks and empty directories. Removing directories
2659 # might fail if for some reason multiple versions are installed.
2660 sudo rm /Library/Frameworks/Python.framework/Headers
2661 sudo rm /Library/Frameworks/Python.framework/Python
2662 sudo rm /Library/Frameworks/Python.framework/Resources
2663 sudo rmdir /Library/Frameworks/Python.framework/Versions
2664 sudo rmdir /Library/Frameworks/Python.framework
2665 sudo pkgutil --forget org.python.Python.PythonApplications-$PYTHON_VERSION
2666 sudo pkgutil --forget org.python.Python.PythonDocumentation-$PYTHON_VERSION
2667 sudo pkgutil --forget org.python.Python.PythonFramework-$PYTHON_VERSION
2668 sudo pkgutil --forget org.python.Python.PythonUnixTools-$PYTHON_VERSION
2669 rm python3-$installed_python3_version-done
2671 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2673 # Get rid of the previously downloaded and unpacked version.
2675 rm -f python-$installed_python3_version-macos11.pkg
2676 rm -f python-$installed_python3_version-macos11.0.pkg
2677 rm -f python-$installed_python3_version-macosx10.9.pkg
2678 rm -f python-$installed_python3_version-macosx10.6.pkg
2681 installed_python3_version=""
2686 if [ "$BROTLI_VERSION" -a ! -f brotli-$BROTLI_VERSION-done ] ; then
2687 echo "Downloading, building, and installing brotli:"
2688 [ -f brotli-$BROTLI_VERSION.tar.gz ] || curl "${CURL_LOCAL_NAME_OPTS[@]}" brotli-$BROTLI_VERSION.tar.gz https://github.com/google/brotli/archive/v$BROTLI_VERSION.tar.gz
2689 $no_build && echo "Skipping installation" && return
2690 gzcat brotli-$BROTLI_VERSION.tar.gz | tar xf -
2691 cd brotli-$BROTLI_VERSION
2695 make "${MAKE_BUILD_OPTS[@]}"
2698 touch brotli-$BROTLI_VERSION-done
2702 uninstall_brotli() {
2703 if [ -n "$installed_brotli_version" ] ; then
2704 echo "Uninstalling brotli:"
2705 cd brotli-$installed_brotli_version
2707 # brotli uses cmake on macOS and doesn't support "make uninstall";
2708 # just remove what we know it installs.
2710 # $DO_MAKE_UNINSTALL
2711 $DO_RM -rf "$installation_prefix"/bin/brotli \
2712 "$installation_prefix"/lib/libbrotli* \
2713 "$installation_prefix"/include/brotli \
2714 "$installation_prefix"/lib/pkgconfig/libbrotli*
2716 # brotli uses cmake on macOS and doesn't support "make distclean";
2717 # just remove the enire build directory.
2722 rm brotli-$installed_brotli_version-done
2724 if [ "$#" -eq 1 -a "$1" = "-r" ] ; then
2726 # Get rid of the previously downloaded and unpacked version.
2728 rm -rf brotli-$installed_brotli_version
2729 rm -rf brotli-$installed_brotli_version.tar.gz
2732 installed_brotli_version=""
2737 if [ "$ZLIB_VERSION" ] && [ ! -f minizip-$ZLIB_VERSION-done ] ; then
2738 echo "Downloading, building, and installing zlib for minizip:"
2739 [ -f zlib-$ZLIB_VERSION.tar.gz ] || curl "${CURL_LOCAL_NAME_OPTS[@]}" zlib-$ZLIB_VERSION.tar.gz https://zlib.net/fossils/zlib-$ZLIB_VERSION.tar.gz
2740 $no_build && echo "Skipping installation" && return
2741 gzcat zlib-$ZLIB_VERSION.tar.gz | tar xf -
2743 # minizip ships both with a minimal Makefile that doesn't
2744 # support "make install", "make uninstall", or "make distclean",
2745 # and with a Makefile.am file that, if we do an autoreconf,
2746 # gives us a configure script, and a Makefile.in that, if we run
2747 # the configure script, gives us a Makefile that supports all of
2748 # those targets, and that installs a pkg-config .pc file for
2751 # So that's what we do.
2753 cd zlib-$ZLIB_VERSION/contrib/minizip
2754 LIBTOOLIZE=glibtoolize autoreconf --force --install
2755 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=0 $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" \
2756 ./configure "${CONFIGURE_OPTS[@]}"
2757 make "${MAKE_BUILD_OPTS[@]}"
2760 touch minizip-$ZLIB_VERSION-done
2764 uninstall_minizip() {
2765 if [ -n "$installed_minizip_version" ] ; then
2766 echo "Uninstalling minizip:"
2767 cd zlib-$installed_minizip_version/contrib/minizip
2772 rm minizip-$installed_minizip_version-done
2774 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
2776 # Get rid of the previously downloaded and unpacked version.
2778 rm -rf zlib-$installed_minizip_version
2779 rm -rf zlib-$installed_minizip_version.tar.gz
2782 installed_minizip_version=""
2786 install_minizip_ng() {
2787 if [ "$MINIZIPNG_VERSION" ] && [ ! -f minizip-ng-$MINIZIPNG_VERSION-done ] ; then
2788 echo "Downloading, building, and installing minizip-ng:"
2789 [ -f $MINIZIPNG_VERSION.tar.gz ] || curl "${CURL_REMOTE_NAME_OPTS[@]}" https://github.com/zlib-ng/minizip-ng/archive/refs/tags/$MINIZIPNG_VERSION.tar.gz
2790 $no_build && echo "Skipping installation" && return
2791 gzcat $MINIZIPNG_VERSION.tar.gz | tar xf -
2792 cd minizip-ng-$MINIZIPNG_VERSION
2796 make "${MAKE_BUILD_OPTS[@]}"
2799 touch minizip-ng-$MINIZIPNG_VERSION-done
2803 uninstall_minizip_ng() {
2804 if [ -n "$installed_minizip_ng_version" ] ; then
2805 echo "Uninstalling minizip-ng:"
2806 cd minizip-ng-$installed_minizip_ng_version/contrib/minizip
2811 rm minizip-ng-$installed_minizip_ng_version-done
2813 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
2815 # Get rid of the previously downloaded and unpacked version.
2817 rm -rf minizip-ng-$installed_minizip_ng_version
2818 rm -rf minizip-ng-$installed_minizip_ng_version.tar.gz
2821 installed_minizip_ng_version=""
2825 if [ "$SPARKLE_VERSION" ] && [ ! -f sparkle-$SPARKLE_VERSION-done ] ; then
2826 echo "Downloading and installing Sparkle:"
2828 # Download the tarball and unpack it in $installation_prefix/Sparkle-x.y.z
2830 [ -f Sparkle-$SPARKLE_VERSION.tar.xz ] || curl "${CURL_LOCAL_NAME_OPTS[@]}" Sparkle-$SPARKLE_VERSION.tar.xz https://github.com/sparkle-project/Sparkle/releases/download/$SPARKLE_VERSION/Sparkle-$SPARKLE_VERSION.tar.xz
2831 $no_build && echo "Skipping installation" && return
2832 test -d "$installation_prefix/Sparkle-$SPARKLE_VERSION" || sudo mkdir "$installation_prefix/Sparkle-$SPARKLE_VERSION"
2833 sudo tar -C "$installation_prefix/Sparkle-$SPARKLE_VERSION" -xpof Sparkle-$SPARKLE_VERSION.tar.xz
2834 touch sparkle-$SPARKLE_VERSION-done
2838 uninstall_sparkle() {
2839 if [ -n "$installed_sparkle_version" ]; then
2840 echo "Uninstalling Sparkle:"
2841 sudo rm -rf "$installation_prefix/Sparkle-$installed_sparkle_version"
2843 rm sparkle-$installed_sparkle_version-done
2845 if [ "$#" -eq 1 ] && [ "$1" = "-r" ] ; then
2846 rm -f "Sparkle-$installed_sparkle_version.tar.xz"
2849 installed_sparkle_version=""
2855 # Check whether the versions we have installed are the versions
2856 # requested; if not, uninstall the installed versions.
2858 if [ -n "$installed_brotli_version" -a \
2859 "$installed_brotli_version" != "$BROTLI_VERSION" ] ; then
2860 echo "Installed brotli version is $installed_brotli_version"
2861 if [ -z "$BROTLI_VERSION" ] ; then
2862 echo "brotli is not requested"
2864 echo "Requested brotli version is $BROTLI_VERSION"
2869 if [ -n "$installed_python3_version" -a \
2870 "$installed_python3_version" != "$PYTHON3_VERSION" ] ; then
2871 echo "Installed python3 version is $installed_python3_version"
2872 if [ -z "$PYTHON3_VERSION" ] ; then
2873 echo "python3 is not requested"
2875 echo "Requested python3 version is $PYTHON3_VERSION"
2877 uninstall_python3 -r
2880 if [ -n "$installed_bcg729_version" -a \
2881 "$installed_bcg729_version" != "$BCG729_VERSION" ] ; then
2882 echo "Installed bcg729 version is $installed_bcg729_version"
2883 if [ -z "$BCG729_VERSION" ] ; then
2884 echo "bcg729 is not requested"
2886 echo "Requested bcg729 version is $BCG729_VERSION"
2891 if [ -n "$installed_ilbc_version" ] \
2892 && [ "$installed_ilbc_version" != "$ILBC_VERSION" ] ; then
2893 echo "Installed iLBC version is $installed_ilbc_version"
2894 if [ -z "$ILBC_VERSION" ] ; then
2895 echo "iLBC is not requested"
2897 echo "Requested iLBC version is $ILBC_VERSION"
2902 if [ -n "$installed_opencore_amr_version" ] \
2903 && [ "$installed_opencore_amr_version" != "$OPENCORE_AMR_VERSION" ] ; then
2904 echo "Installed opencore-amr version is $installed_opencore_amr_version"
2905 if [ -z "$OPENCORE_AMR_VERSION" ] ; then
2906 echo "opencore-amr is not requested"
2908 echo "Requested opencore-amr version is $OPENCORE_AMR_VERSION"
2910 uninstall_opencore_amr -r
2913 if [ -n "$installed_opus_version" ] \
2914 && [ "$installed_opus_version" != "$OPUS_VERSION" ] ; then
2915 echo "Installed opus version is $installed_opus_version"
2916 if [ -z "$OPUS_VERSION" ] ; then
2917 echo "opus is not requested"
2919 echo "Requested opus version is $OPUS_VERSION"
2924 if [ -n "$installed_spandsp_version" -a \
2925 "$installed_spandsp_version" != "$SPANDSP_VERSION" ] ; then
2926 echo "Installed SpanDSP version is $installed_spandsp_version"
2927 if [ -z "$SPANDSP_VERSION" ] ; then
2928 echo "spandsp is not requested"
2930 echo "Requested SpanDSP version is $SPANDSP_VERSION"
2932 uninstall_spandsp -r
2935 if [ -n "$installed_speexdsp_version" -a \
2936 "$installed_speexdsp_version" != "$SPEEXDSP_VERSION" ] ; then
2937 echo "Installed SpeexDSP version is $installed_speexdsp_version"
2938 if [ -z "$SPEEXDSP_VERSION" ] ; then
2939 echo "speexdsp is not requested"
2941 echo "Requested SpeexDSP version is $SPEEXDSP_VERSION"
2943 uninstall_speexdsp -r
2946 if [ -n "$installed_libtiff_version" -a \
2947 "$installed_libtiff_version" != "$LIBTIFF_VERSION" ] ; then
2948 echo "Installed libtiff version is $installed_libtiff_version"
2949 if [ -z "$LIBTIFF_VERSION" ] ; then
2950 echo "libtiff is not requested"
2952 echo "Requested libtiff version is $LIBTIFF_VERSION"
2954 uninstall_libtiff -r
2957 if [ -n "$installed_nghttp2_version" -a \
2958 "$installed_nghttp2_version" != "$NGHTTP2_VERSION" ] ; then
2959 echo "Installed nghttp2 version is $installed_nghttp2_version"
2960 if [ -z "$NGHTTP2_VERSION" ] ; then
2961 echo "nghttp2 is not requested"
2963 echo "Requested nghttp2 version is $NGHTTP2_VERSION"
2965 uninstall_nghttp2 -r
2968 if [ -n "$installed_nghttp3_version" -a \
2969 "$installed_nghttp3_version" != "$NGHTTP3_VERSION" ] ; then
2970 echo "Installed nghttp3 version is $installed_nghttp3_version"
2971 if [ -z "$NGHTTP3_VERSION" ] ; then
2972 echo "nghttp3 is not requested"
2974 echo "Requested nghttp3 version is $NGHTTP3_VERSION"
2976 uninstall_nghttp3 -r
2979 if [ -n "$installed_libssh_version" -a \
2980 "$installed_libssh_version" != "$LIBSSH_VERSION" ] ; then
2981 echo "Installed libssh version is $installed_libssh_version"
2982 if [ -z "$LIBSSH_VERSION" ] ; then
2983 echo "libssh is not requested"
2985 echo "Requested libssh version is $LIBSSH_VERSION"
2990 if [ -n "$installed_cares_version" -a \
2991 "$installed_cares_version" != "$CARES_VERSION" ] ; then
2992 echo "Installed C-Ares version is $installed_cares_version"
2993 if [ -z "$CARES_VERSION" ] ; then
2994 echo "C-Ares is not requested"
2996 echo "Requested C-Ares version is $CARES_VERSION"
3001 if [ -n "$installed_maxminddb_version" -a \
3002 "$installed_maxminddb_version" != "$MAXMINDDB_VERSION" ] ; then
3003 echo "Installed MaxMindDB API version is $installed_maxminddb_version"
3004 if [ -z "$MAXMINDDB_VERSION" ] ; then
3005 echo "MaxMindDB is not requested"
3007 echo "Requested MaxMindDB version is $MAXMINDDB_VERSION"
3009 uninstall_maxminddb -r
3012 if [ -n "$installed_sbc_version" -a \
3013 "$installed_sbc_version" != "$SBC_VERSION" ] ; then
3014 echo "Installed SBC version is $installed_sbc_version"
3015 if [ -z "$SBC_VERSION" ] ; then
3016 echo "SBC is not requested"
3018 echo "Requested SBC version is $SBC_VERSION"
3023 if [ -n "$installed_lz4_version" -a \
3024 "$installed_lz4_version" != "$LZ4_VERSION" ] ; then
3025 echo "Installed LZ4 version is $installed_lz4_version"
3026 if [ -z "$LZ4_VERSION" ] ; then
3027 echo "LZ4 is not requested"
3029 echo "Requested LZ4 version is $LZ4_VERSION"
3034 if [ -n "$installed_libxml2_version" ] && [ "$installed_libxml2_version" != "$LIBXML2_VERSION" ] ; then
3035 echo "Installed libxml2 version is $installed_libxml2_version"
3036 if [ -z "$LIBXML2_VERSION" ] ; then
3037 echo "libxml2 is not requested"
3039 echo "Requested libxml2 version is $LIBXML2_VERSION"
3041 uninstall_libxml2 -r
3044 if [ -n "$installed_snappy_version" -a \
3045 "$installed_snappy_version" != "$SNAPPY_VERSION" ] ; then
3046 echo "Installed SNAPPY version is $installed_snappy_version"
3047 if [ -z "$SNAPPY_VERSION" ] ; then
3048 echo "SNAPPY is not requested"
3050 echo "Requested SNAPPY version is $SNAPPY_VERSION"
3055 if [ -n "$installed_zstd_version" ] && [ "$installed_zstd_version" != "$ZSTD_VERSION" ] ; then
3056 echo "Installed zstd version is $installed_zstd_version"
3057 if [ -z "$ZSTD_VERSION" ] ; then
3058 echo "zstd is not requested"
3060 echo "Requested zstd version is $ZSTD_VERSION"
3065 if [ -n "$installed_zlibng_version" ] && [ "$installed_zlibng_version" != "$ZLIBNG_VERSION" ] ; then
3066 echo "Installed zlibng version is $installed_zlibng_version"
3067 if [ -z "$ZLIBNG_VERSION" ] ; then
3068 echo "zlibng is not requested"
3070 echo "Requested zlibng version is $ZLIBNG_VERSION"
3075 if [ -n "$installed_lua_version" -a \
3076 "$installed_lua_version" != "$LUA_VERSION" ] ; then
3077 echo "Installed Lua version is $installed_lua_version"
3078 if [ -z "$LUA_VERSION" ] ; then
3079 echo "Lua is not requested"
3081 echo "Requested Lua version is $LUA_VERSION"
3086 if [ -n "$installed_gnutls_version" ] && [ "$installed_gnutls_version" != "$GNUTLS_VERSION" ] ; then
3087 echo "Installed GnuTLS version is $installed_gnutls_version"
3088 if [ -z "$GNUTLS_VERSION" ] ; then
3089 echo "GnuTLS is not requested"
3091 echo "Requested GnuTLS version is $GNUTLS_VERSION"
3096 if [ -n "$installed_nettle_version" -a \
3097 "$installed_nettle_version" != "$NETTLE_VERSION" ] ; then
3098 echo "Installed Nettle version is $installed_nettle_version"
3099 if [ -z "$NETTLE_VERSION" ] ; then
3100 echo "Nettle is not requested"
3102 echo "Requested Nettle version is $NETTLE_VERSION"
3107 if [ -n "$installed_gmp_version" -a \
3108 "$installed_gmp_version" != "$GMP_VERSION" ] ; then
3109 echo "Installed GMP version is $installed_gmp_version"
3110 if [ -z "$GMP_VERSION" ] ; then
3111 echo "GMP is not requested"
3113 echo "Requested GMP version is $GMP_VERSION"
3118 if [ -n "$installed_p11_kit_version" -a \
3119 "$installed_p11_kit_version" != "$P11KIT_VERSION" ] ; then
3120 echo "Installed p11-kit version is $installed_p11_kit_version"
3121 if [ -z "$P11KIT_VERSION" ] ; then
3122 echo "p11-kit is not requested"
3124 echo "Requested p11-kit version is $P11KIT_VERSION"
3126 uninstall_p11_kit -r
3129 if [ -n "$installed_libtasn1_version" -a \
3130 "$installed_libtasn1_version" != "$LIBTASN1_VERSION" ] ; then
3131 echo "Installed libtasn1 version is $installed_libtasn1_version"
3132 if [ -z "$LIBTASN1_VERSION" ] ; then
3133 echo "libtasn1 is not requested"
3135 echo "Requested libtasn1 version is $LIBTASN1_VERSION"
3137 uninstall_libtasn1 -r
3140 if [ -n "$installed_libgcrypt_version" -a \
3141 "$installed_libgcrypt_version" != "$LIBGCRYPT_VERSION" ] ; then
3142 echo "Installed libgcrypt version is $installed_libgcrypt_version"
3143 if [ -z "$LIBGCRYPT_VERSION" ] ; then
3144 echo "libgcrypt is not requested"
3146 echo "Requested libgcrypt version is $LIBGCRYPT_VERSION"
3148 uninstall_libgcrypt -r
3151 if [ -n "$installed_libgpg_error_version" -a \
3152 "$installed_libgpg_error_version" != "$LIBGPG_ERROR_VERSION" ] ; then
3153 echo "Installed libgpg-error version is $installed_libgpg_error_version"
3154 if [ -z "$LIBGPG_ERROR_VERSION" ] ; then
3155 echo "libgpg-error is not requested"
3157 echo "Requested libgpg-error version is $LIBGPG_ERROR_VERSION"
3159 uninstall_libgpg_error -r
3162 if [ -n "$installed_libsmi_version" -a \
3163 "$installed_libsmi_version" != "$LIBSMI_VERSION" ] ; then
3164 echo "Installed libsmi version is $installed_libsmi_version"
3165 if [ -z "$LIBSMI_VERSION" ] ; then
3166 echo "libsmi is not requested"
3168 echo "Requested libsmi version is $LIBSMI_VERSION"
3173 if [ -n "$installed_qt_version" -a \
3174 "$installed_qt_version" != "$QT_VERSION" ] ; then
3175 echo "Installed Qt version is $installed_qt_version"
3176 if [ -z "$QT_VERSION" ] ; then
3177 echo "Qt is not requested"
3179 echo "Requested Qt version is $QT_VERSION"
3184 if [ -n "$installed_glib_version" -a \
3185 "$installed_glib_version" != "$GLIB_VERSION" ] ; then
3186 echo "Installed GLib version is $installed_glib_version"
3187 if [ -z "$GLIB_VERSION" ] ; then
3188 echo "GLib is not requested"
3190 echo "Requested GLib version is $GLIB_VERSION"
3195 if [ -n "$installed_pkg_config_version" -a \
3196 "$installed_pkg_config_version" != "$PKG_CONFIG_VERSION" ] ; then
3197 echo "Installed pkg-config version is $installed_pkg_config_version"
3198 if [ -z "$PKG_CONFIG_VERSION" ] ; then
3199 echo "pkg-config is not requested"
3201 echo "Requested pkg-config version is $PKG_CONFIG_VERSION"
3203 uninstall_pkg_config -r
3206 if [ -n "$installed_gettext_version" -a \
3207 "$installed_gettext_version" != "$GETTEXT_VERSION" ] ; then
3208 echo "Installed GNU gettext version is $installed_gettext_version"
3209 if [ -z "$GETTEXT_VERSION" ] ; then
3210 echo "GNU gettext is not requested"
3212 echo "Requested GNU gettext version is $GETTEXT_VERSION"
3214 uninstall_gettext -r
3217 if [ -n "$installed_ninja_version" -a \
3218 "$installed_ninja_version" != "$NINJA_VERSION" ] ; then
3219 echo "Installed Ninja version is $installed_ninja_version"
3220 if [ -z "$NINJA_VERSION" ] ; then
3221 echo "Ninja is not requested"
3223 echo "Requested Ninja version is $NINJA_VERSION"
3228 if [ -n "$installed_asciidoctorpdf_version" -a \
3229 "$installed_asciidoctorpdf_version" != "$ASCIIDOCTORPDF_VERSION" ] ; then
3230 echo "Installed Asciidoctor-pdf version is $installed_asciidoctorpdf_version"
3231 if [ -z "$ASCIIDOCTORPDF_VERSION" ] ; then
3232 echo "Asciidoctor-pdf is not requested"
3234 echo "Requested Asciidoctor-pdf version is $ASCIIDOCTORPDF_VERSION"
3236 # XXX - really remove this?
3237 # Or should we remember it as installed only if this script
3240 uninstall_asciidoctorpdf -r
3243 if [ -n "$installed_asciidoctor_version" -a \
3244 "$installed_asciidoctor_version" != "$ASCIIDOCTOR_VERSION" ] ; then
3245 echo "Installed Asciidoctor version is $installed_asciidoctor_version"
3246 if [ -z "$ASCIIDOCTOR_VERSION" ] ; then
3247 echo "Asciidoctor is not requested"
3249 echo "Requested Asciidoctor version is $ASCIIDOCTOR_VERSION"
3251 # XXX - really remove this?
3252 # Or should we remember it as installed only if this script
3255 uninstall_asciidoctor -r
3258 if [ -n "$installed_cmake_version" -a \
3259 "$installed_cmake_version" != "$CMAKE_VERSION" ] ; then
3260 echo "Installed CMake version is $installed_cmake_version"
3261 if [ -z "$CMAKE_VERSION" ] ; then
3262 echo "CMake is not requested"
3264 echo "Requested CMake version is $CMAKE_VERSION"
3269 if [ -n "$installed_libtool_version" -a \
3270 "$installed_libtool_version" != "$LIBTOOL_VERSION" ] ; then
3271 echo "Installed GNU libtool version is $installed_libtool_version"
3272 if [ -z "$LIBTOOL_VERSION" ] ; then
3273 echo "GNU libtool is not requested"
3275 echo "Requested GNU libtool version is $LIBTOOL_VERSION"
3277 uninstall_libtool -r
3280 if [ -n "$installed_automake_version" -a \
3281 "$installed_automake_version" != "$AUTOMAKE_VERSION" ] ; then
3282 echo "Installed GNU automake version is $installed_automake_version"
3283 if [ -z "$AUTOMAKE_VERSION" ] ; then
3284 echo "GNU automake is not requested"
3286 echo "Requested GNU automake version is $AUTOMAKE_VERSION"
3288 uninstall_automake -r
3291 if [ -n "$installed_autoconf_version" -a \
3292 "$installed_autoconf_version" != "$AUTOCONF_VERSION" ] ; then
3293 echo "Installed GNU autoconf version is $installed_autoconf_version"
3294 if [ -z "$AUTOCONF_VERSION" ] ; then
3295 echo "GNU autoconf is not requested"
3297 echo "Requested GNU autoconf version is $AUTOCONF_VERSION"
3299 uninstall_autoconf -r
3302 if [ -n "$installed_pcre_version" ] ; then
3303 echo "Installed pcre1 version is $installed_pcre_version"
3304 echo "(We no longer build with pcre1)"
3308 if [ -n "$installed_pcre2_version" -a \
3309 "$installed_pcre2_version" != "$PCRE2_VERSION" ] ; then
3310 echo "Installed pcre2 version is $installed_pcre2_version"
3311 if [ -z "$PCRE2_VERSION" ] ; then
3312 echo "pcre2 is not requested"
3314 echo "Requested pcre2 version is $PCRE2_VERSION"
3319 if [ -n "$installed_lzip_version" ] ; then
3320 echo "Removing legacy install of lzip"
3324 if [ -n "$installed_xz_version" -a \
3325 "$installed_xz_version" != "$XZ_VERSION" ] ; then
3326 echo "Installed xz version is $installed_xz_version"
3327 if [ -z "$XZ_VERSION" ] ; then
3328 echo "xz is not requested"
3330 echo "Requested xz version is $XZ_VERSION"
3335 if [ -n "$installed_curl_version" -a \
3336 "$installed_curl_version" != "$CURL_VERSION" ] ; then
3337 echo "Installed curl version is $installed_curl_version"
3338 if [ -z "$CURL_VERSION" ] ; then
3339 echo "curl is not requested"
3341 echo "Requested curl version is $CURL_VERSION"
3346 if [ -n "$installed_minizip_version" -a \
3347 "$installed_minizip_version" != "$ZLIB_VERSION" ] ; then
3348 echo "Installed minizip (zlib) version is $installed_minizip_version"
3349 if [ -z "$ZLIB_VERSION" ] ; then
3350 echo "minizip is not requested"
3352 echo "Requested minizip (zlib) version is $ZLIB_VERSION"
3354 uninstall_minizip -r
3357 if [ -n "$installed_minizip_ng_version" ] && [ "$installed_minizip_ng_version" != "$MINIZIPNG_VERSION" ] ; then
3358 echo "Installed minizip-ng version is $installed_minizip_ng_version"
3359 if [ -z "$MINIZIPNG_VERSION" ] ; then
3360 echo "minizip-ng is not requested"
3362 echo "Requested minizip-ng version is $MINIZIPNG_VERSION"
3364 uninstall_minizip_ng -r
3367 if [ -n "$installed_sparkle_version" -a \
3368 "$installed_sparkle_version" != "$SPARKLE_VERSION" ] ; then
3369 echo "Installed Sparkle version is $installed_sparkle_version"
3370 if [ -z "$SPARKLE_VERSION" ] ; then
3371 echo "Sparkle is not requested"
3373 echo "Requested Sparkle version is $SPARKLE_VERSION"
3375 uninstall_sparkle -r
3378 if [ "$installed_falco_libs_version" ] && [ "$installed_falco_libs_version" != "$FALCO_LIBS_VERSION" ] ; then
3379 echo "Installed Falco libs (libsinsp and libscap) version is $installed_falco_libs_version"
3380 if [ -z "$FALCO_LIBS_VERSION" ] ; then
3381 echo "Falco libs is not requested"
3383 echo "Requested Falco libs version is $FALCO_LIBS_VERSION"
3385 uninstall_falco_libs -r
3388 if [ "$installed_jsoncpp_version" ] && [ "$installed_jsoncpp_version" != "$JSONCPP_VERSION" ] ; then
3389 echo "Installed JsonCpp version is $installed_jsoncpp_version"
3390 if [ -z "$JSONCPP_VERSION" ] ; then
3391 echo "JsonCpp is not requested"
3393 echo "Requested JsonCpp version is $JSONCPP_VERSION"
3395 uninstall_jsoncpp -r
3398 if [ "$installed_onetbb_version" ] && [ "$installed_onetbb_version" != "$ONETBB_VERSION" ] ; then
3399 echo "Installed oneTBB version is $installed_onetbb_version"
3400 if [ -z "$ONETBB_VERSION" ] ; then
3401 echo "oneTBB is not requested"
3403 echo "Requested oneTBB version is $ONETBB_VERSION"
3408 if [ "$installed_re2_version" ] && [ "$installed_re2_version" != "$RE2_VERSION" ] ; then
3409 echo "Installed RE2 version is $installed_re2_version"
3410 if [ -z "$RE2_VERSION" ] ; then
3411 echo "RE2 is not requested"
3413 echo "Requested RE2 version is $RE2_VERSION"
3419 # Start with curl: we may need it to download and install xz.
3424 # Now install xz: it is the sole download format of glib later than 2.31.2.
3439 # Install Python 3 now; not only is it needed for the Wireshark
3440 # build process, it's also needed for the Meson build system,
3441 # which newer versions of GLib use as their build system.
3446 # Now install Meson and pytest.
3456 install_asciidoctorpdf
3459 # Start with GNU gettext; GLib requires it, and macOS doesn't have it
3460 # or a BSD-licensed replacement.
3462 # At least on Lion with Xcode 4, _FORTIFY_SOURCE gets defined as 2
3463 # by default, which causes, for example, stpncpy to be defined as
3464 # a hairy macro that collides with the GNU gettext configure script's
3465 # attempts to workaround AIX's lack of a declaration for stpncpy,
3466 # with the result being a huge train wreck. Define _FORTIFY_SOURCE
3467 # as 0 in an attempt to keep the trains on separate tracks.
3472 # GLib depends on pkg-config.
3473 # By default, pkg-config depends on GLib; we break the dependency cycle
3474 # by configuring pkg-config to use its own internal version of GLib.
3481 # Now we have reached a point where we can build everything but
3482 # the GUI (Wireshark).
3487 # Now we have reached a point where we can build everything including
3488 # the GUI (Wireshark), but not with any optional features such as
3489 # SNMP OID resolution, some forms of decryption, Lua scripting, playback
3490 # of audio, or MaxMindDB mapping of IP addresses.
3492 # We now conditionally download optional libraries to support them;
3493 # the default is to download them all.
3498 install_libgpg_error
3546 install_opencore_amr
3568 if [ -d "${MACOSX_SUPPORT_LIBS}" ]
3570 cd "${MACOSX_SUPPORT_LIBS}"
3573 # Uninstall items in the reverse order from the order in which they're
3574 # installed. Only uninstall if the download/build/install process
3575 # completed; uninstall the version that appears in the name of
3578 # We also do a "make distclean", so that we don't have leftovers from
3579 # old configurations.
3581 uninstall_falco_libs
3593 uninstall_minizip_ng
3599 uninstall_opencore_amr
3647 uninstall_libgpg_error
3655 uninstall_pkg_config
3662 # XXX - really remove this?
3663 # Or should we remember it as installed only if this script
3666 uninstall_asciidoctorpdf
3668 uninstall_asciidoctor
3695 # This script is meant to be run in the source root. The following
3696 # code will attempt to get you there, but is not perfect (particularly
3697 # if someone copies the script).
3699 topdir="$( pwd )/$( dirname "$0" )/.."
3702 # Preference of the support libraries directory:
3703 # ${MACOSX_SUPPORT_LIBS}
3704 # ../macosx-support-libs
3705 # ./macosx-support-libs (default if none exists)
3706 if [ ! -d "${MACOSX_SUPPORT_LIBS}" ]; then
3707 unset MACOSX_SUPPORT_LIBS
3709 if [ -d ../macosx-support-libs ]; then
3710 MACOSX_SUPPORT_LIBS=${MACOSX_SUPPORT_LIBS-../macosx-support-libs}
3712 MACOSX_SUPPORT_LIBS=${MACOSX_SUPPORT_LIBS-./macosx-support-libs}
3716 # If we have SDKs available, the default target OS is the major version
3717 # of the one we're running; get that and strip off the third component
3720 for i in /Developer/SDKs \
3721 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs \
3722 /Library/Developer/CommandLineTools/SDKs
3726 min_osx_target=$( sw_vers -productVersion | sed 's/\([0-9]*\)\.\([0-9]*\)\.[0-9]*/\1.\2/' )
3732 # Parse command-line flags:
3735 # -t <target> - build libraries so that they'll work on the specified
3736 # version of macOS and later versions.
3737 # -u - do an uninstall.
3738 # -n - download all packages, but don't build or install.
3743 installation_prefix=/usr/local
3745 while getopts hnp:t:u name
3749 echo "Usage: macos-setup.sh [ -n ] [ -p <installation prefix> ] [ -t <target> ] [ -u ]" 1>&1
3756 installation_prefix="$OPTARG"
3759 min_osx_target="$OPTARG"
3768 # Create our custom installation prefix if needed.
3770 if [ "$installation_prefix" != "/usr/local" ] ; then
3771 export PATH="$installation_prefix/bin:$PATH"
3772 if [ ! -d "$installation_prefix" ] ; then
3773 echo "Creating $installation_prefix"
3774 $DO_MKDIR "$installation_prefix"
3779 # Do we have permission to write in $installation_prefix?
3781 # If so, assume we have permission to write in its subdirectories.
3782 # (If that's not the case, this test needs to check the subdirectories
3785 # If not, do "make install", "make uninstall", "ninja install",
3786 # "ninja uninstall", the removes for dependencies that don't support
3787 # "make uninstall" or "ninja uninstall", the renames of [g]libtool*,
3788 # and the writing of a libffi .pc file with sudo.
3790 if [ -w "$installation_prefix" ]
3793 DO_MAKE_INSTALL="make install"
3794 DO_MAKE_UNINSTALL="make uninstall"
3795 DO_NINJA_INSTALL="ninja -C _build install"
3796 DO_NINJA_UNINSTALL="ninja -C _build uninstall"
3797 DO_TEE_TO_PC_FILE="tee"
3802 DO_MAKE_INSTALL="sudo make install"
3803 DO_MAKE_UNINSTALL="sudo make uninstall"
3804 DO_NINJA_INSTALL="sudo ninja -C _build install"
3805 DO_NINJA_UNINSTALL="sudo ninja -C _build uninstall"
3806 DO_TEE_TO_PC_FILE="sudo tee"
3812 # When building with CMake, don't build libraries with an install path
3813 # that begins with @rpath because that will cause binaries linked with it
3814 # to use that path as the library to look for, and that will cause the
3815 # run-time linker, at least on macOS 14 and later, not to find the library
3816 # in $installation_prefix/lib unless you explicitly set DYLD_LIBRARY_PATH to include
3817 # $installation_prefix/lib. That means that you get "didn't find libpcre" errors if
3818 # you try to run binaries from a build unless you set DYLD_LIBRARYPATH to
3819 # include $installation_prefix/lib.
3821 # However, setting CMAKE_MACOSX_RPATH to OFF causes the installed
3822 # library just to have the file name of the library as its install
3823 # name. It needs to be the full installed path of the library in
3824 # order to make running binaries from the build directory work, so
3825 # we set CMAKE_INSTALL_NAME_DIR to $installation_prefix/lib.
3827 # packaging/macosx/osx-app.sh will convert *all* libraries in
3828 # the app bundle to have an @rpath install name, so this won't
3829 # break anything there; it just fixes the ability to run from the
3833 -DCMAKE_OSX_DEPLOYMENT_TARGET="$min_osx_target"
3834 -DSDKROOT="$SDKPATH"
3835 -DCMAKE_MACOSX_RPATH=OFF
3836 -DCMAKE_INSTALL_PREFIX="$installation_prefix"
3837 -DCMAKE_INSTALL_NAME_DIR="$installation_prefix/lib"
3841 # Get the version numbers of installed packages, if any.
3843 if [ -d "${MACOSX_SUPPORT_LIBS}" ]
3845 cd "${MACOSX_SUPPORT_LIBS}"
3847 installed_xz_version=$( ls xz-*-done 2>/dev/null | sed 's/xz-\(.*\)-done/\1/' )
3848 installed_lzip_version=$( ls lzip-*-done 2>/dev/null | sed 's/lzip-\(.*\)-done/\1/' )
3849 installed_pcre_version=$( ls pcre-*-done 2>/dev/null | sed 's/pcre-\(.*\)-done/\1/' )
3850 installed_pcre2_version=$( ls pcre2-*-done 2>/dev/null | sed 's/pcre2-\(.*\)-done/\1/' )
3851 installed_autoconf_version=$( ls autoconf-*-done 2>/dev/null | sed 's/autoconf-\(.*\)-done/\1/' )
3852 installed_automake_version=$( ls automake-*-done 2>/dev/null | sed 's/automake-\(.*\)-done/\1/' )
3853 installed_libtool_version=$( ls libtool-*-done 2>/dev/null | sed 's/libtool-\(.*\)-done/\1/' )
3854 installed_cmake_version=$( ls cmake-*-done 2>/dev/null | sed 's/cmake-\(.*\)-done/\1/' )
3855 installed_ninja_version=$( ls ninja-*-done 2>/dev/null | sed 's/ninja-\(.*\)-done/\1/' )
3856 installed_asciidoctor_version=$( ls asciidoctor-*-done 2>/dev/null | sed 's/asciidoctor-\(.*\)-done/\1/' )
3857 installed_asciidoctorpdf_version=$( ls asciidoctorpdf-*-done 2>/dev/null | sed 's/asciidoctorpdf-\(.*\)-done/\1/' )
3858 installed_gettext_version=$( ls gettext-*-done 2>/dev/null | sed 's/gettext-\(.*\)-done/\1/' )
3859 installed_pkg_config_version=$( ls pkg-config-*-done 2>/dev/null | sed 's/pkg-config-\(.*\)-done/\1/' )
3860 installed_glib_version=$( ls glib-*-done 2>/dev/null | sed 's/glib-\(.*\)-done/\1/' )
3861 installed_qt_version=$( ls qt-*-done 2>/dev/null | sed 's/qt-\(.*\)-done/\1/' )
3862 installed_libsmi_version=$( ls libsmi-*-done 2>/dev/null | sed 's/libsmi-\(.*\)-done/\1/' )
3863 installed_libgpg_error_version=$( ls libgpg-error-*-done 2>/dev/null | sed 's/libgpg-error-\(.*\)-done/\1/' )
3864 installed_libgcrypt_version=$( ls libgcrypt-*-done 2>/dev/null | sed 's/libgcrypt-\(.*\)-done/\1/' )
3865 installed_gmp_version=$( ls gmp-*-done 2>/dev/null | sed 's/gmp-\(.*\)-done/\1/' )
3866 installed_libtasn1_version=$( ls libtasn1-*-done 2>/dev/null | sed 's/libtasn1-\(.*\)-done/\1/' )
3867 installed_p11_kit_version=$( ls p11-kit-*-done 2>/dev/null | sed 's/p11-kit-\(.*\)-done/\1/' )
3868 installed_nettle_version=$( ls nettle-*-done 2>/dev/null | sed 's/nettle-\(.*\)-done/\1/' )
3869 installed_gnutls_version=$( ls gnutls-*-done 2>/dev/null | sed 's/gnutls-\(.*\)-done/\1/' )
3870 installed_lua_version=$( ls lua-*-done 2>/dev/null | sed 's/lua-\(.*\)-done/\1/' )
3871 installed_snappy_version=$( ls snappy-*-done 2>/dev/null | sed 's/snappy-\(.*\)-done/\1/' )
3872 installed_zstd_version=$( ls zstd-*-done 2>/dev/null | sed 's/zstd-\(.*\)-done/\1/' )
3873 installed_zlibng_version=$( ls zlibng-*-done 2>/dev/null | sed 's/zlibng-\(.*\)-done/\1/' )
3874 installed_libxml2_version=$( ls libxml2-*-done 2>/dev/null | sed 's/libxml2-\(.*\)-done/\1/' )
3875 installed_lz4_version=$( ls lz4-*-done 2>/dev/null | sed 's/lz4-\(.*\)-done/\1/' )
3876 installed_sbc_version=$( ls sbc-*-done 2>/dev/null | sed 's/sbc-\(.*\)-done/\1/' )
3877 installed_maxminddb_version=$( ls maxminddb-*-done 2>/dev/null | sed 's/maxminddb-\(.*\)-done/\1/' )
3878 installed_cares_version=$( ls c-ares-*-done 2>/dev/null | sed 's/c-ares-\(.*\)-done/\1/' )
3879 installed_libssh_version=$( ls libssh-*-done 2>/dev/null | sed 's/libssh-\(.*\)-done/\1/' )
3880 installed_nghttp2_version=$( ls nghttp2-*-done 2>/dev/null | sed 's/nghttp2-\(.*\)-done/\1/' )
3881 installed_nghttp3_version=$( ls nghttp3-*-done 2>/dev/null | sed 's/nghttp3-\(.*\)-done/\1/' )
3882 installed_libtiff_version=$( ls tiff-*-done 2>/dev/null | sed 's/tiff-\(.*\)-done/\1/' )
3883 installed_spandsp_version=$( ls spandsp-*-done 2>/dev/null | sed 's/spandsp-\(.*\)-done/\1/' )
3884 installed_speexdsp_version=$( ls speexdsp-*-done 2>/dev/null | sed 's/speexdsp-\(.*\)-done/\1/' )
3885 installed_bcg729_version=$( ls bcg729-*-done 2>/dev/null | sed 's/bcg729-\(.*\)-done/\1/' )
3886 installed_ilbc_version=$( ls ilbc-*-done 2>/dev/null | sed 's/ilbc-\(.*\)-done/\1/' )
3887 installed_opencore_amr_version=$( ls opencore-amr-*-done 2>/dev/null | sed 's/opencore-amr-\(.*\)-done/\1/' )
3888 installed_opus_version=$( ls opus-*-done 2>/dev/null | sed 's/opus-\(.*\)-done/\1/' )
3889 installed_python3_version=$( ls python3-*-done 2>/dev/null | sed 's/python3-\(.*\)-done/\1/' )
3890 installed_brotli_version=$( ls brotli-*-done 2>/dev/null | sed 's/brotli-\(.*\)-done/\1/' )
3891 installed_minizip_version=$( ls minizip-[0-9.]*-done 2>/dev/null | sed 's/minizip-\(.*\)-done/\1/' )
3892 installed_minizip_ng_version=$( ls minizip-ng-*-done 2>/dev/null | sed 's/minizip-ng-\(.*\)-done/\1/' )
3893 installed_sparkle_version=$( ls sparkle-*-done 2>/dev/null | sed 's/sparkle-\(.*\)-done/\1/' )
3898 if [ "$do_uninstall" = "yes" ]
3905 # Configure scripts tend to set CFLAGS and CXXFLAGS to "-g -O2" if
3906 # invoked without CFLAGS or CXXFLAGS being set in the environment.
3908 # However, we *are* setting them in the environment, for our own
3909 # nefarious purposes, so start them out as "-g -O2".
3911 export CFLAGS="-g -O2 -I$installation_prefix/include"
3912 export CXXFLAGS="-g -O2 -I$installation_prefix/include"
3913 export LDFLAGS="-L$installation_prefix/lib"
3914 export PKG_CONFIG_PATH="$installation_prefix/lib/pkgconfig"
3916 CONFIGURE_OPTS=( --prefix="$installation_prefix" )
3917 # if no make options are present, set default options
3918 # Should we just set MAKEFLAGS instead?
3919 if [ -z "$MAKE_BUILD_OPTS" ] ; then
3920 # by default use 1.5x number of cores for parallel build
3921 MAKE_BUILD_OPTS=( -j $(( $(sysctl -n hw.logicalcpu) * 3 / 2)) )
3924 CURL_REMOTE_NAME_OPTS=(--fail-with-body --location --remote-name)
3925 CURL_LOCAL_NAME_OPTS=(--fail-with-body --location --output)
3928 # If we have a target release, look for the oldest SDK that's for an
3929 # OS equal to or later than that one, and build libraries against it
3930 # rather than against the headers and, more importantly, libraries
3931 # that come with the OS, so that we don't end up with support libraries
3932 # that only work on the OS version on which we built them, not earlier
3933 # versions of the same release, or earlier releases if the minimum is
3936 if [ -n "$min_osx_target" ]
3939 # Get the major and minor version of the target release.
3940 # We assume it'll be a while before there's a macOS 100. :-)
3942 case "$min_osx_target" in
3948 min_osx_target_major=$( echo "$min_osx_target" | sed -n 's/\([1-9][0-9]*\)\..*/\1/p' )
3949 min_osx_target_minor=$( echo "$min_osx_target" | sed -n 's/[1-9][0-9]*\.\(.*\)/\1/p' )
3954 # Just a major version number was specified; make the minor
3957 min_osx_target_major="$min_osx_target"
3958 min_osx_target_minor=0
3962 echo "macosx-setup.sh: Invalid target release $min_osx_target" 1>&2
3968 # Search each directory that might contain SDKs.
3971 for sdksdir in /Developer/SDKs \
3972 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs \
3973 /Library/Developer/CommandLineTools/SDKs
3976 # Get a list of all the SDKs.
3978 if ! test -d "$sdksdir"
3981 # There is no directory with that name.
3982 # Move on to the next one in the list, if any.
3988 # Get a list of all the SDKs in that directory, if any.
3989 # We assume it'll be a while before there's a macOS 100. :-)
3991 sdklist=$( (cd "$sdksdir"; ls -d MacOSX[1-9][0-9].[0-9]*.sdk 2>/dev/null) )
3996 # Get the major and minor version for this SDK.
3998 sdk_major=$( echo "$sdk" | sed -n 's/MacOSX\([1-9][0-9]*\)\..*\.sdk/\1/p' )
3999 sdk_minor=$( echo "$sdk" | sed -n 's/MacOSX[1-9][0-9]*\.\(.*\)\.sdk/\1/p' )
4002 # Is it for the deployment target or some later release?
4003 # Starting with major 11, the minor version no longer matters.
4005 if test "$sdk_major" -gt "$min_osx_target_major" -o \
4006 \( "$sdk_major" -eq "$min_osx_target_major" -a \
4007 \( "$sdk_major" -ge 11 -o \
4008 "$sdk_minor" -ge "$min_osx_target_minor" \) \)
4013 sdkpath="$sdksdir/$sdk"
4019 if [ -z "$sdkpath" ]
4021 echo "macos-setup.sh: Couldn't find an SDK for macOS $min_osx_target or later" 1>&2
4026 echo "Using the $sdk_major.$sdk_minor SDK"
4029 # Make sure there are links to $installation_prefix/include and $installation_prefix/lib
4030 # in the SDK's usr/local.
4032 # XXX - Is this needed any more?
4033 # if [ ! -e $SDKPATH$installation_prefix/include ]
4035 # if [ ! -d $SDKPATH$installation_prefix ]
4037 # sudo mkdir $SDKPATH$installation_prefix
4039 # sudo ln -s $installation_prefix/include $SDKPATH$installation_prefix/include
4041 # if [ ! -e $SDKPATH$installation_prefix/lib ]
4043 # if [ ! -d $SDKPATH$installation_prefix ]
4045 # sudo mkdir $SDKPATH$installation_prefix
4047 # sudo ln -s $installation_prefix/lib $SDKPATH$installation_prefix/lib
4051 # Set the minimum OS version for which to build to the specified
4052 # minimum target OS version, so we don't, for example, end up using
4053 # linker features supported by the OS version on which we're building
4054 # but not by the target version.
4056 VERSION_MIN_FLAGS="-mmacosx-version-min=$min_osx_target"
4059 # Compile and link against the SDK.
4061 SDKFLAGS="-isysroot $SDKPATH"
4066 # You need Xcode or the command-line tools installed to get the compilers (xcrun checks both).
4068 if [ ! -x /usr/bin/xcrun ]; then
4069 echo "Please install Xcode (app or command line) first (should be available on DVD or from the Mac App Store)."
4073 if [ "$QT_VERSION" ]; then
4075 # We need Xcode, not just the command-line tools, installed to build
4078 # At least with Xcode 8, /usr/bin/xcodebuild --help fails if only
4079 # the command-line tools are installed and succeeds if Xcode is
4080 # installed. Unfortunately, it fails *with* Xcode 3, but
4081 # /usr/bin/xcodebuild -version works with that and with Xcode 8.
4082 # Hopefully it fails with only the command-line tools installed.
4084 if /usr/bin/xcodebuild -version >/dev/null 2>&1; then
4086 elif qmake --version >/dev/null 2>&1; then
4089 echo "Please install Xcode first (should be available on DVD or from the Mac App Store)."
4090 echo "The command-line build tools are not sufficient to build Qt."
4091 echo "Alternatively build QT according to: https://gist.github.com/shoogle/750a330c851bd1a924dfe1346b0b4a08#:~:text=MacOS%2FQt%5C%20Creator-,Go%20to%20Qt%20Creator%20%3E%20Preferences%20%3E%20Build%20%26%20Run%20%3E%20Kits,for%20both%20compilers%2C%20not%20gcc%20."
4097 # Do all the downloads and untarring in a subdirectory, so all that
4098 # stuff can be removed once we've installed the support libraries.
4100 if [ ! -d "${MACOSX_SUPPORT_LIBS}" ]
4102 mkdir "${MACOSX_SUPPORT_LIBS}"
4104 cd "${MACOSX_SUPPORT_LIBS}"
4111 # Indicate what paths to use for pkg-config and cmake.
4113 if [ "$QT_VERSION" ]; then
4114 qt_base_path=$HOME/Qt$QT_VERSION/$QT_VERSION/clang_64
4115 # CMAKE_PREFIX_PATH="$PACKAGE_CONFIG_PATH:$qt_base_path/lib/cmake"
4119 echo "All required dependencies downloaded. Run without -n to install them."
4123 if [ "$QT_VERSION" ]; then
4124 if [ -f "qt-$QT_VERSION-done" ]; then
4125 echo "You are now prepared to build Wireshark."
4127 echo "Qt was not installed; you will have to install it in order to build the"
4128 echo "Wireshark application, but you can build all the command-line tools in"
4129 echo "the Wireshark distribution."
4131 echo "See section 2.1.1. \"Build environment setup\" of the Wireshark Developer's"
4132 echo "Guide for instructions on how to install Qt."
4135 echo "You did not install Qt; you will have to install it in order to build"
4136 echo "the Wireshark application, but you can build all the command-line tools in"
4137 echo "the Wireshark distribution."
4142 echo "export PATH=$PATH:$qt_base_path/bin"
4144 echo "mkdir build; cd build"
4145 if [ -n "$NINJA_VERSION" ]; then
4146 echo "cmake -G Ninja .."
4147 echo "ninja wireshark_app_bundle stratoshark_app_bundle # (Modify as needed)"
4148 echo "ninja install/strip"
4151 echo "make ${MAKE_BUILD_OPTS[*]} wireshark_app_bundle stratoshark_app_bundle # (Modify as needed)"
4152 echo "make install/strip"
4155 echo "Make sure you are allowed capture access to the network devices"
4156 echo "See: https://gitlab.com/wireshark/wireshark/-/wikis/CaptureSetup/CapturePrivileges"