set (BLACKLIST_MODULES
	advanced_userlist
	dbus
	echo
	profiles
	split_messages
	tlen_protocol
	weather
)

if (WIN32)
	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/get-all.bat ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS OFF
		OUTPUT_VARIABLE MODULES
	)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/get-list.bat ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS "y" ${MODULES}
		OUTPUT_VARIABLE STATIC_MODULES
	)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/get-list.bat ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS "m" ${MODULES}
		OUTPUT_VARIABLE DYNAMIC_MODULES
	)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/get-list.bat ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS "n" ${MODULES}
		OUTPUT_VARIABLE DISABLED_MODULES
	)

#	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/check-deps.bat ${CMAKE_CURRENT_SOURCE_DIR}
#		ARGS ${STATIC_MODULES} - ${DYNAMIC_MODULES}
#		OUTPUT_VARIABLE DEPS_MESSAGE
#		RETURN_VALUE DEPS_STATUS
#	)

	if (ENABLE_AUTODOWNLOAD)
		foreach (MODULE ${STATIC_MODULES} ${DYNAMIC_MODULES})
			if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}.web)
				if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}/.autodownloaded OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}/CMakeLists.txt)
					exec_program (${CMAKE_SOURCE_DIR}/varia/scripts/autodownload.bat ${CMAKE_CURRENT_SOURCE_DIR}
						ARGS module ${MODULE}
						RETURN_VALUE DOWNLOAD_STATUS
					)
					if (DOWNLOAD_STATUS EQUAL 1)
						message (FATAL_ERROR ${MODULE} " download failed!")
					endif (DOWNLOAD_STATUS EQUAL 1)
				endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}/.autodownloaded OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}/CMakeLists.txt)
			endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}.web)
		endforeach (MODULE)
	endif (ENABLE_AUTODOWNLOAD)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/check-deps.sh ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS ${AWK} ${STATIC_MODULES} - ${DYNAMIC_MODULES}
		OUTPUT_VARIABLE DEPS_MESSAGE
		RETURN_VALUE DEPS_STATUS
	)

	if (DEPS_STATUS EQUAL 1)
		message (FATAL_ERROR ${DEPS_MESSAGE})
	endif (DEPS_STATUS EQUAL 1)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/create-static-modules.bat ${CMAKE_CURRENT_BINARY_DIR}
		ARGS ${STATIC_MODULES}
		OUTPUT_VARIABLE NULL_VAR
	)
else (WIN32)
	set (STATIC_MODULES "")
	set (STATIC_MODULES ${STATIC_MODULES} CACHE INTERNAL "")

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/get-all.sh ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS ${ENABLE_AUTODOWNLOAD}
		OUTPUT_VARIABLE MODULES
	)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/get-list.sh ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS "y" ${MODULES}
		OUTPUT_VARIABLE STATIC_MODULES
	)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/get-list.sh ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS "m" ${MODULES}
		OUTPUT_VARIABLE DYNAMIC_MODULES
	)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/get-list.sh ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS "n" ${MODULES}
		OUTPUT_VARIABLE DISABLED_MODULES
	)

	# autodownload
	if (ENABLE_AUTODOWNLOAD)
		foreach (MODULE ${STATIC_MODULES} ${DYNAMIC_MODULES})
			if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}.web)
				if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}/.autodownloaded OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}/CMakeLists.txt)
					exec_program (${CMAKE_SOURCE_DIR}/varia/scripts/autodownload ${CMAKE_CURRENT_SOURCE_DIR}
						ARGS module ${MODULE}
						RETURN_VALUE DOWNLOAD_STATUS
					)
					if (DOWNLOAD_STATUS EQUAL 1)
						message (FATAL_ERROR ${MODULE} " download failed!")
					endif (DOWNLOAD_STATUS EQUAL 1)
				endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}/.autodownloaded OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}/CMakeLists.txt)
			endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}.web)
		endforeach (MODULE)
	endif (ENABLE_AUTODOWNLOAD)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/check-deps.sh ${CMAKE_CURRENT_SOURCE_DIR}
		ARGS ${AWK} ${STATIC_MODULES} - ${DYNAMIC_MODULES}
		OUTPUT_VARIABLE DEPS_MESSAGE
		RETURN_VALUE DEPS_STATUS
	)

	if (DEPS_STATUS EQUAL 1)
		message (FATAL_ERROR ${DEPS_MESSAGE})
	endif (DEPS_STATUS EQUAL 1)

	exec_program (${CMAKE_CURRENT_SOURCE_DIR}/create-static-modules.sh ${CMAKE_CURRENT_BINARY_DIR}
		ARGS ${STATIC_MODULES}
		OUTPUT_VARIABLE NULL_VAR
	)

	find_program (AWK NAMES awk gawk)
endif (WIN32)

MACRO(LIST_CONTAINS var value)
	SET(${var})
	FOREACH (value2 ${ARGN})
		IF (${value} STREQUAL ${value2})
			SET(${var} TRUE)
		ENDIF (${value} STREQUAL ${value2})
	ENDFOREACH (value2)
ENDMACRO(LIST_CONTAINS)

if (NOT STATIC_MODULES STREQUAL "\n")
	set (STATIC_MODULES ${STATIC_MODULES} CACHE INTERNAL "")

	foreach (MODULE ${STATIC_MODULES})
		LIST_CONTAINS(BLACKLISTED ${MODULE} ${BLACKLIST_MODULES})
		if (BLACKLISTED)
			message (STATUS "Module ${MODULE} is blacklisted")
		else (BLACKLISTED)
			message (STATUS "Static module: " ${MODULE})
			set (${MODULE} STATIC)
			link_directories (${MODULE})
			add_subdirectory (${MODULE})
		endif (BLACKLISTED)
	endforeach (MODULE)
endif (NOT STATIC_MODULES STREQUAL "\n")

if (NOT DYNAMIC_MODULES STREQUAL "\n")
	foreach (MODULE ${DYNAMIC_MODULES})
		LIST_CONTAINS(BLACKLISTED ${MODULE} ${BLACKLIST_MODULES})
		if (BLACKLISTED)
			message (STATUS "Module ${MODULE} is blacklisted")
		else (BLACKLISTED)
			message (STATUS "Dynamic module: " ${MODULE})
			if (WIN32)
				set (${MODULE} SHARED)
			else (WIN32)
				set (${MODULE} MODULE)
			endif (WIN32)
		# 	link_directories (${MODULE})
			add_subdirectory (${MODULE})
		endif (BLACKLISTED)
	endforeach (MODULE)
endif (NOT DYNAMIC_MODULES STREQUAL "\n")
