From 359ccae5da7dd610b3a0f432ba071bff007a9ce0 Mon Sep 17 00:00:00 2001 From: Funda Wang Date: Sun, 29 Jan 2023 01:50:48 +0800 Subject: [PATCH] Build with meson --- ...ult-LCD-filter-to-FreeType-s-default.patch | 56 ++++++ cairo-1.17.6-meson-fixes.patch | 178 ++++++++++++++++++ cairo.spec | 109 ++++++----- 3 files changed, 292 insertions(+), 51 deletions(-) create mode 100644 0001-Set-default-LCD-filter-to-FreeType-s-default.patch create mode 100644 cairo-1.17.6-meson-fixes.patch diff --git a/0001-Set-default-LCD-filter-to-FreeType-s-default.patch b/0001-Set-default-LCD-filter-to-FreeType-s-default.patch new file mode 100644 index 0000000..854eb0e --- /dev/null +++ b/0001-Set-default-LCD-filter-to-FreeType-s-default.patch @@ -0,0 +1,56 @@ +From 12a5b7384f35d9a3f4c6b151fac4857444db3d6a Mon Sep 17 00:00:00 2001 +From: Nikolaus Waxweiler +Date: Sat, 10 Nov 2018 16:44:23 +0000 +Subject: [PATCH] Set default LCD filter to FreeType's default + +--- + src/cairo-ft-font.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c +index 325dd61b4..3c47dc12e 100644 +--- a/src/cairo-ft-font.c ++++ b/src/cairo-ft-font.c +@@ -1404,7 +1404,7 @@ _render_glyph_outline (FT_Face face, + cairo_image_surface_t **surface) + { + int rgba = FC_RGBA_UNKNOWN; +- int lcd_filter = FT_LCD_FILTER_LEGACY; ++ int lcd_filter = FT_LCD_FILTER_DEFAULT; + FT_GlyphSlot glyphslot = face->glyph; + FT_Outline *outline = &glyphslot->outline; + FT_Bitmap bitmap; +@@ -1439,13 +1439,13 @@ _render_glyph_outline (FT_Face face, + case CAIRO_LCD_FILTER_NONE: + lcd_filter = FT_LCD_FILTER_NONE; + break; +- case CAIRO_LCD_FILTER_DEFAULT: + case CAIRO_LCD_FILTER_INTRA_PIXEL: + lcd_filter = FT_LCD_FILTER_LEGACY; + break; + case CAIRO_LCD_FILTER_FIR3: + lcd_filter = FT_LCD_FILTER_LIGHT; + break; ++ case CAIRO_LCD_FILTER_DEFAULT: + case CAIRO_LCD_FILTER_FIR5: + lcd_filter = FT_LCD_FILTER_DEFAULT; + break; +@@ -3416,7 +3416,6 @@ _cairo_ft_font_options_substitute (const cairo_font_options_t *options, + case CAIRO_LCD_FILTER_NONE: + lcd_filter = FT_LCD_FILTER_NONE; + break; +- case CAIRO_LCD_FILTER_DEFAULT: + case CAIRO_LCD_FILTER_INTRA_PIXEL: + lcd_filter = FT_LCD_FILTER_LEGACY; + break; +@@ -3424,6 +3423,7 @@ _cairo_ft_font_options_substitute (const cairo_font_options_t *options, + lcd_filter = FT_LCD_FILTER_LIGHT; + break; + default: ++ case CAIRO_LCD_FILTER_DEFAULT: + case CAIRO_LCD_FILTER_FIR5: + lcd_filter = FT_LCD_FILTER_DEFAULT; + break; +-- +2.19.1 + diff --git a/cairo-1.17.6-meson-fixes.patch b/cairo-1.17.6-meson-fixes.patch new file mode 100644 index 0000000..ea02448 --- /dev/null +++ b/cairo-1.17.6-meson-fixes.patch @@ -0,0 +1,178 @@ +diff -urN cairo-1.17.6.old/doc/public/meson.build cairo-1.17.6/doc/public/meson.build +--- cairo-1.17.6.old/doc/public/meson.build 1970-01-01 01:00:00.000000000 +0100 ++++ cairo-1.17.6/doc/public/meson.build 2022-03-20 16:22:31.018317576 +0000 +@@ -0,0 +1,156 @@ ++gnome = import('gnome') ++ ++ignore_headers = [ ++ # Sub-directories ++ 'win32', ++ ++ # Internal headers ++ 'cairoint.h', ++ 'cairo-features.h', ++ 'cairo-features-win32.h', ++ ++ # Inlined API ++ 'cairo-box-inline.h', ++ 'cairo-clip-inline.h', ++ 'cairo-combsort-inline.h', ++ 'cairo-contour-inline.h', ++ 'cairo-error-inline.h', ++ 'cairo-image-surface-inline.h', ++ 'cairo-line-inline.h', ++ 'cairo-list-inline.h', ++ 'cairo-pattern-inline.h', ++ 'cairo-recording-surface-inline.h', ++ 'cairo-surface-inline.h', ++ 'cairo-surface-observer-inline.h', ++ 'cairo-surface-snapshot-inline.h', ++ 'cairo-surface-subsurface-inline.h', ++ ++ # Private headers ++ 'cairo-analysis-surface-private.h', ++ 'cairo-arc-private.h', ++ 'cairo-array-private.h', ++ 'cairo-atomic-private.h', ++ 'cairo-backend-private.h', ++ 'cairo-boxes-private.h', ++ 'cairo-cache-private.h', ++ 'cairo-clip-private.h', ++ 'cairo-compiler-private.h', ++ 'cairo-composite-rectangles-private.h', ++ 'cairo-compositor-private.h', ++ 'cairo-contour-private.h', ++ 'cairo-damage-private.h', ++ 'cairo-default-context-private.h', ++ 'cairo-deprecated.h', ++ 'cairo-device-private.h', ++ 'cairo-error-private.h', ++ 'cairo-fixed-private.h', ++ 'cairo-fixed-type-private.h', ++ 'cairo-fontconfig-private.h', ++ 'cairo-freed-pool-private.h', ++ 'cairo-freelist-private.h', ++ 'cairo-freelist-type-private.h', ++ 'cairo-ft-private.h', ++ 'cairo-gstate-private.h', ++ 'cairo-hash-private.h', ++ 'cairo-image-info-private.h', ++ 'cairo-image-surface-private.h', ++ 'cairo-line-private.h', ++ 'cairo-list-private.h', ++ 'cairo-malloc-private.h', ++ 'cairo-mempool-private.h', ++ 'cairo-mutex-impl-private.h', ++ 'cairo-mutex-list-private.h', ++ 'cairo-mutex-private.h', ++ 'cairo-mutex-type-private.h', ++ 'cairo-output-stream-private.h', ++ 'cairo-paginated-private.h', ++ 'cairo-paginated-surface-private.h', ++ 'cairo-path-fixed-private.h', ++ 'cairo-path-private.h', ++ 'cairo-pattern-private.h', ++ 'cairo-pdf-operators-private.h', ++ 'cairo-pdf-shading-private.h', ++ 'cairo-pdf-surface-private.h', ++ 'cairo-pixman-private.h', ++ 'cairo-private.h', ++ 'cairo-ps-surface-private.h', ++ 'cairo-quartz-private.h', ++ 'cairo-recording-surface-private.h', ++ 'cairo-reference-count-private.h', ++ 'cairo-region-private.h', ++ 'cairo-rtree-private.h', ++ 'cairo-scaled-font-private.h', ++ 'cairo-scaled-font-subsets-private.h', ++ 'cairo-script-private.h', ++ 'cairo-slope-private.h', ++ 'cairo-spans-compositor-private.h', ++ 'cairo-spans-private.h', ++ 'cairo-stroke-dash-private.h', ++ 'cairo-surface-backend-private.h', ++ 'cairo-surface-clipper-private.h', ++ 'cairo-surface-fallback-private.h', ++ 'cairo-surface-observer-private.h', ++ 'cairo-surface-offset-private.h', ++ 'cairo-surface-private.h', ++ 'cairo-surface-snapshot-private.h', ++ 'cairo-surface-subsurface-private.h', ++ 'cairo-surface-wrapper-private.h', ++ 'cairo-svg-surface-private.h', ++ 'cairo-tag-attributes-private.h', ++ 'cairo-tag-stack-private.h', ++ 'cairo-tee-surface-private.h', ++ 'cairo-time-private.h', ++ 'cairo-traps-private.h', ++ 'cairo-tristrip-private.h', ++ 'cairo-truetype-subset-private.h', ++ 'cairo-type1-private.h', ++ 'cairo-type3-glyph-surface-private.h', ++ 'cairo-types-private.h', ++ 'cairo-user-font-private.h', ++ 'cairo-wideint-private.h', ++ 'cairo-wideint-type-private.h', ++ 'cairo-xcb-private.h', ++ 'cairo-xlib-private.h', ++ 'cairo-xlib-surface-private.h', ++ 'cairo-xlib-xrender-private.h', ++ 'test-compositor-surface-private.h', ++] ++ ++ignore_decorators = [ ++ 'cairo_public', ++ 'cairo_private', ++] ++ ++docpath = get_option('prefix') / get_option('datadir') / 'gtk-doc/html' ++version_conf = configuration_data() ++version_conf.set('CAIRO_VERSION', meson.project_version()) ++configure_file( ++ input: 'version.xml.in', ++ output: 'version.xml', ++ configuration: version_conf ++) ++ ++gnome.gtkdoc('cairo', ++ main_xml: 'cairo-docs.xml', ++ namespace: 'cairo', ++ mode: 'sgml', ++ src_dir: doc_srcdir, ++ dependencies: libcairo_dep, ++ scan_args: [ ++ '--ignore-decorators=' + '|'.join(ignore_decorators), ++ '--ignore-headers=' + ' '.join(ignore_headers), ++ ], ++ content_files: [ ++ 'language-bindings.xml', ++ ], ++ expand_content_files: [ ++ 'language-bindings.xml', ++ ], ++ html_assets: [ ++ ], ++ fixxref_args: [ ++ '--html-dir=' + docpath, ++ ], ++ install: true, ++ check: true, ++) +diff -urN cairo-1.17.6.old/doc/public/version.xml.in cairo-1.17.6/doc/public/version.xml.in +--- cairo-1.17.6.old/doc/public/version.xml.in 1970-01-01 01:00:00.000000000 +0100 ++++ cairo-1.17.6/doc/public/version.xml.in 2022-03-20 16:33:04.015756161 +0000 +@@ -0,0 +1 @@ ++@CAIRO_VERSION@ +diff -urN cairo-1.17.6.old/meson-cc-tests/check-unused-result.c cairo-1.17.6/meson-cc-tests/check-unused-result.c +--- cairo-1.17.6.old/meson-cc-tests/check-unused-result.c 1970-01-01 01:00:00.000000000 +0100 ++++ cairo-1.17.6/meson-cc-tests/check-unused-result.c 2022-03-20 15:55:39.285562258 +0000 +@@ -0,0 +1,9 @@ ++__attribute__((__warn_unused_result__)) void f (void) {} ++__attribute__((__warn_unused_result__)) int g; ++ ++int main(int c, char **v) ++{ ++ (void)c; ++ (void)v; ++ return 0; ++} diff --git a/cairo.spec b/cairo.spec index 36fa6e1..c465e79 100644 --- a/cairo.spec +++ b/cairo.spec @@ -1,10 +1,4 @@ -%define anolis_release 2 -%define pixman_version 0.30.0 -%define freetype_version 2.1.9 -%define fontconfig_version 2.2.95 - -%global cairogl --enable-gl -%global with_gl 1 +%define anolis_release 3 Name: cairo Version: 1.17.6 @@ -13,24 +7,27 @@ Summary: A 2D graphics library License: LGPLv2 or MPLv1.1 URL: http://cairographics.org -Source0: http://cairographics.org/snapshots/%{name}-%{version}.tar.xz - -BuildRequires: gcc -BuildRequires: pkgconfig -BuildRequires: libXrender-devel -BuildRequires: libX11-devel -BuildRequires: libpng-devel -BuildRequires: libxml2-devel -BuildRequires: pixman-devel >= %{pixman_version} -BuildRequires: freetype-devel >= %{freetype_version} -BuildRequires: fontconfig-devel >= %{fontconfig_version} -BuildRequires: glib2-devel -BuildRequires: librsvg2-devel -%if 0%{?with_gl} -BuildRequires: mesa-libGL-devel -BuildRequires: mesa-libEGL-devel -%endif -BuildRequires: make +Source0: https://download.gnome.org/sources/%{name}/1.17/%{name}-%{version}.tar.xz +# https://gitlab.freedesktop.org/cairo/cairo/merge_requests/1 +Patch1: 0001-Set-default-LCD-filter-to-FreeType-s-default.patch +# https://gitlab.freedesktop.org/cairo/cairo/-/issues/547 +Patch2: cairo-1.17.6-meson-fixes.patch +BuildRequires: gcc +BuildRequires: gtk-doc +BuildRequires: meson >= 0.56.0 +BuildRequires: pkgconfig(fontconfig) >= 2.2.95 +BuildRequires: pkgconfig(freetype2) >= 9.7.3 +BuildRequires: pkgconfig(glib-2.0) >= 2.14 +BuildRequires: pkgconfig(gobject-2.0) +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(pixman-1) >= 0.36.0 +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xcb) >= 1.6 +BuildRequires: pkgconfig(xcb-render) >= 1.6 +BuildRequires: pkgconfig(xcb-shm) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(xrender) >= 0.6 +BuildRequires: pkgconfig(zlib) %description Cairo is a 2D graphics library designed to provide high-quality display @@ -40,6 +37,14 @@ System, in-memory image buffers, and image files (PDF, PostScript, and SVG). Cairo is designed to produce consistent output on all output media while taking advantage of display hardware acceleration when available. +%package doc +Summary: Documentation files for %{name} +Requires: %{name} = %{version}-%{release} +BuildArch: noarch + +%description doc +The %{name}-doc package contains documentation files for %{name}. + %package devel Summary: Development files for cairo Requires: %{name} = %{version}-%{release} @@ -76,6 +81,8 @@ needed for developing software which uses the cairo Gobject library. %package tools Summary: Development tools for cairo +Requires: %{name} = %{version}-%{release} +Conflicts: %{name} < 1.17.6-3 %description tools Cairo is a 2D graphics library designed to provide high-quality display @@ -88,37 +95,35 @@ This package contains tools for working with the cairo graphics library. %autosetup -p1 %build -%configure --disable-static \ - --enable-xlib \ - --enable-ft \ - --enable-ps \ - --enable-pdf \ - --enable-svg \ - --enable-tee \ - --enable-gobject \ - %{cairogl} \ - --disable-gtk-doc -sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool -sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool -make V=1 %{?_smp_mflags} +%meson \ + -Dfreetype=enabled \ + -Dfontconfig=enabled \ + -Dglib=enabled \ + -Dgtk_doc=true \ + -Dspectre=disabled \ + -Dsymbol-lookup=disabled \ + -Dtee=enabled \ + -Dtests=disabled \ + -Dxcb=enabled \ + -Dxlib=enabled \ + -Dxml=disabled +%meson_build %install -%make_install -find $RPM_BUILD_ROOT -name '*.la' -delete +%meson_install %generate_compatibility_deps %files %dir %{abidir} %license COPYING COPYING-LGPL-2.1 COPYING-MPL-1.1 -%doc AUTHORS BIBLIOGRAPHY BUGS NEWS README %{_libdir}/libcairo.so.2* %{_libdir}/libcairo-script-interpreter.so.2* %{abidir}/libcairo.dump %{abidir}/libcairo-script-interpreter.dump -%{abidir}/cairo-fdr.dump -%{abidir}/cairo-sphinx.dump -%{abidir}/libcairo-trace.dump + +%files doc +%doc AUTHORS BIBLIOGRAPHY BUGS NEWS README %files devel %doc ChangeLog PORTING_GUIDE @@ -154,12 +159,6 @@ find $RPM_BUILD_ROOT -name '*.la' -delete %{_libdir}/pkgconfig/cairo-xcb-shm.pc %{_libdir}/pkgconfig/cairo-xcb.pc %{_datadir}/gtk-doc/html/cairo -%if 0%{?with_gl} -%{_includedir}/cairo/cairo-gl.h -%{_libdir}/pkgconfig/cairo-egl.pc -%{_libdir}/pkgconfig/cairo-gl.pc -%{_libdir}/pkgconfig/cairo-glx.pc -%endif %files gobject %{_libdir}/libcairo-gobject.so.2* @@ -175,8 +174,16 @@ find $RPM_BUILD_ROOT -name '*.la' -delete %{_bindir}/cairo-trace %{abidir}/cairo-trace-option.list %{_libdir}/cairo/ +%{abidir}/libcairo-fdr.dump +%{abidir}/libcairo-sphinx.dump +%{abidir}/libcairo-trace.dump + +%changelog +* Sun Jan 29 2023 Funda Wang - 1.17.6-3 +- Build with meson +- GL backends disabled by default as upstream +- Move abi dump into correct package -%changelog * Tue Nov 01 2022 mgb01105731 - 1.17.6-2 - optimise spec file -- Gitee