summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorSchala2017-01-10 21:34:31 -0800
committerSchala2017-01-10 21:34:31 -0800
commit7248dc7ab52481cf4badcff726a1fc46cbd65be0 (patch)
tree6ac3e6c62b9a5a0e0a6a4be1bb7d1b1154beb1d4
parentc9df38f7576589e8b8e345634a45bf2ab70fb20a (diff)
downloadaur-7248dc7ab52481cf4badcff726a1fc46cbd65be0.tar.gz
added patch from Fedora repo
-rw-r--r--.SRCINFO6
-rw-r--r--.gitignore1
-rw-r--r--0002-win32-Add-a-win32-boilerplate-that-uses-a-real-windo.patch308
-rw-r--r--PKGBUILD5
4 files changed, 317 insertions, 3 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 1cbc9332a392..01497ed3138a 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,9 +1,9 @@
# Generated by mksrcinfo v8
-# Fri Dec 9 21:45:52 UTC 2016
+# Wed Jan 11 05:33:47 UTC 2017
pkgbase = mingw-w64-cairo
pkgdesc = Cairo vector graphics library (mingw-w64)
pkgver = 1.14.8
- pkgrel = 1
+ pkgrel = 2
url = http://cairographics.org/
arch = any
license = LGPL
@@ -22,10 +22,12 @@ pkgbase = mingw-w64-cairo
options = !buildflags
options = staticlibs
source = http://cairographics.org/releases/cairo-1.14.8.tar.xz
+ source = 0002-win32-Add-a-win32-boilerplate-that-uses-a-real-windo.patch
source = 0009-standalone-headers.mingw.patch
source = 0026-create-argb-fonts.all.patch
source = 0030-add-cairo-API-to-setup-Win32-surface-for-HDC.patch
sha1sums = c6f7b99986f93c9df78653c3e6a3b5043f65145e
+ sha1sums = dd6eb539a1708a9c71df05679ca114d2e9d35390
sha1sums = 58c548d2791ba20dd7f6e328ff596f746df3aa10
sha1sums = 9c0e533614782a41af2c3806a43ab7fe9d6a5431
sha1sums = c0c9546f120133b8e5b116650ba233a15a1e20c4
diff --git a/.gitignore b/.gitignore
index 436a59477780..d36132dce21e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
pkg/
src/
+*.log
*.tar
*.xz
diff --git a/0002-win32-Add-a-win32-boilerplate-that-uses-a-real-windo.patch b/0002-win32-Add-a-win32-boilerplate-that-uses-a-real-windo.patch
new file mode 100644
index 000000000000..078f831d4020
--- /dev/null
+++ b/0002-win32-Add-a-win32-boilerplate-that-uses-a-real-windo.patch
@@ -0,0 +1,308 @@
+From e38e942ac0ef6f5366cabdb22df9858fa4c05ea1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?=
+ =?UTF-8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= <lrn1986@gmail.com>
+Date: Sat, 4 Apr 2015 15:58:53 +0000
+Subject: [PATCH 2/2] win32: Add a win32 boilerplate that uses a real window
+
+This way it uses the codepath for cairo_win32_surface_create_with_format(),
+instead of the cairo_win32_surface_create_with_dib().
+
+Without the recording tests (which terminate the testsuite)
+the testsuite results for win32 are:
+
+284 Passed, 167 Failed [1 crashed, 9 expected], 23 Skipped
+win32 (rgb24): 1 crashed!
+win32 (rgb24): 17 error
+win32 (rgb24): 155 failed
+win32 (argb32): 1 crashed!
+win32 (argb32): 17 error
+win32 (argb32): 68 failed
+win32-window-color (rgb24): 1 crashed!
+win32-window-color (rgb24): 17 error
+win32-window-color (rgb24): 148 failed
+win32-window-coloralpha (argb32): 1 crashed!
+win32-window-coloralpha (argb32): 17 error
+win32-window-coloralpha (argb32): 66 failed
+
+Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
+---
+ boilerplate/cairo-boilerplate-win32.c | 242 ++++++++++++++++++++++++++++++++--
+ 1 file changed, 228 insertions(+), 14 deletions(-)
+
+diff --git a/boilerplate/cairo-boilerplate-win32.c b/boilerplate/cairo-boilerplate-win32.c
+index 7469cc7..4fd0a10 100644
+--- a/boilerplate/cairo-boilerplate-win32.c
++++ b/boilerplate/cairo-boilerplate-win32.c
+@@ -28,15 +28,191 @@
+
+ #include <cairo-win32.h>
+
++static const cairo_user_data_key_t win32_closure_key;
++
++typedef struct _win32_target_closure {
++ HWND wnd;
++ HDC dc;
++ ATOM bpl_atom;
++ cairo_surface_t *surface;
++} win32_target_closure_t;
++
++static void
++_cairo_boilerplate_win32_cleanup_window_surface (void *closure)
++{
++ win32_target_closure_t *win32tc = closure;
++
++ if (win32tc != NULL)
++ {
++ if (win32tc->wnd != NULL &&
++ ReleaseDC (win32tc->wnd, win32tc->dc) != 1)
++ fprintf (stderr,
++ "Failed to release DC of a test window when cleaning up.\n");
++ if (win32tc->wnd != NULL &&
++ DestroyWindow (win32tc->wnd) == 0)
++ fprintf (stderr,
++ "Failed to destroy a test window when cleaning up, GLE is %lu.\n",
++ GetLastError ());
++ if (win32tc->bpl_atom != 0 &&
++ UnregisterClassA ((LPCSTR) MAKELPARAM (win32tc->bpl_atom, 0), GetModuleHandle (NULL)) == 0 &&
++ GetLastError () != ERROR_CLASS_DOES_NOT_EXIST)
++ fprintf (stderr,
++ "Failed to unregister boilerplate window class, GLE is %lu.\n",
++ GetLastError ());
++
++ free (win32tc);
++ }
++}
++
++static win32_target_closure_t *
++_cairo_boilerplate_win32_create_window (int width,
++ int height)
++{
++ WNDCLASSEXA wincl;
++ win32_target_closure_t *win32tc;
++ LPCSTR window_class_name;
++
++ ZeroMemory (&wincl, sizeof (WNDCLASSEXA));
++ wincl.cbSize = sizeof (WNDCLASSEXA);
++ wincl.hInstance = GetModuleHandle (0);
++ wincl.lpszClassName = "cairo_boilerplate_win32_dummy";
++ wincl.lpfnWndProc = DefWindowProcA;
++ wincl.style = CS_OWNDC;
++
++ win32tc = calloc (1, sizeof (win32_target_closure_t));
++
++ if (win32tc == NULL)
++ {
++ int error = errno;
++ fprintf (stderr, "Ran out of memory: %d.\n", error);
++ return NULL;
++ }
++
++ ZeroMemory (win32tc, sizeof (win32_target_closure_t));
++
++ win32tc->bpl_atom = RegisterClassExA (&wincl);
++
++ if (win32tc->bpl_atom == 0 && GetLastError () != ERROR_CLASS_ALREADY_EXISTS)
++ {
++ fprintf (stderr,
++ "Failed to register a boilerplate window class, GLE is %lu.\n",
++ GetLastError ());
++ _cairo_boilerplate_win32_cleanup_window_surface (win32tc);
++ return NULL;
++ }
++
++ if (win32tc->bpl_atom == 0)
++ window_class_name = wincl.lpszClassName;
++ else
++ window_class_name = (LPCSTR) MAKELPARAM (win32tc->bpl_atom, 0);
++
++ win32tc->wnd = CreateWindowExA (WS_EX_TOOLWINDOW,
++ window_class_name,
++ 0,
++ WS_POPUP,
++ 0,
++ 0,
++ width,
++ height,
++ 0,
++ 0,
++ 0,
++ 0);
++
++ if (win32tc->wnd == NULL)
++ {
++ fprintf (stderr,
++ "Failed to create a test window, GLE is %lu.\n",
++ GetLastError ());
++ _cairo_boilerplate_win32_cleanup_window_surface (win32tc);
++ return NULL;
++ }
++
++ win32tc->dc = GetDC (win32tc->wnd);
++
++ if (win32tc->dc == NULL)
++ {
++ fprintf (stderr, "Failed to get test window DC.\n");
++ _cairo_boilerplate_win32_cleanup_window_surface (win32tc);
++ return NULL;
++ }
++
++ SetWindowPos (win32tc->wnd,
++ HWND_BOTTOM,
++ INT_MIN,
++ INT_MIN,
++ width,
++ height,
++ SWP_NOACTIVATE | SWP_SHOWWINDOW);
++
++ return win32tc;
++}
++
+ static cairo_surface_t *
+-_cairo_boilerplate_win32_create_surface (const char *name,
+- cairo_content_t content,
+- double width,
+- double height,
+- double max_width,
+- double max_height,
+- cairo_boilerplate_mode_t mode,
+- void **closure)
++_cairo_boilerplate_win32_create_window_surface (const char *name,
++ cairo_content_t content,
++ double width,
++ double height,
++ double max_width,
++ double max_height,
++ cairo_boilerplate_mode_t mode,
++ void **closure)
++{
++ win32_target_closure_t *win32tc;
++ cairo_surface_t *surface;
++ cairo_format_t format;
++ cairo_status_t status;
++
++ win32tc = _cairo_boilerplate_win32_create_window (width, height);
++
++ if (win32tc == NULL)
++ return NULL;
++
++ format = cairo_boilerplate_format_from_content (content);
++
++ surface = cairo_win32_surface_create_with_format (win32tc->dc, format);
++
++ win32tc->surface = surface;
++
++ status = cairo_surface_status (surface);
++
++ if (status != CAIRO_STATUS_SUCCESS)
++ {
++ fprintf (stderr,
++ "Failed to create the test surface: %s [%d].\n",
++ cairo_status_to_string (status), status);
++ _cairo_boilerplate_win32_cleanup_window_surface (win32tc);
++ return NULL;
++ }
++
++ status = cairo_surface_set_user_data (surface, &win32_closure_key, win32tc, NULL);
++
++ if (status != CAIRO_STATUS_SUCCESS)
++ {
++ fprintf (stderr,
++ "Failed to set surface userdata: %s [%d].\n",
++ cairo_status_to_string (status), status);
++
++ cairo_surface_destroy (surface);
++ _cairo_boilerplate_win32_cleanup_window_surface (win32tc);
++
++ return NULL;
++ }
++
++ *closure = win32tc;
++
++ return surface;
++}
++
++static cairo_surface_t *
++_cairo_boilerplate_win32_create_dib_surface (const char *name,
++ cairo_content_t content,
++ double width,
++ double height,
++ double max_width,
++ double max_height,
++ cairo_boilerplate_mode_t mode,
++ void **closure)
+ {
+ cairo_format_t format;
+
+@@ -52,12 +228,16 @@ static const cairo_boilerplate_target_t targets[] = {
+ "win32", "win32", NULL, NULL,
+ CAIRO_SURFACE_TYPE_WIN32, CAIRO_CONTENT_COLOR, 0,
+ "cairo_win32_surface_create_with_dib",
+- _cairo_boilerplate_win32_create_surface,
++ _cairo_boilerplate_win32_create_dib_surface,
+ cairo_surface_create_similar,
+- NULL, NULL,
++ NULL,
++ NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+- NULL, NULL, NULL, TRUE, FALSE, FALSE
++ NULL,
++ NULL,
++ NULL,
++ TRUE, FALSE, FALSE
+ },
+ /* Testing the win32 surface isn't interesting, since for
+ * ARGB images it just chains to the image backend
+@@ -66,12 +246,46 @@ static const cairo_boilerplate_target_t targets[] = {
+ "win32", "win32", NULL, NULL,
+ CAIRO_SURFACE_TYPE_WIN32, CAIRO_CONTENT_COLOR_ALPHA, 0,
+ "cairo_win32_surface_create_with_dib",
+- _cairo_boilerplate_win32_create_surface,
++ _cairo_boilerplate_win32_create_dib_surface,
+ cairo_surface_create_similar,
+- NULL, NULL,
++ NULL,
++ NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+- NULL, NULL, NULL, FALSE, FALSE, FALSE
++ NULL,
++ NULL,
++ NULL,
++ FALSE, FALSE, FALSE
++ },
++ {
++ "win32-window-color", "win32", NULL, NULL,
++ CAIRO_SURFACE_TYPE_WIN32, CAIRO_CONTENT_COLOR, 1,
++ "cairo_win32_surface_create",
++ _cairo_boilerplate_win32_create_window_surface,
++ cairo_surface_create_similar,
++ NULL,
++ NULL,
++ _cairo_boilerplate_get_image_surface,
++ cairo_surface_write_to_png,
++ _cairo_boilerplate_win32_cleanup_window_surface,
++ NULL,
++ NULL,
++ FALSE, FALSE, FALSE
++ },
++ {
++ "win32-window-coloralpha", "win32", NULL, NULL,
++ CAIRO_SURFACE_TYPE_WIN32, CAIRO_CONTENT_COLOR_ALPHA, 1,
++ "cairo_win32_surface_create_with_format",
++ _cairo_boilerplate_win32_create_window_surface,
++ cairo_surface_create_similar,
++ NULL,
++ NULL,
++ _cairo_boilerplate_get_image_surface,
++ cairo_surface_write_to_png,
++ _cairo_boilerplate_win32_cleanup_window_surface,
++ NULL,
++ NULL,
++ FALSE, FALSE, FALSE
+ },
+ };
+ CAIRO_BOILERPLATE (win32, targets)
+--
+2.4.3
+
diff --git a/PKGBUILD b/PKGBUILD
index 6afb9e2060b5..64f721eb2a06 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,7 +1,7 @@
# Contributor: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
pkgname=mingw-w64-cairo
pkgver=1.14.8
-pkgrel=1
+pkgrel=2
pkgdesc="Cairo vector graphics library (mingw-w64)"
arch=(any)
url="http://cairographics.org/"
@@ -13,10 +13,12 @@ provides=($pkgname-bootstrap)
replaces=($pkgname-bootstrap)
conflicts=($pkgname-bootstrap)
source=("http://cairographics.org/releases/cairo-${pkgver}.tar.xz"
+"0002-win32-Add-a-win32-boilerplate-that-uses-a-real-windo.patch"
"0009-standalone-headers.mingw.patch"
"0026-create-argb-fonts.all.patch"
"0030-add-cairo-API-to-setup-Win32-surface-for-HDC.patch")
sha1sums=('c6f7b99986f93c9df78653c3e6a3b5043f65145e'
+ 'dd6eb539a1708a9c71df05679ca114d2e9d35390'
'58c548d2791ba20dd7f6e328ff596f746df3aa10'
'9c0e533614782a41af2c3806a43ab7fe9d6a5431'
'c0c9546f120133b8e5b116650ba233a15a1e20c4')
@@ -28,6 +30,7 @@ prepare() {
patch -p1 -i ${srcdir}/0009-standalone-headers.mingw.patch
patch -p1 -i ${srcdir}/0026-create-argb-fonts.all.patch
patch -p1 -i ${srcdir}/0030-add-cairo-API-to-setup-Win32-surface-for-HDC.patch
+ patch -p1 -i ${srcdir}/0002-win32-Add-a-win32-boilerplate-that-uses-a-real-windo.patch
autoreconf -fi
}