
include(dios_module_md5)
include(dios_module_setup)

# 
# 添加导入Module
# 
# dios_module_link_library
MACRO(dios_module_link_library MODULE IMPORT_LIBRARY IS_INHERIT )
	# 
	# 需要进行逻辑判定;
	# 
	SET(IS_INHERIT ${IS_INHERIT})
	# 
	# 唯一性检测;每个库名字仅存一份在列表
	SET(CHECK_IMPORT_MODULE_UNIQUE TRUE)
	FOREACH(TEMP_LIBRARY ${DIOS_MODULE_${MODULE}_IMPORT_LIBRIRY_LIST})
		IF(${TEMP_LIBRARY} STREQUAL ${IMPORT_LIBRARY})
			SET(CHECK_IMPORT_MODULE_UNIQUE FALSE)
			BREAK()
		ENDIF()	
	ENDFOREACH()
	# 
	# 导入操作;
	IF(CHECK_IMPORT_MODULE_UNIQUE)
		# 
		# 导入的模块; IMPORT_LIBRIRY_LIST
		IF(IS_INHERIT)
			MESSAGE(STATUS ">>> [import] dios_module_link_library: ${MODULE} <-- ${IMPORT_LIBRARY} INHERIT")
		ELSE()
			MESSAGE(STATUS ">>> [import] dios_module_link_library: ${MODULE} <-- ${IMPORT_LIBRARY}")
		ENDIF()
		# 
		LIST(APPEND DIOS_MODULE_${MODULE}_IMPORT_LIBRIRY_LIST ${IMPORT_LIBRARY})	
		# 	
		# 需要继承的模块; IMPORT_INHERIT_LIBRIRY_LIST
		IF(IS_INHERIT)
			LIST(APPEND DIOS_MODULE_${MODULE}_IMPORT_INHERIT_LIBRIRY_LIST ${IMPORT_LIBRARY})
		ENDIF()
	ENDIF()
ENDMACRO()

# 
# 递归继承被设置继承属性的库;
# 
MACRO(_dios_module_link_inherit MODULE )	# 	

	_dios_module_link_inherit_from_module_list(${MODULE} ${DIOS_MODULE_${MODULE}_IMPORT_LIBRIRY_LIST})
	_dios_module_link_inherit_from_module_list(${MODULE} ${DIOS_MODULE_${MODULE}_IMPORT_INHERIT_LIBRIRY_LIST})

ENDMACRO()

# 
# 递归继承模块;
# 
MACRO(_dios_module_link_inherit_from_module MODULE MODULE_INHERIT)
	FOREACH(TEMP_LIBRARY ${DIOS_MODULE_${MODULE_INHERIT}_IMPORT_LIBRIRY_LIST})
		dios_module_link_library(${MODULE} ${TEMP_LIBRARY} false)
	ENDFOREACH()
	_dios_module_link_inherit_from_module_list(${MODULE} ${DIOS_MODULE_${MODULE_INHERIT}_IMPORT_INHERIT_LIBRIRY_LIST})
ENDMACRO()

# 
# 从继承模块列表中继承数据;
MACRO(_dios_module_link_inherit_from_module_list MODULE)
	SET(DIOS_CONFIG_MODULE_INHERIT_LIST ${ARGN})
	FOREACH(DMLIFML_TEMP_LIBRARY ${DIOS_CONFIG_MODULE_INHERIT_LIST})
		SET(DMLIFML_TEMP_MODULE ${DIOS_MODULE_${DMLIFML_TEMP_LIBRARY}_MODULE})
		_dios_module_link_inherit_from_module(${MODULE} ${DMLIFML_TEMP_MODULE})
	ENDFOREACH()
ENDMACRO()

# 生成继承后的导出模块列表;
# 并将库添加到对应导出模块的库列表; 
MACRO(_dios_module_gen_link_list MODULE )

	FOREACH(TEMP_LIBRARY ${DIOS_MODULE_${MODULE}_IMPORT_LIBRIRY_LIST})
		SET(TEMP_MODULE ${DIOS_MODULE_${TEMP_LIBRARY}_MODULE})		
		# 添加到导入模块;
		LIST(APPEND DIOS_MODULE_${MODULE}_${TEMP_MODULE}_IMPORT_LIBRARY_LIST ${TEMP_LIBRARY})	
		LIST(LENGTH DIOS_MODULE_${MODULE}_${TEMP_MODULE}_IMPORT_LIBRARY_LIST LEN)
		IF(${LEN} EQUAL 1)
			LIST(APPEND DIOS_MODULE_${MODULE}_IMPORT_MODULE_LIST ${TEMP_MODULE})
		ENDIF()

		# 添加到导出模块;
		# LIST(APPEND DIOS_MODULE_${TEMP_MODULE}_${MODULE}_EXPORT_LIBRARY_LIST ${TEMP_LIBRARY})	
		# LIST(LENGTH DIOS_MODULE_${TEMP_MODULE}_${MODULE}_EXPORT_LIBRARY_LIST LEN)
		# IF(${LEN} EQUAL 1)
		# 	LIST(APPEND DIOS_MODULE_${TEMP_MODULE}_EXPORT_MODULE_LIST ${MODULE})
		# ENDIF()
	ENDFOREACH()
ENDMACRO()
