diff --git a/0001-build-sys-do-not-try-to-build-util-sphinx-on-Windows.patch b/0001-build-sys-do-not-try-to-build-util-sphinx-on-Windows.patch new file mode 100644 index 0000000..c29a835 --- /dev/null +++ b/0001-build-sys-do-not-try-to-build-util-sphinx-on-Windows.patch @@ -0,0 +1,37 @@ +From 4b69464dde07f2d5c23664499cb61ac984344e66 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Tue, 2 Apr 2013 21:00:20 +0200 +Subject: [PATCH] build-sys: do not try to build util/sphinx on Windows + +glib and dlfcn exist on windows, but sphinx code uses a lot of +Unix-only API + +Fixes the following build error on mingw-fedora + + CC cairo-boilerplate-system.lo +../../../util/cairo-sphinx/sphinx.c:8:22: fatal error: sys/mman.h: No such file or directory +compilation terminated. + +https://bugs.freedesktop.org/show_bug.cgi?id=63043 + +https://bugs.freedesktop.org/show_bug.cgi?id=63044 +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 928a169..9a9be60 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -797,7 +797,7 @@ CAIRO_ENABLE(symbol_lookup, symbol-lookup, auto, [ + PKG_CHECK_MODULES(glib, glib-2.0, have_glib=yes, have_glib=no) + AC_SUBST(glib_CFLAGS) + AC_SUBST(glib_LIBS) +-AM_CONDITIONAL(BUILD_SPHINX, test "x$have_glib" = "xyes") ++AM_CONDITIONAL(BUILD_SPHINX, test "x$have_glib" = "xyes" -a "x$have_windows" = "xno") + + save_LIBS="$LIBS" + AC_CHECK_LIB(rt, shm_open, shm_LIBS="-lrt") +-- +1.8.1.1.439.g50a6b54 + diff --git a/0001-win32-Free-the-fallback-upon-finish.patch b/0001-win32-Free-the-fallback-upon-finish.patch new file mode 100644 index 0000000..e170367 --- /dev/null +++ b/0001-win32-Free-the-fallback-upon-finish.patch @@ -0,0 +1,41 @@ +From 3fcaddfefa2024e04217e302e72e15dd22014df0 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Fri, 15 Feb 2013 14:04:21 +0000 +Subject: [PATCH 1/3] win32: Free the fallback upon finish +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Zozó Teki pointed out that we leak the fallback surface upon finish in +case it was active at the time as the preceding flush would only clear +the damage and not decouple the fallback surface. + +Signed-off-by: Chris Wilson +--- + src/win32/cairo-win32-display-surface.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/win32/cairo-win32-display-surface.c b/src/win32/cairo-win32-display-surface.c +index ccd285d..0390625 100644 +--- a/src/win32/cairo-win32-display-surface.c ++++ b/src/win32/cairo-win32-display-surface.c +@@ -429,6 +429,8 @@ _cairo_win32_display_surface_finish (void *abstract_surface) + DeleteDC (surface->win32.dc); + } + ++ _cairo_win32_display_surface_discard_fallback (surface); ++ + if (surface->initial_clip_rgn) + DeleteObject (surface->initial_clip_rgn); + +@@ -758,6 +760,7 @@ _cairo_win32_display_surface_discard_fallback (cairo_win32_display_surface_t *su + TRACE ((stderr, "%s (surface=%d)\n", + __FUNCTION__, surface->win32.base.unique_id)); + ++ cairo_surface_finish (surface->fallback); + cairo_surface_destroy (surface->fallback); + surface->fallback = NULL; + } +-- +1.8.1.1.439.g50a6b54 + diff --git a/0002-win32-fix-corrupted-drawing.patch b/0002-win32-fix-corrupted-drawing.patch new file mode 100644 index 0000000..75e1b26 --- /dev/null +++ b/0002-win32-fix-corrupted-drawing.patch @@ -0,0 +1,48 @@ +From 9f65974bdaafe700930c6cd7de85915a5450b431 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Tue, 2 Apr 2013 00:32:56 +0200 +Subject: [PATCH 2/3] win32: fix corrupted drawing + +Fix src bitmap coordinates, which origin is bottom-left. This is +apparently a bug in StretchDIBits(), according to some comments on +MSDN API documentation. + +The backend used to have this coordinate change in the past: + + if (!StretchDIBits (dst->dc, + /* dst x,y,w,h */ + dst_r.x, dst_r.y + dst_r.height - 1, + dst_r.width, - (int) dst_r.height, + /* src x,y,w,h */ + src_r.x, src_extents.height - src_r.y + 1, + src_r.width, - (int) src_r.height, + src_image->data, + &bi, + DIB_RGB_COLORS, + SRCCOPY)) + +https://bugs.freedesktop.org/show_bug.cgi?id=61876 +--- + src/win32/cairo-win32-gdi-compositor.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/win32/cairo-win32-gdi-compositor.c b/src/win32/cairo-win32-gdi-compositor.c +index c70b0f9..073e889 100644 +--- a/src/win32/cairo-win32-gdi-compositor.c ++++ b/src/win32/cairo-win32-gdi-compositor.c +@@ -151,10 +151,11 @@ static cairo_bool_t upload_box (cairo_box_t *box, void *closure) + int y = _cairo_fixed_integer_part (box->p1.y); + int width = _cairo_fixed_integer_part (box->p2.x - box->p1.x); + int height = _cairo_fixed_integer_part (box->p2.y - box->p1.y); ++ int src_height = -cb->bi.bmiHeader.biHeight; + + TRACE ((stderr, "%s\n", __FUNCTION__)); + return StretchDIBits (cb->dst, x, y + height - 1, width, -height, +- x + cb->tx, height - (y + cb->ty - 1), ++ x + cb->tx, src_height - (y + cb->ty - 1), + width, -height, + cb->data, &cb->bi, + DIB_RGB_COLORS, SRCCOPY); +-- +1.8.1.1.439.g50a6b54 + diff --git a/0003-build-sys-do-not-try-to-build-util-sphinx-on-Windows.patch b/0003-build-sys-do-not-try-to-build-util-sphinx-on-Windows.patch new file mode 100644 index 0000000..738f0dc --- /dev/null +++ b/0003-build-sys-do-not-try-to-build-util-sphinx-on-Windows.patch @@ -0,0 +1,37 @@ +From 332bce6142b313f336e5a714543cc9ea202912e0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Tue, 2 Apr 2013 21:00:20 +0200 +Subject: [PATCH 3/3] build-sys: do not try to build util/sphinx on Windows + +glib and dlfcn exist on windows, but sphinx code uses a lot of +Unix-only API + +Fixes the following build error on mingw-fedora + + CC cairo-boilerplate-system.lo +../../../util/cairo-sphinx/sphinx.c:8:22: fatal error: sys/mman.h: No such file or directory +compilation terminated. + +https://bugs.freedesktop.org/show_bug.cgi?id=63043 + +https://bugs.freedesktop.org/show_bug.cgi?id=63044 +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 928a169..9a9be60 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -797,7 +797,7 @@ CAIRO_ENABLE(symbol_lookup, symbol-lookup, auto, [ + PKG_CHECK_MODULES(glib, glib-2.0, have_glib=yes, have_glib=no) + AC_SUBST(glib_CFLAGS) + AC_SUBST(glib_LIBS) +-AM_CONDITIONAL(BUILD_SPHINX, test "x$have_glib" = "xyes") ++AM_CONDITIONAL(BUILD_SPHINX, test "x$have_glib" = "xyes" -a "x$have_windows" = "xno") + + save_LIBS="$LIBS" + AC_CHECK_LIB(rt, shm_open, shm_LIBS="-lrt") +-- +1.8.1.1.439.g50a6b54 + diff --git a/mingw-cairo.spec b/mingw-cairo.spec index 053ccf7..5e84bc4 100644 --- a/mingw-cairo.spec +++ b/mingw-cairo.spec @@ -2,7 +2,7 @@ Name: mingw-cairo Version: 1.12.14 -Release: 1%{?dist} +Release: 2%{?dist} Summary: MinGW Windows Cairo library License: LGPLv2 or MPLv1.1 @@ -37,8 +37,14 @@ BuildRequires: mingw64-zlib BuildRequires: mingw64-glib2 BuildRequires: mingw-w64-tools +BuildRequires: autoconf automake libtool BuildRequires: pkgconfig +# cherry-picked from upcoming 1.12.15 +Patch1: 0001-win32-Free-the-fallback-upon-finish.patch +Patch2: 0002-win32-fix-corrupted-drawing.patch +# https://bugs.freedesktop.org/show_bug.cgi?id=63043 +Patch3: 0003-build-sys-do-not-try-to-build-util-sphinx-on-Windows.patch %description MinGW Windows Cairo library. @@ -87,6 +93,11 @@ Static version of the MinGW Windows Cairo library. %prep %setup -q -n cairo-%{version} +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 + +autoreconf -vfi %build # Function to generate an import library for delay-loading @@ -209,6 +220,10 @@ find $RPM_BUILD_ROOT -name "*.la" -delete %changelog +* Tue Apr 2 2013 Marc-André Lureau - 1.12.14-2 +- Fix corrupted drawing, cherry-picked from upstream (fdo#61876) +- Add a few windows related fixes + * Fri Mar 29 2013 Kalev Lember - 1.12.14-1 - Update to 1.12.14