Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / applications / misc / synergy / default.nix
blob2fe734fde00e7ad5bacf86ecdab6bae6b5e131e7
1 { withGUI ? true
2 , stdenv
3 , lib
4 , fetchFromGitHub
5 , wrapQtAppsHook
7 , cmake
8 , openssl
9 , pcre
10 , util-linux
11 , libselinux
12 , libsepol
13 , pkg-config
14 , gdk-pixbuf
15 , libnotify
16 , qttools
17 , libICE
18 , libSM
19 , libX11
20 , libxkbfile
21 , libXi
22 , libXtst
23 , libXrandr
24 , libXinerama
25 , xkeyboardconfig
26 , xinput
27 , avahi-compat
29   # MacOS / darwin
30 , darwin
31 , ApplicationServices
32 , Carbon
33 , Cocoa
34 , CoreServices
35 , ScreenSaver
38 stdenv.mkDerivation rec {
39   pname = "synergy";
40   version = "1.14.6.19-stable";
42   src = fetchFromGitHub {
43     owner = "symless";
44     repo = "synergy-core";
45     rev = version;
46     sha256 = "sha256-0QqklfSsvcXh7I2jaHk82k0nY8gQOj9haA4WOjGqBqY=";
47     fetchSubmodules = true;
48   };
50   patches = [
51     # Without this OpenSSL from nixpkgs is not detected
52     ./darwin-non-static-openssl.patch
53   ] ++ lib.optionals (stdenv.isDarwin && !(darwin.apple_sdk.frameworks ? UserNotifications)) [
54     # We cannot include UserNotifications because of a build failure in the Apple SDK.
55     # The functions used from it are already implicitly included anyways.
56     ./darwin-no-UserNotifications-includes.patch
57   ];
59   postPatch = ''
60     substituteInPlace src/gui/src/SslCertificate.cpp \
61       --replace 'kUnixOpenSslCommand[] = "openssl";' 'kUnixOpenSslCommand[] = "${openssl}/bin/openssl";'
62   '' + lib.optionalString stdenv.isLinux ''
63     substituteInPlace src/lib/synergy/unix/AppUtilUnix.cpp \
64       --replace "/usr/share/X11/xkb/rules/evdev.xml" "${xkeyboardconfig}/share/X11/xkb/rules/evdev.xml"
65   '';
67   nativeBuildInputs = [
68     cmake
69     pkg-config
70   ] ++ lib.optional withGUI wrapQtAppsHook;
72   buildInputs = [
73     qttools # Used for translations even when not building the GUI
74     openssl
75     pcre
76   ] ++ lib.optionals stdenv.isDarwin [
77     ApplicationServices
78     Carbon
79     Cocoa
80     CoreServices
81     ScreenSaver
82   ] ++ lib.optionals (stdenv.isDarwin && darwin.apple_sdk.frameworks ? UserNotifications) [
83     darwin.apple_sdk.frameworks.UserNotifications
84   ] ++ lib.optionals stdenv.isLinux [
85     util-linux
86     libselinux
87     libsepol
88     libICE
89     libSM
90     libX11
91     libXi
92     libXtst
93     libXrandr
94     libXinerama
95     libxkbfile
96     xinput
97     avahi-compat
98     gdk-pixbuf
99     libnotify
100   ];
102   # Silences many warnings
103   env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-Wno-inconsistent-missing-override";
105   cmakeFlags = lib.optional (!withGUI) "-DSYNERGY_BUILD_LEGACY_GUI=OFF"
106     # NSFilenamesPboardType is deprecated in 10.14+
107     ++ lib.optional stdenv.isDarwin "-DCMAKE_OSX_DEPLOYMENT_TARGET=${if stdenv.isAarch64 then "10.13" else stdenv.hostPlatform.darwinSdkVersion}";
109   doCheck = true;
111   checkPhase = ''
112     runHook preCheck
113     bin/unittests
114     runHook postCheck
115   '';
117   installPhase = ''
118     runHook preInstall
120     mkdir -p $out/bin
121     cp bin/{synergyc,synergys,synergyd,syntool} $out/bin/
122   '' + lib.optionalString withGUI ''
123     cp bin/synergy $out/bin/
124   '' + lib.optionalString stdenv.isLinux ''
125     mkdir -p $out/share/{applications,icons/hicolor/scalable/apps}
126     cp ../res/synergy.svg $out/share/icons/hicolor/scalable/apps/
127     substitute ../res/synergy.desktop $out/share/applications/synergy.desktop \
128       --replace "/usr/bin" "$out/bin"
129   '' + lib.optionalString stdenv.isDarwin ''
130     mkdir -p $out/Applications
131     cp -r bundle/Synergy.app $out/Applications
132     ln -s $out/bin $out/Applications/Synergy.app/Contents/MacOS
133   '' + ''
134     runHook postInstall
135   '';
137   dontWrapQtApps = lib.optional (!withGUI) true;
139   meta = with lib; {
140     description = "Share one mouse and keyboard between multiple computers";
141     homepage = "https://symless.com/synergy";
142     changelog = "https://github.com/symless/synergy-core/blob/${version}/ChangeLog";
143     mainProgram = lib.optionalString (!withGUI) "synergyc";
144     license = licenses.gpl2Only;
145     maintainers = with maintainers; [ talyz ivar ];
146     platforms = platforms.unix;
147   };