summaryrefslogtreecommitdiff
path: root/src/libical-glib/CMakeLists.txt
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2016-04-26 12:37:21 +0200
committerAllen Winter <allen.winter@kdab.com>2016-04-26 15:49:47 -0400
commitabd0019f5a60f4fb787b68daa7fa99c845a4e3de (patch)
tree733af26c6a3c37181c334a1016ed38c6a5ea0038 /src/libical-glib/CMakeLists.txt
parentb1081cccb90fbe4cd859d3280a0470c30dce5cac (diff)
downloadlibical-git-abd0019f5a60f4fb787b68daa7fa99c845a4e3de.tar.gz
Provide libical-glib, a GObject-based interface for libical with introspection
Diffstat (limited to 'src/libical-glib/CMakeLists.txt')
-rw-r--r--src/libical-glib/CMakeLists.txt215
1 files changed, 215 insertions, 0 deletions
diff --git a/src/libical-glib/CMakeLists.txt b/src/libical-glib/CMakeLists.txt
new file mode 100644
index 00000000..b2c73723
--- /dev/null
+++ b/src/libical-glib/CMakeLists.txt
@@ -0,0 +1,215 @@
+add_definitions(-Dlibical_ical_EXPORTS)
+
+# build the src-generator
+add_executable(src-generator
+ build-tools/generator.c
+ build-tools/generator.h
+ build-tools/xml-parser.c
+ build-tools/xml-parser.h)
+
+target_compile_options (src-generator PUBLIC ${GLIB_CFLAGS} ${LIBXML_CFLAGS} -DG_LOG_DOMAIN=\"src-generator\")
+target_link_libraries (src-generator ${GLIB_LIBRARIES} ${LIBXML_LIBRARIES})
+
+list(APPEND API_FILES
+ api/i-cal-array.xml
+ api/i-cal-attach.xml
+ api/i-cal-comp-iter.xml
+ api/i-cal-component.xml
+ api/i-cal-datetimeperiod-type.xml
+ api/i-cal-derived-parameter.xml
+ api/i-cal-derived-property.xml
+ api/i-cal-derived-value.xml
+ api/i-cal-duration-type.xml
+ api/i-cal-enums.xml
+ api/i-cal-error.xml
+ api/i-cal-geo-type.xml
+ api/i-cal-langbind.xml
+ api/i-cal-memory.xml
+ api/i-cal-mime.xml
+ api/i-cal-parameter.xml
+ api/i-cal-parser.xml
+ api/i-cal-period-type.xml
+ api/i-cal-property.xml
+ api/i-cal-recur-iterator.xml
+ api/i-cal-recurrence-type.xml
+ api/i-cal-recur.xml
+ api/i-cal-reqstat-type.xml
+ api/i-cal-restriction.xml
+ api/i-cal-time-span.xml
+ api/i-cal-timetype.xml
+ api/i-cal-time.xml
+ api/i-cal-timezone-phase.xml
+ api/i-cal-timezonetype.xml
+ api/i-cal-timezone.xml
+ api/i-cal-trigger-type.xml
+ api/i-cal-unknowntokenhandling.xml
+ api/i-cal-value.xml
+)
+
+list(APPEND LIBICAL_GLIB_HEADERS
+ ${CMAKE_CURRENT_BINARY_DIR}/libical-glib.h
+ ${CMAKE_CURRENT_BINARY_DIR}/i-cal-object.h
+)
+
+# add the command to generate the source code from the api files
+foreach(file IN LISTS API_FILES)
+ string(REPLACE "api/" "${CMAKE_CURRENT_SOURCE_DIR}/api/" xml_file_fullpath ${file})
+ string(REPLACE "api/" "${CMAKE_CURRENT_BINARY_DIR}/" bin_file ${file})
+ string(REPLACE ".xml" ".h" h_file ${bin_file})
+ string(REPLACE ".xml" ".c" c_file ${bin_file})
+
+ list(APPEND LIBICAL_GLIB_SOURCES ${h_file} ${c_file})
+ list(APPEND LIBICAL_GLIB_HEADERS ${h_file})
+ list(APPEND xml_files ${xml_file_fullpath})
+endforeach(file)
+
+add_custom_command (
+ OUTPUT ${LIBICAL_GLIB_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/libical-glib-private.h
+ COMMAND src-generator "${CMAKE_CURRENT_SOURCE_DIR}/build-tools" "${CMAKE_CURRENT_SOURCE_DIR}/api"
+ DEPENDS src-generator ${xml_files}
+)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/i-cal-object.c.in
+ ${CMAKE_CURRENT_BINARY_DIR}/i-cal-object.c
+ COPYONLY)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/i-cal-object.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/i-cal-object.h
+ COPYONLY)
+
+list(APPEND LIBICAL_GLIB_SOURCES
+ ${CMAKE_CURRENT_BINARY_DIR}/libical-glib-private.h
+ ${CMAKE_CURRENT_BINARY_DIR}/i-cal-object.c
+ ${CMAKE_CURRENT_BINARY_DIR}/i-cal-object.h
+)
+
+include_directories(
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_BINARY_DIR}/src
+ ${CMAKE_SOURCE_DIR}/src
+ ${CMAKE_BINARY_DIR}/src/libical
+ ${CMAKE_SOURCE_DIR}/src/libical
+)
+
+add_library(ical-glib ${LIBRARY_TYPE} ${LIBICAL_GLIB_SOURCES})
+add_dependencies(ical-glib ical-header)
+target_compile_options(ical-glib PRIVATE ${GLIB_CFLAGS})
+target_compile_definitions(ical-glib PRIVATE -DG_LOG_DOMAIN="libical-glib" -DLIBICAL_GLIB_COMPILATION)
+target_link_libraries(ical-glib PRIVATE ical ${GLIB_LIBRARIES})
+if(NOT SHARED_ONLY)
+ add_library(ical-glib-static STATIC ${LIBICAL_GLIB_SOURCES})
+ add_dependencies(ical-glib-static ical-header)
+ target_compile_options(ical-glib-static PUBLIC ${GLIB_CFLAGS} -DG_LOG_DOMAIN="libical-glib" -DLIBICAL_GLIB_COMPILATION)
+ target_link_libraries(ical-glib-static ${GLIB_LIBRARIES})
+endif()
+
+# GObject Introspection
+if(HAVE_INTROSPECTION)
+ # extract only file names without path for introspection
+ foreach(file IN LISTS LIBICAL_GLIB_SOURCES)
+ string(REPLACE "${CMAKE_CURRENT_BINARY_DIR}/" "" plain_file ${file})
+ list(APPEND LIBICAL_GLIB_GIR_SOURCES ${plain_file})
+ endforeach(file)
+
+ include(GObjectIntrospectionMacros)
+ set(LIBICAL_GLIB_GIR_VERSION_STRING "${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}")
+
+ set(INTROSPECTION_GIRS)
+ set(INTROSPECTION_SCANNER_FLAGS)
+ set(INTROSPECTION_SCANNER_ARGS)
+ set(INTROSPECTION_COMPILER_ARGS)
+ set(LIB_VERSION)
+
+ set(LIB_VERSION ${LIBICAL_GLIB_GIR_VERSION_STRING})
+ string(REPLACE "." "_" LIB_VERSION "${LIB_VERSION}")
+ string(REPLACE "-" "_" LIB_VERSION "${LIB_VERSION}")
+
+ set(INTROSPECTION_SCANNER_ARGS
+ --add-include-path=${CMAKE_CURRENT_BINARY_DIR}
+ --add-include-path=${CMAKE_CURRENT_SOURCE_DIR}
+ --add-include-path=${CMAKE_BINARY_DIR}/src
+ --add-include-path=${CMAKE_BINARY_DIR}/src/libical
+ --add-include-path=${CMAKE_SOURCE_DIR}/src
+ --add-include-path=${CMAKE_SOURCE_DIR}/src/libical
+ --library-path=${LIBRARY_OUTPUT_PATH}
+ --identifier-prefix=ICal
+ --pkg-export libical-glib-${LIBICAL_LIB_VERSION_STRING}
+ --c-include="libical-glib/libical-glib.h"
+ --cflags-begin
+ -I${CMAKE_BINARY_DIR}/src
+ -I${CMAKE_BINARY_DIR}/src/libical
+ -I${CMAKE_BINARY_DIR}/src/libical-glib
+ -I${LIBRARY_OUTPUT_PATH}
+ -I${CMAKE_SOURCE_DIR}/src
+ -I${CMAKE_SOURCE_DIR}/src/libical
+ --cflags-end
+ --verbose
+ )
+
+ set(ICalGLib_${LIB_VERSION}_gir "ICalGLib")
+ set(ICalGLib_${LIB_VERSION}_gir_SCANNERFLAGS "--warn-all")
+ set(ICalGLib_${LIB_VERSION}_gir_VERSION ${LIBICAL_GLIB_GIR_VERSION_STRING})
+ set(ICalGLib_${LIB_VERSION}_gir_LIBRARY "ICalGLib")
+ set(ICalGLib_${LIB_VERSION}_gir_INCLUDES GObject-2.0 GLib-2.0)
+ set(ICalGLib_${LIB_VERSION}_gir_CFLAGS ${_includes} ${GLIB_CFLAGS} -DLIBICAL_GLIB_COMPILATION -I${CMAKE_CURRENT_BINARY_DIR} -I${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_BINARY_DIR}/src/libical -I${CMAKE_SOURCE_DIR}/src/libical -I${CMAKE_BINARY_DIR}/src/libical-glib)
+ set(ICalGLib_${LIB_VERSION}_gir_LIBS ical-glib)
+ set(ICalGLib_${LIB_VERSION}_gir_FILES ${LIBICAL_GLIB_GIR_SOURCES})
+
+ list(APPEND INTROSPECTION_GIRS ICalGLib-${LIBICAL_GLIB_GIR_VERSION_STRING}.gir)
+
+ gir_add_introspections(INTROSPECTION_GIRS)
+endif()
+
+if(MSVC)
+ set_target_properties(ical-glib PROPERTIES OUTPUT_NAME "libical-glib")
+ if(NOT SHARED_ONLY)
+ set_target_properties(ical-glib-static PROPERTIES OUTPUT_NAME "libical-glib-static")
+ endif()
+else()
+ if(NOT SHARED_ONLY)
+ set_target_properties(ical-glib-static PROPERTIES OUTPUT_NAME "ical-glib")
+ endif()
+endif()
+set_target_properties(ical-glib PROPERTIES
+ VERSION ${LIBICAL_LIB_VERSION_STRING}
+ SOVERSION ${LIBICAL_LIB_MAJOR_VERSION}
+)
+set_target_properties(ical-glib PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+if(NOT SHARED_ONLY)
+ set_target_properties(ical-glib-static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+endif()
+
+install(
+ TARGETS ical-glib
+ EXPORT icalTargets
+ DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS}
+)
+if(NOT SHARED_ONLY)
+ install(
+ TARGETS ical-glib-static
+ EXPORT icalTargets
+ DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS}
+ )
+endif()
+
+########### install files ###############
+
+install(FILES ${LIBICAL_GLIB_HEADERS}
+ DESTINATION ${INCLUDE_INSTALL_DIR}/libical-glib
+)
+
+########### create and install pkg-config file #########
+
+set(prefix "${CMAKE_INSTALL_PREFIX}")
+set(exec_prefix "\${prefix}")
+set(libdir "\${exec_prefix}/lib")
+set(includedir "\${prefix}/include")
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/libical-glib.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/libical-glib.pc
+ @ONLY
+)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libical-glib.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)