nodejs/node · error · GypError

DoDependentSettings doesn't know how to determine dependenci

Error message

DoDependentSettings doesn't know how to determine dependencies for {key}

What it means

DoDependentSettings dispatches on a key to choose the dependency-set computation: 'all_dependent_settings' -> DeepDependencies, 'direct_dependent_settings' -> DirectAndImportedDependencies, 'link_settings' -> DependenciesForLinkSettings. Any other key is a programming error in the caller (internal gyp API), not a user .gyp mistake, so it raises GypError.

Source

Thrown at tools/gyp/pylib/gyp/input.py:2058

def DoDependentSettings(key, flat_list, targets, dependency_nodes):
    # key should be one of all_dependent_settings, direct_dependent_settings,
    # or link_settings.

    for target in flat_list:
        target_dict = targets[target]
        build_file = gyp.common.BuildFile(target)

        if key == "all_dependent_settings":
            dependencies = dependency_nodes[target].DeepDependencies()
        elif key == "direct_dependent_settings":
            dependencies = dependency_nodes[target].DirectAndImportedDependencies(
                targets
            )
        elif key == "link_settings":
            dependencies = dependency_nodes[target].DependenciesForLinkSettings(targets)
        else:
            raise GypError(
                "DoDependentSettings doesn't know how to determine "
                "dependencies for " + key
            )

        for dependency in dependencies:
            dependency_dict = targets[dependency]
            if key not in dependency_dict:
                continue
            dependency_build_file = gyp.common.BuildFile(dependency)
            MergeDicts(
                target_dict, dependency_dict[key], build_file, dependency_build_file
            )


def AdjustStaticLibraryDependencies(
    flat_list, targets, dependency_nodes, sort_dependencies
):
    # Recompute target "dependencies" properties.  For each static library

View on GitHub (pinned to 1b2de5e052)

Solutions

  1. Pass only one of: 'all_dependent_settings', 'direct_dependent_settings', 'link_settings'.
  2. If extending gyp, add an elif branch for the new key before the else.
  3. Ensure the generator and the gyp input module are from the same version/fork.

Example fix

// before (internal call): DoDependentSettings('my_settings', ...)
// after: extend dispatch or use 'all_dependent_settings'/'direct_dependent_settings'/'link_settings'
Defensive patterns

Strategy: try-catch

Validate before calling

ALLOWED = {'all_dependent_settings','direct_dependent_settings','link_settings'}
assert key in ALLOWED, 'unsupported DoDependentSettings key: %r' % key

Type guard

def is_supported_settings_key(k): return k in {'all_dependent_settings','direct_dependent_settings','link_settings'}

Try / catch

try:
    DoDependentSettings(key, flat_list, targets, dependency_nodes)
except gyp.input.GypError as e:
    if 'doesn\'t know how to determine dependencies' in str(e): raise RuntimeError('Internal gyp API misuse: %s' % key)

Prevention

When it happens

Trigger: An internal caller invokes DoDependentSettings with a key string other than the three supported ones. This is an API-contract violation inside gyp's pipeline, typically from a forked/modified gyp, not from a normal .gyp file.

Common situations: Forking gyp and adding a new settings key without extending the dispatch; calling internal functions directly from a custom generator; version skew where a generator expects a key the installed gyp does not handle.

Related errors


AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13). Data as JSON: /api/errors/28d56f7448a1b1c8. Report an issue: GitHub.