nodejs/node · warning · GypError
Missing input files:\n%s
Error message
Missing input files:\n%s
What it means
Raised as a GypError (or printed as a warning) when MSVS generation completes but some source files referenced by targets do not exist on disk. The behavior depends on the msvs_error_on_missing_sources generator flag: if set, it is a hard error; otherwise it is a stdout warning. Missing sources produce broken Visual Studio projects.
Source
Thrown at tools/gyp/pylib/gyp/generator/msvs.py:2164
sln_projects += gyp.common.DeepDependencyTargets(target_dicts, sln_projects)
# Create folder hierarchy.
root_entries = _GatherSolutionFolders(
sln_projects, project_objects, flat=msvs_version.FlatSolution()
)
# Create solution.
sln = MSVSNew.MSVSSolution(
sln_path,
entries=root_entries,
variants=target_only_configs,
websiteProperties=False,
version=msvs_version,
)
sln.Write()
if missing_sources:
error_message = "Missing input files:\n" + "\n".join(set(missing_sources))
if generator_flags.get("msvs_error_on_missing_sources", False):
raise GypError(error_message)
else:
print("Warning: " + error_message, file=sys.stdout)
def _GenerateMSBuildFiltersFile(
filters_path,
source_files,
rule_dependencies,
extension_to_rule_name,
platforms,
toolset,
):
"""Generate the filters file.
This file is used by Visual Studio to organize the presentation of source
files into folders.
Arguments:View on GitHub (pinned to 1b2de5e052)
Solutions
- Ensure all referenced source files exist on disk at generation time (run codegen, fix paths, restore deleted files).
- Gate platform-specific or generated sources with conditions so they are only listed when present.
- If missing sources are expected/acceptable, do not enable msvs_error_on_missing_sources (it defaults to a warning).
- Update the .gyp sources list to remove references to deleted files.
Example fix
// before
'sources': ['gen/output.cc'] // not generated yet
// after — generate first, or guard
'conditions': [
['generate_output==1', { 'sources': ['gen/output.cc'] }]
] Defensive patterns
Strategy: validation
Validate before calling
import os
missing = [s for s in spec.get('sources', []) if not os.path.exists(s)]
if missing:
print('warning: missing sources:', missing) Type guard
import os
def all_sources_exist(spec) -> bool:
return all(os.path.exists(s) for s in spec.get('sources', [])) Try / catch
try:
GenerateOutput(...)
except GypError as e:
if 'Missing input files' in str(e):
run_codegen_step(); regenerate()
raise Prevention
- Run codegen before gyp generation so generated sources exist.
- Guard platform-specific sources with conditions.
- Leave msvs_error_on_missing_sources off unless you want a hard failure.
When it happens
Trigger: A .gyp target lists source files that do not exist at generation time. After writing the .sln, the missing_sources collection is non-empty at msvs.py:2161 and, if generator_flags['msvs_error_on_missing_sources'] is True, GypError is raised.
Common situations: Sources generated by a prior build step that hasn't run yet; stale .gyp after files were renamed/deleted; glob patterns referencing directories that don't exist in the current checkout; cross-platform sources listed unconditionally.
Related errors
- %s is missing - make sure VC++ tools are installed.
- Could not locate Visual Studio installation.
- Appending "%s" to a non-list setting "%s" for tool "%s" is n
- Invalid MSVS guid: "%s". Must match regex: "%s".
- Target type %s is not a valid target type for target %s in %
AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13).
Data as JSON: /api/errors/968dd60966c77c1b.
Report an issue: GitHub.