From 6b58f8ea8aead336c0f260695af563f468561206 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 1 Jan 1970 00:00:00 +0000 Subject: [PATCH] Added libxslt. --- .hgignore | 1 + libxslt/libexslt-rc4.patch | 173 ++++++++++++++++++++++ libxslt/mingw32-libxslt-1.1.24-win32-shared.patch | 21 +++ libxslt/mingw32-libxslt.spec | 91 ++++++++++++ libxslt/multilib.patch | 24 +++ 5 files changed, 310 insertions(+) create mode 100644 libxslt/libexslt-rc4.patch create mode 100644 libxslt/mingw32-libxslt-1.1.24-win32-shared.patch create mode 100644 libxslt/mingw32-libxslt.spec create mode 100644 libxslt/multilib.patch diff --git a/.hgignore b/.hgignore index 4f564e3..a2ec7fa 100644 --- a/.hgignore +++ b/.hgignore @@ -48,6 +48,7 @@ libvirt/libvirt-0.4.6.tar.gz libxml2/libxml2-2.6.32.tar.gz libxml2/libxml2-2.7.1.tar.gz libxml2/libxml2-2.7.2.tar.gz +libxslt/libxslt-1.1.24.tar.gz nsis/nsis-2.19-src.tar.bz2 nsis/nsis-2.39-src.tar.bz2 nsiswrapper/installer.exe diff --git a/libxslt/libexslt-rc4.patch b/libxslt/libexslt-rc4.patch new file mode 100644 index 0000000..0fbf8f6 --- /dev/null +++ b/libxslt/libexslt-rc4.patch @@ -0,0 +1,173 @@ +Index: libexslt/crypto.c +=================================================================== +--- libexslt/crypto.c (revision 1485) ++++ libexslt/crypto.c (working copy) +@@ -317,13 +317,13 @@ exsltCryptoCryptoApiRc4Decrypt (xmlXPath + #define PLATFORM_MD5 GCRY_MD_MD5 + #define PLATFORM_SHA1 GCRY_MD_SHA1 + +-#ifdef HAVE_SYS_TYPES_H +-# include +-#endif +-#ifdef HAVE_STDINT_H +-# include +-#endif +- ++#ifdef HAVE_SYS_TYPES_H ++# include ++#endif ++#ifdef HAVE_STDINT_H ++# include ++#endif ++ + #ifdef HAVE_SYS_SELECT_H + #include /* needed by gcrypt.h 4 Jul 04 */ + #endif +@@ -595,11 +595,13 @@ exsltCryptoRc4EncryptFunction (xmlXPathP + int str_len = 0, bin_len = 0, hex_len = 0; + xmlChar *key = NULL, *str = NULL, *padkey = NULL; + xmlChar *bin = NULL, *hex = NULL; ++ xsltTransformContextPtr tctxt = NULL; + +- if ((nargs < 1) || (nargs > 3)) { ++ if (nargs != 2) { + xmlXPathSetArityError (ctxt); + return; + } ++ tctxt = xsltXPathGetTransformContext(ctxt); + + str = xmlXPathPopString (ctxt); + str_len = xmlUTF8Strlen (str); +@@ -611,7 +613,7 @@ exsltCryptoRc4EncryptFunction (xmlXPathP + } + + key = xmlXPathPopString (ctxt); +- key_len = xmlUTF8Strlen (str); ++ key_len = xmlUTF8Strlen (key); + + if (key_len == 0) { + xmlXPathReturnEmptyString (ctxt); +@@ -620,15 +622,33 @@ exsltCryptoRc4EncryptFunction (xmlXPathP + return; + } + +- padkey = xmlMallocAtomic (RC4_KEY_LENGTH); ++ padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1); ++ if (padkey == NULL) { ++ xsltTransformError(tctxt, NULL, tctxt->inst, ++ "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n"); ++ tctxt->state = XSLT_STATE_STOPPED; ++ xmlXPathReturnEmptyString (ctxt); ++ goto done; ++ } ++ memset(padkey, 0, RC4_KEY_LENGTH + 1); ++ + key_size = xmlUTF8Strsize (key, key_len); ++ if ((key_size > RC4_KEY_LENGTH) || (key_size < 0)) { ++ xsltTransformError(tctxt, NULL, tctxt->inst, ++ "exsltCryptoRc4EncryptFunction: key size too long or key broken\n"); ++ tctxt->state = XSLT_STATE_STOPPED; ++ xmlXPathReturnEmptyString (ctxt); ++ goto done; ++ } + memcpy (padkey, key, key_size); +- memset (padkey + key_size, '\0', sizeof (padkey)); + + /* encrypt it */ + bin_len = str_len; + bin = xmlStrdup (str); + if (bin == NULL) { ++ xsltTransformError(tctxt, NULL, tctxt->inst, ++ "exsltCryptoRc4EncryptFunction: Failed to allocate string\n"); ++ tctxt->state = XSLT_STATE_STOPPED; + xmlXPathReturnEmptyString (ctxt); + goto done; + } +@@ -638,6 +658,9 @@ exsltCryptoRc4EncryptFunction (xmlXPathP + hex_len = str_len * 2 + 1; + hex = xmlMallocAtomic (hex_len); + if (hex == NULL) { ++ xsltTransformError(tctxt, NULL, tctxt->inst, ++ "exsltCryptoRc4EncryptFunction: Failed to allocate result\n"); ++ tctxt->state = XSLT_STATE_STOPPED; + xmlXPathReturnEmptyString (ctxt); + goto done; + } +@@ -670,11 +693,13 @@ exsltCryptoRc4DecryptFunction (xmlXPathP + int str_len = 0, bin_len = 0, ret_len = 0; + xmlChar *key = NULL, *str = NULL, *padkey = NULL, *bin = + NULL, *ret = NULL; ++ xsltTransformContextPtr tctxt = NULL; + +- if ((nargs < 1) || (nargs > 3)) { ++ if (nargs != 2) { + xmlXPathSetArityError (ctxt); + return; + } ++ tctxt = xsltXPathGetTransformContext(ctxt); + + str = xmlXPathPopString (ctxt); + str_len = xmlUTF8Strlen (str); +@@ -686,7 +711,7 @@ exsltCryptoRc4DecryptFunction (xmlXPathP + } + + key = xmlXPathPopString (ctxt); +- key_len = xmlUTF8Strlen (str); ++ key_len = xmlUTF8Strlen (key); + + if (key_len == 0) { + xmlXPathReturnEmptyString (ctxt); +@@ -695,22 +720,51 @@ exsltCryptoRc4DecryptFunction (xmlXPathP + return; + } + +- padkey = xmlMallocAtomic (RC4_KEY_LENGTH); ++ padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1); ++ if (padkey == NULL) { ++ xsltTransformError(tctxt, NULL, tctxt->inst, ++ "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n"); ++ tctxt->state = XSLT_STATE_STOPPED; ++ xmlXPathReturnEmptyString (ctxt); ++ goto done; ++ } ++ memset(padkey, 0, RC4_KEY_LENGTH + 1); + key_size = xmlUTF8Strsize (key, key_len); ++ if ((key_size > RC4_KEY_LENGTH) || (key_size < 0)) { ++ xsltTransformError(tctxt, NULL, tctxt->inst, ++ "exsltCryptoRc4EncryptFunction: key size too long or key broken\n"); ++ tctxt->state = XSLT_STATE_STOPPED; ++ xmlXPathReturnEmptyString (ctxt); ++ goto done; ++ } + memcpy (padkey, key, key_size); +- memset (padkey + key_size, '\0', sizeof (padkey)); + + /* decode hex to binary */ + bin_len = str_len; + bin = xmlMallocAtomic (bin_len); ++ if (bin == NULL) { ++ xsltTransformError(tctxt, NULL, tctxt->inst, ++ "exsltCryptoRc4EncryptFunction: Failed to allocate string\n"); ++ tctxt->state = XSLT_STATE_STOPPED; ++ xmlXPathReturnEmptyString (ctxt); ++ goto done; ++ } + ret_len = exsltCryptoHex2Bin (str, str_len, bin, bin_len); + + /* decrypt the binary blob */ + ret = xmlMallocAtomic (ret_len); ++ if (ret == NULL) { ++ xsltTransformError(tctxt, NULL, tctxt->inst, ++ "exsltCryptoRc4EncryptFunction: Failed to allocate result\n"); ++ tctxt->state = XSLT_STATE_STOPPED; ++ xmlXPathReturnEmptyString (ctxt); ++ goto done; ++ } + PLATFORM_RC4_DECRYPT (ctxt, padkey, bin, ret_len, ret, ret_len); + + xmlXPathReturnString (ctxt, ret); + ++done: + if (key != NULL) + xmlFree (key); + if (str != NULL) diff --git a/libxslt/mingw32-libxslt-1.1.24-win32-shared.patch b/libxslt/mingw32-libxslt-1.1.24-win32-shared.patch new file mode 100644 index 0000000..1866126 --- /dev/null +++ b/libxslt/mingw32-libxslt-1.1.24-win32-shared.patch @@ -0,0 +1,21 @@ +--- libxslt-1.1.24.orig/configure.in 2008-05-13 16:40:31.000000000 +0100 ++++ libxslt-1.1.24/configure.in 2008-10-25 23:33:10.000000000 +0100 +@@ -3,6 +3,7 @@ + AC_INIT(libxslt/xslt.c) + AM_CONFIG_HEADER(config.h) + AC_CANONICAL_HOST ++AC_LIBTOOL_WIN32_DLL + + dnl + dnl libxslt is the main part of the package +--- libxslt-1.1.24.orig/libxslt/Makefile.am 2007-01-03 15:11:57.000000000 +0000 ++++ libxslt-1.1.24/libxslt/Makefile.am 2008-10-25 23:33:36.000000000 +0100 +@@ -51,7 +51,7 @@ + libxslt.h + + libxslt_la_LIBADD = $(EXTRA_LIBS) +-libxslt_la_LDFLAGS = -version-info @LIBXSLT_VERSION_INFO@ ++libxslt_la_LDFLAGS = -version-info @LIBXSLT_VERSION_INFO@ -no-undefined + + man_MANS = libxslt.3 + diff --git a/libxslt/mingw32-libxslt.spec b/libxslt/mingw32-libxslt.spec new file mode 100644 index 0000000..de8e65d --- /dev/null +++ b/libxslt/mingw32-libxslt.spec @@ -0,0 +1,91 @@ +%define __strip %{_mingw32_strip} +%define __objdump %{_mingw32_objdump} +%define _use_internal_dependency_generator 0 +%define __find_requires %{_mingw32_findrequires} +%define __find_provides %{_mingw32_findprovides} + +Name: mingw32-libxslt +Version: 1.1.24 +Release: 1%{?dist} +Summary: MinGW Windows Library providing the Gnome XSLT engine + +License: MIT +Group: Development/Libraries +URL: http://xmlsoft.org/XSLT/ +Source0: ftp://xmlsoft.org/XSLT/libxslt-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +BuildArch: noarch + +Patch0: multilib.patch +Patch1: libexslt-rc4.patch + +Patch1000: mingw32-libxslt-1.1.24-win32-shared.patch + +BuildRequires: mingw32-filesystem >= 30 +BuildRequires: mingw32-gcc +BuildRequires: mingw32-binutils +BuildRequires: mingw32-libxml2 >= 2.7.2-3 + +Requires: mingw32-libxml2 >= 2.7.2-3 + + +%description +This C library allows to transform XML files into other XML files +(or HTML, text, ...) using the standard XSLT stylesheet transformation +mechanism. To use it you need to have a version of libxml2 >= 2.6.27 +installed. The xsltproc command is a command line interface to the XSLT engine + + +%prep +%setup -q -n libxslt-%{version} +%patch0 -p1 +%patch1 -p0 + +%patch1000 -p1 + + +%build +%{_mingw32_configure} --without-python --enable-shared +make +gzip -9 ChangeLog + + +%install +rm -rf $RPM_BUILD_ROOT +make DESTDIR=$RPM_BUILD_ROOT install + +# Remove static libraries but DON'T remove *.dll.a files. +rm $RPM_BUILD_ROOT%{_mingw32_libdir}/libexslt.a +rm $RPM_BUILD_ROOT%{_mingw32_libdir}/libxslt.a + +# Remove doc and man which duplicate stuff already in Fedora native package. +rm -r $RPM_BUILD_ROOT%{_mingw32_docdir} +rm -r $RPM_BUILD_ROOT%{_mingw32_mandir} + + +%clean +rm -rf $RPM_BUILD_ROOT + + +%files +%defattr(-,root,root) +%{_mingw32_bindir}/xslt-config +%{_mingw32_bindir}/xsltproc.exe +%{_mingw32_includedir}/libexslt +%{_mingw32_includedir}/libxslt +#%{_mingw32_bindir}/libexslt.dll +#%{_mingw32_libdir}/libexslt.dll.a +%{_mingw32_libdir}/libexslt.la +%{_mingw32_bindir}/libxslt-1.dll +%{_mingw32_libdir}/libxslt.dll.a +%{_mingw32_libdir}/libxslt.la +%{_mingw32_libdir}/pkgconfig/libexslt.pc +%{_mingw32_libdir}/pkgconfig/libxslt.pc +%{_mingw32_libdir}/xsltConf.sh +%{_mingw32_datadir}/aclocal/libxslt.m4 + + +%changelog +* Sat Oct 25 2008 Richard W.M. Jones - 1.1.24-1 +- Initial RPM release. diff --git a/libxslt/multilib.patch b/libxslt/multilib.patch new file mode 100644 index 0000000..94715d2 --- /dev/null +++ b/libxslt/multilib.patch @@ -0,0 +1,24 @@ +*** XSLT/xslt-config.in.orig 2006-06-06 17:32:23.000000000 +0200 +--- XSLT/xslt-config.in 2006-06-06 17:32:48.000000000 +0200 +*************** +*** 4,10 **** + exec_prefix=@exec_prefix@ + exec_prefix_set=no + includedir=@includedir@ +! libdir=@libdir@ + + usage() + { +--- 4,15 ---- + exec_prefix=@exec_prefix@ + exec_prefix_set=no + includedir=@includedir@ +! if [ "`ldd /bin/sh | grep lib64`" = "" ] +! then +! libdir=${exec_prefix}/lib +! else +! libdir=${exec_prefix}/lib64 +! fi + + usage() + { -- 1.8.3.1