cprogram {
	name = "llgen",

	-- These use pre-LLgen'd versions of LLgen.c, Lpars.c and tokens.c. If
	-- LLgen.g gets updated, they need rebuilding. Use the bootstrap script to
	-- do this.

	srcs = { "./src/*.c" },
	vars = {
		["+cflags"] = {
			"-DLIBDIR=\\\""..posix.getcwd().."/"..cwd().."/lib\\\"",
			"-DNON_CORRECTING"
		},
	}
}

definerule("llgen",
	{
		srcs = { type="targets" },
	},
	function(e)
		-- Remember this is executed from the caller's directory; local
		-- target names will resolve there
		local fs = replace(basename(filenamesof(e.srcs)), "%.g$", "")

		return normalrule {
			name = e.name,
			cwd = e.cwd,
			outleaves = {
				"Lpars.c",
				"Lpars.h",
				replace(fs, "$", ".c")
			},
			ins = {
				"util/LLgen+llgen",
				e.srcs,
			},
			commands = {
				"cd %{dir} && %{abspath(ins)}"
			}
		}
	end
)