# 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.

IF(COMMAND CMAKE_POLICY)
	CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND CMAKE_POLICY)

INCLUDE_DIRECTORIES(AFTER ${CMAKE_CURRENT_BINARY_DIR} ${GSOAP_INCLUDE_DIR} ${GSOAP_INCLUDE_DIR}/plugin ${DPWS_INCLUDES})

IF (WITH_WS4D_TOOLS)

IF("${ALT_IO_MODE}" STREQUAL "none")
  INCLUDE_DIRECTORIES(AFTER ${GSOAP_INCLUDE_DIR} ${DPWS_INCLUDES})
ELSE("${ALT_IO_MODE}" STREQUAL "none")
  ADD_DEFINITIONS ( "-DWITH_NOIO -DWITH_SOAPDEFS_H" )
  INCLUDE_DIRECTORIES(AFTER ${DPWS_ALT_IO_INCLUDES} ${GSOAP_INCLUDE_DIR} ${DPWS_INCLUDES})
ENDIF("${ALT_IO_MODE}" STREQUAL "none")

# stdsoap2.c
IF (TOOL_COMPILE_FLAGS)
	GSOAP_SET_RUNTIME_FLAGS("-DWITH_NONAMESPACES -DWITH_UDP ${TOOL_COMPILE_FLAGS}")
ELSE (TOOL_COMPILE_FLAGS)
	GSOAP_SET_RUNTIME_FLAGS("-DWITH_NONAMESPACES -DWITH_UDP")
ENDIF (TOOL_COMPILE_FLAGS)

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/tools_config.h.in
               ${CMAKE_CURRENT_BINARY_DIR}/tools_config.h
               @ONLY)


################################################################################
################################################################################
##                                                                            ##
## DPWS tools                                                                 ##
##                                                                            ##
################################################################################
################################################################################

################################################################################
# supervisor                                                                   #
################################################################################
IF(Threads_FOUND)
    
  IF (WITH_WS4D_SECURITY_SHELL)
      ADD_EXECUTABLE(supervisor
                    supervisor.c ${GSOAP_STDSOAP2_SOURCE}
                	)
      ADD_DEPENDENCIES(supervisor wsseapi)
      TARGET_LINK_LIBRARIES(supervisor wsseapi)
  ELSE (WITH_WS4D_SECURITY_SHELL)
      ADD_EXECUTABLE(supervisor
                     supervisor.c
                     ${GSOAP_STDSOAP2_SOURCE})
  ENDIF (WITH_WS4D_SECURITY_SHELL)

  EXTEND_TGT_COMPILE_FLAGS(supervisor FLAGS "-DWITH_MUTEXES")

  IF (TOOL_COMPILE_FLAGS)
    EXTEND_TGT_COMPILE_FLAGS(supervisor FLAGS "${TOOL_COMPILE_FLAGS}")
  ENDIF (TOOL_COMPILE_FLAGS)

  TARGET_LINK_LIBRARIES(supervisor
                        ${DPWS_LIBRARIES}
                        ${DPWS-CMT_LIBRARIES}
                        ${CMAKE_THREAD_LIBS_INIT}
                        ${TOOL_LIBS})

  ADD_DEPENDENCIES(supervisor
                   ${DPWS_LIBRARIES}
                   ${DPWS-CMT_LIBRARIES})

  INSTALL(TARGETS supervisor RUNTIME DESTINATION bin)

ENDIF(Threads_FOUND)

################################################################################
# resolve                                                                      #
################################################################################

IF (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(resolve
    	resolve.c ${GSOAP_STDSOAP2_SOURCE}
    	)
    		
        GET_TARGET_PROPERTY(RESOLVE_LOCATION resolve LOCATION)
        SET(RESOLVE_BINARY ${RESOLVE_LOCATION} CACHE PATH "")
        
        ADD_DEPENDENCIES(resolve wsseapi)
        TARGET_LINK_LIBRARIES(resolve wsseapi)
        
        IF (TOOL_COMPILE_FLAGS)
        	EXTEND_TGT_COMPILE_FLAGS(resolve FLAGS "${TOOL_COMPILE_FLAGS}")
        ENDIF (TOOL_COMPILE_FLAGS)
        
ELSE (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(resolve
    	resolve.c ${GSOAP_STDSOAP2_SOURCE})
ENDIF (WITH_WS4D_SECURITY_SHELL)

TARGET_LINK_LIBRARIES(resolve
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES}
	${TOOL_LIBS})
	
ADD_DEPENDENCIES(resolve
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES})

INSTALL(TARGETS resolve RUNTIME DESTINATION bin)

################################################################################
# probe                                                                        #
################################################################################

IF (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(probe
    	probe.c ${GSOAP_STDSOAP2_SOURCE}
    	)
    ADD_DEPENDENCIES(probe wsseapi)
    TARGET_LINK_LIBRARIES(probe wsseapi)
ELSE (WITH_WS4D_SECURITY_SHELL)
   ADD_EXECUTABLE(probe
    	probe.c ${GSOAP_STDSOAP2_SOURCE})
ENDIF (WITH_WS4D_SECURITY_SHELL)

IF (TOOL_COMPILE_FLAGS)
	EXTEND_TGT_COMPILE_FLAGS(probe FLAGS "${TOOL_COMPILE_FLAGS}")
ENDIF (TOOL_COMPILE_FLAGS)

TARGET_LINK_LIBRARIES(probe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES}
	${TOOL_LIBS})

ADD_DEPENDENCIES(probe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES})

INSTALL(TARGETS probe RUNTIME DESTINATION bin)

################################################################################
# dprobe                                                                       #
################################################################################

IF (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(dprobe
    	dprobe.c ${GSOAP_STDSOAP2_SOURCE}
    	)
    ADD_DEPENDENCIES(dprobe wsseapi)
    TARGET_LINK_LIBRARIES(dprobe wsseapi)
ELSE (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(dprobe
    	dprobe.c ${GSOAP_STDSOAP2_SOURCE})
ENDIF (WITH_WS4D_SECURITY_SHELL)

IF (TOOL_COMPILE_FLAGS)
	EXTEND_TGT_COMPILE_FLAGS(dprobe FLAGS "${TOOL_COMPILE_FLAGS}")
ENDIF (TOOL_COMPILE_FLAGS)

TARGET_LINK_LIBRARIES(dprobe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES}
	${TOOL_LIBS})

ADD_DEPENDENCIES(dprobe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES})

INSTALL(TARGETS dprobe RUNTIME DESTINATION bin)

################################################################################
# describe                                                                     #
################################################################################

IF (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(describe
    	describe.c ${GSOAP_STDSOAP2_SOURCE}
    )
    ADD_DEPENDENCIES(describe wsseapi)
    TARGET_LINK_LIBRARIES(describe wsseapi)    
ELSE (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(describe
    	describe.c ${GSOAP_STDSOAP2_SOURCE})
ENDIF (WITH_WS4D_SECURITY_SHELL)

IF (TOOL_COMPILE_FLAGS)
	EXTEND_TGT_COMPILE_FLAGS(describe FLAGS "${TOOL_COMPILE_FLAGS}")
ENDIF (TOOL_COMPILE_FLAGS)

TARGET_LINK_LIBRARIES(describe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES}
	${TOOL_LIBS})
	
ADD_DEPENDENCIES (describe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES})

INSTALL(TARGETS describe RUNTIME DESTINATION bin)

################################################################################
# subscribe                                                                    #
################################################################################

IF (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(subscribe
    	subscribe.c ${GSOAP_STDSOAP2_SOURCE})
    ADD_DEPENDENCIES(subscribe wsseapi)
    TARGET_LINK_LIBRARIES(subscribe wsseapi)
ELSE (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(subscribe
    	subscribe.c ${GSOAP_STDSOAP2_SOURCE})
ENDIF (WITH_WS4D_SECURITY_SHELL)
	
IF (TOOL_COMPILE_FLAGS)
	EXTEND_TGT_COMPILE_FLAGS(subscribe FLAGS "${TOOL_COMPILE_FLAGS}")
ENDIF (TOOL_COMPILE_FLAGS)

TARGET_LINK_LIBRARIES(subscribe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES}
	${TOOL_LIBS})

ADD_DEPENDENCIES (subscribe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES})

INSTALL(TARGETS subscribe RUNTIME DESTINATION bin)

################################################################################
# unsubscribe                                                                  #
################################################################################

IF (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(unsubscribe
    	unsubscribe.c ${GSOAP_STDSOAP2_SOURCE})
    ADD_DEPENDENCIES(unsubscribe wsseapi)
    TARGET_LINK_LIBRARIES(unsubscribe wsseapi)
ELSE (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(unsubscribe
    	unsubscribe.c ${GSOAP_STDSOAP2_SOURCE})
ENDIF (WITH_WS4D_SECURITY_SHELL)
	
IF (TOOL_COMPILE_FLAGS)
	EXTEND_TGT_COMPILE_FLAGS(unsubscribe FLAGS "${TOOL_COMPILE_FLAGS}")
ENDIF (TOOL_COMPILE_FLAGS)

TARGET_LINK_LIBRARIES(unsubscribe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES}
	${TOOL_LIBS})

ADD_DEPENDENCIES (unsubscribe
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES})

INSTALL(TARGETS unsubscribe RUNTIME DESTINATION bin)

################################################################################
# subsstatus                                                                   #
################################################################################

IF (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(subsstatus
    	subsstatus.c ${GSOAP_STDSOAP2_SOURCE}
        )
    ADD_DEPENDENCIES(subsstatus wsseapi)
    TARGET_LINK_LIBRARIES(subsstatus wsseapi)
ELSE (WITH_WS4D_SECURITY_SHELL)
    ADD_EXECUTABLE(subsstatus
    	subsstatus.c ${GSOAP_STDSOAP2_SOURCE})
ENDIF (WITH_WS4D_SECURITY_SHELL)
	
IF (TOOL_COMPILE_FLAGS)
	EXTEND_TGT_COMPILE_FLAGS(subsstatus FLAGS "${TOOL_COMPILE_FLAGS}")
ENDIF (TOOL_COMPILE_FLAGS)

TARGET_LINK_LIBRARIES(subsstatus
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES}
	${TOOL_LIBS})

ADD_DEPENDENCIES (subsstatus
	${DPWS_LIBRARIES}
	${DPWS-C_LIBRARIES})

INSTALL(TARGETS subsstatus RUNTIME DESTINATION bin)

ENDIF (WITH_WS4D_TOOLS)

################################################################################
# SystemTap support                                                            #
################################################################################

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ws4d_gsoap.stp.in
               ${CMAKE_CURRENT_BINARY_DIR}/ws4d_gsoap.stp
               @ONLY)

INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/ws4d_gsoap.stp DESTINATION share/ws4d-gSOAP)

