psemek_add_build_tool(psemek-resource-compiler FALSE compiler.cpp)

function(psemek_add_resources TARGET)
	get_target_property(OUT_DIR ${TARGET} BINARY_DIR)
	get_target_property(INPUT_DIR ${TARGET} SOURCE_DIR)

	target_include_directories(${TARGET} PRIVATE "${OUT_DIR}/resource/include")

	while(ARGN)
		list(GET ARGN 0 FILE)
		list(GET ARGN 1 NAME)
		list(REMOVE_AT ARGN 0 1)

		get_filename_component(NAME_PREFIX ${NAME} DIRECTORY)

		file(MAKE_DIRECTORY "${OUT_DIR}/resource/include/${NAME_PREFIX}")
		file(MAKE_DIRECTORY "${OUT_DIR}/resource/source/${NAME_PREFIX}")

		set(OUT_HEADER "${OUT_DIR}/resource/include/${NAME}.hpp")
		set(OUT_SOURCE "${OUT_DIR}/resource/source/${NAME}.cpp")

		set(_DEPEND_TARGET psemek-resource-compiler)
		if(PSEMEK_PACKAGE_MODE AND (NOT PSEMEK_PACKAGE_HOST))
			set(_DEPEND_TARGET)
		endif()

		add_custom_command(OUTPUT "${OUT_HEADER}" "${OUT_SOURCE}"
			COMMAND psemek-resource-compiler "${FILE}" ${NAME} "${OUT_HEADER}" "${OUT_SOURCE}"
			DEPENDS psemek-resource-compiler "${FILE}"
			WORKING_DIRECTORY "${INPUT_DIR}")

		target_sources(${TARGET} PRIVATE "${OUT_HEADER}" "${OUT_SOURCE}")
	endwhile()
endfunction()
