From 19a2f8cc7da52f62b6e7f4ca3b68ba7056b46f4e Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Thu, 29 Sep 2022 13:23:50 +0200 Subject: [PATCH] Add support for macOS to flake Signed-off-by: Claudio Cambra --- admin/nix/flake.nix | 56 ++++++++++++++----- .../project.pbxproj | 12 +++- .../xcschemes/FinderSyncExt.xcscheme | 1 + 3 files changed, 52 insertions(+), 17 deletions(-) diff --git a/admin/nix/flake.nix b/admin/nix/flake.nix index e4e976c82..c2bf70772 100644 --- a/admin/nix/flake.nix +++ b/admin/nix/flake.nix @@ -22,29 +22,35 @@ outputs = { self, nixpkgs, flake-utils }: with flake-utils.lib; - eachSystem [ "aarch64-linux" "x86_64-linux" ] (system: + eachSystem [ "aarch64-linux" "x86_64-linux" "aarch64-darwin" "x86_64-darwin" ] (system: let pkgs = import nixpkgs { inherit system; }; inherit (pkgs.lib.lists) optional optionals; - inherit (pkgs.lib.strings) hasPrefix hasSuffix; - isMacOS = hasSuffix "darwin" system; + inherit (pkgs.lib.strings) hasPrefix optionalString; isARM = hasPrefix "aarch64" system; + buildMacOSSymlinks = pkgs.runCommand "nextcloud-build-symlinks" {} '' + mkdir -p $out/bin + ln -s /usr/bin/xcrun /usr/bin/xcodebuild /usr/bin/iconutil $out/bin + ''; + nativeBuildInputs = with pkgs; [ cmake extra-cmake-modules pkg-config + inkscape qt5.wrapQtAppsHook + ] ++ optionals stdenv.isDarwin [ + buildMacOSSymlinks ]; buildInputs = with pkgs; [ sqlite openssl pcre - inkscape qt5.qtbase qt5.qtquickcontrols2 @@ -59,7 +65,7 @@ ] ++ optionals (!isARM) [ # Qt WebEngine not available on ARM qt5.qtwebengine - ] ++ optionals (stdenv.isLinux) [ + ] ++ optionals stdenv.isLinux [ inotify-tools libcloudproviders libsecret @@ -67,6 +73,10 @@ libsForQt5.breeze-icons libsForQt5.qqc2-desktop-style libsForQt5.kio + ] ++ optionals stdenv.isDarwin [ + libsForQt5.qt5.qtmacextras + + darwin.apple_sdk.frameworks.UserNotifications ]; packages.default = with pkgs; stdenv.mkDerivation rec { @@ -74,25 +84,43 @@ pname = "nextcloud-client"; version = "dev"; src = ../../.; + dontStrip = true; enableDebugging = true; separateDebugInfo = false; - cmakeFlags = if(stdenv.isLinux) then [ - "-DCMAKE_INSTALL_LIBDIR=lib" # expected to be prefix-relative by build code setting RPATH - "-DNO_SHIBBOLETH=1" # allows to compile without qtwebkit - ] else []; - postPatch = if(stdenv.isLinux) then '' + enableParallelBuilding = true; + + preConfigure = optionals stdenv.isLinux [ + '' + substituteInPlace shell_integration/libcloudproviders/CMakeLists.txt \ + --replace "PKGCONFIG_GETVAR(dbus-1 session_bus_services_dir _install_dir)" "set(_install_dir "\$\{CMAKE_INSTALL_DATADIR\}/dbus-1/service")" + '' + ] ++ optionals stdenv.isDarwin [ + '' + substituteInPlace shell_integration/MacOSX/CMakeLists.txt \ + --replace "-target FinderSyncExt -configuration Release" "-scheme FinderSyncExt -configuration Release -derivedDataPath $ENV{NIX_BUILD_TOP}/derivedData" + '' + ]; + + cmakeFlags = optionals stdenv.isLinux [ + "-DCMAKE_INSTALL_LIBDIR=lib" # expected to be prefix-relative by build code setting RPATH + "-DNO_SHIBBOLETH=1" # allows to compile without qtwebkit + ] ++ optionals stdenv.isDarwin [ + "-DQT_ENABLE_VERBOSE_DEPLOYMENT=TRUE" + "-DBUILD_OWNCLOUD_OSX_BUNDLE=OFF" + ]; + postPatch = optionalString stdenv.isLinux '' for file in src/libsync/vfs/*/CMakeLists.txt; do substituteInPlace $file \ --replace "PLUGINDIR" "KDE_INSTALL_PLUGINDIR" done - '' else ""; - postFixup = if(stdenv.isLinux) then '' + ''; + postFixup = optionalString stdenv.isLinux '' wrapProgram "$out/bin/nextcloud" \ --set LD_LIBRARY_PATH ${lib.makeLibraryPath [ libsecret ]} \ --set PATH ${lib.makeBinPath [ xdg-utils ]} \ --set QML_DISABLE_DISK_CACHE "1" - '' else ""; + ''; }; apps.default = mkApp { @@ -104,7 +132,7 @@ inherit packages apps; devShell = pkgs.mkShell { inherit buildInputs; - nativeBuildInputs = with pkgs; nativeBuildInputs ++[ + nativeBuildInputs = with pkgs; nativeBuildInputs ++ optionals (stdenv.isLinux) [ gdb qtcreator ]; diff --git a/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj/project.pbxproj b/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj/project.pbxproj index f8dbfad53..6f426cf08 100644 --- a/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj/project.pbxproj +++ b/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj/project.pbxproj @@ -33,14 +33,14 @@ /* Begin PBXCopyFilesBuildPhase section */ C2B573E11B1CD9CE00303B36 /* Embed App Extensions */ = { isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; + buildActionMask = 8; dstPath = ""; dstSubfolderSpec = 13; files = ( C2B573E21B1CD9CE00303B36 /* FinderSyncExt.appex in Embed App Extensions */, ); name = "Embed App Extensions"; - runOnlyForDeploymentPostprocessing = 0; + runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ @@ -198,10 +198,12 @@ C2B573B01B1CD91E00303B36 = { CreatedOnToolsVersion = 6.3.1; DevelopmentTeam = 9B5WD74GWJ; + ProvisioningStyle = Manual; }; C2B573D61B1CD9CE00303B36 = { CreatedOnToolsVersion = 6.3.1; DevelopmentTeam = 9B5WD74GWJ; + ProvisioningStyle = Manual; SystemCapabilities = { com.apple.ApplicationGroups.Mac = { enabled = 1; @@ -384,6 +386,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; @@ -433,6 +436,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -475,6 +479,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_ENTITLEMENTS = FinderSyncExt/FinderSyncExt.entitlements; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; @@ -529,7 +534,8 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_ENTITLEMENTS = FinderSyncExt/FinderSyncExt.entitlements; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; + CODE_SIGN_INJECT_BASE_ENTITLEMENTS = YES; + CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; diff --git a/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj/xcshareddata/xcschemes/FinderSyncExt.xcscheme b/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj/xcshareddata/xcschemes/FinderSyncExt.xcscheme index 3c65bbe5e..63ec0b6c5 100644 --- a/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj/xcshareddata/xcschemes/FinderSyncExt.xcscheme +++ b/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj/xcshareddata/xcschemes/FinderSyncExt.xcscheme @@ -83,6 +83,7 @@ savedToolIdentifier = "" useCustomWorkingDirectory = "NO" debugDocumentVersioning = "YES" + askForAppToLaunch = "Yes" launchAutomaticallySubstyle = "2">