chromium,chromedriver: 129.0.6668.91 -> 129.0.6668.100
[NixPkgs.git] / pkgs / by-name / sk / skia / package.nix
blob2790b77101d5fdadac21d48a482e9b978138d32d
1 { lib
2 , stdenv
3 , fetchgit
4 , expat
5 , fontconfig
6 , freetype
7 , harfbuzzFull
8 , icu
9 , gn
10 , libGL
11 , libjpeg
12 , libwebp
13 , libX11
14 , ninja
15 , python3
16 , testers
17 , vulkan-headers
18 , vulkan-memory-allocator
19 , xcbuild
21 , enableVulkan ? !stdenv.hostPlatform.isDarwin
24 stdenv.mkDerivation (finalAttrs: {
25   pname = "skia";
26   # Version from https://skia.googlesource.com/skia/+/refs/heads/main/RELEASE_NOTES.md
27   # or https://chromiumdash.appspot.com/releases
28   # plus date of the tip of the corresponding chrome/m$version branch
29   version = "129-unstable-2024-09-18";
31   src = fetchgit {
32     url = "https://skia.googlesource.com/skia.git";
33     # Tip of the chrome/m$version branch
34     rev = "dda581d538cb6532cda841444e7b4ceacde01ec9";
35     hash = "sha256-NZiZFsABebugszpYsBusVlTYnYda+xDIpT05cZ8Jals=";
36   };
38   postPatch = ''
39     # System zlib detection bug workaround
40     substituteInPlace BUILD.gn \
41       --replace-fail 'deps = [ "//third_party/zlib" ]' 'deps = []'
42   '';
44   strictDeps = true;
45   nativeBuildInputs = [
46     gn
47     ninja
48     python3
49   ] ++ lib.optional stdenv.hostPlatform.isDarwin xcbuild;
51   buildInputs = [
52     expat
53     fontconfig
54     freetype
55     harfbuzzFull
56     icu
57     libGL
58     libjpeg
59     libwebp
60     libX11
61   ] ++ lib.optionals enableVulkan [
62     vulkan-headers
63     vulkan-memory-allocator
64   ];
66   gnFlags = let
67     cpu = {
68       "x86_64" = "x64";
69       "i686" = "x86";
70       "arm" = "arm";
71       "aarch64" = "arm64";
72     }.${stdenv.hostPlatform.parsed.cpu.name};
73   in [
74     # Build in release mode
75     "is_official_build=true"
76     "is_component_build=true"
77     # Don't use missing tools
78     "skia_use_dng_sdk=false"
79     "skia_use_wuffs=false"
80     # Use system dependencies
81     "extra_cflags=[\"-I${harfbuzzFull.dev}/include/harfbuzz\"]"
82     "cc=\"${stdenv.cc.targetPrefix}cc\""
83     "cxx=\"${stdenv.cc.targetPrefix}c++\""
84     "ar=\"${stdenv.cc.targetPrefix}ar\""
85     "target_cpu=\"${cpu}\""
86   ] ++ map (lib: "skia_use_system_${lib}=true") [
87     "zlib"
88     "harfbuzz"
89     "libpng"
90     "libwebp"
91   ] ++ lib.optionals enableVulkan [
92     "skia_use_vulkan=true"
93   ];
95   # Somewhat arbitrary, but similar to what other distros are doing
96   installPhase = ''
97     runHook preInstall
99     # Libraries
100     mkdir -p $out/lib
101     cp *.so *.a $out/lib
103     # Includes
104     pushd ../../include
105     find . -name '*.h' -exec install -Dm644 {} $out/include/skia/{} \;
106     popd
107     pushd ../../modules
108     find . -name '*.h' -exec install -Dm644 {} $out/include/skia/modules/{} \;
109     popd
111     # Pkg-config
112     mkdir -p $out/lib/pkgconfig
113     cat > $out/lib/pkgconfig/skia.pc <<'EOF'
114     prefix=${placeholder "out"}
115     exec_prefix=''${prefix}
116     libdir=''${prefix}/lib
117     includedir=''${prefix}/include/skia
118     Name: skia
119     Description: 2D graphic library for drawing text, geometries and images.
120     URL: https://skia.org/
121     Version: ${lib.versions.major finalAttrs.version}
122     Libs: -L''${libdir} -lskia
123     Cflags: -I''${includedir}
124     EOF
126     runHook postInstall
127   '';
129   preFixup = ''
130     # Some skia includes are assumed to be under an include sub directory by
131     # other includes
132     for file in $(grep -rl '#include "include/' $out/include); do
133       substituteInPlace "$file" \
134         --replace-fail '#include "include/' '#include "'
135     done
136   '';
138   passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
140   meta = {
141     description = "2D graphic library for drawing text, geometries and images";
142     homepage = "https://skia.org/";
143     license = lib.licenses.bsd3;
144     maintainers = with lib.maintainers; [ fgaz ];
145     platforms = with lib.platforms; arm ++ aarch64 ++ x86 ++ x86_64;
146     pkgConfigModules = [ "skia" ];
147     # https://github.com/NixOS/nixpkgs/pull/325871#issuecomment-2220610016
148     broken = stdenv.hostPlatform.isDarwin;
149   };