Unverified Commit b94166b8 authored by Arne Keller's avatar Arne Keller Committed by GitHub
Browse files

mumble: Enable build on Darwin (#384691)

parents 33a11780 50a753f1
Loading
Loading
Loading
Loading
+87 −35
Original line number Diff line number Diff line
@@ -10,8 +10,8 @@
  boost,
  libopus,
  libsndfile,
  speexdsp,
  protobuf,
  speex,
  libcap,
  alsa-lib,
  python3,
@@ -22,16 +22,21 @@
  libogg,
  libvorbis,
  stdenv_32bit,
  alsaSupport ? stdenv.hostPlatform.isLinux,
  iceSupport ? true,
  zeroc-ice,
  jackSupport ? false,
  libjack2,
  pipewireSupport ? true,
  pipewireSupport ? stdenv.hostPlatform.isLinux,
  pipewire,
  pulseSupport ? true,
  libpulseaudio,
  speechdSupport ? false,
  speechd-minimal,
  microsoft-gsl,
  nlohmann_json,
  xar,
  makeWrapper,
}:

let
@@ -52,18 +57,24 @@ let
          qt5.qttools
        ] ++ (overrides.nativeBuildInputs or [ ]);

        buildInputs = [
          avahi
        buildInputs =
          [
            boost
            poco
            protobuf
        ] ++ (overrides.buildInputs or [ ]);
            microsoft-gsl
            nlohmann_json
          ]
          ++ lib.optionals stdenv.hostPlatform.isLinux [ avahi ]
          ++ (overrides.buildInputs or [ ]);

        cmakeFlags = [
          "-D g15=OFF"
          "-D CMAKE_CXX_STANDARD=17" # protobuf >22 requires C++ 17
          "-D BUILD_NUMBER=${lib.versions.patch source.version}"
        ] ++ (overrides.configureFlags or [ ]);
          "-D bundled-gsl=OFF"
          "-D bundled-json=OFF"
        ] ++ (overrides.cmakeFlags or [ ]);

        preConfigure = ''
          patchShebangs scripts
@@ -79,7 +90,7 @@ let
            felixsinger
            lilacious
          ];
          platforms = platforms.linux;
          platforms = platforms.linux ++ (overrides.platforms or [ ]);
        };
      }
    );
@@ -89,7 +100,13 @@ let
    generic {
      type = "mumble";

      nativeBuildInputs = [ qt5.qttools ];
      platforms = lib.platforms.darwin;
      nativeBuildInputs =
        [ qt5.qttools ]
        ++ lib.optionals stdenv.hostPlatform.isDarwin [
          makeWrapper
        ];

      buildInputs =
        [
          flac
@@ -97,36 +114,71 @@ let
          libopus
          libsndfile
          libvorbis
          speexdsp
          qt5.qtsvg
          rnnoise
          speex
        ]
        ++ lib.optional (!jackSupport) alsa-lib
        ++ lib.optional (!jackSupport && alsaSupport) alsa-lib
        ++ lib.optional jackSupport libjack2
        ++ lib.optional speechdSupport speechd-minimal
        ++ lib.optional pulseSupport libpulseaudio
        ++ lib.optional pipewireSupport pipewire;
        ++ lib.optional pipewireSupport pipewire
        ++ lib.optionals stdenv.hostPlatform.isDarwin [
          xar
        ];

      configureFlags =
        [
      cmakeFlags = [
        "-D server=OFF"
          "-D bundled-celt=ON"
          "-D bundled-opus=OFF"
        "-D bundled-speex=OFF"
        "-D bundle-qt-translations=OFF"
        "-D update=OFF"
        "-D overlay-xcompile=OFF"
        "-D oss=OFF"
        "-D warnings-as-errors=OFF" # conversion error workaround
        ]
        ++ lib.optional (!speechdSupport) "-D speechd=OFF"
        ++ lib.optional (!pulseSupport) "-D pulseaudio=OFF"
        ++ lib.optional (!pipewireSupport) "-D pipewire=OFF"
        ++ lib.optional jackSupport "-D alsa=OFF -D jackaudio=ON";
        # building the overlay on darwin does not work in nipxkgs (yet)
        # also see the patch below to disable scripts the build option misses
        # see https://github.com/mumble-voip/mumble/issues/6816
        (lib.cmakeBool "overlay" (!stdenv.hostPlatform.isDarwin))
        (lib.cmakeBool "speechd" speechdSupport)
        (lib.cmakeBool "pulseaudio" pulseSupport)
        (lib.cmakeBool "pipewire" pipewireSupport)
        (lib.cmakeBool "jackaudio" jackSupport)
        (lib.cmakeBool "alsa" (!jackSupport && alsaSupport))
      ];

      env.NIX_CFLAGS_COMPILE = lib.optionalString speechdSupport "-I${speechd-minimal}/include/speech-dispatcher";

      postFixup = ''
      patches = [
        ./disable-overlay-build.patch
        ./fix-plugin-copy.patch
        # Can be removed before the next update of Mumble, as that fix was upstreamed
        # fix version display in MacOS Finder
        (fetchpatch {
          url = "https://github.com/mumble-voip/mumble/commit/fbd21bd422367bed19f801bf278562f567cbb8b7.patch";
          sha256 = "sha256-qFhC2j/cOWzAhs+KTccDIdcgFqfr4y4VLjHiK458Ucs=";
        })
      ];

      postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
        # The build erraneously marks the *.dylib as executable
        # which causes the qt-hook to wrap it, which then prevents the app from loading it
        chmod -x $out/lib/mumble/plugins/*.dylib

        # Post-processing for the app bundle
        $NIX_BUILD_TOP/source/macx/scripts/osxdist.py \
          --source-dir=$NIX_BUILD_TOP/source/ \
          --binary-dir=$out \
          --only-appbundle \
          --version "${source.version}"

        mkdir -p $out/Applications $out/bin
        mv $out/Mumble.app $out/Applications/Mumble.app

        # ensure that the app can be started from the shell
        makeWrapper $out/Applications/Mumble.app/Contents/MacOS/mumble $out/bin/mumble
      '';

      postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
        wrapProgram $out/bin/mumble \
          --prefix LD_LIBRARY_PATH : "${
            lib.makeLibraryPath (
@@ -134,6 +186,7 @@ let
            )
          }"
      '';

    } source;

  server =
@@ -141,14 +194,13 @@ let
    generic {
      type = "murmur";

      configureFlags =
      cmakeFlags =
        [
          "-D client=OFF"
          (lib.cmakeBool "ice" iceSupport)
        ]
        ++ lib.optional (!iceSupport) "-D ice=OFF"
        ++ lib.optionals iceSupport [
          "-D Ice_HOME=${lib.getDev zeroc-ice};${lib.getLib zeroc-ice}"
          "-D CMAKE_PREFIX_PATH=${lib.getDev zeroc-ice};${lib.getLib zeroc-ice}"
          "-D Ice_SLICE_DIR=${lib.getDev zeroc-ice}/share/ice/slice"
        ];

@@ -161,7 +213,7 @@ let
      stdenv = stdenv_32bit;
      type = "mumble-overlay";

      configureFlags = [
      cmakeFlags = [
        "-D server=OFF"
        "-D client=OFF"
        "-D overlay=ON"
+21 −0
Original line number Diff line number Diff line
diff --git a/macx/scripts/osxdist.py b/macx/scripts/osxdist.py
index bdc7fcbd2..2114caf37 100755
--- a/macx/scripts/osxdist.py
+++ b/macx/scripts/osxdist.py
@@ -128,7 +128,7 @@ class AppBundle(object):
 				shutil.copy(rsrc, os.path.join(rsrcpath, b))

 		# Extras
-		shutil.copy(os.path.join(options.binary_dir, 'MumbleOverlay.pkg'), os.path.join(rsrcpath, 'MumbleOverlay.pkg'))
+		# shutil.copy(os.path.join(options.binary_dir, 'MumbleOverlay.pkg'), os.path.join(rsrcpath, 'MumbleOverlay.pkg'))

 	def copy_codecs(self):
 		'''
@@ -275,7 +276,7 @@ def package_client():
 		title = 'Mumble %s' % ver

 	# Fix overlay installer package
-	create_overlay_package()
+	# create_overlay_package()
 	if options.only_overlay:
 		sys.exit(0)
+13 −0
Original line number Diff line number Diff line
diff --git a/macx/scripts/osxdist.py b/macx/scripts/osxdist.py
index bdc7fcbd2..2114caf37 100755
--- a/macx/scripts/osxdist.py
+++ b/macx/scripts/osxdist.py
@@ -151,7 +151,7 @@ class AppBundle(object):
 		dst = os.path.join(self.bundle, 'Contents', 'Plugins')
 		if not os.path.exists(dst):
 			os.makedirs(dst)
-		for plugin in glob.glob(os.path.join(options.binary_dir, 'plugins') + '/*.dylib'):
+		for plugin in glob.glob(os.path.join(options.binary_dir, 'lib/mumble/plugins') + '/*.dylib'):
 			shutil.copy(plugin, dst)

 	def update_plist(self):