PROJECT(OSG_WRAPPERS)

SET(LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH}/${OSG_PLUGINS}")

IF(NOT MINGW)
	SET(CMAKE_SHARED_MODULE_PREFIX "")
ENDIF(NOT MINGW)


MACRO(ADD_WRAPPER_LIB SUBDIR EXPORTDEF)
	SET(TARGET_NAME "osgwrapper_${SUBDIR}")
#	MESSAGE(STATUS "--inizio-->${TARGET_NAME}<->${LINK}<-")

	FILE(GLOB SRC_FILES ${OSGWRAPPER_DIR}/${SUBDIR}/*.cpp)
	
	#-- extract link files, defines, exclude files form additional arguments 

	SET(LISTNAME "TEMP")
	SET(DEFSTR "")

	FOREACH(ARG ${ARGN})					# parse remaining args 
		#MESSAGE(STATUS "+ [${ARG}]")
		#MESSAGE("ARG-->${ARG}")
		# if we find our keywords set the active list to given keyname 
		STRING(COMPARE EQUAL "${ARG}" "LINK" IS_LINK)
		STRING(COMPARE EQUAL "${ARG}" "DEFINE" IS_DEFINE)
		STRING(COMPARE EQUAL "${ARG}" "EXCLUDE" IS_EXCLUDE)
		
		#MESSAGE(STATUS "STRSTUFF L ${IS_LINK} D ${IS_DEFINE} E ${IS_EXCLUDE}")
		
		SET(EXPRESSION ${IS_LINK} OR ${IS_DEFINE} OR ${IS_EXCLUDE})
		IF(${EXPRESSION})
			SET(${LISTNAME} ${CURRLIST})
			# MESSAGE(STATUS "STORED LIST [${LISTNAME}] = (${CURRLIST})")
			SET(LISTNAME ${ARG})
			REMOVE(CURRLIST ${CURRLIST} )
			
		ELSE(${EXPRESSION})
			SET(CURRLIST ${CURRLIST} ${ARG})	
			
		ENDIF(${EXPRESSION})
	ENDFOREACH(ARG)
	SET(${LISTNAME} ${CURRLIST})
	#MESSAGE(STATUS "STORED LIST [${LISTNAME}] = (${CURRLIST})")
	REMOVE(CURRLIST ${CURRLIST} )
	
	#MESSAGE(STATUS "AFTER: EXC (${EXCLUDE}) DEF (${DEFINE}) LINK (${LINK})")
	FOREACH(EXF ${EXCLUDE})
		REMOVE(SRC_FILES ${OPENSCENEGRAPH_DIR}/src/${SUBDIR}/${EXF})
	ENDFOREACH(EXF)
		
	FOREACH(DEF ${DEFINE})
		SET(DEFSTR "${DEFSTR} /D \"${DEF}\"")
		#MESSAGE(STATUS "add symbol : " ${DEF})
	ENDFOREACH(DEF)
	
	IF(NOT DEFSTR STREQUAL "")
		SET_SOURCE_FILES_PROPERTIES(${SRC_FILES} PROPERTIES COMPILE_FLAGS ${DEFSTR})
		#MESSAGE(STATUS "*********  ADD COMPILE FLAGS ${DEFSTR} **********")
	ENDIF(NOT DEFSTR STREQUAL "")
	
	#ADD_LIBRARY(${TARGET_NAME} SHARED ${SRC_FILES} )
        ADD_LIBRARY(${TARGET_NAME} MODULE ${SRC_FILES} )
        
	#not sure if needed, but for plugins only msvc need the d suffix
	IF(NOT MSVC)
		SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES DEBUG_POSTFIX "")
	ENDIF(NOT MSVC)

	SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES DEFINE_SYMBOL "${EXPORTDEF}" PROJECT_LABEL "Wrapper ${SUBDIR}")
	TARGET_LINK_LIBRARIES(${TARGET_NAME} ${LINK})
	#MESSAGE(STATUS "--TARGET_LINK_LIBRARIES-->${TARGET_NAME}<->${LINK}<-")
	
	REMOVE(DEFINE ${DEFINE})	
	REMOVE(LINK ${LINK})	
	REMOVE(EXCLUDE ${EXCLUDE})	
	
	IF(WIN32)
		INSTALL(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION bin )
	ELSE(WIN32)
		INSTALL(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} LIBRARY DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} )
	ENDIF(WIN32)
	
ENDMACRO(ADD_WRAPPER_LIB)



SET(OSGWRAPPER_LIB_LIST 
	OpenThreads
	osg
	osgDB
	osgUtil
	osgGA
	osgText
	osgParticle
	osgFX
	osgSim
	osgManipulator
	osgShadow
	osgTerrain
	osgViewer
)


SET(OSGWRAPPER_DIR ${CMAKE_CURRENT_SOURCE_DIR})
FOREACH(LIB ${OSGWRAPPER_LIB_LIST} )
	ADD_WRAPPER_LIB(${LIB}  OSGWRAPPERS_LIBRARY LINK osg ${LIB} osgIntrospection)	
ENDFOREACH(LIB ${OSGWRAPPER_LIB_LIST} )
