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 =
openSUSE Build Service is sponsored by