From febd402ce3877e88a0b67b04323ff8bd633d2075 Mon Sep 17 00:00:00 2001 From: ka Date: Mon, 28 Mar 2011 23:42:19 +0200 Subject: rsvglibs: added external librsvg library --- librsvg/librsvg-2.32.1-win32.patch | 526 +++++++++++++++++++++++++++++++++++++ librsvg/makefile.mk | 22 +- librsvg/prj/d.lst | 2 + 3 files changed, 544 insertions(+), 6 deletions(-) create mode 100644 librsvg/librsvg-2.32.1-win32.patch mode change 100644 => 100755 librsvg/makefile.mk mode change 100644 => 100755 librsvg/prj/d.lst diff --git a/librsvg/librsvg-2.32.1-win32.patch b/librsvg/librsvg-2.32.1-win32.patch new file mode 100644 index 000000000000..0bdf11d57184 --- /dev/null +++ b/librsvg/librsvg-2.32.1-win32.patch @@ -0,0 +1,526 @@ +--- misc/librsvg-2.32.1/librsvg-features.h 2010-11-13 11:52:49.000000000 +0100 ++++ misc/build/librsvg-2.32.1/librsvg-features.h 2011-03-28 16:29:01.357827800 +0200 +@@ -11,7 +11,7 @@ + (LIBRSVG_MAJOR_VERSION == (major) && LIBRSVG_MINOR_VERSION > (minor)) || \ + (LIBRSVG_MAJOR_VERSION == (major) && LIBRSVG_MINOR_VERSION == (minor) && LIBRSVG_MICRO_VERSION >= (micro))) + +-#define LIBRSVG_HAVE_SVGZ (1) ++#define LIBRSVG_HAVE_SVGZ (0) + #define LIBRSVG_HAVE_CSS (1) + + #define LIBRSVG_CHECK_FEATURE(FEATURE) (defined(LIBRSVG_HAVE_##FEATURE) && LIBRSVG_HAVE_##FEATURE) +--- misc/librsvg-2.32.1/rsvg-image.c 2010-09-27 19:18:35.000000000 +0200 ++++ misc/build/librsvg-2.32.1/rsvg-image.c 2011-03-28 20:14:53.630005800 +0200 +@@ -22,8 +22,8 @@ + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +- Authors: Raph Levien , +- Dom Lachowicz , ++ Authors: Raph Levien , ++ Dom Lachowicz , + Caleb Moore + */ + +@@ -34,15 +34,167 @@ + #include + #include + #include "rsvg-css.h" ++#ifdef HAVE_GIO + #include ++#endif ++ ++static const char s_UTF8_B64Alphabet[64] = { ++ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, ++ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, /* A-Z */ ++ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, ++ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, /* a-z */ ++ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 0-9 */ ++ 0x2b, /* + */ ++ 0x2f /* / */ ++}; ++static const char utf8_b64_pad = 0x3d; ++ ++static gboolean ++b64_decode_char (char c, int *b64) ++{ ++ if ((c >= 0x41) && (c <= 0x5a)) { ++ *b64 = c - 0x41; ++ return TRUE; ++ } ++ if ((c >= 0x61) && (c <= 0x7a)) { ++ *b64 = c - (0x61 - 26); ++ return TRUE; ++ } ++ if ((c >= 0x30) && (c <= 0x39)) { ++ *b64 = c + (52 - 0x30); ++ return TRUE; ++ } ++ if (c == 0x2b) { ++ *b64 = 62; ++ return TRUE; ++ } ++ if (c == 0x2f) { ++ *b64 = 63; ++ return TRUE; ++ } ++ return FALSE; ++} ++ ++static gboolean ++utf8_base64_decode (guchar ** binptr, size_t * binlen, const char *b64ptr, size_t b64len) ++{ ++ gboolean decoded = TRUE; ++ gboolean padding = FALSE; ++ ++ int i = 0; ++ glong ucs4_len, j; ++ ++ unsigned char byte1 = 0; ++ unsigned char byte2; ++ ++ gunichar ucs4, *ucs4_str; ++ ++ if (b64len == 0) ++ return TRUE; ++ ++ if ((binptr == 0) || (b64ptr == 0)) ++ return FALSE; ++ ++ ucs4_str = g_utf8_to_ucs4_fast (b64ptr, b64len, &ucs4_len); ++ ++ for (j = 0; j < ucs4_len; j++) { ++ ucs4 = ucs4_str[j]; ++ if ((ucs4 & 0x7f) == ucs4) { ++ int b64; ++ char c = (char) (ucs4); ++ ++ if (b64_decode_char (c, &b64)) { ++ if (padding || (*binlen == 0)) { ++ decoded = FALSE; ++ break; ++ } ++ ++ switch (i) { ++ case 0: ++ byte1 = (unsigned char) (b64) << 2; ++ i++; ++ break; ++ case 1: ++ byte2 = (unsigned char) (b64); ++ byte1 |= byte2 >> 4; ++ *(*binptr)++ = (char) (byte1); ++ (*binlen)--; ++ byte1 = (byte2 & 0x0f) << 4; ++ i++; ++ break; ++ case 2: ++ byte2 = (unsigned char) (b64); ++ byte1 |= byte2 >> 2; ++ *(*binptr)++ = (char) (byte1); ++ (*binlen)--; ++ byte1 = (byte2 & 0x03) << 6; ++ i++; ++ break; ++ default: ++ byte1 |= (unsigned char) (b64); ++ *(*binptr)++ = (char) (byte1); ++ (*binlen)--; ++ i = 0; ++ break; ++ } ++ ++ if (!decoded) ++ break; ++ ++ continue; ++ } else if (c == utf8_b64_pad) { ++ switch (i) { ++ case 0: ++ case 1: ++ decoded = FALSE; ++ break; ++ case 2: ++ if (*binlen == 0) ++ decoded = FALSE; ++ else { ++ *(*binptr)++ = (char) (byte1); ++ (*binlen)--; ++ padding = TRUE; ++ } ++ i++; ++ break; ++ default: ++ if (!padding) { ++ if (*binlen == 0) ++ decoded = FALSE; ++ else { ++ *(*binptr)++ = (char) (byte1); ++ (*binlen)--; ++ padding = TRUE; ++ } ++ } ++ i = 0; ++ break; ++ } ++ if (!decoded) ++ break; ++ ++ continue; ++ } ++ } ++ if (g_unichar_isspace (ucs4)) ++ continue; ++ ++ decoded = FALSE; ++ break; ++ } ++ ++ g_free (ucs4_str); ++ return decoded; ++} + + static GByteArray * + rsvg_acquire_base64_resource (const char *data, GError ** error) + { +- GByteArray *array = NULL; +- gsize data_len, written_len; +- int state = 0; +- guint save = 0; ++ GByteArray *array; ++ ++ guchar *bufptr; ++ size_t buffer_len, buffer_max_len, data_len; + + rsvg_return_val_if_fail (data != NULL, NULL, error); + +@@ -51,10 +203,19 @@ + break; + + data_len = strlen (data); +- array = g_byte_array_sized_new (data_len / 4 * 3); +- written_len = g_base64_decode_step (data, data_len, array->data, +- &state, &save); +- g_byte_array_set_size (array, written_len); ++ ++ buffer_max_len = ((data_len >> 2) + 1) * 3; ++ buffer_len = buffer_max_len; ++ ++ array = g_byte_array_sized_new (buffer_max_len); ++ bufptr = array->data; ++ ++ if (!utf8_base64_decode (&bufptr, &buffer_len, data, data_len)) { ++ g_byte_array_free (array, TRUE); ++ return NULL; ++ } ++ ++ array->len = buffer_max_len - buffer_len; + + return array; + } +@@ -75,7 +236,7 @@ + if (base_filename != NULL) { + tmpcdir = g_path_get_dirname (base_filename); + g_free (base_filename); +- } else ++ } else + return NULL; + } else + tmpcdir = g_get_current_dir (); +@@ -92,8 +253,10 @@ + { + GByteArray *array; + gchar *path; +- gchar *data = NULL; +- gsize length; ++ ++ guchar buffer[4096]; ++ int length; ++ FILE *f; + + rsvg_return_val_if_fail (filename != NULL, NULL, error); + +@@ -101,20 +264,53 @@ + if (path == NULL) + return NULL; + +- if (!g_file_get_contents (path, &data, &length, error)) { +- g_free (path); ++ f = fopen (path, "rb"); ++ g_free (path); ++ ++ if (!f) { ++ g_set_error (error, ++ G_FILE_ERROR, ++ g_file_error_from_errno (errno), ++ _("Failed to open file '%s': %s"), filename, g_strerror (errno)); + return NULL; + } + ++ /* TODO: an optimization is to use the file's size */ + array = g_byte_array_new (); + +- g_byte_array_append (array, (guint8 *)data, length); +- g_free (data); +- g_free (path); ++ while (!feof (f)) { ++ length = fread (buffer, 1, sizeof (buffer), f); ++ if (length > 0) { ++ if (g_byte_array_append (array, buffer, length) == NULL) { ++ fclose (f); ++ g_byte_array_free (array, TRUE); ++ return NULL; ++ } ++ } else if (ferror (f)) { ++ fclose (f); ++ g_byte_array_free (array, TRUE); ++ return NULL; ++ } ++ } ++ ++ fclose (f); + + return array; + } + ++#ifdef HAVE_GIO ++ ++static void ++rsvg_free_error (GError ** err) ++{ ++ if (err) { ++ if (*err) { ++ g_error_free (*err); ++ *err = NULL; ++ } ++ } ++} ++ + static GByteArray * + rsvg_acquire_vfs_resource (const char *filename, const char *base_uri, GError ** error) + { +@@ -133,19 +329,19 @@ + if (base_uri != NULL) { + GFile *base; + +- g_clear_error (error); +- +- g_object_unref (file); ++ rsvg_free_error(error); ++ ++ g_object_unref (file); + + base = g_file_new_for_uri (base_uri); + file = g_file_resolve_relative_path (base, filename); + g_object_unref (base); + +- res = g_file_load_contents (file, NULL, &data, &size, NULL, error); ++ res = g_file_load_contents (file, NULL, &data, &size, NULL, error); + } + } + +- g_object_unref (file); ++ g_object_unref (file); + + if (res) { + array = g_byte_array_new (); +@@ -158,6 +354,7 @@ + + return array; + } ++#endif + + GByteArray * + _rsvg_acquire_xlink_href_resource (const char *href, const char *base_uri, GError ** err) +@@ -173,8 +370,10 @@ + if (!arr) + arr = rsvg_acquire_file_resource (href, base_uri, NULL); + ++#ifdef HAVE_GIO + if (!arr) + arr = rsvg_acquire_vfs_resource (href, base_uri, NULL); ++#endif + + return arr; + } +@@ -274,10 +473,9 @@ + RsvgNodeImage *z = (RsvgNodeImage *) self; + rsvg_state_finalize (z->super.state); + g_free (z->super.state); +- z->super.state = NULL; + if (z->img) +- g_object_unref (z->img); +- _rsvg_node_free(self); ++ g_object_unref (G_OBJECT (z->img)); ++ g_free (z); + } + + static void +@@ -300,7 +498,7 @@ + + rsvg_push_discrete_layer (ctx); + +- if (!rsvg_current_state (ctx)->overflow && (aspect_ratio & RSVG_ASPECT_RATIO_SLICE)) { ++ if (!rsvg_current_state(ctx)->overflow && (aspect_ratio & RSVG_ASPECT_RATIO_SLICE)) { + rsvg_add_clipping_rect (ctx, x, y, w, h); + } + +@@ -357,10 +555,11 @@ + RsvgNodeImage *image; + image = g_new (RsvgNodeImage, 1); + _rsvg_node_init (&image->super); +- g_assert (image->super.state); + image->img = NULL; + image->preserve_aspect_ratio = RSVG_ASPECT_RATIO_XMID_YMID; + image->x = image->y = image->w = image->h = _rsvg_css_parse_length ("0"); ++ image->super.state = g_new (RsvgState, 1); ++ rsvg_state_init (image->super.state); + image->super.free = rsvg_node_image_free; + image->super.draw = rsvg_node_image_draw; + image->super.set_atts = rsvg_node_image_set_atts; +--- misc/librsvg-2.32.1/config.h 2011-03-28 20:38:20.301880800 +0200 ++++ misc/build/librsvg-2.32.1/config.h 2011-03-28 20:40:54.958130800 +0200 +@@ -1 +1,27 @@ +-dummy ++#define HAVE_FLOAT_H 1 ++/* #undef ENABLE_XEMBED */ ++/* #undef HAVE_BASENAME */ ++/* #undef HAVE_DLFCN_H */ ++#define HAVE_GIO 1 ++/* #undef HAVE_INTTYPES_H */ ++/* #undef HAVE_LC_MESSAGES */ ++#define HAVE_LOCALE_H 1 ++#define HAVE_MEMORY_H 1 ++/* #undef HAVE_STDINT_H */ ++#define HAVE_STDLIB_H 1 ++/* #undef HAVE_STRINGS_H */ ++#define HAVE_STRING_H 1 ++/* #undef HAVE_STRTOK_R */ ++#define HAVE_SYS_STAT_H 1 ++#define HAVE_SYS_TYPES_H 1 ++/* #undef HAVE_UNISTD_H */ ++ ++#define PACKAGE "librsvg" ++#define PACKAGE_BUGREPORT "" ++#define PACKAGE_NAME "" ++#define PACKAGE_STRING "" ++#define PACKAGE_TARNAME "" ++#define PACKAGE_VERSION "" ++#define VERSION "2.32.1" ++#define STDC_HEADERS 1 ++#define X_DISPLAY_MISSING 1 +--- misc/librsvg-2.32.1/makefile.mk 2011-03-28 20:38:20.489380800 +0200 ++++ misc/build/librsvg-2.32.1/makefile.mk 2011-03-28 20:40:38.786255800 +0200 +@@ -1 +1,111 @@ +-dummy ++#************************************************************************* ++# ++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++# ++# Copyright 2000, 2010 Oracle and/or its affiliates. ++# ++# OpenOffice.org - a multi-platform office productivity suite ++# ++# This file is part of OpenOffice.org. ++# ++# OpenOffice.org is free software: you can redistribute it and/or modify ++# it under the terms of the GNU Lesser General Public License version 3 ++# only, as published by the Free Software Foundation. ++# ++# OpenOffice.org is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU Lesser General Public License version 3 for more details ++# (a copy is included in the LICENSE file that accompanied this code). ++# ++# You should have received a copy of the GNU Lesser General Public License ++# version 3 along with OpenOffice.org. If not, see ++# ++# for a copy of the LGPLv3 License. ++# ++#************************************************************************* ++ ++PRJ=..$/..$/..$/.. ++PRJINC=. ++PRJNAME=librsvg ++TARGET=librsvg-2-2 ++ ++VISIBILITY_HIDDEN=TRUE ++EXTERNAL_WARNINGS_NOT_ERRORS=TRUE ++ ++# --- Settings ---------------------------------- ++ ++.INCLUDE : settings.mk ++ ++CFLAGS+= -DHAVE_GSF -DHAVE_LIBCROCO \ ++ -I. -I$(SOLARINCDIR)$/external/glib-2.0 \ ++ -I. -I$(SOLARINCDIR)$/external/gdk-pixbuf-2.0 \ ++ -I$(SOLARINCDIR)$/external/pango-1.0 \ ++ -I$(SOLARINCDIR)$/external/cairo \ ++ -I$(SOLARINCDIR)$/external/libgsf-1 \ ++ -I$(SOLARINCDIR)$/external/libcroco-0.6 ++ ++# --- Files ------------------------------------- ++ ++SLOFILES=\ ++ $(SLO)$/librsvg-enum-types.obj \ ++ $(SLO)$/librsvg-features.obj \ ++ $(SLO)$/rsvg-affine.obj \ ++ $(SLO)$/rsvg-base-file-util.obj \ ++ $(SLO)$/rsvg-base.obj \ ++ $(SLO)$/rsvg-bpath-util.obj \ ++ $(SLO)$/rsvg-cairo-clip.obj \ ++ $(SLO)$/rsvg-cairo-draw.obj \ ++ $(SLO)$/rsvg-cairo-render.obj \ ++ $(SLO)$/rsvg-cond.obj \ ++ $(SLO)$/rsvg-convert.obj \ ++ $(SLO)$/rsvg-css.obj \ ++ $(SLO)$/rsvg-defs.obj \ ++ $(SLO)$/rsvg-file-util.obj \ ++ $(SLO)$/rsvg-filter.obj \ ++ $(SLO)$/rsvg-gobject.obj \ ++ $(SLO)$/rsvg-image.obj \ ++ $(SLO)$/rsvg-marker.obj \ ++ $(SLO)$/rsvg-mask.obj \ ++ $(SLO)$/rsvg-paint-server.obj \ ++ $(SLO)$/rsvg-path.obj \ ++ $(SLO)$/rsvg-shapes.obj \ ++ $(SLO)$/rsvg-structure.obj \ ++ $(SLO)$/rsvg-styles.obj \ ++ $(SLO)$/rsvg-text.obj \ ++ $(SLO)$/rsvg-xml.obj \ ++ $(SLO)$/rsvg.obj ++ ++# --- Library ----------------------------------- ++ ++SHL1TARGET= $(TARGET) ++SHL1OBJS=$(SLOFILES) ++SHL1STDLIBS=\ ++ intl.lib \ ++ gobject-2.0.lib \ ++ gmodule-2.0.lib \ ++ glib-2.0.lib \ ++ gio-2.0.lib \ ++ gthread-2.0.lib \ ++ gdk_pixbuf-2.0.lib \ ++ cairo.lib \ ++ libxml2.lib \ ++ igsf-1.lib \ ++ libcroco-0.6-3.lib \ ++ pango-1.0.lib \ ++ pangocairo-1.0.lib ++ ++SHL1IMPLIB= i$(TARGET) ++SHL1DEF= $(MISC)$/$(SHL1TARGET).def ++DEF1NAME= $(SHL1TARGET) ++DEF1DEPN= $(MISC)$/$(SHL1TARGET).flt $(SLB)$/$(TARGET).lib ++DEFLIB1NAME= $(TARGET) ++ ++# --- Targets ---------------------------------- ++ ++.INCLUDE : target.mk ++ ++# --- filter file ------------------------------ ++ ++$(MISC)$/$(SHL1TARGET).flt: makefile.mk ++ @echo CLEAR_THE_FILE > $@ diff --git a/librsvg/makefile.mk b/librsvg/makefile.mk old mode 100644 new mode 100755 index 81127630ee3d..f9c07cfd20fa --- a/librsvg/makefile.mk +++ b/librsvg/makefile.mk @@ -49,6 +49,8 @@ TARFILE_MD5=d7a242ca43e33e1b63d3073f9d46a6a8 .IF "$(OS)" == "MACOSX" || "$(OS)" == "WNT" +.IF "$(OS)" == "MACOSX" + PATCH_FILES=librsvg-2.32.1.patch .IF "$(LIBXML_LIBS)" == "" @@ -70,17 +72,13 @@ CONFIGURE_FLAGS=--disable-gtk-theme --disable-tools --with-croco --with-svgz \ LIBCROCO_LIBS=-lcroco-0.6 CFLAGS="$(ARCH_FLAGS) $(EXTRA_CFLAGS) -I$(SOLARINCDIR)$/external -I$(SOLARINCDIR)$/external$/glib-2.0 -I$(SOLARINCDIR)$/external$/gdk-pixbuf-2.0 -I$(SOLARINCDIR)$/external$/pango-1.0 -I$(SOLARINCDIR)$/cairo" \ LDFLAGS="$(CONFIGURE_LDFLAGS)" -.IF "$(OS)" == "MACOSX" + CONFIGURE_FLAGS+= CPPFLAGS="$(ARCH_FLAGS) $(EXTRA_CDEFS)" -.ENDIF BUILD_ACTION=$(AUGMENT_LIBRARY_PATH) \ $(GNUMAKE) BUILD_DIR=$(CONFIGURE_DIR) - - -.IF "$(OS)"=="MACOSX" EXTRPATH=LOADER OUT2LIB+=.libs$/librsvg-2.2.dylib @@ -88,7 +86,20 @@ OUT2INC+=librsvg-enum-types.h OUT2INC+=librsvg-features.h OUT2INC+=rsvg-cairo.h OUT2INC+=rsvg.h + .ELIF "$(OS)"=="WNT" + +PATCH_FILES=librsvg-2.32.1-win32.patch +ADDITIONAL_FILES=config.h makefile.mk + +BUILD_DIR=. +BUILD_ACTION=dmake + +OUT2INC+=librsvg-enum-types.h +OUT2INC+=librsvg-features.h +OUT2INC+=rsvg-cairo.h +OUT2INC+=rsvg.h + .ENDIF .ENDIF @@ -98,4 +109,3 @@ OUT2INC+=rsvg.h .INCLUDE : set_ext.mk .INCLUDE : target.mk .INCLUDE : tg_ext.mk - diff --git a/librsvg/prj/d.lst b/librsvg/prj/d.lst old mode 100644 new mode 100755 index cd238ecb7e8f..3e6f5de98364 --- a/librsvg/prj/d.lst +++ b/librsvg/prj/d.lst @@ -10,3 +10,5 @@ mkdir: %_DEST%\inc%_EXT%\external\librsvg-2.0\librsvg ..\%__SRC%\lib\librsvg-2.2.dylib %_DEST%\lib%_EXT%\librsvg-2.2.dylib symlink: %_DEST%\lib%_EXT%\librsvg-2.2.dylib %_DEST%\lib%_EXT%\librsvg-2.dylib +..\%__SRC%\lib\ilibrsvg-2-2.lib %_DEST%\lib%_EXT%\librsvg-2-2.lib +..\%__SRC%\bin\librsvg-2-2.dll %_DEST%\bin%_EXT%\librsvg-2-2.dll -- cgit r LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author