- Upgrade to 0.46 (#525933, #628893)

- Fixed race in populating builtin timezone components (#637150)
- Fixed wrong ICAL_ERRORS_ARE_FATAL preprocessor check (#575715)
This commit is contained in:
Robert Scheck 2010-12-19 22:06:07 +01:00
parent 2c836463d0
commit 5caa9c402e
8 changed files with 193 additions and 230 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
libical-0.43.tar.gz
libical-0.46.tar.gz

View File

@ -1,154 +0,0 @@
diff -urNp libical-0.43.orig/libical.pc.in libical-0.43/libical.pc.in
--- libical-0.43.orig/libical.pc.in 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/libical.pc.in 2009-03-15 22:11:13.000000000 +0530
@@ -7,5 +7,5 @@ Name: libical
Description: An implementation of basic iCAL protocols
Version: @VERSION@
Libs: -L${libdir} -lical -licalss -licalvcal
-Cflags: -I${includedir}/libical
+Cflags: -I${includedir}
diff -urNp libical-0.43.orig/src/libical/icaltz-util.c libical-0.43/src/libical/icaltz-util.c
--- libical-0.43.orig/src/libical/icaltz-util.c 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/src/libical/icaltz-util.c 2009-03-15 22:08:03.000000000 +0530
@@ -81,8 +81,8 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-#include <libical/icalerror.h>
-#include <icaltz-util.h>
+#include "icalerror.h"
+#include "icaltz-util.h"
typedef struct
{
diff -urNp libical-0.43.orig/src/libicalcap/icalcap.h libical-0.43/src/libicalcap/icalcap.h
--- libical-0.43.orig/src/libicalcap/icalcap.h 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/src/libicalcap/icalcap.h 2009-03-15 22:08:48.000000000 +0530
@@ -1,7 +1,7 @@
#ifndef __ICALCAP_H__
#define __ICALCAP_H__
-#include <ical.h>
+#include <libical/ical.h>
/*
* Opaque objects
diff -urNp libical-0.43.orig/src/libicalcap/icalcap_message_impl.h libical-0.43/src/libicalcap/icalcap_message_impl.h
--- libical-0.43.orig/src/libicalcap/icalcap_message_impl.h 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/src/libicalcap/icalcap_message_impl.h 2009-03-15 22:09:16.000000000 +0530
@@ -3,7 +3,7 @@
#ifdef WITH_RR
-#include <ical.h>
+#include <libical/ical.h>
#include <librr/rr.h>
#define ICALCAP_MESSAGE_CMD 1
diff -urNp libical-0.43.orig/src/libicalss/icalcalendar.h libical-0.43/src/libicalss/icalcalendar.h
--- libical-0.43.orig/src/libicalss/icalcalendar.h 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/src/libicalss/icalcalendar.h 2009-03-15 22:02:47.000000000 +0530
@@ -30,7 +30,7 @@
#define ICALCALENDAR_H
#include <libical/ical.h>
-#include <icalset.h>
+#include "icalset.h"
/* icalcalendar
* Routines for storing calendar data in a file system. The calendar
diff -urNp libical-0.43.orig/src/libicalss/icalclassify.h libical-0.43/src/libicalss/icalclassify.h
--- libical-0.43.orig/src/libicalss/icalclassify.h 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/src/libicalss/icalclassify.h 2009-03-15 22:03:39.000000000 +0530
@@ -28,8 +28,8 @@
#define ICALCLASSIFY_H
#include <libical/ical.h>
-#include <icalset.h>
-#include <icalcomponent.h>
+#include "icalset.h"
+#include "icalcomponent.h"
icalproperty_xlicclass icalclassify(icalcomponent* c,icalcomponent* match,
const char* user);
diff -urNp libical-0.43.orig/src/libicalss/icalcluster.h libical-0.43/src/libicalss/icalcluster.h
--- libical-0.43.orig/src/libicalss/icalcluster.h 2009-03-15 21:58:48.000000000 +0530
+++ libical-0.43/src/libicalss/icalcluster.h 2009-03-15 22:01:36.000000000 +0530
@@ -30,7 +30,7 @@
#define ICALCLUSTER_H
#include <libical/ical.h>
-#include <icalset.h>
+#include "icalset.h"
typedef struct icalcluster_impl icalcluster;
diff -urNp libical-0.43.orig/src/libicalss/icaldirset.h libical-0.43/src/libicalss/icaldirset.h
--- libical-0.43.orig/src/libicalss/icaldirset.h 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/src/libicalss/icaldirset.h 2009-03-15 22:04:53.000000000 +0530
@@ -30,9 +30,9 @@
#define ICALDIRSET_H
#include <libical/ical.h>
-#include <icalset.h>
-#include <icalcluster.h>
-#include <icalgauge.h>
+#include "icalset.h"
+#include "icalcluster.h"
+#include "icalgauge.h"
/* icaldirset Routines for storing, fetching, and searching for ical
* objects in a database */
diff -urNp libical-0.43.orig/src/libicalss/icalfileset.h libical-0.43/src/libicalss/icalfileset.h
--- libical-0.43.orig/src/libicalss/icalfileset.h 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/src/libicalss/icalfileset.h 2009-03-15 22:03:13.000000000 +0530
@@ -30,9 +30,9 @@
#define ICALFILESET_H
#include <libical/ical.h>
-#include <icalset.h>
-#include <icalcluster.h>
-#include <icalgauge.h>
+#include "icalset.h"
+#include "icalcluster.h"
+#include "icalgauge.h"
#include <sys/types.h> /* For open() flags and mode */
#include <sys/stat.h> /* For open() flags and mode */
#include <fcntl.h> /* For open() flags and mode */
diff -urNp libical-0.43.orig/src/libicalss/icalgauge.h libical-0.43/src/libicalss/icalgauge.h
--- libical-0.43.orig/src/libicalss/icalgauge.h 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/src/libicalss/icalgauge.h 2009-03-15 22:04:12.000000000 +0530
@@ -29,7 +29,7 @@
#ifndef ICALGAUGE_H
#define ICALGAUGE_H
-#include <icalcomponent.h>
+#include "icalcomponent.h"
/** @file icalgauge.h
* @brief Routines implementing a filter for ical components
diff -urNp libical-0.43.orig/src/libicalss/icalset.h libical-0.43/src/libicalss/icalset.h
--- libical-0.43.orig/src/libicalss/icalset.h 2009-03-15 21:58:49.000000000 +0530
+++ libical-0.43/src/libicalss/icalset.h 2009-03-15 22:04:29.000000000 +0530
@@ -41,7 +41,7 @@
#include <limits.h> /* For PATH_MAX */
#include <libical/ical.h>
-#include <icalgauge.h>
+#include "icalgauge.h"
#ifdef PATH_MAX
#define ICAL_PATH_MAX PATH_MAX
diff -urNp libical-0.43.orig/src/libicalss/icalspanlist.h libical-0.43/src/libicalss/icalspanlist.h
--- libical-0.43.orig/src/libicalss/icalspanlist.h 2009-03-15 21:58:48.000000000 +0530
+++ libical-0.43/src/libicalss/icalspanlist.h 2009-03-15 22:02:29.000000000 +0530
@@ -26,7 +26,7 @@
#define ICALSPANLIST_H
#include <libical/ical.h>
-#include <icalset.h>
+#include "icalset.h"
/** @file icalspanlist.h
* @brief Code that supports collections of free/busy spans of time

View File

@ -1,12 +0,0 @@
diff -urNp libical-0.43.orig/src/test/regression.c libical-0.43/src/test/regression.c
--- libical-0.43.orig/src/test/regression.c 2009-01-13 09:34:39.000000000 +0530
+++ libical-0.43/src/test/regression.c 2009-01-13 09:54:37.000000000 +0530
@@ -34,6 +34,8 @@
#include <libical/ical.h>
#include <libical/icalss.h>
#include <libicalvcal/vobject.h>
+#include <libicalvcal/icalvcal.h>
+#include <libicalvcal/vcc.h>
#include "regression.h"

View File

@ -1,12 +0,0 @@
diff -urNp libical-0.43.orig/src/libicalss/Makefile.in libical-0.43/src/libicalss/Makefile.in
--- libical-0.43.orig/src/libicalss/Makefile.in 2009-01-13 09:34:39.000000000 +0530
+++ libical-0.43/src/libicalss/Makefile.in 2009-01-13 09:52:10.000000000 +0530
@@ -308,7 +308,7 @@ INCLUDES = \
$(BDB_INCLUDE)
libicalss_la_LDFLAGS = -version-info 43:0:43
-libicalss_la_LIBADD = $(BDB_LIBFILES)
+libicalss_la_LIBADD = $(BDB_LIBFILES) ../libical/libical.la
@DEV_FALSE@libicalss_la_DEVSOURCES = icalsslexer.c icalssyacc.c
@DEV_TRUE@libicalss_la_DEVSOURCES = icalsslexer.l icalssyacc.y
libicalss_la_SOURCES = \

View File

@ -0,0 +1,70 @@
Patch by Debarshi Ray <rishi@fedoraproject.org> for libical >= 0.46, which replaces the broken
overlefts regarding ICAL_ERRORS_ARE_FATAL preprocessor conditions by correct ones. Since libical
0.43, errors are set to be non-fatal by default. Configure has "#define ICAL_ERRORS_ARE_FATAL 0"
which simply invalidates "#ifndef" and thus breaks applications like e.g. Zarafa Groupware. More
details can be found at: https://bugzilla.redhat.com/show_bug.cgi?id=575715
--- libical-0.46/src/libical/autogenex/ical.h 2010-08-30 22:05:05.000000000 +0200
+++ libical-0.46/src/libical/autogenex/ical.h.errors-are-fatal 2010-12-19 21:39:10.000000000 +0100
@@ -3272,7 +3272,7 @@
void icalerror_set_errno(icalerrorenum x);
#endif
-#ifdef ICAL_ERRORS_ARE_FATAL
+#if ICAL_ERRORS_ARE_FATAL == 1
#undef NDEBUG
#endif
@@ -3282,7 +3282,7 @@
#define icalerror_check_component_type(value,type);
/* Assert with a message */
-#ifdef ICAL_ERRORS_ARE_FATAL
+#if ICAL_ERRORS_ARE_FATAL == 1
#ifdef __GNUC__
#define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);icalerror_stop_here(); abort();}
--- libical-0.46/src/libical/icalerror.h 2010-08-30 22:05:06.000000000 +0200
+++ libical-0.46/src/libical/icalerror.h.errors-are-fatal 2010-12-19 21:40:12.000000000 +0100
@@ -121,7 +121,7 @@
void icalerror_set_errno(icalerrorenum x);
#endif
-#ifdef ICAL_ERRORS_ARE_FATAL
+#if ICAL_ERRORS_ARE_FATAL == 1
#undef NDEBUG
#endif
@@ -131,7 +131,7 @@
#define icalerror_check_component_type(value,type);
/* Assert with a message */
-#ifdef ICAL_ERRORS_ARE_FATAL
+#if ICAL_ERRORS_ARE_FATAL == 1
#ifdef __GNUC__
#define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);icalerror_stop_here(); abort();}
--- libical-0.46/src/libical/icalparser.c 2010-08-30 22:05:06.000000000 +0200
+++ libical-0.46/src/libical/icalparser.c.errors-are-fatal 2010-12-19 21:41:18.000000000 +0100
@@ -930,10 +930,7 @@
/* Change for mozilla */
/* have the option of being flexible towards unsupported parameters */
- #ifndef ICAL_ERRORS_ARE_FATAL
- continue;
- #endif
-
+ #if ICAL_ERRORS_ARE_FATAL == 1
insert_error(tail, str, "Cant parse parameter name",
ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR);
tail = 0;
@@ -947,6 +944,9 @@
name = 0;
}
return 0;
+ #else
+ continue;
+ #endif
}
/* if (pvalue) {

View File

@ -0,0 +1,98 @@
Patch by David Woodhouse <dwmw2@infradead.org> for libical >= 0.46, which fixes a race in populating
builtin timezone components. When multiple threads call icaltimezone_get_component() for the same
zone, it can be populated by icaltimezone_load_builtin_timezone() multiple times simultaneously, and
bad things happen. More details can be found at: https://bugzilla.redhat.com/show_bug.cgi?id=637150
This patch is already part of upstream and thus should be obsolete once libical 0.47 gets released.
--- libical-0.46/src/libical/icaltimezone.c 2010-08-30 22:05:06.000000000 +0200
+++ libical-0.46/src/libical/icaltimezone.c.icaltimezone 2010-12-19 20:37:11.000000000 +0100
@@ -45,6 +45,11 @@
#include <sys/stat.h>
+#ifdef HAVE_PTHREAD
+#include <pthread.h>
+static pthread_mutex_t builtin_mutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
+
#ifdef WIN32
#include <mbstring.h>
#include <windows.h>
@@ -453,8 +458,7 @@
int changes_end_year;
- if (!zone->component)
- icaltimezone_load_builtin_timezone (zone);
+ icaltimezone_load_builtin_timezone (zone);
if (icaltimezone_minimum_expansion_year == -1) {
struct icaltimetype today = icaltime_today();
@@ -1140,8 +1144,7 @@
if (!zone)
return NULL;
- if (!zone->tzid)
- icaltimezone_load_builtin_timezone (zone);
+ icaltimezone_load_builtin_timezone (zone);
return zone->tzid;
}
@@ -1167,8 +1170,7 @@
if (!zone)
return NULL;
- if (!zone->component)
- icaltimezone_load_builtin_timezone (zone);
+ icaltimezone_load_builtin_timezone (zone);
return zone->tznames;
}
@@ -1210,8 +1212,7 @@
if (!zone)
return NULL;
- if (!zone->component)
- icaltimezone_load_builtin_timezone (zone);
+ icaltimezone_load_builtin_timezone (zone);
return zone->component;
}
@@ -1449,8 +1450,7 @@
for (i=0; i<count; i++) {
int z_offset;
zone = icalarray_element_at (builtin_timezones, i);
- if (!zone->component)
- icaltimezone_load_builtin_timezone (zone);
+ icaltimezone_load_builtin_timezone (zone);
z_offset = get_offset(zone);
@@ -1745,6 +1745,12 @@
if (!zone->location || !zone->location[0])
return;
+#ifdef HAVE_PTHREAD
+ pthread_mutex_lock(&builtin_mutex);
+ if (zone->component)
+ goto out;
+#endif
+
#ifdef USE_BUILTIN_TZDATA
{
char *filename;
@@ -1801,8 +1807,11 @@
icalcomponent_remove_component(comp,subcomp);
icalcomponent_free(comp);
}
-#endif
-
+#endif
+#ifdef HAVE_PTHREAD
+ out:
+ pthread_mutex_unlock(&builtin_mutex);
+#endif
}

View File

@ -1,70 +1,46 @@
Name: libical
Version: 0.43
Release: 5%{?dist}
Summary: Reference implementation of the iCalendar data type and serialization format
Summary(pl): Implementacja formatu iCalendar
Group: System Environment/Libraries
Name: libical
Version: 0.46
Release: 1%{?dist}
License: LGPLv2 or MPLv1.1
Group: System Environment/Libraries
URL: http://freeassociation.sourceforge.net/
Source0: http://downloads.sourceforge.net/freeassociation/%{name}-%{version}.tar.gz
# http://bugs.debian.org/511598
Patch0: %{name}-%{version}-implicit-pointer-conversion.patch
Patch1: %{name}-%{version}-makefile.patch
# https://bugzilla.redhat.com/484091
Patch2: %{name}-%{version}-cflags.patch
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
Source: http://downloads.sourceforge.net/freeassociation/%{name}-%{version}.tar.gz
Patch0: libical-0.46-icaltimezone.patch
Patch1: libical-0.46-errors-are-fatal.patch
Requires: tzdata
BuildRequires: bison
BuildRequires: byacc
BuildRequires: flex
BuildRequires: autoconf, automake, libtool
BuildRequires: bison, byacc, flex
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
Reference implementation of the iCalendar data type and serialization format
used in dozens of calendaring and scheduling products.
%description -l pl
Implementacja formatu iCalendar, używana w wielu kalendarzach i
planerach/planistach.
%package devel
Summary: Development files for libical
Summary(pl): Pliki deweloperskie dla libical
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
Requires: pkgconfig
Requires: %{name} = %{version}-%{release}, pkgconfig
%description devel
The libical-devel package contains libraries and header files for developing
applications that use libical.
%description devel -l pl
libical-devel zawiera biblioteki i pliki niezbędne do tworzenia aplikacji
korzystających z libical.
%prep
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch0 -p1 -b .icaltimezone
%patch1 -p1 -b .errors-are-fatal
autoreconf -i
%build
%configure --disable-static --enable-reentrant --with-backtrace
make %{?_smp_mflags}
%check
# make check
# Fails on x86_64 and ppc64.
%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT INSTALL='install -p' install
make install INSTALL="%{__install} -p" DESTDIR=$RPM_BUILD_ROOT
# Don't install any libtool .la files
rm -f $RPM_BUILD_ROOT%{_libdir}/%{name}*.la
%clean
@ -76,13 +52,7 @@ rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%doc ChangeLog
%doc COPYING
%doc LICENSE
%doc NEWS
%doc README
%doc THANKS
%doc TODO
%doc LICENSE README THANKS
%{_libdir}/%{name}.so.*
%{_libdir}/libicalss.so.*
%{_libdir}/libicalvcal.so.*
@ -95,18 +65,21 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/libicalss.so
%{_libdir}/libicalvcal.so
%{_libdir}/pkgconfig/libical.pc
%dir %{_includedir}/%{name}
%{_includedir}/%{name}/ical*.h
%{_includedir}/%{name}/pvl.h
%{_includedir}/%{name}/sspm.h
%{_includedir}/%{name}/port.h
%{_includedir}/%{name}/vcaltmp.h
%{_includedir}/%{name}/vcc.h
%{_includedir}/%{name}/vobject.h
%changelog
* Sun Dec 19 2010 Robert Scheck <robert@fedoraproject.org> 0.46-1
- Upgrade to 0.46 (#525933, #628893)
- Fixed race in populating builtin timezone components (#637150)
- Fixed wrong ICAL_ERRORS_ARE_FATAL preprocessor check (#575715)
* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.43-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild

View File

@ -1 +1 @@
5f0a1feb60894d0be537aefea5647474 libical-0.43.tar.gz
9c08f88945bfd5d0791d102e4aa4125c libical-0.46.tar.gz