# Copyright (C) 2007  University of Rostock
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA.


# directory to put all generated files in
SET(gen_DIR ${CMAKE_CURRENT_BINARY_DIR}/gen)

# If the directory for the generated sources does not
# already exists, create it.
IF(NOT EXISTS ${gen_DIR})
	FILE(MAKE_DIRECTORY ${gen_DIR})
ENDIF(NOT EXISTS ${gen_DIR})

# set include paths
INCLUDE_DIRECTORIES(${GSOAP_INCLUDE_DIR} ${GSOAP_INCLUDE_DIR}/plugin ${DPWS_INCLUDES} ${gen_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${OPENSSL_INCLUDE_DIR})

###############################################################################
# patch gsoap wsseapi.c and compile to library
###############################################################################

ADD_CUSTOM_COMMAND( OUTPUT ${gen_DIR}/wsseapi.c 
                    COMMAND ${CMAKE_COMMAND} -E copy ${GSOAP_INCLUDE_DIR}/plugin/wsseapi.c ${gen_DIR}/wsseapi.c
                    COMMENT "Copy clean wsseapi.c")
                                    
ADD_CUSTOM_COMMAND( OUTPUT ${gen_DIR}/wsseapi-patched.c 
                    COMMAND ${GNU_PATCH_EXECUTABLE} -s -u -i ${CMAKE_CURRENT_SOURCE_DIR}/wsseapi.patch -o wsseapi-patched.c
                    WORKING_DIRECTORY ${gen_DIR}
                    DEPENDS ${gen_DIR}/wsseapi.c
                    COMMENT "Patching wsseapi.c")

SET(WSSEAPI_SRC
    ${gen_DIR}/wsseapi-patched.c
    ${GSOAP_INCLUDE_DIR}/plugin/smdevp.c
    ${GSOAP_INCLUDE_DIR}/dom.c)
    
ADD_LIBRARY(wsseapi STATIC ${WSSEAPI_SRC})

add_dependencies(wsseapi dpwsP) # so DPWS Headers are built before...

EXTEND_TGT_COMPILE_FLAGS(wsseapi
	FLAGS "-DWITH_OPENSSL -DWITH_DOM")


INSTALL(TARGETS wsseapi ARCHIVE DESTINATION lib/ws4d-gSOAP)

###############################################################################
# Code generation - for custom projects this must be modified
###############################################################################

# generate code and C data binding operations of service
GSOAP_GENERATE(authentication_service.gsoap auths ${gen_DIR})   # normal service

# embed wsdl files into c code
SET(AUTHENTICATIONSERVICE_WSDL ${CMAKE_CURRENT_SOURCE_DIR}/AuthenticationService.wsdl)
DPWS_EMBEDD_WSDL(${gen_DIR} auths ${AUTHENTICATIONSERVICE_WSDL})

################################################################################
# create config.h
################################################################################

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
               ${gen_DIR}/config.h
               @ONLY)


################################################################################
# build library for devices using an Authentication Service
################################################################################

SET(authsS_SRCS
	security_engine.c
	authentication_service.c
	${gen_DIR}/authsServerLib.c
	${gen_DIR}/auths_wsdl.c
	)

# create lib
ADD_LIBRARY(authsS STATIC ${authsS_SRCS})

EXTEND_TGT_COMPILE_FLAGS(authsS
	FLAGS "-DDPWS_DEVICE -DWITH_OPENSSL -DWITH_DOM")
	
TARGET_LINK_LIBRARIES(authsS wsseapi)

INSTALL(TARGETS authsS ARCHIVE DESTINATION lib/ws4d-gSOAP)


################################################################################
# build library for clients using an Authentication Service
################################################################################

SET(authsC_SRCS
	security_engine.c
	authentication_service_usage.c
	${gen_DIR}/authsClientLib.c
	${gen_DIR}/auths_wsdl.c
	)

# create lib
ADD_LIBRARY(authsC STATIC ${authsC_SRCS})

EXTEND_TGT_COMPILE_FLAGS(authsC
	FLAGS "-DDPWS_DEVICE -DWITH_OPENSSL -DWITH_DOM")

TARGET_LINK_LIBRARIES(authsC wsseapi)

INSTALL(TARGETS authsC ARCHIVE DESTINATION lib/ws4d-gSOAP)

# build and install both the libraries thread safe
SET(WS4D_COMMON_DIR "../libdpws")
# create lib
ADD_LIBRARY(authsSmt STATIC ${authsS_SRCS}
                            ${WS4D_COMMON_DIR}/ws4d_mutex.c)

EXTEND_TGT_COMPILE_FLAGS(authsSmt
	FLAGS "-DDPWS_DEVICE -DWITH_OPENSSL -DWITH_DOM -DWITH_MUTEXES")

TARGET_LINK_LIBRARIES(authsSmt wsseapi)

INSTALL(TARGETS authsSmt ARCHIVE DESTINATION lib/ws4d-gSOAP)

# create lib
ADD_LIBRARY(authsCmt STATIC ${authsC_SRCS}
                            ${WS4D_COMMON_DIR}/ws4d_mutex.c)

EXTEND_TGT_COMPILE_FLAGS(authsCmt
	FLAGS "-DDPWS_DEVICE -DWITH_OPENSSL -DWITH_DOM -DWITH_MUTEXES")

TARGET_LINK_LIBRARIES(authsCmt wsseapi)

INSTALL(TARGETS authsCmt ARCHIVE DESTINATION lib/ws4d-gSOAP)