• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kivy / python-for-android / 16465999162

23 Jul 2025 08:49AM UTC coverage: 59.159% (-0.01%) from 59.171%
16465999162

Pull #3174

github

web-flow
Merge fb16b08a7 into a8f2ca1c5
Pull Request #3174: `recipes`: new pycairo recipe

1054 of 2381 branches covered (44.27%)

Branch coverage included in aggregate %.

29 of 48 new or added lines in 3 files covered. (60.42%)

32 existing lines in 1 file now uncovered.

4985 of 7827 relevant lines covered (63.69%)

2.54 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

53.13
/pythonforandroid/recipes/libcairo/__init__.py
1
from pythonforandroid.recipe import Recipe, MesonRecipe
4✔
2
from os.path import join
4✔
3
from pythonforandroid.util import ensure_dir, current_directory
4✔
4
from pythonforandroid.logger import shprint
4✔
5
from multiprocessing import cpu_count
4✔
6
import sh
4✔
7

8

9
class LibCairoRecipe(MesonRecipe):
4✔
10
    name = 'libcairo'
4✔
11
    version = '1.18.4'
4✔
12
    url = 'https://gitlab.freedesktop.org/cairo/cairo/-/archive/{version}/cairo-{version}.tar.bz2'
4✔
13
    skip_python = True
4✔
14
    depends = ["png", "freetype"]
4✔
15
    patches = ["meson.patch"]
4✔
16
    built_libraries = {
4✔
17
        'libcairo.so': 'install/lib',
18
        'libpixman-1.so': 'install/lib',
19
        'libcairo-script-interpreter.so': 'install/lib'
20
    }
21

22
    def should_build(self, arch):
4✔
NEW
23
        return Recipe.should_build(self, arch)
×
24

25
    def build_arch(self, arch):
4✔
NEW
26
        super().build_arch(arch)
×
NEW
27
        build_dir = self.get_build_dir(arch.arch)
×
NEW
28
        install_dir = join(build_dir, 'install')
×
NEW
29
        ensure_dir(install_dir)
×
NEW
30
        env = self.get_recipe_env(arch)
×
31

NEW
32
        lib_dir = self.ctx.get_libs_dir(arch.arch)
×
NEW
33
        png_include = self.get_recipe('png', self.ctx).get_build_dir(arch.arch)
×
NEW
34
        freetype_inc = join(self.get_recipe('freetype', self.ctx).get_build_dir(arch), "include")
×
35

NEW
36
        with current_directory(build_dir):
×
NEW
37
            shprint(sh.meson, 'setup', 'builddir',
×
38
                    '--cross-file', join("/tmp", "android.meson.cross"),
39
                    f'--prefix={install_dir}',
40
                    '-Dpng=enabled',
41
                    '-Dzlib=enabled',
42
                    '-Dglib=disabled',
43
                    '-Dgtk_doc=false',
44
                    '-Dsymbol-lookup=disabled',
45

46
                    # deps
47
                    f'-Dpng_include_dir={png_include}',
48
                    f'-Dpng_lib_dir={lib_dir}',
49
                    f'-Dfreetype_include_dir={freetype_inc}',
50
                    f'-Dfreetype_lib_dir={lib_dir}',
51
                    _env=env)
52

NEW
53
            shprint(sh.ninja, '-C', 'builddir', '-j', str(cpu_count()), _env=env)
×
NEW
54
            shprint(sh.ninja, '-C', 'builddir', 'install', _env=env)
×
55

56

57
recipe = LibCairoRecipe()
4✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc