#Sirikata
#AddPluginTarget.cmake
#
#Copyright (c) 2009, Daniel Reiter Horn
#All rights reserved.
#
#Redistribution and use in source and binary forms, with or without
#modification, are permitted provided that the following conditions are met:
#
#    * Redistributions of source code must retain the above copyright notice,
#      this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above copyright notice,
#      this list of conditions and the following disclaimer in the documentation
#      and/or other materials provided with the distribution.
#    * Neither the name of the Sirikata nor the names of its contributors
#      may be used to endorse or promote products derived from this software
#      without specific prior written permission.
#
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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.

SET(ENABLED_PLUGINS)
# macro for adding a plugin
MACRO(ADD_PLUGIN_TARGET)
  PARSE_ARGUMENTS(PLUGIN "SOURCES;TARGET_CXXFLAGS;TARGET_LDFLAGS;TARGET_LIBRARIES;LIBRARIES;VERSION_INFO;DEFINE" "" ${ARGN})

  CAR(PLUGIN_NAME ${PLUGIN_DEFAULT_ARGS})
  SET(ENABLED_PLUGINS ${PLUGIN_NAME} ${ENABLED_PLUGINS})
  ADD_LIBRARY(${PLUGIN_NAME} SHARED ${PLUGIN_SOURCES})
  IF(PLUGIN_TARGET_LIBRARIES)
    ADD_DEPENDENCIES(${PLUGIN_NAME} ${PLUGIN_TARGET_LIBRARIES})
  ENDIF()
  TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${PLUGIN_LIBRARIES})
  IF(PLUGIN_TARGET_LDFLAGS)
    STRING(REGEX REPLACE ";" " " PLUGIN_TARGET_LDFLAGS  "${PLUGIN_TARGET_LDFLAGS}")  #FIXME does not deal with space-having ldflags
    SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS ${PLUGIN_TARGET_LDFLAGS})
  ENDIF()
  IF(PLUGIN_TARGET_CXXFLAGS)
    STRING(REGEX REPLACE ";" " " PLUGIN_TARGET_CXXFLAGS  "${PLUGIN_TARGET_CXXFLAGS}")  #FIXME does not deal with space-having ldflags
    SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES COMPILE_FLAGS ${PLUGIN_TARGET_CXXFLAGS})
  ENDIF()
  IF(PLUGIN_VERSION_INFO)
    SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES ${PLUGIN_VERSION_INFO})
  ENDIF()
  IF(PLUGIN_DEFINE)
    STRING(REGEX REPLACE ";" " " PLUGIN_DEFINE  "${PLUGIN_DEFINE}")  #FIXME does not deal with space-having ldflags
    SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES COMPILE_DEFINITIONS ${PLUGIN_DEFINE})
  ENDIF()
ENDMACRO(ADD_PLUGIN_TARGET)
