Added libxslt.
authorRichard W.M. Jones <rjones@redhat.com>
Sat, 25 Oct 2008 22:44:30 +0000 (23:44 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Sat, 25 Oct 2008 22:44:30 +0000 (23:44 +0100)
.hgignore
libxslt/libexslt-rc4.patch [new file with mode: 0644]
libxslt/mingw32-libxslt-1.1.24-win32-shared.patch [new file with mode: 0644]
libxslt/mingw32-libxslt.spec [new file with mode: 0644]
libxslt/multilib.patch [new file with mode: 0644]

index 4f564e3..a2ec7fa 100644 (file)
--- 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 (file)
index 0000000..0fbf8f6
--- /dev/null
@@ -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 <sys/types.h>                                                        
+-#endif                                                                         
+-#ifdef HAVE_STDINT_H                                                           
+-# include <stdint.h>                                                           
+-#endif                                                                         
+-  
++#ifdef HAVE_SYS_TYPES_H
++# include <sys/types.h>
++#endif
++#ifdef HAVE_STDINT_H
++# include <stdint.h>
++#endif
++
+ #ifdef HAVE_SYS_SELECT_H
+ #include <sys/select.h>               /* 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 (file)
index 0000000..1866126
--- /dev/null
@@ -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 (file)
index 0000000..de8e65d
--- /dev/null
@@ -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 <rjones@redhat.com> - 1.1.24-1
+- Initial RPM release.
diff --git a/libxslt/multilib.patch b/libxslt/multilib.patch
new file mode 100644 (file)
index 0000000..94715d2
--- /dev/null
@@ -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()
+  {