diff --git a/cmake/modules/AkonadiMacros.cmake b/cmake/modules/AkonadiMacros.cmake index 524d815ad..e783a15a0 100644 --- a/cmake/modules/AkonadiMacros.cmake +++ b/cmake/modules/AkonadiMacros.cmake @@ -1,107 +1,108 @@ # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Internal server macros function(akonadi_run_xsltproc) if (NOT XSLTPROC_EXECUTABLE) message(FATAL_ERROR "xsltproc executable not found but needed by AKONADI_RUN_XSLTPROC()") endif() set(options ) set(oneValueArgs XSL XML CLASSNAME BASENAME) - set(multiValueArgs ) + set(multiValueArgs DEPENDS) cmake_parse_arguments(XSLT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (NOT XSLT_XSL) message(FATAL_ERROR "Required argument XSL missing in AKONADI_RUN_XSLTPROC() call") endif() if (NOT XSLT_XML) message(FATAL_ERROR "Required argument XML missing in AKONADI_RUN_XSLTPROC() call") endif() if (NOT XSLT_BASENAME) message(FATAL_ERROR "Required argument BASENAME missing in AKONADI_RUN_XSLTPROC() call") endif() # Workaround xsltproc struggling with spaces in filepaths on Windows file(RELATIVE_PATH xsl_relpath ${CMAKE_CURRENT_BINARY_DIR} ${XSLT_XSL}) file(RELATIVE_PATH xml_relpath ${CMAKE_CURRENT_BINARY_DIR} ${XSLT_XML}) set(extra_params ) if (XSLT_CLASSNAME) set(extra_params --stringparam className ${XSLT_CLASSNAME}) endif() add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${XSLT_BASENAME}.h ${CMAKE_CURRENT_BINARY_DIR}/${XSLT_BASENAME}.cpp COMMAND ${XSLTPROC_EXECUTABLE} --output ${XSLT_BASENAME}.h --stringparam code header --stringparam fileName ${XSLT_BASENAME} ${extra_params} ${xsl_relpath} ${xml_relpath} COMMAND ${XSLTPROC_EXECUTABLE} --output ${XSLT_BASENAME}.cpp --stringparam code source --stringparam fileName ${XSLT_BASENAME} ${extra_params} ${xsl_relpath} ${xml_relpath} DEPENDS ${XSLT_XSL} ${XSLT_XML} + ${XSLT_DEPENDS} ) set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${XSLT_BASENAME}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${XSLT_BASENAME}.h PROPERTY SKIP_AUTOMOC TRUE ) endfunction() macro(akonadi_generate_schema _schemaXml _className _fileBaseName) if (NOT XSLTPROC_EXECUTABLE) message(FATAL_ERROR "xsltproc executable not found but needed by AKONADI_GENERATE_SCHEMA()") endif() akonadi_run_xsltproc( XSL ${Akonadi_SOURCE_DIR}/src/server/storage/schema.xsl XML ${_schemaXml} CLASSNAME ${_className} BASENAME ${_fileBaseName} ) endmacro() function(akonadi_add_xmllint_test) if (NOT XMLLINT_EXECUTABLE) message(FATAL_ERROR "xmllint executable not found but needed by AKONADI_ADD_XMLLINT_SCHEMA()") endif() set(options ) set(oneValueArgs XML XSD) set(multiValueArgs ) cmake_parse_arguments(TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) file(RELATIVE_PATH xsd_relpath ${CMAKE_CURRENT_BINARY_DIR} ${TEST_XSD}) file(RELATIVE_PATH xml_relpath ${CMAKE_CURRENT_BINARY_DIR} ${TEST_XML}) add_test(${TEST_UNPARSED_ARGUMENTS} ${XMLLINT_EXECUTABLE} --noout --schema ${xsd_relpath} ${xml_relpath}) endfunction() diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index fefdd6a8b..20733c3fa 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -1,196 +1,198 @@ include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}) if(MYSQLD_EXECUTABLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMYSQLD_EXECUTABLE=\"\\\"${MYSQLD_EXECUTABLE}\\\"\"") endif() if(POSTGRES_PATH) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPOSTGRES_PATH=\"\\\"${POSTGRES_PATH}\\\"\"") endif() ########### next target ############### set(AKONADI_DB_SCHEMA "${CMAKE_CURRENT_SOURCE_DIR}/storage/akonadidb.xml") akonadi_run_xsltproc( XSL ${CMAKE_CURRENT_SOURCE_DIR}/storage/entities.xsl XML ${AKONADI_DB_SCHEMA} BASENAME entities + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/storage/entities-source.xsl ${CMAKE_CURRENT_SOURCE_DIR}/storage/entities-header.xsl ) akonadi_run_xsltproc( XSL ${Akonadi_SOURCE_DIR}/src/server/storage/schema.xsl XML ${AKONADI_DB_SCHEMA} CLASSNAME AkonadiSchema BASENAME akonadischema + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/storage/schema-source.xsl ${CMAKE_CURRENT_SOURCE_DIR}/storage/schema-header.xsl ) akonadi_add_xmllint_test( akonadidb-xmllint XSD ${CMAKE_CURRENT_SOURCE_DIR}/storage/akonadidb.xsd XML ${AKONADI_DB_SCHEMA} ) akonadi_add_xmllint_test( akonadidbupdate-xmllint XSD ${CMAKE_CURRENT_SOURCE_DIR}/storage/akonadidb.xsd XML ${AKONADI_DB_SCHEMA} ) set(libakonadiserver_SRCS akonadi.cpp aggregatedfetchscope.cpp aklocalserver.cpp akthread.cpp commandcontext.cpp connection.cpp collectionscheduler.cpp dbusconnectionpool.cpp handler.cpp handlerhelper.cpp intervalcheck.cpp collectionreferencemanager.cpp handler/akappend.cpp handler/copy.cpp handler/colcopy.cpp handler/colmove.cpp handler/create.cpp handler/delete.cpp handler/fetch.cpp handler/fetchhelper.cpp handler/link.cpp handler/list.cpp handler/login.cpp handler/logout.cpp handler/modify.cpp handler/move.cpp handler/remove.cpp handler/resourceselect.cpp handler/relationstore.cpp handler/relationremove.cpp handler/relationfetch.cpp handler/search.cpp handler/searchhelper.cpp handler/searchpersistent.cpp handler/searchresult.cpp handler/status.cpp handler/store.cpp handler/tagappend.cpp handler/tagfetch.cpp handler/tagfetchhelper.cpp handler/tagremove.cpp handler/tagstore.cpp handler/transaction.cpp search/agentsearchengine.cpp search/agentsearchinstance.cpp search/searchtaskmanager.cpp search/searchrequest.cpp search/searchmanager.cpp storage/collectionqueryhelper.cpp storage/collectionstatistics.cpp storage/entity.cpp ${CMAKE_CURRENT_BINARY_DIR}/entities.cpp ${CMAKE_CURRENT_BINARY_DIR}/akonadischema.cpp storage/datastore.cpp storage/dbconfig.cpp storage/dbconfigmysql.cpp storage/dbconfigpostgresql.cpp storage/dbconfigsqlite.cpp storage/dbexception.cpp storage/dbinitializer.cpp storage/dbinitializer_p.cpp storage/dbintrospector.cpp storage/dbintrospector_impl.cpp storage/dbupdater.cpp storage/dbtype.cpp storage/itemqueryhelper.cpp storage/itemretriever.cpp storage/itemretrievalmanager.cpp storage/itemretrievaljob.cpp storage/notificationcollector.cpp storage/parthelper.cpp storage/parttypehelper.cpp storage/query.cpp storage/querybuilder.cpp storage/querycache.cpp storage/queryhelper.cpp storage/schematypes.cpp storage/tagqueryhelper.cpp storage/transaction.cpp storage/parthelper.cpp storage/partstreamer.cpp storage/storagedebugger.cpp tracer.cpp utils.cpp dbustracer.cpp filetracer.cpp notificationmanager.cpp notificationsubscriber.cpp resourcemanager.cpp cachecleaner.cpp debuginterface.cpp preprocessorinstance.cpp preprocessormanager.cpp storagejanitor.cpp ) set(akonadiserver_SRCS main.cpp ) ecm_qt_declare_logging_category(akonadiserver_SRCS HEADER akonadiserver_debug.h IDENTIFIER AKONADISERVER_LOG CATEGORY_NAME org.kde.pim.akonadiserver) ecm_qt_declare_logging_category(akonadiserver_SRCS HEADER akonadiserver_search_debug.h IDENTIFIER AKONADISERVER_SEARCH_LOG CATEGORY_NAME org.kde.pim.akonadiserver.search) qt5_generate_dbus_interface(debuginterface.h org.freedesktop.Akonadi.DebugInterface.xml) qt5_add_dbus_adaptor(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.TracerNotification.xml dbustracer.h Akonadi::Server::DBusTracer) qt5_add_dbus_adaptor(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.Tracer.xml tracer.h Akonadi::Server::Tracer) qt5_add_dbus_adaptor(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.Server.xml akonadi.h Akonadi::Server::AkonadiServer) qt5_add_dbus_adaptor(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.StorageDebugger.xml storage/storagedebugger.h Akonadi::Server::StorageDebugger) qt5_add_dbus_adaptor(libakonadiserver_SRCS ${CMAKE_CURRENT_BINARY_DIR}/org.freedesktop.Akonadi.DebugInterface.xml debuginterface.h Akonadi::Server::DebugInterface) qt5_add_dbus_adaptor(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.ResourceManager.xml resourcemanager.h Akonadi::Server::ResourceManager) qt5_add_dbus_adaptor(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.PreprocessorManager.xml preprocessormanager.h Akonadi::Server::PreprocessorManager) qt5_add_dbus_interface(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.AgentManager.xml agentmanagerinterface) qt5_add_dbus_interface(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.Resource.xml resourceinterface) qt5_add_dbus_interface(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.Preprocessor.xml preprocessorinterface) qt5_add_dbus_interface(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.Agent.Control.xml agentcontrolinterface) qt5_add_dbus_interface(libakonadiserver_SRCS ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.Agent.Search.xml agentsearchinterface) qt5_add_resources(libakonadiserver_SRCS storage/akonadidb.qrc) add_library(libakonadiserver STATIC ${libakonadiserver_SRCS}) set_target_properties(libakonadiserver PROPERTIES OUTPUT_NAME akonadiserver) target_link_libraries(libakonadiserver akonadi_shared KF5AkonadiPrivate Qt5::Core Qt5::Network Qt5::Sql Qt5::DBus Qt5::Xml ) add_executable(akonadiserver ${akonadiserver_SRCS}) set_target_properties(akonadiserver PROPERTIES OUTPUT_NAME akonadiserver) target_link_libraries(akonadiserver libakonadiserver KF5::CoreAddons ) install(TARGETS akonadiserver ${KF5_INSTALL_TARGETS_DEFAULT_ARGS} ) install(FILES storage/mysql-global.conf storage/mysql-global-mobile.conf DESTINATION ${CONFIG_INSTALL_DIR}/akonadi ) install(FILES search/abstractsearchplugin.h DESTINATION ${KF5_INCLUDE_INSTALL_DIR}/akonadi ) ## DBus XML files install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.freedesktop.Akonadi.DebugInterface.xml DESTINATION ${AKONADI_DBUS_INTERFACES_INSTALL_DIR} )