blob: ea47ce9da9c6459a100153fa6926dd96e9f39f3f [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "gn/c_substitution_type.h"
#include <stddef.h>
#include <stdlib.h>
#include "gn/err.h"
const SubstitutionTypes CSubstitutions = {
&CSubstitutionAsmFlags,
&CSubstitutionCFlags,
&CSubstitutionCFlagsC,
&CSubstitutionCFlagsCc,
&CSubstitutionCFlagsObjC,
&CSubstitutionCFlagsObjCc,
&CSubstitutionDefines,
&CSubstitutionFrameworkDirs,
&CSubstitutionIncludeDirs,
&CSubstitutionModuleDeps,
&CSubstitutionModuleDepsNoSelf,
&CSubstitutionSwiftModules,
&CSubstitutionLinkerInputs,
&CSubstitutionLinkerInputsNewline,
&CSubstitutionLdFlags,
&CSubstitutionLibs,
&CSubstitutionSoLibs,
&CSubstitutionFrameworks,
&CSubstitutionRlibs,
&CSubstitutionArFlags,
&CSubstitutionSwiftModuleName,
&CSubstitutionSwiftBridgeHeader,
&CSubstitutionSwiftModuleDirs,
&CSubstitutionSwiftFlags,
};
// Valid for compiler tools.
const Substitution CSubstitutionAsmFlags = {"{{asmflags}}", "asmflags"};
const Substitution CSubstitutionCFlags = {"{{cflags}}", "cflags"};
const Substitution CSubstitutionCFlagsC = {"{{cflags_c}}", "cflags_c"};
const Substitution CSubstitutionCFlagsCc = {"{{cflags_cc}}", "cflags_cc"};
const Substitution CSubstitutionCFlagsObjC = {"{{cflags_objc}}", "cflags_objc"};
const Substitution CSubstitutionCFlagsObjCc = {"{{cflags_objcc}}",
"cflags_objcc"};
const Substitution CSubstitutionDefines = {"{{defines}}", "defines"};
const Substitution CSubstitutionFrameworkDirs = {"{{framework_dirs}}",
"framework_dirs"};
const Substitution CSubstitutionIncludeDirs = {"{{include_dirs}}",
"include_dirs"};
const Substitution CSubstitutionModuleDeps = {"{{module_deps}}", "module_deps"};
const Substitution CSubstitutionModuleDepsNoSelf = {"{{module_deps_no_self}}",
"module_deps_no_self"};
// Valid for linker tools.
const Substitution CSubstitutionLinkerInputs = {"{{inputs}}", "in"};
const Substitution CSubstitutionLinkerInputsNewline = {"{{inputs_newline}}",
"in_newline"};
const Substitution CSubstitutionLdFlags = {"{{ldflags}}", "ldflags"};
const Substitution CSubstitutionLibs = {"{{libs}}", "libs"};
const Substitution CSubstitutionSoLibs = {"{{solibs}}", "solibs"};
const Substitution CSubstitutionRlibs = {"{{rlibs}}", "rlibs"};
const Substitution CSubstitutionFrameworks = {"{{frameworks}}", "frameworks"};
const Substitution CSubstitutionSwiftModules = {"{{swiftmodules}}",
"swiftmodules"};
// Valid for alink only.
const Substitution CSubstitutionArFlags = {"{{arflags}}", "arflags"};
// Valid for swift only.
const Substitution CSubstitutionSwiftModuleName = {"{{module_name}}",
"module_name"};
const Substitution CSubstitutionSwiftBridgeHeader = {"{{bridge_header}}",
"bridge_header"};
const Substitution CSubstitutionSwiftModuleDirs = {"{{module_dirs}}",
"module_dirs"};
const Substitution CSubstitutionSwiftFlags = {"{{swiftflags}}", "swiftflags"};
bool IsValidCompilerSubstitution(const Substitution* type) {
return IsValidToolSubstitution(type) || IsValidSourceSubstitution(type) ||
type == &SubstitutionSource || type == &CSubstitutionAsmFlags ||
type == &CSubstitutionCFlags || type == &CSubstitutionCFlagsC ||
type == &CSubstitutionCFlagsCc || type == &CSubstitutionCFlagsObjC ||
type == &CSubstitutionCFlagsObjCc || type == &CSubstitutionDefines ||
type == &CSubstitutionFrameworkDirs ||
type == &CSubstitutionIncludeDirs ||
type == &CSubstitutionModuleDeps ||
type == &CSubstitutionModuleDepsNoSelf;
}
bool IsValidCompilerOutputsSubstitution(const Substitution* type) {
// All tool types except "output" (which would be infinitely recursive).
return (IsValidToolSubstitution(type) && type != &SubstitutionOutput) ||
IsValidSourceSubstitution(type);
}
bool IsValidSwiftCompilerSubstitution(const Substitution* type) {
return IsValidToolSubstitution(type) ||
type == &CSubstitutionSwiftModuleName ||
type == &CSubstitutionLinkerInputs ||
type == &CSubstitutionIncludeDirs ||
type == &CSubstitutionSwiftBridgeHeader ||
type == &CSubstitutionSwiftModuleDirs ||
type == &CSubstitutionSwiftFlags || type == &CSubstitutionDefines;
}
bool IsValidSwiftCompilerOutputsSubstitution(const Substitution* type) {
return (IsValidSwiftCompilerSubstitution(type) &&
type != &SubstitutionOutput) ||
IsValidSourceSubstitution(type);
}
bool IsValidLinkerSubstitution(const Substitution* type) {
return IsValidToolSubstitution(type) || type == &SubstitutionOutputDir ||
type == &SubstitutionOutputExtension ||
type == &CSubstitutionLinkerInputs ||
type == &CSubstitutionLinkerInputsNewline ||
type == &CSubstitutionLdFlags || type == &CSubstitutionLibs ||
type == &CSubstitutionSoLibs || type == &CSubstitutionFrameworks ||
type == &CSubstitutionRlibs || type == &CSubstitutionSwiftModules;
}
bool IsValidLinkerOutputsSubstitution(const Substitution* type) {
// All valid compiler outputs plus the output extension.
return IsValidCompilerOutputsSubstitution(type) ||
type == &SubstitutionOutputDir || type == &SubstitutionOutputExtension;
}
bool IsValidALinkSubstitution(const Substitution* type) {
return IsValidToolSubstitution(type) ||
type == &SubstitutionOutputDir ||
type == &SubstitutionOutputExtension ||
type == &CSubstitutionLinkerInputs ||
type == &CSubstitutionLinkerInputsNewline ||
type == &CSubstitutionArFlags;
}