aboutsummaryrefslogtreecommitdiffstats
path: root/tools/macos-setup.sh
diff options
context:
space:
mode:
authorGuy Harris <gharris@sonic.net>2021-07-29 14:06:58 -0700
committerGuy Harris <gharris@sonic.net>2021-07-29 14:06:58 -0700
commitcc34e1c40600bd3044dbd3642fa1282f265cfe79 (patch)
treef9cef56cbe57a0df023be3f62b194bd62e18228c /tools/macos-setup.sh
parentc263b0a13eadfc036a192d1880b1b25c5069539c (diff)
macos-setup: install and use Meson+Ninja to build newer versions of GLib.
Newer versions of GLib require Meson (they don't support autotools) and Ninja (they use Ninja rather than Make). Install Meson and, based on the GLib version, use autotools+make or Meson+Ninja to build GLib. Move up the installation of Python 3 so that it's available when we install Meson, as Meson requires Python 3 and is installed with pip3.
Diffstat (limited to 'tools/macos-setup.sh')
-rwxr-xr-xtools/macos-setup.sh195
1 files changed, 161 insertions, 34 deletions
diff --git a/tools/macos-setup.sh b/tools/macos-setup.sh
index bc4f14ee34..733802685f 100755
--- a/tools/macos-setup.sh
+++ b/tools/macos-setup.sh
@@ -104,6 +104,13 @@ NINJA_VERSION=${NINJA_VERSION-1.10.2}
#
GETTEXT_VERSION=0.21
GLIB_VERSION=2.58.3
+if [ "$GLIB_VERSION" ]; then
+ GLIB_MAJOR_VERSION="`expr $GLIB_VERSION : '\([0-9][0-9]*\).*'`"
+ GLIB_MINOR_VERSION="`expr $GLIB_VERSION : '[0-9][0-9]*\.\([0-9][0-9]*\).*'`"
+ GLIB_DOTDOT_VERSION="`expr $GLIB_VERSION : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*'`"
+ GLIB_MAJOR_MINOR_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION
+ GLIB_MAJOR_MINOR_DOTDOT_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_DOTDOT_VERSION
+fi
PKG_CONFIG_VERSION=0.29.2
#
# libgpg-error is required for libgcrypt.
@@ -694,6 +701,26 @@ uninstall_cmake() {
fi
}
+install_meson() {
+ #
+ # Install Meson with pip3 if we don't have it already.
+ #
+ if meson --version >/dev/null 2>&1
+ then
+ # Have it.
+ :
+ else
+ sudo pip3 install meson
+ fi
+}
+
+uninstall_meson() {
+ #
+ # Unnstall Meson with pip3
+ #
+ sudo pip3 uninstall meson
+}
+
install_gettext() {
if [ ! -f gettext-$GETTEXT_VERSION-done ] ; then
echo "Downloading, building, and installing GNU gettext:"
@@ -783,17 +810,6 @@ install_glib() {
xzcat glib-$GLIB_VERSION.tar.xz | tar xf - || exit 1
cd glib-$GLIB_VERSION
#
- # macOS ships with libffi, but doesn't provide its pkg-config file;
- # explicitly specify LIBFFI_CFLAGS and LIBFFI_LIBS, so the configure
- # script doesn't try to use pkg-config to get the appropriate
- # C flags and loader flags.
- #
- # And, what's worse, at least with the version of Xcode that comes
- # with Leopard, /usr/include/ffi/fficonfig.h doesn't define MACOSX,
- # which causes the build of GLib to fail. If we don't find
- # "#define.*MACOSX" in /usr/include/ffi/fficonfig.h, explicitly
- # define it.
- #
# While we're at it, suppress -Wformat-nonliteral to avoid a case
# where clang's stricter rules on when not to complain about
# non-literal format arguments cause it to complain about code
@@ -810,19 +826,66 @@ install_glib() {
# developer tools, there is a /usr/include directory).
#
includedir=`SDKROOT="$SDKPATH" xcrun --show-sdk-path 2>/dev/null`/usr/include
- if [ ! -f ./configure ]; then
- LIBTOOLIZE=glibtoolize ./autogen.sh
- fi
- if grep -qs '#define.*MACOSX' $includedir/ffi/fficonfig.h
- then
- # It's defined, nothing to do
- LIBFFI_CFLAGS="-I $includedir/ffi" LIBFFI_LIBS="-lffi" CFLAGS="$CFLAGS -Wno-format-nonliteral $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS -Wno-format-nonliteral $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" ./configure || exit 1
- else
- LIBFFI_CFLAGS="-I $includedir/ffi" LIBFFI_LIBS="-lffi" 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" ./configure || exit 1
- fi
+ #
+ # GLib 2.59.1 and later use Meson+Ninja as the build system.
+ #
+ case $GLIB_MAJOR_VERSION in
- make $MAKE_BUILD_OPTS || exit 1
- $DO_MAKE_INSTALL || exit 1
+ 1)
+ echo "GLib $GLIB_VERSION" is too old 1>&2
+ ;;
+
+ *)
+ case $GLIB_MINOR_VERSION in
+
+ [0-9]|1[0-9]|2[0-9]|3[0-7])
+ echo "GLib $GLIB_VERSION" is too old 1>&2
+ ;;
+
+ 3[8-9]|4[0-9]|5[0-8])
+ if [ ! -f ./configure ]; then
+ LIBTOOLIZE=glibtoolize ./autogen.sh
+ fi
+ #
+ # macOS ships with libffi, but doesn't provide its
+ # pkg-config file; explicitly specify LIBFFI_CFLAGS
+ # and LIBFFI_LIBS, so the configure script doesn't
+ # try to use pkg-config to get the appropriate
+ # C flags and loader flags.
+ #
+ # And, what's worse, at least with the version of Xcode
+ # that comes with Leopard, /usr/include/ffi/fficonfig.h
+ # doesn't define MACOSX, which causes the build of GLib
+ # to fail. If we don't find "#define.*MACOSX"
+ # in /usr/include/ffi/fficonfig.h, explicitly define it.
+ #
+ if grep -qs '#define.*MACOSX' $includedir/ffi/fficonfig.h
+ then
+ # It's defined, nothing to do
+ LIBFFI_CFLAGS="-I $includedir/ffi" LIBFFI_LIBS="-lffi" CFLAGS="$CFLAGS -Wno-format-nonliteral $VERSION_MIN_FLAGS $SDKFLAGS" CXXFLAGS="$CXXFLAGS -Wno-format-nonliteral $VERSION_MIN_FLAGS $SDKFLAGS" LDFLAGS="$LDFLAGS $VERSION_MIN_FLAGS $SDKFLAGS" ./configure || exit 1
+ else
+ LIBFFI_CFLAGS="-I $includedir/ffi" LIBFFI_LIBS="-lffi" 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" ./configure || exit 1
+ fi
+ make $MAKE_BUILD_OPTS || exit 1
+ $DO_MAKE_INSTALL || exit 1
+ ;;
+
+ 59|[6-9][0-9]|[1-9][0-9][0-9])
+ #
+ # 2.59.0 doesn't require Meson and Ninja, but it
+ # supports it, and I'm too lazy to add a dot-dot
+ # version check.
+ #
+ meson _build || exit 1
+ ninja $MAKE_BUILD_OPTS -C _build || exit 1
+ $DO_NINJA_INSTALL || exit 1
+ ;;
+ *)
+ echo "Glib's put out 1000 2.x releases?" 1>&2
+ ;;
+
+ esac
+ esac
cd ..
touch glib-$GLIB_VERSION-done
fi
@@ -832,15 +895,63 @@ uninstall_glib() {
if [ ! -z "$installed_glib_version" ] ; then
echo "Uninstalling GLib:"
cd glib-$installed_glib_version
- $DO_MAKE_UNINSTALL || exit 1
+ installed_glib_major_version="`expr $installed_glib_version : '\([0-9][0-9]*\).*'`"
+ installed_glib_minor_version="`expr $installed_glib_version : '[0-9][0-9]*\.\([0-9][0-9]*\).*'`"
+ installed_glib_dotdot_version="`expr $installed_glib_version : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*'`"
+ installed_glib_major_minor_version=$installed_glib_major_version.$installed_glib_minor_version
+ installed_glib_major_minor_dotdot_version=$installed_glib_major_version.$installed_glib_minor_version.$installed_glib_dotdot_version
#
- # This appears to delete dependencies out from under other
- # Makefiles in the tree, causing it to fail. At least until
- # that gets fixed, if it ever gets fixed, we just ignore the
- # exit status of "make distclean"
+ # GLib 2.59.1 and later use Meson+Ninja as the build system.
#
- # make distclean || exit 1
- make distclean || echo "Ignoring make distclean failure" 1>&2
+ case $installed_glib_major_version in
+
+ 1)
+ $DO_MAKE_UNINSTALL || exit 1
+ #
+ # This appears to delete dependencies out from under other
+ # Makefiles in the tree, causing it to fail. At least until
+ # that gets fixed, if it ever gets fixed, we just ignore the
+ # exit status of "make distclean"
+ #
+ # make distclean || exit 1
+ make distclean || echo "Ignoring make distclean failure" 1>&2
+ ;;
+
+ *)
+ case $installed_glib_minor_version in
+
+ [0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-8])
+ $DO_MAKE_UNINSTALL || exit 1
+ #
+ # This appears to delete dependencies out from under other
+ # Makefiles in the tree, causing it to fail. At least until
+ # that gets fixed, if it ever gets fixed, we just ignore the
+ # exit status of "make distclean"
+ #
+ # make distclean || exit 1
+ make distclean || echo "Ignoring make distclean failure" 1>&2
+ ;;
+
+ 59|[6-9][0-9]|[1-9][0-9][0-9])
+ #
+ # 2.59.0 doesn't require Meson and Ninja, but it
+ # supports it, and I'm too lazy to add a dot-dot
+ # version check.
+ #
+ $DO_NINJA_UNINSTALL || exit 1
+ #
+ # For Meson+Ninja, we do the build in an _build
+ # subdirectory, so the equivalent of "make distclean"
+ # is just to remove the directory tree.
+ #
+ rm -rf _build
+ ;;
+
+ *)
+ echo "Glib's put out 1000 2.x releases?" 1>&2
+ ;;
+ esac
+ esac
cd ..
rm glib-$installed_glib_version-done
@@ -2709,6 +2820,18 @@ install_all() {
install_cmake
+ #
+ # Install Python 3 now; not only is it needed for the Wireshark
+ # build process, it's also needed for the Meson build system,
+ # which newer versions of GLib use as their build system.
+ #
+ install_python3
+
+ #
+ # Now install Meson.
+ #
+ install_meson
+
install_ninja
install_asciidoctor
@@ -2801,8 +2924,6 @@ install_all() {
install_opus
- install_python3
-
install_brotli
install_minizip
@@ -2830,8 +2951,6 @@ uninstall_all() {
uninstall_brotli
- uninstall_python3
-
uninstall_opus
uninstall_ilbc
@@ -2899,6 +3018,10 @@ uninstall_all() {
uninstall_asciidoctor
+ uninstall_meson
+
+ uninstall_python3
+
uninstall_cmake
uninstall_libtool
@@ -2932,11 +3055,15 @@ if [ -w /usr/local ]
then
DO_MAKE_INSTALL="make install"
DO_MAKE_UNINSTALL="make uninstall"
+ DO_NINJA_INSTALL="ninja -C _build install"
+ DO_NINJA_UNINSTALL="ninja -C _build uninstall"
DO_RM="rm"
DO_MV="mv"
else
DO_MAKE_INSTALL="sudo make install"
DO_MAKE_UNINSTALL="sudo make uninstall"
+ DO_NINJA_INSTALL="sudo ninja -C _build install"
+ DO_NINJA_UNINSTALL="sudo ninja -C _build uninstall"
DO_RM="sudo rm"
DO_MV="sudo mv"
fi