LINK_DIRECTORIES( ${GLIB2_LIBRARY_DIRS} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARY_DIRS} ${LIBEXSLT_LIBRARY_DIRS} ${SQLITE3_LIBRARY_DIRS} )
INCLUDE_DIRECTORIES( ${GLIB2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} ${LIBXSLT_INCLUDE_DIRS} ${LIBEXSLT_INCLUDE_DIRS} ${SQLITE3_INCLUDE_DIRS} )

INCLUDE( Compiler )

SET( libopensync_LIB_SRCS
   archive/opensync_archive.c
   capabilities/opensync_capabilities.c
   capabilities/opensync_capabilities_objtype.c
   capabilities/opensync_capability.c
   client/opensync_client.c
   client/opensync_client_proxy.c
   common/opensync.c
   common/opensync_error.c
   common/opensync_file.c
   common/opensync_list.c
   common/opensync_marshal.c
   common/opensync_memory.c
   common/opensync_string.c
   common/opensync_thread.c
   common/opensync_xml.c
   data/opensync_change.c
   data/opensync_data.c
   db/opensync_db.c
   debug/opensync_trace.c
   engine/opensync_engine.c
   engine/opensync_mapping_engine.c
   engine/opensync_mapping_entry_engine.c
   engine/opensync_obj_engine.c
   engine/opensync_sink_engine.c
   engine/opensync_status.c
   format/opensync_caps_converter.c
   format/opensync_converter.c
   format/opensync_filter.c
   format/opensync_format_env.c
   format/opensync_objformat.c
   format/opensync_objformat_sink.c
   format/opensync_time.c
   format/opensync_merger.c
   group/opensync_group.c
   group/opensync_group_env.c
   group/opensync_member.c
   group/opensync_updater.c
   helper/opensync_sink_state_db.c
   helper/opensync_hashtable.c
   ipc/opensync_message.c
   ipc/opensync_queue.c
   ipc/opensync_serializer.c
   mapping/opensync_mapping.c
   mapping/opensync_mapping_entry.c
   mapping/opensync_mapping_table.c
   module/opensync_module.c
   plugin/opensync_context.c
   plugin/opensync_plugin_advancedoptions.c
   plugin/opensync_plugin_authentication.c
   plugin/opensync_plugin.c
   plugin/opensync_plugin_config.c
   plugin/opensync_plugin_connection.c
   plugin/opensync_plugin_env.c
   plugin/opensync_plugin_info.c
   plugin/opensync_plugin_localization.c
   plugin/opensync_plugin_resource.c
   plugin/opensync_objtype_sink.c
   version/opensync_version.c
   xmlformat/opensync_xmlfield.c
   xmlformat/opensync_xmlfieldlist.c
   xmlformat/opensync_xmlformat.c
   xmlformat/opensync_xmlformat_schema.c
)

ADD_LIBRARY( opensync SHARED ${libopensync_LIB_SRCS} )

TARGET_LINK_LIBRARIES( opensync ${GLIB2_LIBRARIES} ${GTHREAD2_LIBRARIES} ${GMODULE2_LIBRARIES} ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${LIBEXSLT_LIBRARIES} ${SQLITE3_LIBRARIES} )

SET_TARGET_PROPERTIES( opensync PROPERTIES VERSION ${OPENSYNC_LIBVERSION_VERSION} )
SET_TARGET_PROPERTIES( opensync PROPERTIES SOVERSION ${OPENSYNC_LIBVERSION_SOVERSION} )

IF ( COMPILER_SUPPORTS_VISIBILITY )
  SET_TARGET_PROPERTIES( opensync PROPERTIES COMPILE_FLAGS ${SYMBOLS_VISIBILITY} )
ENDIF ( COMPILER_SUPPORTS_VISIBILITY )

IF ( OPENSYNC_UNITTESTS )
  ADD_LIBRARY( opensync-testing SHARED ${libopensync_LIB_SRCS} )
  IF ( COMPILER_SUPPORTS_VISIBILITY )
    SET_TARGET_PROPERTIES( opensync-testing PROPERTIES COMPILE_FLAGS ${SYMBOLS_VISIBILITY} )
  ENDIF ( COMPILER_SUPPORTS_VISIBILITY )
  TARGET_LINK_LIBRARIES( opensync-testing ${GLIB2_LIBRARIES} ${GTHREAD2_LIBRARIES} ${GMODULE2_LIBRARIES} ${LIBXML2_LIBRARIES}  ${LIBXSLT_LIBRARIES} ${LIBEXSLT_LIBRARIES} ${SQLITE3_LIBRARIES} )
ENDIF ( OPENSYNC_UNITTESTS )

INSTALL( TARGETS opensync DESTINATION ${LIB_INSTALL_DIR} )

INSTALL( DIRECTORY 
  archive
  client
  common
  data
  db
  debug
  engine
  format
  group
  helper
  ipc
  mapping
  capabilities
  module
  plugin
  version
  xmlformat
DESTINATION ${OPENSYNC_INCLUDE_DIR}/opensync
PATTERN "*/*_internals.h" EXCLUDE 
PATTERN "*/*_private.h" EXCLUDE 
PATTERN ".*" EXCLUDE 
PATTERN "*.c*" EXCLUDE
PATTERN "*.h.*" EXCLUDE )

INSTALL( FILES
   opensync.h
   opensync-capabilities.h
   opensync-client.h
   opensync-context.h
   opensync-common.h
   opensync-data.h
   opensync-debug.h
   opensync-engine.h
   opensync-error.h
   opensync-format.h
   opensync-group.h
   opensync-helper.h
   opensync-ipc.h
   opensync_list.h
   opensync-mapping.h
   opensync-merger.h
   opensync-module.h
   opensync-plugin.h
   opensync-serializer.h
   opensync-support.h
   opensync-time.h
   opensync-version.h
   opensync-xmlformat.h
DESTINATION ${OPENSYNC_INCLUDE_DIR}/opensync )


########### osplugin ##################

SET( osplugin_SRCS
   client/osplugin.c
)
ADD_EXECUTABLE( osplugin ${osplugin_SRCS} )

IF(COMMAND cmake_policy)
  cmake_policy(SET CMP0005 OLD)
ENDIF(COMMAND cmake_policy)

ADD_DEFINITIONS( -DOSPLUGIN="\\\"${OPENSYNC_LIBEXEC_DIR}/osplugin\\\"" )

TARGET_LINK_LIBRARIES( osplugin opensync ${GLIB2_LIBRARIES} ${GTHREAD2_LIBRARIES} ${GMODULE2_LIBRARIES} )

# TODO: osplugin in libexec dir?
INSTALL( TARGETS osplugin DESTINATION ${OPENSYNC_LIBEXEC_DIR} ) 

