// -*- c++ -*-
// Distributed under the BSD 2-Clause License.
// See accompanying file LICENSE for details.
#include <ctor.h>

namespace
{
ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
{
	return
	{
		{
			.type = ctor::target_type::unit_test,
			.system = ctor::output_system::build,
			.target = "deps_test",
			.sources = {
				"deps_test.cc",
				"testmain.cc",
				"../src/deps.cc",
				"../src/util.cc",
			},
			.depends = { "testprog", },
			.flags = {
				.cxxflags = {
					"-std=c++20", "-O3", "-Wall", "-Werror",
					"-I../src", "-Iuunit",
					"-DOUTPUT=\"deps\"",
				},
			},
		},
		{
			.type = ctor::target_type::unit_test,
			.system = ctor::output_system::build,
			.target = "testprog",
			.sources = {
				"testprog.cc",
			},
			.flags = {
				.cxxflags = {
					"-std=c++20", "-O3", "-Wall", "-Werror",
				},
			},
		},
		{
			.type = ctor::target_type::unit_test,
			.system = ctor::output_system::build,
			.target = "execute_test",
			.sources = {
				"execute_test.cc",
				"testmain.cc",
				"../src/execute.cc",
				"../src/util.cc",
			},
			.depends = { "testprog", },
			.flags = {
				.cxxflags = {
					"-std=c++20", "-O3", "-Wall", "-Werror",
					"-I../src", "-Iuunit",
					"-DOUTPUT=\"execute\"",
				},
				.ldflags = { "-pthread" },
			},
		},
		{
			.type = ctor::target_type::unit_test,
			.system = ctor::output_system::build,
			.target = "tasks_test",
			.sources = {
				"tasks_test.cc",
				"testmain.cc",
			},
			.depends = { "libctor_nomain.a" },
			.flags = {
				.cxxflags = {
					"-std=c++20", "-O3", "-Wall", "-Werror",
					"-I../src", "-Iuunit",
					"-DOUTPUT=\"tasks\"",
				},
				.ldflags = { "-pthread" },
			},
		},
		{
			.type = ctor::target_type::unit_test,
			.system = ctor::output_system::build,
			.target = "cycle_test",
			.sources = {
				"cycle_test.cc",
				"testmain.cc",
			},
			.depends = { "libctor_nomain.a" },
			.flags = {
				.cxxflags = {
					"-std=c++20", "-O3", "-Wall", "-Werror",
					"-I../src", "-Iuunit",
					"-DOUTPUT=\"cycle\"",
				},
				.ldflags = { "-pthread" },
			},
		},
		{
			.type = ctor::target_type::unit_test,
			.system = ctor::output_system::build,
			.target = "source_type_test",
			.sources = {
				"source_type_test.cc",
				"testmain.cc",
			},
			.depends = { "libctor_nomain.a" },
			.flags = {
				.cxxflags = {
					"-std=c++20", "-O3", "-Wall", "-Werror",
					"-I../src", "-Iuunit",
					"-DOUTPUT=\"source_type\"",
				},
				.ldflags = { "-pthread" },
			},
		},
		{
			.type = ctor::target_type::unit_test,
			.system = ctor::output_system::build,
			.target = "tools_test",
			.sources = {
				"tools_test.cc",
				"testmain.cc",
				"../src/util.cc",
				"../src/tools.cc",
			},
			//.depends = { "libctor_nomain.a" },
			.flags = {
				.cxxflags = {
					"-std=c++20", "-O3", "-Wall", "-Werror",
					"-I../src", "-Iuunit",
					"-DOUTPUT=\"tools\"",
				},
			},
		},
		{
			.type = ctor::target_type::unit_test_library,
			.system = ctor::output_system::build,
			.target = "libctor_nomain.a",
			.sources = {
				"../src/build.cc",
				"../src/configure.cc",
				"../src/deps.cc",
				"../src/execute.cc",
				"../src/rebuild.cc",
				"../src/tasks.cc",
				"../src/task.cc",
				"../src/task_ar.cc",
				"../src/task_cc.cc",
				"../src/task_fn.cc",
				"../src/task_ld.cc",
				"../src/task_so.cc",
				"../src/tools.cc",
				"../src/util.cc",
				"../src/externals_manual.cc",
			},
			.flags = {
				.cxxflags = {
					"-std=c++20", "-O3", "-Wall", "-Werror",
					"-I../src",
				},
				.ldflags = { "-pthread" },
			},
		},
	};
}
}

// Convenience macro
REG(ctorTestConfigs);