project(kcal)

ADD_DEFINITIONS(-DPACKAGE_DATA_DIR=\\""${CMAKE_INSTALL_PREFIX}${DATA_INSTALL_DIR}/libical"\\" ) # added manually

include_directories(
	${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/
	${CMAKE_BINARY_DIR}/kcal/libical/src/libicalss/
	${CMAKE_SOURCE_DIR}/kcal/versit/
	${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/
	${CMAKE_BINARY_DIR}/kcal/libical/src/libical/
	${CMAKE_SOURCE_DIR}/
	${CMAKE_SOURCE_DIR}/ktnef
	${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/src/libical/icalderivedproperty.h
COMMAND ${PERL_EXECUTABLE} ARGS -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/src/libical/icalderivedproperty.h   DEPENDS  ${PROPERTYDEPS} )


add_custom_command(OUTPUT
${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalderivedproperty.c
COMMAND ${PERL_EXECUTABLE} ARGS -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/src/libical/icalderivedproperty.c   DEPENDS  ${PROPERTYDEPS} ${CMAKE_BINARY_DIR}/kcal/libical/src/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/src/libical/icalderivedproperty.c 
#                              ${CMAKE_BINARY_DIR}/kcal/libical/src/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/src/libical/icalderivedparameter.h
COMMAND ${PERL_EXECUTABLE} ARGS -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/src/libical/icalderivedparameter.h   DEPENDS  ${PARAMETERDEPS} )

add_custom_command(OUTPUT
${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalderivedparameter.c
COMMAND ${PERL_EXECUTABLE} ARGS -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/src/libical/icalderivedparameter.c   DEPENDS  ${PARAMETERDEPS} ${CMAKE_BINARY_DIR}/kcal/libical/src/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/src/libical/icalderivedparameter.c 
#	${CMAKE_BINARY_DIR}/kcal/libical/src/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
)

add_custom_command(OUTPUT
${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalrestriction.c
COMMAND ${PERL_EXECUTABLE} ARGS -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/src/libical/icalderivedvalue.h COMMAND ${PERL_EXECUTABLE} ARGS -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/src/libical/icalderivedvalue.h   DEPENDS  ${VALUEDEPS} )


add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalderivedvalue.c COMMAND ${PERL_EXECUTABLE} ARGS -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/src/libical/icalderivedvalue.c   DEPENDS  ${VALUEDEPS} ${CMAKE_BINARY_DIR}/kcal/libical/src/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/src/libical/icalderivedvalue.h
#	${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalderivedvalue.c
#)



set(libversit_SRCS 
   ${CMAKE_SOURCE_DIR}/kcal/versit/vcc.c 
   ${CMAKE_SOURCE_DIR}/kcal/versit/vobject.c 
)

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/src/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/src/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/src/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     
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libical/icallangbind.c
)

set(libicalss_SRCS
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalcalendar.c      
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalcalendar.h      
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalclassify.c      
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalclassify.h      
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalcluster.c      
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalcluster.h       
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalclusterimpl.h   
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalgauge.c     
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalgauge.h     
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalgaugeimpl.h     
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icaldirset.c        
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icaldirset.h        
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icaldirsetimpl.h    
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalfileset.c       
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalfileset.h       
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalfilesetimpl.h   
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalset.c       
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalset.h       
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalssyacc.h        
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalspanlist.c      
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalspanlist.h      
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalmessage.c       
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalmessage.h       
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalsslexer.c           
   ${CMAKE_SOURCE_DIR}/kcal/libical/src/libicalss/icalssyacc.c
)


macro_additional_clean_files(${CMAKE_BINARY_DIR}/kcal/libical/src/libical/ical.h)

add_custom_command(OUTPUT
   ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/ical.h 
   COMMAND 
   ${CMAKE_COMMAND} 
   -DTOPS:FILEPATH="${CMAKE_SOURCE_DIR}"
   -DTOPB:FILEPATH="${CMAKE_BINARY_DIR}"
   -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/src/libical/icalderivedproperty.h
   ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/icalderivedparameter.h
   ${CMAKE_BINARY_DIR}/kcal/libical/src/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="${CMAKE_SOURCE_DIR}"
   -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 
   attendee.cpp 
   attachment.cpp 
   recurrencerule.cpp 
   recurrence.cpp 
   alarm.cpp 
   customproperties.cpp 
   calendar.cpp 
   calendarlocal.cpp 
   calformat.cpp 
   vcalformat.cpp 
   icalformat.cpp 
   icalformatimpl.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 
   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 )

kde4_automoc(${kcal_LIB_SRCS})

kde4_add_kcfg_files(kcal_LIB_SRCS htmlexportsettings.kcfgc )

kde4_add_library(kcal SHARED ${kcal_LIB_SRCS})

target_link_libraries(kcal ${KDE4_KDE3SUPPORT_LIBS} ${QT_QTXML_LIBRARY} ktnef kresources kabc emailfunctions )

set_target_properties(kcal PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION})
install(TARGETS kcal DESTINATION ${LIB_INSTALL_DIR})

# 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 )

kde4_automoc(${kcal_local_PART_SRCS})

kde4_add_plugin(kcal_local ${kcal_local_PART_SRCS})

kde4_install_libtool_file( ${PLUGIN_INSTALL_DIR} kcal_local )

target_link_libraries(kcal_local  ${KDE4_KDECORE_LIBS} kcal )

install(TARGETS kcal_local  DESTINATION ${PLUGIN_INSTALL_DIR})


########### next target ###############

set(kcal_localdir_PART_SRCS resourcelocaldir_plugin.cpp )

kde4_automoc(${kcal_localdir_PART_SRCS})

kde4_add_plugin(kcal_localdir ${kcal_localdir_PART_SRCS})

kde4_install_libtool_file( ${PLUGIN_INSTALL_DIR} kcal_localdir )

target_link_libraries(kcal_localdir  ${KDE4_KDECORE_LIBS} kcal )

install(TARGETS kcal_localdir  DESTINATION ${PLUGIN_INSTALL_DIR})


########### next target ###############

set(convertqtopia_SRCS convertqtopia.cpp )

kde4_automoc(${convertqtopia_SRCS})

if(KDE4_BUILD_TESTS)

kde4_add_executable(convertqtopia ${convertqtopia_SRCS})

target_link_libraries(convertqtopia  ${KDE4_KDECORE_LIBS} kcal )

endif(KDE4_BUILD_TESTS)


add_subdirectory( libical )
add_subdirectory( tests )

########### install files ###############

install( FILES local.desktop localdir.desktop  DESTINATION ${SERVICES_INSTALL_DIR}/kresources/kcal)
install( FILES
	alarm.h
	attachment.h
	attendee.h
	calendar.h
	calendarlocal.h
	calendarnull.h
	calendarresources.h
	calfilter.h
	calformat.h
	calstorage.h
	confirmsavedialog.h
	customproperties.h
	dndfactory.h
	duration.h
	event.h
	exceptions.h
	filestorage.h
	freebusy.h
	freebusycache.h
	freebusyurlstore.h
	${CMAKE_CURRENT_BINARY_DIR}/htmlexportsettings.h
	htmlexport.h
	icaldrag.h
	icalformat.h
	icaltimezones.h
	imipscheduler.h
	incidencebase.h
	incidence.h
	incidenceformatter.h
	journal.h
	kcal.h
	kcalversion.h
	listbase.h
	period.h
	person.h
	qtopiaformat.h
	recurrencerule.h
	recurrence.h
	resourcecached.h
	resourcecachedconfig.h
	resourcecalendar.h
	resourcelocalconfig.h
	resourcelocaldirconfig.h
	resourcelocaldir.h
	resourcelocal.h
	scheduler.h
	todo.h
	vcaldrag.h
	vcalformat.h
DESTINATION ${INCLUDE_INSTALL_DIR}/kcal)
install( FILES kcal_manager.desktop  DESTINATION ${SERVICES_INSTALL_DIR}/kresources)
install (FILES ${CMAKE_BINARY_DIR}/kcal/libical/src/libical/ical.h ${CMAKE_BINARY_DIR}/kcal/libical/src/libicalss/icalss.h DESTINATION ${INCLUDE_INSTALL_DIR}/kcal/ical)
