[packages/crossmingw32-cairo] - updated to 1.16.0 - updated mingw32 patch - removed obsolete add-cairo-API-to-setup-Win32-surface-

qboosh qboosh at pld-linux.org
Sun Oct 21 20:54:14 CEST 2018


commit 1d3dbd49d92f5579bcb985dfbdcea2ad667f7041
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Sun Oct 21 20:57:53 2018 +0200

    - updated to 1.16.0
    - updated mingw32 patch
    - removed obsolete add-cairo-API-to-setup-Win32-surface-for-HDC patch
    - added mingw32-gl patch and gl bcond

 ...-cairo-API-to-setup-Win32-surface-for-HDC.patch | 138 ------------------
 cairo-mingw32-gl.patch                             | 158 +++++++++++++++++++++
 cairo-mingw32.patch                                |  38 +++++
 crossmingw32-cairo.spec                            |  25 ++--
 4 files changed, 212 insertions(+), 147 deletions(-)
---
diff --git a/crossmingw32-cairo.spec b/crossmingw32-cairo.spec
index 0728e83..8bfcdff 100644
--- a/crossmingw32-cairo.spec
+++ b/crossmingw32-cairo.spec
@@ -1,21 +1,26 @@
+#
+# Conditional build:
+%bcond_with	gl		# OpenGL surface backend
+
 Summary:	Cairo - multi-platform 2D graphics library - cross MinGW32 version
 Summary(pl.UTF-8):	Cairo - wieloplatformowa biblioteka graficzna 2D - skrośna wersja MinGW32
 %define		realname   cairo
 Name:		crossmingw32-%{realname}
-Version:	1.14.12
-Release:	2
+Version:	1.16.0
+Release:	1
 License:	LGPL v2.1 or MPL v1.1
 Group:		Development/Libraries
 Source0:	https://www.cairographics.org/releases/%{realname}-%{version}.tar.xz
-# Source0-md5:	9f0db9dbfca0966be8acd682e636d165
+# Source0-md5:	f19e0353828269c22bd72e271243a552
 Patch0:		cairo-link.patch
 Patch1:		cairo-mingw32.patch
-Patch2:		cairo-add-cairo-API-to-setup-Win32-surface-for-HDC.patch
+# https://gitlab.freedesktop.org/cairo/cairo/issues/204
+Patch2:		cairo-mingw32-gl.patch
 URL:		https://www.cairographics.org/
 BuildRequires:	autoconf >= 2.63
 BuildRequires:	automake >= 1:1.11
 BuildRequires:	crossmingw32-fontconfig >= 2.2.95
-BuildRequires:	crossmingw32-freetype >= 2.3.0
+BuildRequires:	crossmingw32-freetype >= 2.5.1
 BuildRequires:	crossmingw32-glib2 >= 2.14
 BuildRequires:	crossmingw32-libpng
 BuildRequires:	crossmingw32-pixman >= 0.30.0
@@ -23,7 +28,7 @@ BuildRequires:	crossmingw32-zlib
 BuildRequires:	libtool >= 2:2.2
 BuildRequires:	pkgconfig >= 1:0.18
 Requires:	crossmingw32-fontconfig >= 2.2.95
-Requires:	crossmingw32-freetype >= 2.3.0
+Requires:	crossmingw32-freetype >= 2.5.1
 Requires:	crossmingw32-libpng
 Requires:	crossmingw32-pixman >= 0.30.0
 BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
@@ -102,7 +107,7 @@ Summary:	DLL Cairo library for Windows
 Summary(pl.UTF-8):	Biblioteka DLL Cairo dla Windows
 Group:		Applications/Emulators
 Requires:	crossmingw32-fontconfig-dll >= 2.2.95
-Requires:	crossmingw32-freetype-dll >= 2.3.0
+Requires:	crossmingw32-freetype-dll >= 2.5.1
 Requires:	crossmingw32-libpng-dll
 Requires:	crossmingw32-pixman-dll >= 0.30.0
 
@@ -171,8 +176,8 @@ export PKG_CONFIG_LIBDIR=%{_prefix}/lib/pkgconfig
 	--disable-gtk-doc \
 	--disable-silent-rules \
 	--disable-xlib \
-	--disable-xlib-render \
-	--enable-freetype \
+	--enable-ft \
+	%{?with_gl:--enable-gl} \
 	--enable-pdf \
 	--enable-png \
 	--enable-ps \
@@ -214,12 +219,14 @@ rm -rf $RPM_BUILD_ROOT
 %{_pkgconfigdir}/cairo.pc
 %{_pkgconfigdir}/cairo-fc.pc
 %{_pkgconfigdir}/cairo-ft.pc
+%{?with_gl:%{_pkgconfigdir}/cairo-gl.pc}
 %{_pkgconfigdir}/cairo-pdf.pc
 %{_pkgconfigdir}/cairo-png.pc
 %{_pkgconfigdir}/cairo-ps.pc
 %{_pkgconfigdir}/cairo-script.pc
 %{_pkgconfigdir}/cairo-svg.pc
 %{_pkgconfigdir}/cairo-tee.pc
+%{?with_gl:%{_pkgconfigdir}/cairo-wgl.pc}
 %{_pkgconfigdir}/cairo-win32.pc
 %{_pkgconfigdir}/cairo-win32-font.pc
 %{_pkgconfigdir}/cairo-xml.pc
diff --git a/cairo-add-cairo-API-to-setup-Win32-surface-for-HDC.patch b/cairo-add-cairo-API-to-setup-Win32-surface-for-HDC.patch
deleted file mode 100644
index 70d90ff..0000000
--- a/cairo-add-cairo-API-to-setup-Win32-surface-for-HDC.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-From 16898ba11b4d6e9e2e64bb2d02d0fb5adbe266e2 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 at gmail.com>
-Date: Thu, 26 Mar 2015 19:33:43 +0000
-Subject: win32: Add cairo API to set up a Win32 surface for an HDC with an
- alpha channel.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Руслан Ижбулатов <lrn1986 at gmail.com>
-Reviewed-by: Bryce Harrington <bryce at osg.samsung.com>
-
-diff --git a/src/cairo-win32.h b/src/cairo-win32.h
-index 3d2e1c6..db4cac6 100644
---- a/src/cairo-win32.h
-+++ b/src/cairo-win32.h
-@@ -49,6 +49,10 @@ cairo_public cairo_surface_t *
- cairo_win32_surface_create (HDC hdc);
- 
- cairo_public cairo_surface_t *
-+cairo_win32_surface_create_with_format (HDC hdc,
-+                                        cairo_format_t format);
-+
-+cairo_public cairo_surface_t *
- cairo_win32_printing_surface_create (HDC hdc);
- 
- cairo_public cairo_surface_t *
-diff --git a/src/win32/cairo-win32-display-surface.c b/src/win32/cairo-win32-display-surface.c
-index 965f2c4..1571480 100644
---- a/src/win32/cairo-win32-display-surface.c
-+++ b/src/win32/cairo-win32-display-surface.c
-@@ -917,31 +917,41 @@ static const cairo_surface_backend_t cairo_win32_display_surface_backend = {
-  */
- 
- /**
-- * cairo_win32_surface_create:
-+ * cairo_win32_surface_create_with_format:
-  * @hdc: the DC to create a surface for
-+ * @format: format of pixels in the surface to create
-  *
-  * Creates a cairo surface that targets the given DC.  The DC will be
-  * queried for its initial clip extents, and this will be used as the
-- * size of the cairo surface.  The resulting surface will always be of
-- * format %CAIRO_FORMAT_RGB24; should you need another surface format,
-- * you will need to create one through
-- * cairo_win32_surface_create_with_dib().
-+ * size of the cairo surface.
-  *
-- * Return value: the newly created surface
-+ * Supported formats are:
-+ * %CAIRO_FORMAT_ARGB32
-+ * %CAIRO_FORMAT_RGB24
-  *
-- * Since: 1.0
-+ * Note: @format only tells cairo how to draw on the surface, not what
-+ * the format of the surface is. Namely, cairo does not (and cannot)
-+ * check that @hdc actually supports alpha-transparency.
-+ *
-+ * Return value: the newly created surface, NULL on failure
-+ *
-+ * Since: 1.14.3
-  **/
- cairo_surface_t *
--cairo_win32_surface_create (HDC hdc)
-+cairo_win32_surface_create_with_format (HDC hdc, cairo_format_t format)
- {
-     cairo_win32_display_surface_t *surface;
- 
--    cairo_format_t format;
-     cairo_status_t status;
-     cairo_device_t *device;
- 
--    /* Assume that everything coming in as a HDC is RGB24 */
--    format = CAIRO_FORMAT_RGB24;
-+    switch (format) {
-+    default:
-+	return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
-+    case CAIRO_FORMAT_ARGB32:
-+    case CAIRO_FORMAT_RGB24:
-+	break;
-+    }
- 
-     surface = malloc (sizeof (*surface));
-     if (surface == NULL)
-@@ -977,6 +987,28 @@ cairo_win32_surface_create (HDC hdc)
- }
- 
- /**
-+ * cairo_win32_surface_create:
-+ * @hdc: the DC to create a surface for
-+ *
-+ * Creates a cairo surface that targets the given DC.  The DC will be
-+ * queried for its initial clip extents, and this will be used as the
-+ * size of the cairo surface.  The resulting surface will always be of
-+ * format %CAIRO_FORMAT_RGB24; should you need another surface format,
-+ * you will need to create one through
-+ * cairo_win32_surface_create_with_format() or
-+ * cairo_win32_surface_create_with_dib().
-+ *
-+ * Return value: the newly created surface, NULL on failure
-+ *
-+ * Since: 1.0
-+ **/
-+cairo_surface_t *
-+cairo_win32_surface_create (HDC hdc)
-+{
-+    return cairo_win32_surface_create_with_format (hdc, CAIRO_FORMAT_RGB24);
-+}
-+
-+/**
-  * cairo_win32_surface_create_with_dib:
-  * @format: format of pixels in the surface to create
-  * @width: width of the surface, in pixels
-@@ -1027,12 +1059,16 @@ cairo_win32_surface_create_with_ddb (HDC hdc,
-     HDC screen_dc, ddb_dc;
-     HBITMAP saved_dc_bitmap;
- 
--    if (format != CAIRO_FORMAT_RGB24)
-+    switch (format) {
-+    default:
-+/* XXX handle these eventually */
-+    case CAIRO_FORMAT_A8:
-+    case CAIRO_FORMAT_A1:
- 	return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
--/* XXX handle these eventually
--	format != CAIRO_FORMAT_A8 ||
--	format != CAIRO_FORMAT_A1)
--*/
-+    case CAIRO_FORMAT_ARGB32:
-+    case CAIRO_FORMAT_RGB24:
-+	break;
-+    }
- 
-     if (!hdc) {
- 	screen_dc = GetDC (NULL);
--- 
-cgit v0.10.2
diff --git a/cairo-mingw32-gl.patch b/cairo-mingw32-gl.patch
new file mode 100644
index 0000000..af0eb92
--- /dev/null
+++ b/cairo-mingw32-gl.patch
@@ -0,0 +1,158 @@
+--- cairo-1.16.0/src/cairo-gl-composite.c.orig	2018-10-21 18:12:52.400945600 +0200
++++ cairo-1.16.0/src/cairo-gl-composite.c	2018-10-21 18:14:57.924277503 +0200
+@@ -340,7 +340,7 @@ _cairo_gl_context_setup_operand (cairo_g
+     case CAIRO_GL_OPERAND_CONSTANT:
+ 	break;
+     case CAIRO_GL_OPERAND_TEXTURE:
+-	glActiveTexture (GL_TEXTURE0 + tex_unit);
++	ctx->dispatch.ActiveTexture (GL_TEXTURE0 + tex_unit);
+ 	glBindTexture (ctx->tex_target, operand->texture.tex);
+ 	_cairo_gl_texture_set_extend (ctx, ctx->tex_target,
+ 				      operand->texture.attributes.extend);
+@@ -358,7 +358,7 @@ _cairo_gl_context_setup_operand (cairo_g
+     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
+     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE:
+     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_EXT:
+-	glActiveTexture (GL_TEXTURE0 + tex_unit);
++	ctx->dispatch.ActiveTexture (GL_TEXTURE0 + tex_unit);
+ 	glBindTexture (ctx->tex_target, operand->gradient.gradient->tex);
+ 	_cairo_gl_texture_set_extend (ctx, ctx->tex_target, operand->gradient.extend);
+ 	_cairo_gl_texture_set_filter (ctx, ctx->tex_target, CAIRO_FILTER_BILINEAR);
+@@ -481,9 +481,9 @@ _cairo_gl_set_operator (cairo_gl_context
+     }
+ 
+     if (ctx->current_target->base.content == CAIRO_CONTENT_ALPHA) {
+-	glBlendFuncSeparate (GL_ZERO, GL_ZERO, src_factor, dst_factor);
++	ctx->dispatch.BlendFuncSeparate (GL_ZERO, GL_ZERO, src_factor, dst_factor);
+     } else if (ctx->current_target->base.content == CAIRO_CONTENT_COLOR) {
+-	glBlendFuncSeparate (src_factor, dst_factor, GL_ONE, GL_ONE);
++	ctx->dispatch.BlendFuncSeparate (src_factor, dst_factor, GL_ONE, GL_ONE);
+     } else {
+ 	glBlendFunc (src_factor, dst_factor);
+     }
+--- cairo-1.16.0/src/cairo-gl-device.c.orig	2018-10-21 18:12:52.400945600 +0200
++++ cairo-1.16.0/src/cairo-gl-device.c	2018-10-21 18:16:20.617609890 +0200
+@@ -341,9 +341,9 @@ _cairo_gl_context_activate (cairo_gl_con
+ 	    _cairo_gl_composite_flush (ctx);
+ 	    _cairo_gl_context_destroy_operand (ctx, ctx->max_textures - 1);
+ 	}
+-	glActiveTexture (ctx->max_textures - 1);
++	ctx->dispatch.ActiveTexture (ctx->max_textures - 1);
+     } else {
+-	glActiveTexture (GL_TEXTURE0 + tex_unit);
++	ctx->dispatch.ActiveTexture (GL_TEXTURE0 + tex_unit);
+     }
+ }
+ 
+diff -x '*.am' -x '*.in' -rupwN cairo-1.12.16.old/src/cairo-gl-dispatch-private.h cairo-1.12.16.new/src/cairo-gl-dispatch-private.h
+--- cairo-1.12.16.old/src/cairo-gl-dispatch-private.h	2013-08-26 15:07:21 +0000
++++ cairo-1.12.16.new/src/cairo-gl-dispatch-private.h	2014-08-02 14:58:08 +0000
+@@ -59,6 +59,16 @@ typedef struct _cairo_gl_dispatch_entry
+ 			                     offsetof(cairo_gl_dispatch_t, name)}
+ #define DISPATCH_ENTRY_LAST { { NULL, NULL, NULL }, 0 }
+ 
++cairo_private cairo_gl_dispatch_entry_t dispatch_multitexture_entries[] = {
++    DISPATCH_ENTRY_ARB     (ActiveTexture),
++    DISPATCH_ENTRY_LAST
++};
++
++cairo_private cairo_gl_dispatch_entry_t dispatch_blendfuncseparate_entries[] = {
++    DISPATCH_ENTRY_EXT     (BlendFuncSeparate),
++    DISPATCH_ENTRY_LAST
++};
++
+ cairo_private cairo_gl_dispatch_entry_t dispatch_buffers_entries[] = {
+     DISPATCH_ENTRY_ARB     (GenBuffers),
+     DISPATCH_ENTRY_ARB     (BindBuffer),
+diff -x '*.am' -x '*.in' -rupwN cairo-1.12.16.old/src/cairo-gl-dispatch.c cairo-1.12.16.new/src/cairo-gl-dispatch.c
+--- cairo-1.12.16.old/src/cairo-gl-dispatch.c	2013-08-26 15:07:21 +0000
++++ cairo-1.12.16.new/src/cairo-gl-dispatch.c	2014-08-02 15:00:10 +0000
+@@ -226,6 +226,45 @@ _cairo_gl_dispatch_init_multisampling (c
+     return CAIRO_STATUS_SUCCESS;
+ }
+ 
++static cairo_status_t
++_cairo_gl_dispatch_init_multitexture (cairo_gl_dispatch_t *dispatch,
++				       cairo_gl_get_proc_addr_func_t get_proc_addr,
++				       int gl_version,
++				       cairo_gl_flavor_t gl_flavor)
++{
++    cairo_gl_dispatch_name_t dispatch_name = CAIRO_GL_DISPATCH_NAME_EXT;
++
++    if (gl_version >= CAIRO_GL_VERSION_ENCODE (1, 3))
++      dispatch_name = CAIRO_GL_DISPATCH_NAME_CORE;
++    else if (!_cairo_gl_has_extension ("GL_ARB_multitexture"))
++    return CAIRO_STATUS_DEVICE_ERROR;
++
++    _cairo_gl_dispatch_init_entries (dispatch, get_proc_addr,
++				     dispatch_multitexture_entries,
++				     dispatch_name);
++    return CAIRO_STATUS_SUCCESS;
++}
++
++static cairo_status_t
++_cairo_gl_dispatch_init_blendfuncseparate (cairo_gl_dispatch_t *dispatch,
++				       cairo_gl_get_proc_addr_func_t get_proc_addr,
++				       int gl_version,
++				       cairo_gl_flavor_t gl_flavor)
++{
++    cairo_gl_dispatch_name_t dispatch_name = CAIRO_GL_DISPATCH_NAME_EXT;
++
++    if (gl_version >= CAIRO_GL_VERSION_ENCODE (1, 4))
++    {
++      dispatch_name = CAIRO_GL_DISPATCH_NAME_CORE;
++    } else if (!_cairo_gl_has_extension ("GL_EXT_blend_func_separate"))
++    return CAIRO_STATUS_DEVICE_ERROR;
++
++    _cairo_gl_dispatch_init_entries (dispatch, get_proc_addr,
++				     dispatch_blendfuncseparate_entries,
++				     dispatch_name);
++    return CAIRO_STATUS_SUCCESS;
++}
++
+ cairo_status_t
+ _cairo_gl_dispatch_init (cairo_gl_dispatch_t *dispatch,
+ 			 cairo_gl_get_proc_addr_func_t get_proc_addr)
+@@ -257,5 +296,15 @@ _cairo_gl_dispatch_init (cairo_gl_dispat
+     if (status != CAIRO_STATUS_SUCCESS)
+ 	return status;
+ 
++    status = _cairo_gl_dispatch_init_multitexture (dispatch, get_proc_addr,
++						    gl_version, gl_flavor);
++    if (status != CAIRO_STATUS_SUCCESS)
++	return status;
++
++    status = _cairo_gl_dispatch_init_blendfuncseparate (dispatch, get_proc_addr,
++						    gl_version, gl_flavor);
++    if (status != CAIRO_STATUS_SUCCESS)
++	return status;
++
+     return CAIRO_STATUS_SUCCESS;
+ }
+diff -x '*.am' -x '*.in' -rupwN cairo-1.12.16.old/src/cairo-gl-glyphs.c cairo-1.12.16.new/src/cairo-gl-glyphs.c
+--- cairo-1.12.16.old/src/cairo-gl-glyphs.c	2013-08-26 15:07:21 +0000
++++ cairo-1.12.16.new/src/cairo-gl-glyphs.c	2014-08-01 21:45:43 +0000
+@@ -130,7 +130,7 @@ _cairo_gl_glyph_cache_add_glyph (cairo_g
+ 	return status;
+ 
+     /* XXX: Make sure we use the mask texture. This should work automagically somehow */
+-    glActiveTexture (GL_TEXTURE1);
++    ctx->dispatch.ActiveTexture (GL_TEXTURE1);
+     status = _cairo_gl_surface_draw_image (cache->surface, glyph_surface,
+                                            0, 0,
+                                            glyph_surface->width, glyph_surface->height,
+diff -x '*.am' -x '*.in' -rupwN cairo-1.12.16.old/src/cairo-gl-private.h cairo-1.12.16.new/src/cairo-gl-private.h
+--- cairo-1.12.16.old/src/cairo-gl-private.h	2013-08-26 15:07:21 +0000
++++ cairo-1.12.16.new/src/cairo-gl-private.h	2014-08-01 21:35:01 +0000
+@@ -325,6 +325,11 @@ typedef struct _cairo_gl_dispatch {
+     void (*FramebufferTexture2DMultisample) (GLenum target, GLenum attachment,
+ 					     GLenum textarget, GLuint texture,
+ 					     GLint level, GLsizei samples);
++
++    /* Misc */
++    void (*ActiveTexture) (GLenum texture);
++    void (*BlendFuncSeparate) (GLenum sfactorRGB, GLenum dfactorRGB,
++                         GLenum sfactorAlpha, GLenum dfactorAlpha);
+ } cairo_gl_dispatch_t;
+ 
+ struct _cairo_gl_context {
diff --git a/cairo-mingw32.patch b/cairo-mingw32.patch
index f38cd09..6a5eb17 100644
--- a/cairo-mingw32.patch
+++ b/cairo-mingw32.patch
@@ -30,3 +30,41 @@
  #define access _access
  #define fdopen _fdopen
  #define hypot _hypot
+--- cairo-1.16.0/configure.ac.orig	2018-10-21 16:21:17.304355378 +0200
++++ cairo-1.16.0/configure.ac	2018-10-21 17:09:07.484322608 +0200
+@@ -334,7 +334,11 @@
+ 	  AC_CHECK_HEADER(GL/gl.h,, [use_gl="no (gl.pc nor OpenGL headers not found)"])
+ 	  if test "x$use_gl" = "xyes"; then
+ 	      gl_NONPKGCONFIG_CFLAGS=
++	      if test "x$have_windows" = xyes; then
++		      gl_NONPKGCONFIG_LIBS="-lopengl32"
++	      else
+ 	      gl_NONPKGCONFIG_LIBS="-lGL"
++	      fi
+ 	  fi])
+ 
+   if test "x$have_dl" = "xyes" -a "x$have_dlsym" = "xyes"; then
+--- cairo-1.16.0/test/Makefile.am.orig	2018-08-17 03:10:53.000000000 +0200
++++ cairo-1.16.0/test/Makefile.am	2018-10-21 18:46:12.054256102 +0200
+@@ -17,8 +17,11 @@ endif
+ endif
+ 
+ if CAIRO_HAS_GL_SURFACE
++if CAIRO_HAS_XLIB_SURFACE
++# gl_surface test relies on X11/GLX
+ test_sources += $(gl_surface_test_sources)
+ endif
++endif
+ 
+ if CAIRO_HAS_EGL_FUNCTIONS
+ test_sources += $(egl_surface_test_sources)
+--- cairo-1.16.0/boilerplate/cairo-boilerplate-wgl.c.orig	2018-08-17 03:10:53.000000000 +0200
++++ cairo-1.16.0/boilerplate/cairo-boilerplate-wgl.c	2018-10-21 20:14:56.554195307 +0200
+@@ -35,6 +35,7 @@
+ 
+ #include "cairo-boilerplate-private.h"
+ 
++#include <GL/gl.h>
+ #include <cairo-gl.h>
+ 
+ static const cairo_user_data_key_t gl_closure_key;
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/crossmingw32-cairo.git/commitdiff/1d3dbd49d92f5579bcb985dfbdcea2ad667f7041



More information about the pld-cvs-commit mailing list