template("unittest") {
  executable(target_name) {
    has_custom_main = false
    use_js_main = false

    # Foward everything (has_custom_main if set; configs, sources, deps, ...).
    forward_variables_from(invoker, "*")
    assert(!defined(invoker.output_dir), "cannot set unittest output_dir")
    assert(!defined(invoker.testonly), "cannot set unittest testonly")

    output_dir = target_out_dir

    deps = [ "//AK" ]
    if (has_custom_main) {
      deps += [ "//Userland/Libraries/LibTest" ]
    } else if (use_js_main) {
      deps += [ "//Userland/Libraries/LibTest:test_js_main" ]
    } else {
      deps += [ "//Userland/Libraries/LibTest:test_main" ]
    }

    if (current_os != "serenity") {
      deps += [ "//Userland/Libraries/LibCore" ]
    }

    testonly = true
  }
}
