diff options
author | Milan Crha <mcrha@redhat.com> | 2016-04-26 12:37:21 +0200 |
---|---|---|
committer | Allen Winter <allen.winter@kdab.com> | 2016-04-26 15:49:47 -0400 |
commit | abd0019f5a60f4fb787b68daa7fa99c845a4e3de (patch) | |
tree | 733af26c6a3c37181c334a1016ed38c6a5ea0038 /src/libical-glib/CMakeLists.txt | |
parent | b1081cccb90fbe4cd859d3280a0470c30dce5cac (diff) | |
download | libical-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.txt | 215 |
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) |