autoconf_linkopts

Resolve AC_SEARCH_LIBS / AC_SUBST results into linker flags at build time.

This rule reads the JSON result files from autoconf subst variables and produces a linker response file containing only the non-empty flags. The response file is returned via CcInfo so that cc_binary/cc_library targets can depend on it to get the correct platform-specific linkopts.

On GCC/Clang the flags are passed via a @response-file in user_link_flags. On MSVC/clang-cl (where nested @file is unsupported), a .c file with #pragma comment(lib, ...) directives is compiled and the resulting object is linked in, achieving the same effect through MSVC's native mechanism. That object's one variable, the anchor that keeps it alive, is a pick-any COMDAT (__declspec(selectany)), so a binary linking several autoconf_linkopts targets (a module's root and sub-configure ones) does not define it twice.

Example:

load("@rules_cc_autoconf//autoconf:autoconf_linkopts.bzl", "autoconf_linkopts")

autoconf_linkopts(
    name = "linkopts",
    vars = [
        "LIBPTHREAD",
        "FDATASYNC_LIB",
        "CLOCK_TIME_LIB",
    ],
    deps = [":autoconf"],
)

cc_binary(
    name = "my_binary",
    srcs = ["main.c"],
    deps = [":gnulib", ":linkopts"],
)

On modern Linux (glibc 2.34+) where pthread/rt functions are in libc, AC_SEARCH_LIBS produces empty values and no extra -l flags are added. On older systems, the appropriate flags (-lpthread, -lrt) are added automatically.

Rules

autoconf_linkopts

load("@rules_cc_autoconf//autoconf:autoconf_linkopts.bzl", "autoconf_linkopts")

autoconf_linkopts(name, deps, default_deps, defaults, vars)

Resolve AC_SEARCH_LIBS / AC_SUBST results into linker flags.

Reads subst result JSON files from autoconf deps and produces a linker response file. Returns CcInfo with the flags, so consumers can simply add this target to their deps list.

On GCC/Clang the flags are delivered via a @response-file. On MSVC/clang-cl a .c file with #pragma comment(lib, ...) directives is compiled instead, since MSVC's link.exe does not support nested response files.

Variables not found in the deps are silently ignored (they may be provided by a different module or not needed on this platform).

ATTRIBUTES

NameDescriptionTypeMandatoryDefault
nameA unique name for this target.Namerequired
depsList of autoconf targets providing check results.List of labelsrequired
default_depsautoconf_defaults targets whose values stand where no result of the name comes through deps (a result overrides a default silently; two defaults of one name must agree). The defaults the deps carry are read as well.List of labelsoptional[]
defaultsDeprecated and ignored: defaults come through deps and default_deps; the autoconf toolchain no longer carries any. Accepted so existing BUILD files keep loading.BooleanoptionalFalse
varsList of AC_SUBST variable names to resolve (e.g., ["LIBPTHREAD", "FDATASYNC_LIB"]). Each variable is looked up in the subst results from deps. Non-empty values (like "-lpthread") are added to linkopts; empty values are skipped.List of stringsrequired