include (LibAddPlugin)

find_package (Threads QUIET)

if (KDB_DEFAULT_RESOLVER MATCHES "resolver_.*")
	set (RESOLVERS "${KDB_DEFAULT_RESOLVER}") # default resolver
endif ()

foreach (plugin ${PLUGINS})
	if (${plugin} MATCHES "^resolver_.*")
		set (RESOLVERS "${RESOLVERS}" "${plugin}")
	endif ()
	if (${plugin}
	    MATCHES
	    "ALL"
	    OR ${plugin}
	       MATCHES
	       "DEFAULT"
	    OR ${plugin}
	       MATCHES
	       "NODEP")
		set (RESOLVERS
		     "${RESOLVERS}"
		     resolver_fm_b_b
		     resolver_fm_pb_b
		     resolver_fm_hb_b
		     resolver_fm_hp_b
		     resolver_fm_ub_x
		     resolver_fm_xb_x
		     resolver_fm_xp_x
		     resolver_fm_xhp_x
		     resolver_fm_uhb_xb
		     resolver_fm_hpu_b # default
		     )
	endif ()
endforeach ()

if (RESOLVERS)
	list (REMOVE_DUPLICATES RESOLVERS)
endif ()

foreach (plugin ${RESOLVERS})
	if (${plugin} MATCHES "^resolver_.*")
		string (REGEX
			REPLACE "resolver_"
				""
				variant
				${plugin})
		string (REGEX
			REPLACE "_"
				";"
				variantlist
				${variant})

		list (GET variantlist
			  0
			  variant_base)
		list (GET variantlist
			  1
			  variant_user)
		list (GET variantlist
			  2
			  variant_system)

		# don't forget near-global scope for CMake variables
		set (FURTHER_DEFINITIONS "")
		set (FURTHER_LIBRARIES "")

		string (FIND "${variant_base}"
			     "f"
			     out_var_n)
		if (NOT "${out_var_n}" EQUAL "-1")
			set (FURTHER_DEFINITIONS ${FURTHER_DEFINITIONS} "ELEKTRA_LOCK_FILE")
		endif ()

		string (FIND "${variant_base}"
			     "m"
			     out_var_n)
		if (NOT "${out_var_n}" EQUAL "-1")
			set (FURTHER_DEFINITIONS ${FURTHER_DEFINITIONS} "ELEKTRA_LOCK_MUTEX")
			set (FURTHER_LIBRARIES ${FURTHER_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_REALTIME_LIBS_INIT})
		endif ()

		set (SOURCES resolver.h resolver.c filename.c)

		add_plugin (${plugin}
			    SOURCES ${SOURCES}
			    LINK_LIBRARIES ${FURTHER_LIBRARIES}
			    COMPILE_DEFINITIONS ELEKTRA_VARIANT_BASE=\"${variant_base}\"
						ELEKTRA_VARIANT_USER=\"${variant_user}\"
						ELEKTRA_VARIANT_SYSTEM=\"${variant_system}\"
						ELEKTRA_VARIANT=${variant}
						ELEKTRA_PLUGIN_NAME=\"${plugin}\"
						${FURTHER_DEFINITIONS})

		if (variant MATCHES "fm_hpu_b")
			add_plugintest (resolver LINK_LIBRARIES ${FURTHER_LIBRARIES} LINK_PLUGIN resolver_fm_hpu_b)
		endif ()
	endif ()
endforeach (plugin)
