File kdepimlibs_external_libical.diff of Package kdepimlibs4
Subject: backport use of external libical
From: Will Stephenson <wstephenson@kde.org>
Bug: bnc:434982
Patch-Upstream: r837127,r857642,r866457,r866462,r866508,r876183,r876184,r876186,r878170,Xr878171,r878322,r878457,r878525,r878561,r879635,r880138,r882872,r887084,r887085,r887495,r887502
Index: cmake/modules/FindLibical.cmake
================================================================================
--- cmake/modules/FindLibical.cmake
+++ cmake/modules/FindLibical.cmake
@@ -1,29 +1,86 @@
# Find Libical
#
-# LIBICAL_FOUND - system has Libical
-# LIBICAL_INCLUDE_DIRS - the Libical include directory
+# LIBICAL_FOUND - system has Libical with the minimum version needed
+# LIBICAL_INCLUDE_DIRS - the Libical include directories
# LIBICAL_LIBRARIES - The libraries needed to use Libical
+# LIBICAL_VERSION = The value of ICAL_VERSION defined in ical.h
# Copyright (c) 2008, Allen Winter <winter@kde.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
-SET (LIBICAL_FIND_REQUIRED ${Libical_FIND_REQUIRED})
-if (LIBICAL_INCLUDE_DIR AND LIBICAL_LIBRARIES)
+if(NOT LIBICAL_MIN_VERSION)
+ set(LIBICAL_MIN_VERSION "0.33")
+endif(NOT LIBICAL_MIN_VERSION)
+
+if (WIN32)
+ file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _program_FILES_DIR)
+ string(REPLACE "\\" "/" _program_FILES_DIR "${_program_FILES_DIR}")
+endif(WIN32)
+
+set(LIBICAL_FIND_REQUIRED ${Libical_FIND_REQUIRED})
+if(LIBICAL_INCLUDE_DIRS AND LIBICAL_LIBRARIES)
# Already in cache, be silent
set(LIBICAL_FIND_QUIETLY TRUE)
-else (LIBICAL_INCLUDE_DIR AND LIBICAL_LIBRARIES)
+endif(LIBICAL_INCLUDE_DIRS AND LIBICAL_LIBRARIES)
+
+#set the root from the LIBICAL_BASE environment
+string(REPLACE "\\" "/" libical_root "$ENV{LIBICAL_BASE}")
+#override the root from LIBICAL_BASE defined to cmake
+if(DEFINED LIBICAL_BASE)
+ string(REPLACE "\\" "/" libical_root ${LIBICAL_BASE})
+endif(DEFINED LIBICAL_BASE)
+
+find_path(LIBICAL_INCLUDE_DIRS NAMES ical.h
+ PATH_SUFFIXES libical
+ PATHS ${libical_root}/include ${_program_FILES_DIR}/libical/include /usr/local/include /usr/include ${KDE4_INCLUDE_DIR}
+ NO_CMAKE_SYSTEM_PATH
+)
+
+find_library(LIBICAL_LIBRARY NAMES ical libical
+ PATHS ${libical_root}/lib ${_program_FILES_DIR}/libical/lib /usr/local/lib /usr/lib ${KDE4_LIB_DIR}
+ NO_CMAKE_SYSTEM_PATH
+)
+find_library(LIBICALSS_LIBRARY NAMES icalss libicalss
+ PATHS ${libical_root}/lib ${_program_FILES_DIR}/libical/lib /usr/local/lib /usr/lib ${KDE4_LIB_DIR}
+ NO_CMAKE_SYSTEM_PATH
+)
+set(LIBICAL_LIBRARIES ${LIBICAL_LIBRARY} ${LIBICALSS_LIBRARY})
+
+if(LIBICAL_INCLUDE_DIRS AND LIBICAL_LIBRARIES)
+ set(FIND_LIBICAL_VERSION_SOURCE
+ "#include <ical.h>\n int main()\n {\n printf(\"%s\",ICAL_VERSION);return 1;\n }\n")
+ set(FIND_LIBICAL_VERSION_SOURCE_FILE ${CMAKE_BINARY_DIR}/CMakeTmp/FindLIBICAL.cxx)
+ file(WRITE "${FIND_LIBICAL_VERSION_SOURCE_FILE}" "${FIND_LIBICAL_VERSION_SOURCE}")
+
+ set(FIND_LIBICAL_VERSION_ADD_INCLUDES
+ "-DINCLUDE_DIRECTORIES:STRING=${LIBICAL_INCLUDE_DIRS}")
+
+ try_run(RUN_RESULT COMPILE_RESULT
+ ${CMAKE_BINARY_DIR}
+ ${FIND_LIBICAL_VERSION_SOURCE_FILE}
+ CMAKE_FLAGS "${FIND_LIBICAL_VERSION_ADD_INCLUDES}"
+ RUN_OUTPUT_VARIABLE LIBICAL_VERSION)
+
+ if(COMPILE_RESULT AND RUN_RESULT EQUAL 1)
+ message(STATUS "Found Libical version ${LIBICAL_VERSION}")
+ macro_ensure_version(${LIBICAL_MIN_VERSION} ${LIBICAL_VERSION} LIBICAL_VERSION_OK)
+ if(NOT LIBICAL_VERSION_OK)
+ message(STATUS "Libcal version ${LIBICAL_VERSION} is too old. At least version ${LIBICAL_MIN_VERSION} is needed.")
+ set(LIBICAL_INCLUDE_DIRS "")
+ set(LIBICAL_LIBRARIES "")
+ endif(NOT LIBICAL_VERSION_OK)
+ else(COMPILE_RESULT AND RUN_RESULT EQ 1)
+ message(FATAL_ERROR "Unable to compile or run the libical version detection program.")
+ endif(COMPILE_RESULT AND RUN_RESULT EQUAL 1)
- find_path(LIBICAL_INCLUDE_DIR ical.h)
- find_library(LIBICAL_LIBRARIES NAMES ical )
+endif(LIBICAL_INCLUDE_DIRS AND LIBICAL_LIBRARIES)
- include(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBICAL DEFAULT_MSG
- LIBICAL_LIBRARIES LIBICAL_INCLUDE_DIR)
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBICAL DEFAULT_MSG LIBICAL_LIBRARIES LIBICAL_INCLUDE_DIRS)
- mark_as_advanced(LIBICAL_INCLUDE_DIR LIBICAL_LIBRARIES)
+mark_as_advanced(LIBICAL_INCLUDE_DIRS LIBICAL_LIBRARIES)
-endif (LIBICAL_INCLUDE_DIR AND LIBICAL_LIBRARIES)
--- kcal/CMakeLists.txt
+++ kcal/CMakeLists.txt
@@ -1,275 +1,96 @@
project(kcal)
-# was used by libical, but not anymore
-#if (UNIX)
-# add_definitions(-DICAL_UNIX_NEWLINE=1)
-#endif (UNIX)
-
-add_definitions(-DPACKAGE_DATA_DIR=\\""${DATA_INSTALL_DIR}/libical"\\" ) # added manually
+find_package(Libical)
+macro_log_feature(LIBICAL_FOUND "libical" "Reference implementation of the iCalendar data type and serialization format" "http://sourceforge.net/projects/freeassociation" TRUE "0.33" "Required for the critical PIM kcal library.")
+if(NOT LIBICAL_FOUND)
+ macro_display_feature_log()
+endif(NOT LIBICAL_FOUND)
add_definitions(-DKDE_DEFAULT_DEBUG_AREA=5800)
include (ConfigureChecks.cmake)
-configure_file (libical/config-libical.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/libical/config-libical.h)
if(KDE4_BUILD_TESTS)
- add_definitions(-DCOMPILING_TESTS)
+ add_definitions(-DCOMPILING_TESTS)
endif(KDE4_BUILD_TESTS)
include_directories(
- ${CMAKE_CURRENT_SOURCE_DIR}/libical/src/libicalss/
- ${CMAKE_CURRENT_BINARY_DIR}/libical/src/libicalss/
- ${CMAKE_CURRENT_SOURCE_DIR}/versit/
- ${CMAKE_CURRENT_SOURCE_DIR}/libical/src/libical/
- ${CMAKE_CURRENT_BINARY_DIR}/libical/src/libical/
- ${CMAKE_CURRENT_BINARY_DIR}/libical # for config.h
- ${CMAKE_SOURCE_DIR}
- ${CMAKE_SOURCE_DIR}/kabc
- ${CMAKE_BINARY_DIR}/kabc
- ${KDE4_INCLUDE_DIR}
-)
-
-set(ICALSCRIPTS ${CMAKE_SOURCE_DIR}/kcal/libical/scripts/ )
-
-set(PROPERTYDEPS
- ${ICALSCRIPTS}/mkderivedproperties.pl
- ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/properties.csv
- ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/value-types.csv
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedproperty.h.in
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedproperty.c.in
-)
-
-add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedproperty.h
- COMMAND ${PERL_EXECUTABLE} -I ${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedproperties.pl -i
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedproperty.h.in
- -h ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/properties.csv
- ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/value-types.csv > ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedproperty.h
- DEPENDS ${PROPERTYDEPS} )
-
-
-add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedproperty.c
- COMMAND ${PERL_EXECUTABLE} -I${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedproperties.pl -i
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedproperty.c.in
- -c ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/properties.csv
- ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/value-types.csv > ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedproperty.c
- DEPENDS ${PROPERTYDEPS} ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedproperty.h )
-
-
-# files generated via add_custom_command are added automatically to the clean files, Alex
-#macro_additional_clean_files(
-# ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedproperty.c
-# ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedproperty.h
-#)
-
-
-set(PARAMETERDEPS
- ${ICALSCRIPTS}/mkderivedparameters.pl
- ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/parameters.csv
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedparameter.c.in
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedparameter.h.in
-)
-
-add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedparameter.h
- COMMAND ${PERL_EXECUTABLE} -I ${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedparameters.pl -i ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedparameter.h.in
- -h ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/parameters.csv > ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedparameter.h
- DEPENDS ${PARAMETERDEPS} )
-
-add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedparameter.c
- COMMAND ${PERL_EXECUTABLE} -I ${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedparameters.pl -i ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedparameter.c.in
- -c ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/parameters.csv > ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedparameter.c
- DEPENDS ${PARAMETERDEPS} ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedparameter.h )
-
-#files generated via add_custom_command are added automatically to the clean files, Alex
-#macro_additional_clean_files(
-# ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedparameter.c
-# ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedparameter.h
-#)
-
-
-set(RESTRICTIONDEPS
- ${ICALSCRIPTS}/mkrestrictiontable.pl
- ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/restrictions.csv
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalrestriction.c.in
+ ${LIBICAL_INCLUDE_DIRS}
+ ${LIBICAL_INCLUDE_DIRS}/libical
+ ${CMAKE_CURRENT_SOURCE_DIR}/versit
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/kabc
+ ${CMAKE_BINARY_DIR}/kabc
+ ${KDE4_INCLUDE_DIR}
)
-add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalrestriction.c
- COMMAND ${PERL_EXECUTABLE} -I ${ICALSCRIPTS} ${ICALSCRIPTS}/mkrestrictiontable.pl -i ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalrestriction.c.in
- ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/restrictions.csv > ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalrestriction.c
- DEPENDS ${RESTRICTIONDEPS} )
-
-
-#files generated via add_custom_command are added automatically to the clean files, Alex
-#macro_additional_clean_files( ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalrestriction.c)
-
-set(VALUEDEPS
- ${CMAKE_SOURCE_DIR}/kcal/libical/scripts/mkderivedvalues.pl
- ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/value-types.csv
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedvalue.c.in
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedvalue.h.in
-)
-
-add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedvalue.h
- COMMAND ${PERL_EXECUTABLE} -I${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedvalues.pl -i ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedvalue.h.in -h ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/value-types.csv > ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedvalue.h
- DEPENDS ${VALUEDEPS} )
-
-
-add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedvalue.c
- COMMAND ${PERL_EXECUTABLE} -I${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedvalues.pl -i ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalderivedvalue.c.in -c ${CMAKE_SOURCE_DIR}/kcal/libical/design-data/value-types.csv > ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedvalue.c
- DEPENDS ${VALUEDEPS} ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedvalue.h )
-
-#files generated via add_custom_command are added automatically to the clean files, Alex
-#macro_additional_clean_files(
-# ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedvalue.h
-# ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedvalue.c
-#)
-
-
-
set(libversit_SRCS
${CMAKE_SOURCE_DIR}/kcal/versit/vcc.c
${CMAKE_SOURCE_DIR}/kcal/versit/vobject.c
)
-# Keep absolute paths here, they are used in tests/CMakeLists.txt too.
-set(libical_SRCS
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/caldate.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalarray.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalattach.c
- ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedparameter.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalrecur.c
- ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalrestriction.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalcomponent.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalenums.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalerror.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalmemory.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalmime.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalparameter.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalparser.c
- ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedproperty.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalproperty.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icaltime.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalduration.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalperiod.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icaltimezone.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icaltypes.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icalvalue.c
- ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedvalue.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/pvl.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/sspm.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/vsnprintf.c
-)
-
-set(libicalss_SRCS
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalclassify.c
- ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalclassify.h
-)
-
-
-macro_additional_clean_files(${CMAKE_BINARY_DIR}/kcal/libical/src/libical/ical.h)
-
-if(WIN32)
- set(TOPS "\"${CMAKE_SOURCE_DIR}\"")
- set(TOPB "\"${CMAKE_BINARY_DIR}\"")
-else(WIN32)
- set(TOPS "${CMAKE_SOURCE_DIR}")
- set(TOPB "${CMAKE_BINARY_DIR}")
-endif(WIN32)
-
-add_custom_command(OUTPUT
- ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/ical.h
- COMMAND
- ${CMAKE_COMMAND}
- -DTOPS:FILEPATH=${TOPS}
- -DTOPB:FILEPATH=${TOPB}
- -DKDE_FILE_H_FILE:FILEPATH=${CMAKE_BINARY_DIR}/kcal/libical/src/libical/ical.h
- -P ${CMAKE_SOURCE_DIR}/kcal/ical_file.cmake
- DEPENDS
- ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedproperty.h
- ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedparameter.h
- ${CMAKE_BINARY_DIR}/kcal/libical/icalderivedvalue.h
-)
-
-macro_additional_clean_files(${CMAKE_BINARY_DIR}/libical/src/libicalss/icalss.h)
-
-add_custom_command(OUTPUT
- ${CMAKE_BINARY_DIR}/kcal/libical/src/libicalss/icalss.h
- COMMAND
- ${CMAKE_COMMAND}
- -DTOP:FILEPATH=${TOPS}
- -DKDE_FILE_H_FILE:FILEPATH=${CMAKE_BINARY_DIR}/kcal/libical/src/libicalss/icalss.h
- -P ${CMAKE_SOURCE_DIR}/kcal/icalss_file.cmake
-)
-
-
########### next target ###############
-set(kcal_LIB_SRCS ${libversit_SRCS} ${libical_SRCS} ${libicalss_SRCS}
- incidencebase.cpp
- incidence.cpp
- journal.cpp
- todo.cpp
- event.cpp
- freebusy.cpp
- freebusyperiod.cpp
- attendee.cpp
- attachment.cpp
- recurrencerule.cpp
- recurrence.cpp
- alarm.cpp
- customproperties.cpp
- calendar.cpp
- calendarlocal.cpp
- calformat.cpp
- vcalformat.cpp
- icalformat.cpp
- icalformat_p.cpp
- incidenceformatter.cpp
- vcaldrag.cpp
- icaldrag.cpp
- exceptions.cpp
- scheduler.cpp
- imipscheduler.cpp
- dummyscheduler.cpp
- calfilter.cpp
- person.cpp
- period.cpp
- duration.cpp
- dndfactory.cpp
- calstorage.cpp
- filestorage.cpp
- compat.cpp
- resourcecalendar.cpp
- resourcelocal.cpp
- resourcelocalconfig.cpp
- resourcelocaldir.cpp
- resourcelocaldirconfig.cpp
- resourcecached.cpp
- resourcecachedconfig.cpp
- calendarresources.cpp
- qtopiaformat.cpp
- htmlexport.cpp
- calendarnull.cpp
- freebusyurlstore.cpp
- confirmsavedialog.cpp
- icaltimezones.cpp
- kresult.cpp )
+set(kcal_LIB_SRCS ${libversit_SRCS}
+ incidencebase.cpp
+ incidence.cpp
+ journal.cpp
+ todo.cpp
+ event.cpp
+ freebusy.cpp
+ freebusyperiod.cpp
+ attendee.cpp
+ attachment.cpp
+ recurrencerule.cpp
+ recurrence.cpp
+ alarm.cpp
+ customproperties.cpp
+ calendar.cpp
+ calendarlocal.cpp
+ calformat.cpp
+ vcalformat.cpp
+ icalformat.cpp
+ icalformat_p.cpp
+ incidenceformatter.cpp
+ vcaldrag.cpp
+ icaldrag.cpp
+ exceptions.cpp
+ scheduler.cpp
+ imipscheduler.cpp
+ dummyscheduler.cpp
+ calfilter.cpp
+ person.cpp
+ period.cpp
+ duration.cpp
+ dndfactory.cpp
+ calstorage.cpp
+ filestorage.cpp
+ compat.cpp
+ resourcecalendar.cpp
+ resourcelocal.cpp
+ resourcelocalconfig.cpp
+ resourcelocaldir.cpp
+ resourcelocaldirconfig.cpp
+ resourcecached.cpp
+ resourcecachedconfig.cpp
+ calendarresources.cpp
+ qtopiaformat.cpp
+ htmlexport.cpp
+ calendarnull.cpp
+ freebusyurlstore.cpp
+ confirmsavedialog.cpp
+ icaltimezones.cpp
+ kresult.cpp )
kde4_add_kcfg_files(kcal_LIB_SRCS htmlexportsettings.kcfgc )
kde4_add_library(kcal SHARED ${kcal_LIB_SRCS})
-target_link_libraries(kcal ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${QT_QTXML_LIBRARY} kresources kabc kpimutils )
+target_link_libraries(kcal ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${QT_QTXML_LIBRARY} kresources kabc kpimutils ${LIBICAL_LIBRARIES})
set_target_properties(kcal PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION})
install(TARGETS kcal ${INSTALL_TARGETS_DEFAULT_ARGS} COMPONENT Devel)
-# hack to force ical[ss].h creation
-add_custom_target(ical-headers DEPENDS
- ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/ical.h
- ${CMAKE_BINARY_DIR}/kcal/libical/src/libicalss/icalss.h
-)
-add_dependencies(kcal ical-headers)
-
########### next target ###############
set(kcal_local_PART_SRCS resourcelocal_plugin.cpp )
@@ -296,7 +117,6 @@
install(TARGETS kcal_localdir DESTINATION ${PLUGIN_INSTALL_DIR})
-add_subdirectory( libical )
add_subdirectory( tests )
########### install files ###############
--- kcal/icalformat.cpp
+++ kcal/icalformat.cpp
@@ -24,7 +24,7 @@
defines the ICalFormat class.
@brief
- iCalendar format implementation.
+ iCalendar format implementation: a layer of abstraction for libical.
@author Cornelius Schumacher \<schumacher@kde.org\>
*/
@@ -114,7 +114,7 @@
clearException();
QString text = toString( calendar );
- if ( text.isNull() ) {
+ if ( text.isEmpty() ) {
return false;
}
@@ -237,7 +237,7 @@
// todos
Todo::List todoList = cal->rawTodos();
Todo::List::ConstIterator it;
- for ( it = todoList.begin(); it != todoList.end(); ++it ) {
+ for ( it = todoList.constBegin(); it != todoList.constEnd(); ++it ) {
component = d->mImpl->writeTodo( *it, tzlist, &tzUsedList );
icalcomponent_add_component( calendar, component );
}
@@ -245,7 +245,7 @@
// events
Event::List events = cal->rawEvents();
Event::List::ConstIterator it2;
- for ( it2 = events.begin(); it2 != events.end(); ++it2 ) {
+ for ( it2 = events.constBegin(); it2 != events.constEnd(); ++it2 ) {
if ( *it2 ) {
component = d->mImpl->writeEvent( *it2, tzlist, &tzUsedList );
icalcomponent_add_component( calendar, component );
@@ -255,14 +255,15 @@
// journals
Journal::List journals = cal->journals();
Journal::List::ConstIterator it3;
- for ( it3 = journals.begin(); it3 != journals.end(); ++it3 ) {
+ for ( it3 = journals.constBegin(); it3 != journals.constEnd(); ++it3 ) {
component = d->mImpl->writeJournal( *it3, tzlist, &tzUsedList );
icalcomponent_add_component( calendar, component );
}
// time zones
const ICalTimeZones::ZoneMap zones = tzUsedList.zones();
- for ( ICalTimeZones::ZoneMap::ConstIterator it = zones.begin(); it != zones.end(); ++it ) {
+ for ( ICalTimeZones::ZoneMap::ConstIterator it=zones.constBegin();
+ it != zones.constEnd(); ++it ) {
icaltimezone *tz = (*it).icalTimezone();
if ( !tz ) {
kError() << "bad time zone";
@@ -278,10 +279,9 @@
icalcomponent_free( calendar );
icalmemory_free_ring();
- if ( text.isNull() ) {
+ if ( text.isEmpty() ) {
setException( new ErrorFormat( ErrorFormat::SaveError,
i18n( "libical error" ) ) );
- return QString();
}
return text;
@@ -478,8 +478,6 @@
return 0;
}
- kDebug() << "getting method...";
-
icalproperty_method icalmethod = icalproperty_get_method( m );
iTIPMethod method;
@@ -514,8 +512,6 @@
break;
}
- kDebug() << "restriction...";
-
if ( !icalrestriction_check( message ) ) {
kWarning() << endl
<< "kcal library reported a problem while parsing:";
@@ -523,7 +519,7 @@
<< d->mImpl->extractErrorProperty( c );
}
- Incidence *existingIncidence = cal->incidenceFromSchedulingID( incidence->uid() );
+ Incidence *existingIncidence = cal->incidence( incidence->uid() );
icalcomponent *calendarComponent;
if ( existingIncidence ) {
@@ -542,16 +538,13 @@
d->mImpl->writeEvent( event ) );
}
} else {
- calendarComponent = 0;
+ icalcomponent_free( message );
+ return new ScheduleMessage( incidence, method, ScheduleMessage::Unknown );
}
- kDebug() << "classify...";
-
icalproperty_xlicclass result =
icalclassify( message, calendarComponent, (char *)"" );
- kDebug() << "returning with result = " << result;
-
ScheduleMessage::Status status;
switch ( result ) {
--- kcal/icalformat_p.cpp
+++ kcal/icalformat_p.cpp
@@ -1289,16 +1289,14 @@
}
p = icalproperty_get_first_parameter( attendee, ICAL_X_PARAMETER );
- if ( p ) {
- uid = icalparameter_get_xvalue( p );
+ while ( p ) {
+ QString xname = QString( icalparameter_get_xname( p ) ).toUpper();
+ QString xvalue = QString::fromUtf8( icalparameter_get_xvalue( p ) );
+ if ( xname == "X-UID" ) {
+ uid = xvalue;
+ }
+ p = icalproperty_get_next_parameter( attendee, ICAL_X_PARAMETER );
}
- // This should be added, but there seems to be a libical bug here.
- // TODO: does this work now in libical-0.24 or greater?
- /*while (p) {
- // if (icalparameter_get_xname(p) == "X-UID") {
- uid = icalparameter_get_xvalue(p);
- p = icalproperty_get_next_parameter(attendee, ICAL_X_PARAMETER);
- } */
Attendee *a = new Attendee( name, email, rsvp, status, role, uid );
--- kcal/tests/CMakeLists.txt
+++ kcal/tests/CMakeLists.txt
@@ -2,20 +2,20 @@
include_directories(
${CMAKE_SOURCE_DIR}/kcal
- ${CMAKE_BINARY_DIR}/kcal/libical/src
+ ${LIBICAL_INCLUDE_DIRS}
)
MACRO(KCAL_UNIT_TESTS)
FOREACH(_testname ${ARGN})
kde4_add_unit_test(${_testname} NOGUI ${_testname}.cpp)
- target_link_libraries(${_testname} ${KDE4_KDECORE_LIBS} kcal ${QT_QTTEST_LIBRARY})
+ target_link_libraries(${_testname} ${KDE4_KDECORE_LIBS} kcal ${QT_QTTEST_LIBRARY} ${QT_QTGUI_LIBRARY})
ENDFOREACH(_testname)
ENDMACRO(KCAL_UNIT_TESTS)
MACRO(KCAL_EXECUTABLE_TESTS)
FOREACH(_testname ${ARGN})
kde4_add_executable(${_testname} NOGUI TEST ${_testname}.cpp)
- target_link_libraries(${_testname} ${KDE4_KDECORE_LIBS} kcal ${QT_QTTEST_LIBRARY})
+ target_link_libraries(${_testname} ${KDE4_KDECORE_LIBS} ${KDE4_KDEUI_LIBS} kcal ${QT_QTTEST_LIBRARY} kresources)
ENDFOREACH(_testname)
ENDMACRO(KCAL_EXECUTABLE_TESTS)
@@ -82,32 +82,32 @@
FOREACH( file ${testFiles} )
GET_FILENAME_COMPONENT( fn ${file} NAME)
- ADD_TEST( RecurNext-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/testrecurrence "next" ${file} )
+ ADD_TEST( RecurNext-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/testrecurrence.shell "next" ${file} )
ENDFOREACH(file)
FOREACH( file ${testFiles} )
GET_FILENAME_COMPONENT( fn ${file} NAME)
- ADD_TEST( RecurPrev-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/testrecurprevious "prev" ${file} )
+ ADD_TEST( RecurPrev-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/testrecurprevious.shell "prev" ${file} )
ENDFOREACH(file)
FOREACH( file ${testFiles} )
GET_FILENAME_COMPONENT( fn ${file} NAME)
- ADD_TEST( RecursOn-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/testrecurson "recurson" ${file} )
+ ADD_TEST( RecursOn-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/testrecurson.shell "recurson" ${file} )
ENDFOREACH(file)
FOREACH( file ${compatFiles} )
GET_FILENAME_COMPONENT( fn ${file} NAME)
- ADD_TEST( Compat-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/readandwrite "ical" ${file} )
+ ADD_TEST( Compat-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/readandwrite.shell "ical" ${file} )
ENDFOREACH(file)
FOREACH( file ${vCalFilesAsIcal} )
GET_FILENAME_COMPONENT( fn ${file} NAME)
- ADD_TEST( VCalOut-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/testvcalexport "vcal" ${file} )
+ ADD_TEST( VCalOut-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/testvcalexport.shell "vcal" ${file} )
ENDFOREACH(file)
FOREACH( file ${vCalFiles} )
GET_FILENAME_COMPONENT( fn ${file} NAME)
- ADD_TEST( VCalIn-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/readandwrite "ical" ${file} )
+ ADD_TEST( VCalIn-${fn} ${CMAKE_CURRENT_SOURCE_DIR}/runsingletestcase.pl ${EXECUTABLE_OUTPUT_PATH}/readandwrite.shell "ical" ${file} )
ENDFOREACH(file)
# ADD_TEST( TestRecurrence runtestcase.pl testrecurrence "next" ${CMAKE_CURRENT_SOURCE_DIR} data/RecurrenceRule/ "*.ics" )
--- kcal/tests/data/vCalendar/KOrganizer_vCalTestCase04.ics.vcal.ref
+++ kcal/tests/data/vCalendar/KOrganizer_vCalTestCase04.ics.vcal.ref
@@ -1,20 +1,20 @@
-BEGIN:VCALENDAR
-PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN
-VERSION:1.0
-BEGIN:VEVENT
-DTSTART:20050520T140000Z
-DTEND:20050520T150000Z
-DCREATED:20050520T105002Z
-UID:KOrganizer-776556232.395
-SEQUENCE:4
-LAST-MODIFIED:20050520T105750Z
-X-ORGANIZER:MAILTO:reinhold@kainhofer.com
-RRULE:MD3 20 20060630T000000
-SUMMARY:20. Mai 2005, 16-17 Uhr, alle 3 Monate am 20., bis 30. Juni 2006
-CLASS:PUBLIC
-PRIORITY:5
-TRANSP:0
-END:VEVENT
-
-END:VCALENDAR
-
+BEGIN:VCALENDAR
+PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN
+VERSION:1.0
+BEGIN:VEVENT
+DTSTART:20050520T140000Z
+DTEND:20050520T150000Z
+DCREATED:20050520T105002Z
+UID:KOrganizer-776556232.395
+SEQUENCE:4
+LAST-MODIFIED:20050520T105750Z
+X-ORGANIZER:MAILTO:reinhold@kainhofer.com
+RRULE:MD3 20 20060630T040000
+SUMMARY:20. Mai 2005, 16-17 Uhr, alle 3 Monate am 20., bis 30. Juni 2006
+CLASS:PUBLIC
+PRIORITY:5
+TRANSP:0
+END:VEVENT
+
+END:VCALENDAR
+
--- kcal/tests/data/vCalendar/KOrganizer_vCalTestCase05.ics.vcal.ref
+++ kcal/tests/data/vCalendar/KOrganizer_vCalTestCase05.ics.vcal.ref
@@ -1,20 +1,20 @@
-BEGIN:VCALENDAR
-PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN
-VERSION:1.0
-BEGIN:VEVENT
-DTSTART:20050520T120000Z
-DTEND:20050520T130000Z
-DCREATED:20050520T104822Z
-UID:KOrganizer-428202830.752
-SEQUENCE:2
-LAST-MODIFIED:20050520T105740Z
-X-ORGANIZER:MAILTO:reinhold@kainhofer.com
-RRULE:W2 MO WE FR 20050630T000000
-SUMMARY:20. Mai 2005, 14-15 Uhr, alle 2 Wochen am Mo/Mi/Fr, bis 30. Juni 2005
-CLASS:PUBLIC
-PRIORITY:5
-TRANSP:0
-END:VEVENT
-
-END:VCALENDAR
-
+BEGIN:VCALENDAR
+PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN
+VERSION:1.0
+BEGIN:VEVENT
+DTSTART:20050520T120000Z
+DTEND:20050520T130000Z
+DCREATED:20050520T104822Z
+UID:KOrganizer-428202830.752
+SEQUENCE:2
+LAST-MODIFIED:20050520T105740Z
+X-ORGANIZER:MAILTO:reinhold@kainhofer.com
+RRULE:W2 MO WE FR 20050630T040000
+SUMMARY:20. Mai 2005, 14-15 Uhr, alle 2 Wochen am Mo/Mi/Fr, bis 30. Juni 2005
+CLASS:PUBLIC
+PRIORITY:5
+TRANSP:0
+END:VEVENT
+
+END:VCALENDAR
+
--- kcal/tests/data/vCalendar/KOrganizer_vCalTestCase12.ics.vcal.ref
+++ kcal/tests/data/vCalendar/KOrganizer_vCalTestCase12.ics.vcal.ref
@@ -1,20 +1,20 @@
-BEGIN:VCALENDAR
-PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN
-VERSION:1.0
-BEGIN:VEVENT
-DTSTART:20050520T110000Z
-DTEND:20050520T120000Z
-DCREATED:20050520T104758Z
-UID:KOrganizer-1078681338.495
-SEQUENCE:1
-LAST-MODIFIED:20050520T104819Z
-X-ORGANIZER:MAILTO:reinhold@kainhofer.com
-RRULE:D3 20050630T000000
-SUMMARY:20. Mai 2005, 13-14 Uhr, alle 3 Tage, bis 30. Juni 2005
-CLASS:PUBLIC
-PRIORITY:5
-TRANSP:0
-END:VEVENT
-
-END:VCALENDAR
-
+BEGIN:VCALENDAR
+PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN
+VERSION:1.0
+BEGIN:VEVENT
+DTSTART:20050520T110000Z
+DTEND:20050520T120000Z
+DCREATED:20050520T104758Z
+UID:KOrganizer-1078681338.495
+SEQUENCE:1
+LAST-MODIFIED:20050520T104819Z
+X-ORGANIZER:MAILTO:reinhold@kainhofer.com
+RRULE:D3 20050630T040000
+SUMMARY:20. Mai 2005, 13-14 Uhr, alle 3 Tage, bis 30. Juni 2005
+CLASS:PUBLIC
+PRIORITY:5
+TRANSP:0
+END:VEVENT
+
+END:VCALENDAR
+
--- kcal/tests/data/vCalendar/KOrganizer_vCalTestCase13.ics.vcal.ref
+++ kcal/tests/data/vCalendar/KOrganizer_vCalTestCase13.ics.vcal.ref
@@ -1,20 +1,20 @@
-BEGIN:VCALENDAR
-PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN
-VERSION:1.0
-BEGIN:VEVENT
-DTSTART:20050520T180000Z
-DTEND:20050520T190000Z
-DCREATED:20050520T105244Z
-UID:KOrganizer-1521406395.909
-SEQUENCE:1
-LAST-MODIFIED:20050520T105327Z
-X-ORGANIZER:MAILTO:reinhold@kainhofer.com
-RRULE:MP3 1- TH 20061231T000000
-SUMMARY:20. Mai 2005, 20-21 Uhr, alle 3 Monate am letzten Do, bis 31. 12. 2006
-CLASS:PUBLIC
-PRIORITY:5
-TRANSP:0
-END:VEVENT
-
-END:VCALENDAR
-
+BEGIN:VCALENDAR
+PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN
+VERSION:1.0
+BEGIN:VEVENT
+DTSTART:20050520T180000Z
+DTEND:20050520T190000Z
+DCREATED:20050520T105244Z
+UID:KOrganizer-1521406395.909
+SEQUENCE:1
+LAST-MODIFIED:20050520T105327Z
+X-ORGANIZER:MAILTO:reinhold@kainhofer.com
+RRULE:MP3 1- TH 20061231T050000
+SUMMARY:20. Mai 2005, 20-21 Uhr, alle 3 Monate am letzten Do, bis 31. 12. 2006
+CLASS:PUBLIC
+PRIORITY:5
+TRANSP:0
+END:VEVENT
+
+END:VCALENDAR
+
--- kcal/tests/testicaltimezones.cpp
+++ kcal/tests/testicaltimezones.cpp
@@ -33,7 +33,7 @@
QTEST_KDEMAIN( ICalTimeZonesTest, NoGUI )
extern "C" {
- #include "kcal/libical/src/libical/ical.h"
+ #include <ical.h>
}
#include "kcal/icaltimezones.h"
using namespace KCal;
@@ -72,22 +72,22 @@
"TZOFFSETFROM:-0400\r\n"
"TZOFFSETTO:-0500\r\n"
"TZNAME:WST\r\n"
- "END:STANDARD\r\n\r\n"
+ "END:STANDARD\r\n"
"BEGIN:DAYLIGHT\r\n"
"DTSTART:19870405T020000\r\n"
"RRULE:FREQ=YEARLY;UNTIL=19970406T070000Z;BYDAY=1SU;BYMONTH=4\r\n"
"TZOFFSETFROM:-0500\r\n"
"TZOFFSETTO:-0400\r\n"
"TZNAME:WDT1\r\n"
- "END:DAYLIGHT\r\n\r\n"
+ "END:DAYLIGHT\r\n"
"BEGIN:DAYLIGHT\r\n"
"DTSTART:19990425T020000\r\n"
"RDATE;VALUE=DATE-TIME:20000430T020000\r\n"
"TZOFFSETFROM:-0500\r\n"
"TZOFFSETTO:-0400\r\n"
"TZNAME:WDT2\r\n"
- "END:DAYLIGHT\r\n\r\n"
- "END:VTIMEZONE\r\n\r\n";
+ "END:DAYLIGHT\r\n"
+ "END:VTIMEZONE\r\n";
// Standard time only
static const char *VTZ_other =
@@ -101,8 +101,8 @@
"TZOFFSETFROM:+0000\r\n"
"TZOFFSETTO:+0300\r\n"
"TZNAME:OST\r\n"
- "END:STANDARD\r\n\r\n"
- "END:VTIMEZONE\r\n\r\n";
+ "END:STANDARD\r\n"
+ "END:VTIMEZONE\r\n";
// CALENDAR component header and footer
static const char *calendarHeader =