Variable expansion - initial support (#457)
* Variable expansion - initial support * Update baselines and more bug fixes. * One more baseline update, forgot full path to personal machine enlistment * More baseline updates for windows * Fix persistance issue with launch configurations and also make sure we don't override settings in workspace with expanded values * Fix more object/arrays persistance bugs. Implement possibility to escape varexp syntax.
This commit is contained in:
Родитель
3766ba7a5b
Коммит
7b3cc9f1d0
|
@ -38,7 +38,9 @@
|
||||||
],
|
],
|
||||||
"activationEvents": [
|
"activationEvents": [
|
||||||
"onCommand:makefile.setBuildConfiguration",
|
"onCommand:makefile.setBuildConfiguration",
|
||||||
|
"onCommand:makefile.getConfiguration",
|
||||||
"onCommand:makefile.setBuildTarget",
|
"onCommand:makefile.setBuildTarget",
|
||||||
|
"onCommand:makefile.getBuildTarget",
|
||||||
"onCommand:makefile.buildTarget",
|
"onCommand:makefile.buildTarget",
|
||||||
"onCommand:makefile.buildCleanTarget",
|
"onCommand:makefile.buildCleanTarget",
|
||||||
"onCommand:makefile.buildAll",
|
"onCommand:makefile.buildAll",
|
||||||
|
|
|
@ -71,12 +71,11 @@ export function getCurrentMakefileConfiguration(): string { return currentMakefi
|
||||||
export async function setCurrentMakefileConfiguration(configuration: string): Promise<void> {
|
export async function setCurrentMakefileConfiguration(configuration: string): Promise<void> {
|
||||||
currentMakefileConfiguration = configuration;
|
currentMakefileConfiguration = configuration;
|
||||||
statusBar.setConfiguration(currentMakefileConfiguration);
|
statusBar.setConfiguration(currentMakefileConfiguration);
|
||||||
logger.message(`Setting configuration - ${currentMakefileConfiguration}`);
|
|
||||||
await analyzeConfigureParams();
|
await analyzeConfigureParams();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the current configuration from workspace state, update status bar item
|
// Read the current configuration from workspace state, update status bar item
|
||||||
function readCurrentMakefileConfiguration(): void {
|
export function readCurrentMakefileConfiguration(): void {
|
||||||
let buildConfiguration : string | undefined = extension.getState().buildConfiguration;
|
let buildConfiguration : string | undefined = extension.getState().buildConfiguration;
|
||||||
if (!buildConfiguration) {
|
if (!buildConfiguration) {
|
||||||
logger.message("No current configuration is defined in the workspace state. Assuming 'Default'.");
|
logger.message("No current configuration is defined in the workspace state. Assuming 'Default'.");
|
||||||
|
@ -135,11 +134,10 @@ export function isOptionalFeatureEnabled(propertyName: string): boolean {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override default settings for each feature based on workspace current information
|
// Override default settings for each feature based on workspace current information
|
||||||
function updateOptionalFeaturesWithWorkspace(): void {
|
async function updateOptionalFeaturesWithWorkspace(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
|
||||||
// optionalFeatures will be set with default values.
|
// optionalFeatures will be set with default values.
|
||||||
// override with values from the workspace
|
// override with values from the workspace
|
||||||
let features: MakefilePanelVisibility | undefined = workspaceConfiguration.get<MakefilePanelVisibility>("panel.visibility") || undefined;
|
let features: MakefilePanelVisibility | undefined = await util.getExpandedSetting<MakefilePanelVisibility>("panel.visibility") || undefined;
|
||||||
if (features) {
|
if (features) {
|
||||||
if (Object.entries(features).length < panelVisibility.features.length) {
|
if (Object.entries(features).length < panelVisibility.features.length) {
|
||||||
// At least one feature is missing from the settings, which means we need to use defaults.
|
// At least one feature is missing from the settings, which means we need to use defaults.
|
||||||
|
@ -178,8 +176,8 @@ function enableOptionallyVisibleCommands(): void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function readFeaturesVisibility(): void {
|
async function readFeaturesVisibility(): Promise<void> {
|
||||||
updateOptionalFeaturesWithWorkspace();
|
await updateOptionalFeaturesWithWorkspace();
|
||||||
}
|
}
|
||||||
|
|
||||||
let makePath: string | undefined;
|
let makePath: string | undefined;
|
||||||
|
@ -189,16 +187,10 @@ export function setMakePath(path: string): void { makePath = path; }
|
||||||
// Read the path (full or directory only) of the make tool if defined in settings.
|
// Read the path (full or directory only) of the make tool if defined in settings.
|
||||||
// It represents a default to look for if no other path is already included
|
// It represents a default to look for if no other path is already included
|
||||||
// in "makefile.configurations.makePath".
|
// in "makefile.configurations.makePath".
|
||||||
function readMakePath(): void {
|
async function readMakePath(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
makePath = await util.getExpandedSetting<string>("makePath");
|
||||||
makePath = workspaceConfiguration.get<string>("makePath");
|
|
||||||
if (!makePath) {
|
if (!makePath) {
|
||||||
logger.message("No path to the make tool is defined in the settings file.");
|
logger.message("No path to the make tool is defined in the settings file.");
|
||||||
} else {
|
|
||||||
// Don't resolve makePath to root, because make needs to be searched in the path too.
|
|
||||||
// Instead, offer ability to substitute ${workspaceRoot}/${workspacePath} to the current
|
|
||||||
// workspace directory.
|
|
||||||
makePath = util.resolveSubstitutedPath(makePath);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,9 +201,8 @@ export function setMakefilePath(path: string): void { makefilePath = path; }
|
||||||
// It represents a default to look for if no other makefile is already provided
|
// It represents a default to look for if no other makefile is already provided
|
||||||
// in makefile.configurations.makefilePath.
|
// in makefile.configurations.makefilePath.
|
||||||
// TODO: validate and integrate with "-f [Makefile]" passed in makefile.configurations.makeArgs.
|
// TODO: validate and integrate with "-f [Makefile]" passed in makefile.configurations.makeArgs.
|
||||||
function readMakefilePath(): void {
|
async function readMakefilePath(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
makefilePath = await util.getExpandedSetting<string>("makefilePath");
|
||||||
makefilePath = workspaceConfiguration.get<string>("makefilePath");
|
|
||||||
if (!makefilePath) {
|
if (!makefilePath) {
|
||||||
logger.message("No path to the makefile is defined in the settings file.");
|
logger.message("No path to the makefile is defined in the settings file.");
|
||||||
} else {
|
} else {
|
||||||
|
@ -226,9 +217,8 @@ export function setMakeDirectory(dir: string): void { makeDirectory = dir; }
|
||||||
// It represents a default to look for if no other makeDirectory is already provided
|
// It represents a default to look for if no other makeDirectory is already provided
|
||||||
// in makefile.configurations.makeDirectory.
|
// in makefile.configurations.makeDirectory.
|
||||||
// TODO: validate and integrate with "-C [DIR_PATH]" passed in makefile.configurations.makeArgs.
|
// TODO: validate and integrate with "-C [DIR_PATH]" passed in makefile.configurations.makeArgs.
|
||||||
function readMakeDirectory(): void {
|
async function readMakeDirectory(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
makeDirectory = await util.getExpandedSetting<string>("makeDirectory");
|
||||||
makeDirectory = workspaceConfiguration.get<string>("makeDirectory");
|
|
||||||
if (!makeDirectory) {
|
if (!makeDirectory) {
|
||||||
logger.message("No folder path to the makefile is defined in the settings file.");
|
logger.message("No folder path to the makefile is defined in the settings file.");
|
||||||
} else {
|
} else {
|
||||||
|
@ -286,9 +276,8 @@ export function setBuildLog(path: string): void { buildLog = path; }
|
||||||
// If any of the above switches is missing, the extension may have less log to parse from,
|
// If any of the above switches is missing, the extension may have less log to parse from,
|
||||||
// therefore offering less intellisense information for source files,
|
// therefore offering less intellisense information for source files,
|
||||||
// identifying less possible binaries to debug or not providing any makefile targets (other than the 'all' default).
|
// identifying less possible binaries to debug or not providing any makefile targets (other than the 'all' default).
|
||||||
function readBuildLog(): void {
|
export async function readBuildLog(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
buildLog = await util.getExpandedSetting<string>("buildLog");
|
||||||
buildLog = workspaceConfiguration.get<string>("buildLog");
|
|
||||||
if (buildLog) {
|
if (buildLog) {
|
||||||
buildLog = util.resolvePathToRoot(buildLog);
|
buildLog = util.resolvePathToRoot(buildLog);
|
||||||
logger.message(`Build log defined at "${buildLog}"`);
|
logger.message(`Build log defined at "${buildLog}"`);
|
||||||
|
@ -303,14 +292,8 @@ export function getLoggingLevel(): string | undefined { return loggingLevel; }
|
||||||
export function setLoggingLevel(logLevel: string): void { loggingLevel = logLevel; }
|
export function setLoggingLevel(logLevel: string): void { loggingLevel = logLevel; }
|
||||||
|
|
||||||
// Read from settings the desired logging level for the Makefile Tools extension.
|
// Read from settings the desired logging level for the Makefile Tools extension.
|
||||||
export function readLoggingLevel(): void {
|
export async function readLoggingLevel(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
loggingLevel = await util.getExpandedSetting<string>("loggingLevel") || "Normal";
|
||||||
loggingLevel = workspaceConfiguration.get<string>("loggingLevel");
|
|
||||||
|
|
||||||
if (!loggingLevel) {
|
|
||||||
loggingLevel = "Normal";
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.message(`Logging level: ${loggingLevel}`);
|
logger.message(`Logging level: ${loggingLevel}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -321,10 +304,8 @@ export function setExtensionOutputFolder(folder: string): void { extensionOutput
|
||||||
// Read from settings the path to a folder where the extension is dropping various output files
|
// Read from settings the path to a folder where the extension is dropping various output files
|
||||||
// (like extension.log, dry-run.log, targets.log).
|
// (like extension.log, dry-run.log, targets.log).
|
||||||
// Useful to control where such potentially large files should reside.
|
// Useful to control where such potentially large files should reside.
|
||||||
export function readExtensionOutputFolder(): void {
|
export async function readExtensionOutputFolder(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
extensionOutputFolder = await util.getExpandedSetting<string>("extensionOutputFolder");
|
||||||
const propKey: string = "extensionOutputFolder";
|
|
||||||
extensionOutputFolder = workspaceConfiguration.get<string>(propKey);
|
|
||||||
if (extensionOutputFolder) {
|
if (extensionOutputFolder) {
|
||||||
extensionOutputFolder = util.resolvePathToRoot(extensionOutputFolder);
|
extensionOutputFolder = util.resolvePathToRoot(extensionOutputFolder);
|
||||||
} else {
|
} else {
|
||||||
|
@ -335,8 +316,9 @@ export function readExtensionOutputFolder(): void {
|
||||||
if (extensionOutputFolder) {
|
if (extensionOutputFolder) {
|
||||||
if (!util.checkDirectoryExistsSync(extensionOutputFolder)) {
|
if (!util.checkDirectoryExistsSync(extensionOutputFolder)) {
|
||||||
if (!util.createDirectorySync(extensionOutputFolder)) {
|
if (!util.createDirectorySync(extensionOutputFolder)) {
|
||||||
|
extensionOutputFolder = extension.extensionContext.storagePath;
|
||||||
logger.message(`Extension output folder does not exist and could not be created: ${extensionOutputFolder}.`);
|
logger.message(`Extension output folder does not exist and could not be created: ${extensionOutputFolder}.`);
|
||||||
extensionOutputFolder = undefined;
|
logger.message(`Reverting to '${extensionOutputFolder}' default for extension output folder.`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -356,9 +338,8 @@ export function setExtensionLog(path: string): void { extensionLog = path; }
|
||||||
// If an extension log is specified, its content is cleared during activation.
|
// If an extension log is specified, its content is cleared during activation.
|
||||||
// Any messages that are being logged throughout the lifetime of the extension
|
// Any messages that are being logged throughout the lifetime of the extension
|
||||||
// are going to be appended to this file.
|
// are going to be appended to this file.
|
||||||
export function readExtensionLog(): void {
|
export async function readExtensionLog(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
extensionLog = await util.getExpandedSetting<string>("extensionLog");
|
||||||
extensionLog = workspaceConfiguration.get<string>("extensionLog");
|
|
||||||
if (extensionLog) {
|
if (extensionLog) {
|
||||||
// If there is a directory defined within the extension log path,
|
// If there is a directory defined within the extension log path,
|
||||||
// honor it and don't append to extensionOutputFolder.
|
// honor it and don't append to extensionOutputFolder.
|
||||||
|
@ -379,9 +360,8 @@ export function setPreConfigureScript(path: string): void { preConfigureScript =
|
||||||
|
|
||||||
// Read from settings the path to a script file that needs to have been run at least once
|
// Read from settings the path to a script file that needs to have been run at least once
|
||||||
// before a sucessful configure of this project.
|
// before a sucessful configure of this project.
|
||||||
export function readPreConfigureScript(): void {
|
export async function readPreConfigureScript(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
preConfigureScript = await util.getExpandedSetting<string>("preConfigureScript");
|
||||||
preConfigureScript = workspaceConfiguration.get<string>("preConfigureScript");
|
|
||||||
if (preConfigureScript) {
|
if (preConfigureScript) {
|
||||||
preConfigureScript = util.resolvePathToRoot(preConfigureScript);
|
preConfigureScript = util.resolvePathToRoot(preConfigureScript);
|
||||||
logger.message(`Found pre-configure script defined as ${preConfigureScript}`);
|
logger.message(`Found pre-configure script defined as ${preConfigureScript}`);
|
||||||
|
@ -397,9 +377,8 @@ export function setAlwaysPreConfigure(path: boolean): void { alwaysPreConfigure
|
||||||
|
|
||||||
// Read from settings whether the pre-configure step is supposed to be executed
|
// Read from settings whether the pre-configure step is supposed to be executed
|
||||||
// always before the configure operation.
|
// always before the configure operation.
|
||||||
export function readAlwaysPreConfigure(): void {
|
export async function readAlwaysPreConfigure(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
alwaysPreConfigure = await util.getExpandedSetting<boolean>("alwaysPreConfigure");
|
||||||
alwaysPreConfigure = workspaceConfiguration.get<boolean>("alwaysPreConfigure");
|
|
||||||
logger.message(`Always pre-configure: ${alwaysPreConfigure}`);
|
logger.message(`Always pre-configure: ${alwaysPreConfigure}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -410,13 +389,13 @@ export function setConfigurationCachePath(path: string): void { configurationCac
|
||||||
// Read from settings the path to a cache file containing the output of the last dry-run make command.
|
// Read from settings the path to a cache file containing the output of the last dry-run make command.
|
||||||
// This file is recreated when opening a project, when changing the build configuration or the build target
|
// This file is recreated when opening a project, when changing the build configuration or the build target
|
||||||
// and when the settings watcher detects a change of any properties that may impact the dryrun output.
|
// and when the settings watcher detects a change of any properties that may impact the dryrun output.
|
||||||
export function readConfigurationCachePath(): void {
|
export async function readConfigurationCachePath(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
|
||||||
// how to get default from package.json to avoid problem with 'undefined' type?
|
// how to get default from package.json to avoid problem with 'undefined' type?
|
||||||
configurationCachePath = workspaceConfiguration.get<string>("configurationCachePath");
|
configurationCachePath = await util.getExpandedSetting<string>("configurationCachePath");
|
||||||
if (!configurationCachePath && extensionOutputFolder) {
|
if (!configurationCachePath && extensionOutputFolder) {
|
||||||
configurationCachePath = path.join(extensionOutputFolder, 'configurationCache.log');
|
configurationCachePath = path.join(extensionOutputFolder, 'configurationCache.log');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (configurationCachePath) {
|
if (configurationCachePath) {
|
||||||
// If there is a directory defined within the configuration cache path,
|
// If there is a directory defined within the configuration cache path,
|
||||||
// honor it and don't append to extensionOutputFolder.
|
// honor it and don't append to extensionOutputFolder.
|
||||||
|
@ -426,18 +405,16 @@ export function readConfigurationCachePath(): void {
|
||||||
} else {
|
} else {
|
||||||
configurationCachePath = util.resolvePathToRoot(configurationCachePath);
|
configurationCachePath = util.resolvePathToRoot(configurationCachePath);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
logger.message(`Configurations cached at ${configurationCachePath}`);
|
logger.message(`Configurations cached at ${configurationCachePath}`);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let compileCommandsPath: string | undefined;
|
let compileCommandsPath: string | undefined;
|
||||||
export function getCompileCommandsPath(): string | undefined { return compileCommandsPath; }
|
export function getCompileCommandsPath(): string | undefined { return compileCommandsPath; }
|
||||||
export function setCompileCommandsPath(path: string): void { compileCommandsPath = path; }
|
export function setCompileCommandsPath(path: string): void { compileCommandsPath = path; }
|
||||||
export function readCompileCommandsPath(): void {
|
export async function readCompileCommandsPath(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
compileCommandsPath = await util.getExpandedSetting<string>("compileCommandsPath");
|
||||||
|
|
||||||
compileCommandsPath = workspaceConfiguration.get<string>("compileCommandsPath");
|
|
||||||
if (compileCommandsPath) {
|
if (compileCommandsPath) {
|
||||||
compileCommandsPath = util.resolvePathToRoot(compileCommandsPath);
|
compileCommandsPath = util.resolvePathToRoot(compileCommandsPath);
|
||||||
}
|
}
|
||||||
|
@ -448,19 +425,21 @@ export function readCompileCommandsPath(): void {
|
||||||
let additionalCompilerNames: string[] | undefined;
|
let additionalCompilerNames: string[] | undefined;
|
||||||
export function getAdditionalCompilerNames(): string[] | undefined { return additionalCompilerNames; }
|
export function getAdditionalCompilerNames(): string[] | undefined { return additionalCompilerNames; }
|
||||||
export function setAdditionalCompilerNames(compilerNames: string[]): void { additionalCompilerNames = compilerNames; }
|
export function setAdditionalCompilerNames(compilerNames: string[]): void { additionalCompilerNames = compilerNames; }
|
||||||
export function readAdditionalCompilerNames(): void {
|
export async function readAdditionalCompilerNames(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
additionalCompilerNames = await util.getExpandedSetting<string[]>("additionalCompilerNames");
|
||||||
additionalCompilerNames = workspaceConfiguration.get<string[]>("additionalCompilerNames");
|
if (additionalCompilerNames && additionalCompilerNames.length > 0) {
|
||||||
logger.message(`Additional compiler names: ${additionalCompilerNames}`);
|
logger.message(`Additional compiler names: '${additionalCompilerNames?.join("', '")}'`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let excludeCompilerNames: string[] | undefined;
|
let excludeCompilerNames: string[] | undefined;
|
||||||
export function getExcludeCompilerNames(): string[] | undefined { return excludeCompilerNames; }
|
export function getExcludeCompilerNames(): string[] | undefined { return excludeCompilerNames; }
|
||||||
export function setExcludeCompilerNames(compilerNames: string[]): void { excludeCompilerNames = compilerNames; }
|
export function setExcludeCompilerNames(compilerNames: string[]): void { excludeCompilerNames = compilerNames; }
|
||||||
export function readExcludeCompilerNames(): void {
|
export async function readExcludeCompilerNames(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
excludeCompilerNames = await util.getExpandedSetting<string[]>("excludeCompilerNames");
|
||||||
excludeCompilerNames = workspaceConfiguration.get<string[]>("excludeCompilerNames");
|
if (excludeCompilerNames && excludeCompilerNames.length > 0) {
|
||||||
logger.message(`Exclude compiler names: ${excludeCompilerNames}`);
|
logger.message(`Exclude compiler names: '${excludeCompilerNames?.join("', '")}'`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let dryrunSwitches: string[] | undefined;
|
let dryrunSwitches: string[] | undefined;
|
||||||
|
@ -475,10 +454,11 @@ export function setDryrunSwitches(switches: string[]): void { dryrunSwitches = s
|
||||||
// infinite reconfiguration loops, resulting in the extension being unusable.
|
// infinite reconfiguration loops, resulting in the extension being unusable.
|
||||||
// To work around this, the setting makefile.dryrunSwitches is providing a way to skip over the problematic make arguments,
|
// To work around this, the setting makefile.dryrunSwitches is providing a way to skip over the problematic make arguments,
|
||||||
// even if this results in not ideal behavior: less information available to be parsed, which leads to incomplete IntelliSense or missing targets.
|
// even if this results in not ideal behavior: less information available to be parsed, which leads to incomplete IntelliSense or missing targets.
|
||||||
export function readDryrunSwitches(): void {
|
export async function readDryrunSwitches(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
dryrunSwitches = await util.getExpandedSetting<string[]>("dryrunSwitches");
|
||||||
dryrunSwitches = workspaceConfiguration.get<string[]>("dryrunSwitches");
|
if (dryrunSwitches && dryrunSwitches.length > 0) {
|
||||||
logger.message(`Dry-run switches: ${dryrunSwitches}`);
|
logger.message(`Dry-run switches: '${dryrunSwitches?.join("', '")}'`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Currently, the makefile extension supports debugging only an executable.
|
// Currently, the makefile extension supports debugging only an executable.
|
||||||
|
@ -505,10 +485,9 @@ let launchConfigurations: LaunchConfiguration[] = [];
|
||||||
export function getLaunchConfigurations(): LaunchConfiguration[] { return launchConfigurations; }
|
export function getLaunchConfigurations(): LaunchConfiguration[] { return launchConfigurations; }
|
||||||
export function setLaunchConfigurations(configurations: LaunchConfiguration[]): void { launchConfigurations = configurations; }
|
export function setLaunchConfigurations(configurations: LaunchConfiguration[]): void { launchConfigurations = configurations; }
|
||||||
|
|
||||||
// Read make configurations optionally defined by the user in settings: makefile.configurations.
|
// Read launch configurations defined by the user in settings: makefile.launchConfigurations[]
|
||||||
function readLaunchConfigurations(): void {
|
async function readLaunchConfigurations(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
launchConfigurations = await util.getExpandedSetting<LaunchConfiguration[]>("launchConfigurations") || [];
|
||||||
launchConfigurations = workspaceConfiguration.get<LaunchConfiguration[]>("launchConfigurations") || [];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper used to fill the launch configurations quick pick.
|
// Helper used to fill the launch configurations quick pick.
|
||||||
|
@ -550,9 +529,9 @@ export async function stringToLaunchConfiguration(str: string): Promise<LaunchCo
|
||||||
|
|
||||||
let currentLaunchConfiguration: LaunchConfiguration | undefined;
|
let currentLaunchConfiguration: LaunchConfiguration | undefined;
|
||||||
export function getCurrentLaunchConfiguration(): LaunchConfiguration | undefined { return currentLaunchConfiguration; }
|
export function getCurrentLaunchConfiguration(): LaunchConfiguration | undefined { return currentLaunchConfiguration; }
|
||||||
export async function setCurrentLaunchConfiguration(configuration: LaunchConfiguration): Promise<void> {
|
export async function setCurrentLaunchConfiguration(configuration: LaunchConfiguration | undefined): Promise<void> {
|
||||||
currentLaunchConfiguration = configuration;
|
currentLaunchConfiguration = configuration;
|
||||||
let launchConfigStr: string = launchConfigurationToString(currentLaunchConfiguration);
|
let launchConfigStr: string = currentLaunchConfiguration ? launchConfigurationToString(currentLaunchConfiguration) : "";
|
||||||
statusBar.setLaunchConfiguration(launchConfigStr);
|
statusBar.setLaunchConfiguration(launchConfigStr);
|
||||||
await extension._projectOutlineProvider.updateLaunchTarget(launchConfigStr);
|
await extension._projectOutlineProvider.updateLaunchTarget(launchConfigStr);
|
||||||
}
|
}
|
||||||
|
@ -570,7 +549,7 @@ function getLaunchConfiguration(name: string): LaunchConfiguration | undefined {
|
||||||
// in the launch configurations array from settings.
|
// in the launch configurations array from settings.
|
||||||
// Also update the status bar item.
|
// Also update the status bar item.
|
||||||
async function readCurrentLaunchConfiguration(): Promise<void> {
|
async function readCurrentLaunchConfiguration(): Promise<void> {
|
||||||
readLaunchConfigurations();
|
await readLaunchConfigurations();
|
||||||
let currentLaunchConfigurationName: string | undefined = extension.getState().launchConfiguration;
|
let currentLaunchConfigurationName: string | undefined = extension.getState().launchConfiguration;
|
||||||
if (currentLaunchConfigurationName) {
|
if (currentLaunchConfigurationName) {
|
||||||
currentLaunchConfiguration = getLaunchConfiguration(currentLaunchConfigurationName);
|
currentLaunchConfiguration = getLaunchConfiguration(currentLaunchConfigurationName);
|
||||||
|
@ -609,9 +588,8 @@ let defaultLaunchConfiguration: DefaultLaunchConfiguration | undefined;
|
||||||
export function getDefaultLaunchConfiguration(): DefaultLaunchConfiguration | undefined { return defaultLaunchConfiguration; }
|
export function getDefaultLaunchConfiguration(): DefaultLaunchConfiguration | undefined { return defaultLaunchConfiguration; }
|
||||||
// No setter needed. Currently only the user can define makefile.defaultLaunchConfiguration
|
// No setter needed. Currently only the user can define makefile.defaultLaunchConfiguration
|
||||||
|
|
||||||
export function readDefaultLaunchConfiguration(): void {
|
export async function readDefaultLaunchConfiguration(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
defaultLaunchConfiguration = await util.getExpandedSetting<DefaultLaunchConfiguration>("defaultLaunchConfiguration");
|
||||||
defaultLaunchConfiguration = workspaceConfiguration.get<DefaultLaunchConfiguration>("defaultLaunchConfiguration");
|
|
||||||
logger.message(`Default launch configuration: MIMode = ${defaultLaunchConfiguration?.MIMode},
|
logger.message(`Default launch configuration: MIMode = ${defaultLaunchConfiguration?.MIMode},
|
||||||
miDebuggerPath = ${defaultLaunchConfiguration?.miDebuggerPath},
|
miDebuggerPath = ${defaultLaunchConfiguration?.miDebuggerPath},
|
||||||
stopAtEntry = ${defaultLaunchConfiguration?.stopAtEntry},
|
stopAtEntry = ${defaultLaunchConfiguration?.stopAtEntry},
|
||||||
|
@ -697,7 +675,7 @@ export async function getCommandForConfiguration(configuration: string | undefin
|
||||||
if (configurationMakefile) {
|
if (configurationMakefile) {
|
||||||
// check if the makefile path is a directory. If so, try adding `Makefile` or `makefile`
|
// check if the makefile path is a directory. If so, try adding `Makefile` or `makefile`
|
||||||
if (util.checkDirectoryExistsSync(configurationMakefile)) {
|
if (util.checkDirectoryExistsSync(configurationMakefile)) {
|
||||||
let makeFileTest = path.join(configurationMakefile, "Makefile");
|
let makeFileTest: string = path.join(configurationMakefile, "Makefile");
|
||||||
if (!util.checkFileExistsSync(makeFileTest)) {
|
if (!util.checkFileExistsSync(makeFileTest)) {
|
||||||
makeFileTest = path.join(configurationMakefile, "makefile");
|
makeFileTest = path.join(configurationMakefile, "makefile");
|
||||||
}
|
}
|
||||||
|
@ -865,7 +843,9 @@ export function getMakefileConfigurations(): MakefileConfiguration[] { return ma
|
||||||
export function setMakefileConfigurations(configurations: MakefileConfiguration[]): void { makefileConfigurations = configurations; }
|
export function setMakefileConfigurations(configurations: MakefileConfiguration[]): void { makefileConfigurations = configurations; }
|
||||||
|
|
||||||
// Read make configurations optionally defined by the user in settings: makefile.configurations.
|
// Read make configurations optionally defined by the user in settings: makefile.configurations.
|
||||||
async function readMakefileConfigurations(): Promise<void> {
|
export async function readMakefileConfigurations(): Promise<void> {
|
||||||
|
// We need to read "makefile.configurations" unexpanded first, because we may write back into these settings
|
||||||
|
// in case we indentify "name" missing. We'll expand later, see end of function.
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
||||||
makefileConfigurations = workspaceConfiguration.get<MakefileConfiguration[]>("configurations") || [];
|
makefileConfigurations = workspaceConfiguration.get<MakefileConfiguration[]>("configurations") || [];
|
||||||
let detectedUnnamedConfigurations: boolean = false;
|
let detectedUnnamedConfigurations: boolean = false;
|
||||||
|
@ -899,20 +879,22 @@ async function readMakefileConfigurations(): Promise<void> {
|
||||||
|
|
||||||
if (detectedUnnamedConfigurations) {
|
if (detectedUnnamedConfigurations) {
|
||||||
logger.message("Updating makefile configurations in settings.");
|
logger.message("Updating makefile configurations in settings.");
|
||||||
workspaceConfiguration.update("configurations", makefileConfigurations);
|
await workspaceConfiguration.update("configurations", makefileConfigurations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Now read "makefile.configurations" again and expand as needed.
|
||||||
|
makefileConfigurations = await util.getExpandedSetting<MakefileConfiguration[]>("configurations") || [];
|
||||||
|
|
||||||
// Log the updated list of configuration names
|
// Log the updated list of configuration names
|
||||||
const makefileConfigurationNames: string[] = makefileConfigurations.map((k => {
|
const makefileConfigurationNames: string[] = makefileConfigurations.map((k => {
|
||||||
return k.name;
|
return k.name;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (makefileConfigurationNames.length > 0) {
|
if (makefileConfigurationNames.length > 0) {
|
||||||
logger.message("Found the following configurations defined in makefile.configurations setting: " +
|
logger.message("Found the following configurations defined in makefile.configurations setting: " + makefileConfigurationNames.join(";"));
|
||||||
makefileConfigurationNames.join(";"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify if the current makefile configuration is still part of the list and unset otherwise.
|
// Verify if the current makefile configuration (check against the expanded values)
|
||||||
|
// is still part of the list and unset otherwise.
|
||||||
// Exception: "Default" which means the user didn't set it and relies on whatever default
|
// Exception: "Default" which means the user didn't set it and relies on whatever default
|
||||||
// the current set of makefiles support. "Default" is not going to be part of the list
|
// the current set of makefiles support. "Default" is not going to be part of the list
|
||||||
// but we shouldn't log about it.
|
// but we shouldn't log about it.
|
||||||
|
@ -949,67 +931,60 @@ function readCurrentTarget(): void {
|
||||||
let configureOnOpen: boolean | undefined;
|
let configureOnOpen: boolean | undefined;
|
||||||
export function getConfigureOnOpen(): boolean | undefined { return configureOnOpen; }
|
export function getConfigureOnOpen(): boolean | undefined { return configureOnOpen; }
|
||||||
export function setConfigureOnOpen(configure: boolean): void { configureOnOpen = configure; }
|
export function setConfigureOnOpen(configure: boolean): void { configureOnOpen = configure; }
|
||||||
export function readConfigureOnOpen(): void {
|
export async function readConfigureOnOpen(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
|
||||||
// how to get default from package.json to avoid problem with 'undefined' type?
|
// how to get default from package.json to avoid problem with 'undefined' type?
|
||||||
configureOnOpen = workspaceConfiguration.get<boolean>("configureOnOpen");
|
configureOnOpen = await util.getExpandedSetting<boolean>("configureOnOpen");
|
||||||
logger.message(`Configure on open: ${configureOnOpen}`);
|
logger.message(`Configure on open: ${configureOnOpen}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
let configureOnEdit: boolean | undefined;
|
let configureOnEdit: boolean | undefined;
|
||||||
export function getConfigureOnEdit(): boolean | undefined { return configureOnEdit; }
|
export function getConfigureOnEdit(): boolean | undefined { return configureOnEdit; }
|
||||||
export function setConfigureOnEdit(configure: boolean): void { configureOnEdit = configure; }
|
export function setConfigureOnEdit(configure: boolean): void { configureOnEdit = configure; }
|
||||||
export function readConfigureOnEdit(): void {
|
export async function readConfigureOnEdit(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
|
||||||
// how to get default from package.json to avoid problem with 'undefined' type?
|
// how to get default from package.json to avoid problem with 'undefined' type?
|
||||||
configureOnEdit = workspaceConfiguration.get<boolean>("configureOnEdit");
|
configureOnEdit = await util.getExpandedSetting<boolean>("configureOnEdit");
|
||||||
logger.message(`Configure on edit: ${configureOnEdit}`);
|
logger.message(`Configure on edit: ${configureOnEdit}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
let configureAfterCommand: boolean | undefined;
|
let configureAfterCommand: boolean | undefined;
|
||||||
export function getConfigureAfterCommand(): boolean | undefined { return configureAfterCommand; }
|
export function getConfigureAfterCommand(): boolean | undefined { return configureAfterCommand; }
|
||||||
export function setConfigureAfterCommand(configure: boolean): void { configureAfterCommand = configure; }
|
export function setConfigureAfterCommand(configure: boolean): void { configureAfterCommand = configure; }
|
||||||
export function readConfigureAfterCommand(): void {
|
export async function readConfigureAfterCommand(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
|
||||||
// how to get default from package.json to avoid problem with 'undefined' type?
|
// how to get default from package.json to avoid problem with 'undefined' type?
|
||||||
configureAfterCommand = workspaceConfiguration.get<boolean>("configureAfterCommand");
|
configureAfterCommand = await util.getExpandedSetting<boolean>("configureAfterCommand");
|
||||||
logger.message(`Configure after command: ${configureAfterCommand}`);
|
logger.message(`Configure after command: ${configureAfterCommand}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
let phonyOnlyTargets: boolean | undefined;
|
let phonyOnlyTargets: boolean | undefined;
|
||||||
export function getPhonyOnlyTargets(): boolean | undefined { return phonyOnlyTargets; }
|
export function getPhonyOnlyTargets(): boolean | undefined { return phonyOnlyTargets; }
|
||||||
export function setPhonyOnlyTargets(phony: boolean): void { phonyOnlyTargets = phony; }
|
export function setPhonyOnlyTargets(phony: boolean): void { phonyOnlyTargets = phony; }
|
||||||
export function readPhonyOnlyTargets(): void {
|
export async function readPhonyOnlyTargets(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
|
||||||
// how to get default from package.json to avoid problem with 'undefined' type?
|
// how to get default from package.json to avoid problem with 'undefined' type?
|
||||||
phonyOnlyTargets = workspaceConfiguration.get<boolean>("phonyOnlyTargets");
|
phonyOnlyTargets = await util.getExpandedSetting<boolean>("phonyOnlyTargets");
|
||||||
logger.message(`Only .PHONY targets: ${phonyOnlyTargets}`);
|
logger.message(`Only .PHONY targets: ${phonyOnlyTargets}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
let saveBeforeBuildOrConfigure: boolean | undefined;
|
let saveBeforeBuildOrConfigure: boolean | undefined;
|
||||||
export function getSaveBeforeBuildOrConfigure(): boolean | undefined { return saveBeforeBuildOrConfigure; }
|
export function getSaveBeforeBuildOrConfigure(): boolean | undefined { return saveBeforeBuildOrConfigure; }
|
||||||
export function setSaveBeforeBuildOrConfigure(save: boolean): void { saveBeforeBuildOrConfigure = save; }
|
export function setSaveBeforeBuildOrConfigure(save: boolean): void { saveBeforeBuildOrConfigure = save; }
|
||||||
export function readSaveBeforeBuildOrConfigure(): void {
|
export async function readSaveBeforeBuildOrConfigure(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
saveBeforeBuildOrConfigure = await util.getExpandedSetting<boolean>("saveBeforeBuildOrConfigure");
|
||||||
saveBeforeBuildOrConfigure = workspaceConfiguration.get<boolean>("saveBeforeBuildOrConfigure");
|
|
||||||
logger.message(`Save before build or configure: ${saveBeforeBuildOrConfigure}`);
|
logger.message(`Save before build or configure: ${saveBeforeBuildOrConfigure}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
let buildBeforeLaunch: boolean | undefined;
|
let buildBeforeLaunch: boolean | undefined;
|
||||||
export function getBuildBeforeLaunch(): boolean | undefined { return buildBeforeLaunch; }
|
export function getBuildBeforeLaunch(): boolean | undefined { return buildBeforeLaunch; }
|
||||||
export function setBuildBeforeLaunch(build: boolean): void { buildBeforeLaunch = build; }
|
export function setBuildBeforeLaunch(build: boolean): void { buildBeforeLaunch = build; }
|
||||||
export function readBuildBeforeLaunch(): void {
|
export async function readBuildBeforeLaunch(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
buildBeforeLaunch = await util.getExpandedSetting<boolean>("buildBeforeLaunch");
|
||||||
buildBeforeLaunch = workspaceConfiguration.get<boolean>("buildBeforeLaunch");
|
|
||||||
logger.message(`Build before launch: ${buildBeforeLaunch}`);
|
logger.message(`Build before launch: ${buildBeforeLaunch}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
let clearOutputBeforeBuild: boolean | undefined;
|
let clearOutputBeforeBuild: boolean | undefined;
|
||||||
export function getClearOutputBeforeBuild(): boolean | undefined { return clearOutputBeforeBuild; }
|
export function getClearOutputBeforeBuild(): boolean | undefined { return clearOutputBeforeBuild; }
|
||||||
export function setClearOutputBeforeBuild(clear: boolean): void { clearOutputBeforeBuild = clear; }
|
export function setClearOutputBeforeBuild(clear: boolean): void { clearOutputBeforeBuild = clear; }
|
||||||
export function readClearOutputBeforeBuild(): void {
|
export async function readClearOutputBeforeBuild(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
clearOutputBeforeBuild = await util.getExpandedSetting<boolean>("clearOutputBeforeBuild");
|
||||||
clearOutputBeforeBuild = workspaceConfiguration.get<boolean>("clearOutputBeforeBuild");
|
|
||||||
logger.message(`Clear output before build: ${clearOutputBeforeBuild}`);
|
logger.message(`Clear output before build: ${clearOutputBeforeBuild}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1022,41 +997,70 @@ export function readClearOutputBeforeBuild(): void {
|
||||||
let ignoreDirectoryCommands: boolean | undefined;
|
let ignoreDirectoryCommands: boolean | undefined;
|
||||||
export function getIgnoreDirectoryCommands(): boolean | undefined { return ignoreDirectoryCommands; }
|
export function getIgnoreDirectoryCommands(): boolean | undefined { return ignoreDirectoryCommands; }
|
||||||
export function setIgnoreDirectoryCommands(ignore: boolean): void { ignoreDirectoryCommands = ignore; }
|
export function setIgnoreDirectoryCommands(ignore: boolean): void { ignoreDirectoryCommands = ignore; }
|
||||||
export function readIgnoreDirectoryCommands(): void {
|
export async function readIgnoreDirectoryCommands(): Promise<void> {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
|
||||||
// how to get default from package.json to avoid problem with 'undefined' type?
|
// how to get default from package.json to avoid problem with 'undefined' type?
|
||||||
ignoreDirectoryCommands = workspaceConfiguration.get<boolean>("ignoreDirectoryCommands");
|
ignoreDirectoryCommands = await util.getExpandedSetting<boolean>("ignoreDirectoryCommands");
|
||||||
logger.message(`Ignore directory commands: ${ignoreDirectoryCommands}`);
|
logger.message(`Ignore directory commands: ${ignoreDirectoryCommands}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialization from settings (or backup default rules), done at activation time
|
// Initialization from the state of the workspace.
|
||||||
export async function initFromStateAndSettings(): Promise<void> {
|
// The user does not have direct access to this data.
|
||||||
readConfigurationCachePath();
|
// The extension sets state variables via user actions like:
|
||||||
readMakePath();
|
// set configuration, set build target, set launch target.
|
||||||
readMakefilePath();
|
// At activation time we read from state, update UI accordingly
|
||||||
readMakeDirectory();
|
// and commands become available to be run in settings via expansion.
|
||||||
readBuildLog();
|
// These can also be resetted via the makefile.resetState command.
|
||||||
readPreConfigureScript();
|
export function initFromState(): void {
|
||||||
readAlwaysPreConfigure();
|
|
||||||
readDryrunSwitches();
|
|
||||||
readAdditionalCompilerNames();
|
|
||||||
readExcludeCompilerNames();
|
|
||||||
readCurrentMakefileConfiguration();
|
readCurrentMakefileConfiguration();
|
||||||
await readMakefileConfigurations();
|
|
||||||
readCurrentTarget();
|
readCurrentTarget();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialization from settings (or backup default rules).
|
||||||
|
// This is called at activation time (with activation boolean being passed as true explicitly)
|
||||||
|
// or after any change in the configuration/build-target workspace state variables, in which case
|
||||||
|
// we need a refresh of all settings expanding ${configuration} or ${buildTarget}.
|
||||||
|
export async function initFromSettings(activation: boolean = false): Promise<void> {
|
||||||
|
// Read first anything related to the output folder and the extension log,
|
||||||
|
// to be able to document any upcoming reads.
|
||||||
|
await readExtensionOutputFolder();
|
||||||
|
await readExtensionLog();
|
||||||
|
|
||||||
|
// Delete the extension log file, if exists, even if we lose what we logged earlier
|
||||||
|
// about reading the output folder and extension log.
|
||||||
|
// The deletion should happen only at activation time (to not allow the log file to grow indefinitely),
|
||||||
|
// while reading the settings is done at activation time and also anytime later,
|
||||||
|
// after changing a makefile configuration, a build or a launch target.
|
||||||
|
let extensionLog : string | undefined = getExtensionLog();
|
||||||
|
if (extensionLog && activation && util.checkFileExistsSync(extensionLog)) {
|
||||||
|
util.deleteFileSync(extensionLog);
|
||||||
|
}
|
||||||
|
|
||||||
|
await readLoggingLevel();
|
||||||
|
await readConfigurationCachePath();
|
||||||
|
await readMakePath();
|
||||||
|
await readMakefilePath();
|
||||||
|
await readMakeDirectory();
|
||||||
|
await readBuildLog();
|
||||||
|
await readPreConfigureScript();
|
||||||
|
await readAlwaysPreConfigure();
|
||||||
|
await readDryrunSwitches();
|
||||||
|
await readAdditionalCompilerNames();
|
||||||
|
await readExcludeCompilerNames();
|
||||||
|
await readMakefileConfigurations();
|
||||||
await readCurrentLaunchConfiguration();
|
await readCurrentLaunchConfiguration();
|
||||||
readDefaultLaunchConfiguration();
|
await readDefaultLaunchConfiguration();
|
||||||
readConfigureOnOpen();
|
await readConfigureOnOpen();
|
||||||
readConfigureOnEdit();
|
await readConfigureOnEdit();
|
||||||
readConfigureAfterCommand();
|
await readConfigureAfterCommand();
|
||||||
readPhonyOnlyTargets();
|
await readPhonyOnlyTargets();
|
||||||
readSaveBeforeBuildOrConfigure();
|
await readSaveBeforeBuildOrConfigure();
|
||||||
readBuildBeforeLaunch();
|
await readBuildBeforeLaunch();
|
||||||
readClearOutputBeforeBuild();
|
await readClearOutputBeforeBuild();
|
||||||
readIgnoreDirectoryCommands();
|
await readIgnoreDirectoryCommands();
|
||||||
readCompileCommandsPath();
|
await readCompileCommandsPath();
|
||||||
|
|
||||||
initOptionalFeatures();
|
initOptionalFeatures();
|
||||||
readFeaturesVisibility();
|
await readFeaturesVisibility();
|
||||||
|
|
||||||
await analyzeConfigureParams();
|
await analyzeConfigureParams();
|
||||||
|
|
||||||
|
@ -1133,11 +1137,10 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
// Avoid unnecessary updates (for example, when settings are modified via the extension quickPick).
|
// Avoid unnecessary updates (for example, when settings are modified via the extension quickPick).
|
||||||
let telemetryProperties: telemetry.Properties | null = {};
|
let telemetryProperties: telemetry.Properties | null = {};
|
||||||
let updatedSettingsSubkeys: string[] = [];
|
let updatedSettingsSubkeys: string[] = [];
|
||||||
let keyRoot: string = "makefile";
|
const keyRoot: string = "makefile";
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration(keyRoot);
|
|
||||||
|
|
||||||
let subKey: string = "launchConfigurations";
|
let subKey: string = "launchConfigurations";
|
||||||
let updatedLaunchConfigurations : LaunchConfiguration[] | undefined = workspaceConfiguration.get<LaunchConfiguration[]>(subKey);
|
|
||||||
|
let updatedLaunchConfigurations : LaunchConfiguration[] | undefined = await util.getExpandedSetting<LaunchConfiguration[]>(subKey);
|
||||||
if (!util.areEqual(updatedLaunchConfigurations, launchConfigurations)) {
|
if (!util.areEqual(updatedLaunchConfigurations, launchConfigurations)) {
|
||||||
// Changing a launch configuration does not impact the make or compiler tools invocations,
|
// Changing a launch configuration does not impact the make or compiler tools invocations,
|
||||||
// so no IntelliSense update is needed.
|
// so no IntelliSense update is needed.
|
||||||
|
@ -1147,23 +1150,23 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "defaultLaunchConfiguration";
|
subKey = "defaultLaunchConfiguration";
|
||||||
let updatedDefaultLaunchConfiguration : DefaultLaunchConfiguration | undefined = workspaceConfiguration.get<DefaultLaunchConfiguration>(subKey);
|
let updatedDefaultLaunchConfiguration : DefaultLaunchConfiguration | undefined = await util.getExpandedSetting<DefaultLaunchConfiguration>(subKey);
|
||||||
if (!util.areEqual(updatedDefaultLaunchConfiguration, defaultLaunchConfiguration)) {
|
if (!util.areEqual(updatedDefaultLaunchConfiguration, defaultLaunchConfiguration)) {
|
||||||
// Changing a global debug configuration does not impact the make or compiler tools invocations,
|
// Changing a global debug configuration does not impact the make or compiler tools invocations,
|
||||||
// so no IntelliSense update is needed.
|
// so no IntelliSense update is needed.
|
||||||
readDefaultLaunchConfiguration();
|
await readDefaultLaunchConfiguration();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "loggingLevel";
|
subKey = "loggingLevel";
|
||||||
let updatedLoggingLevel : string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedLoggingLevel : string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedLoggingLevel !== loggingLevel) {
|
if (updatedLoggingLevel !== loggingLevel) {
|
||||||
readLoggingLevel();
|
await readLoggingLevel();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "buildLog";
|
subKey = "buildLog";
|
||||||
let updatedBuildLog : string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedBuildLog : string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedBuildLog) {
|
if (updatedBuildLog) {
|
||||||
updatedBuildLog = util.resolvePathToRoot(updatedBuildLog);
|
updatedBuildLog = util.resolvePathToRoot(updatedBuildLog);
|
||||||
}
|
}
|
||||||
|
@ -1179,12 +1182,12 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
|
|
||||||
extension.getState().configureDirty = extension.getState().configureDirty ||
|
extension.getState().configureDirty = extension.getState().configureDirty ||
|
||||||
!currentMakefileConfiguration || !currentMakefileConfiguration.buildLog;
|
!currentMakefileConfiguration || !currentMakefileConfiguration.buildLog;
|
||||||
readBuildLog();
|
await readBuildLog();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "extensionOutputFolder";
|
subKey = "extensionOutputFolder";
|
||||||
let updatedExtensionOutputFolder : string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedExtensionOutputFolder : string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedExtensionOutputFolder) {
|
if (updatedExtensionOutputFolder) {
|
||||||
updatedExtensionOutputFolder = util.resolvePathToRoot(updatedExtensionOutputFolder);
|
updatedExtensionOutputFolder = util.resolvePathToRoot(updatedExtensionOutputFolder);
|
||||||
if (!util.checkDirectoryExistsSync(updatedExtensionOutputFolder) &&
|
if (!util.checkDirectoryExistsSync(updatedExtensionOutputFolder) &&
|
||||||
|
@ -1196,12 +1199,12 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
}
|
}
|
||||||
if (updatedExtensionOutputFolder !== extensionOutputFolder) {
|
if (updatedExtensionOutputFolder !== extensionOutputFolder) {
|
||||||
// No IntelliSense update needed.
|
// No IntelliSense update needed.
|
||||||
readExtensionOutputFolder();
|
await readExtensionOutputFolder();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "extensionLog";
|
subKey = "extensionLog";
|
||||||
let updatedExtensionLog : string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedExtensionLog : string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedExtensionLog) {
|
if (updatedExtensionLog) {
|
||||||
// If there is a directory defined within the extension log path,
|
// If there is a directory defined within the extension log path,
|
||||||
// honor it and don't append to extensionOutputFolder.
|
// honor it and don't append to extensionOutputFolder.
|
||||||
|
@ -1214,31 +1217,31 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
}
|
}
|
||||||
if (updatedExtensionLog !== extensionLog) {
|
if (updatedExtensionLog !== extensionLog) {
|
||||||
// No IntelliSense update needed.
|
// No IntelliSense update needed.
|
||||||
readExtensionLog();
|
await readExtensionLog();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "preConfigureScript";
|
subKey = "preConfigureScript";
|
||||||
let updatedPreConfigureScript : string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedPreConfigureScript : string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedPreConfigureScript) {
|
if (updatedPreConfigureScript) {
|
||||||
updatedPreConfigureScript = util.resolvePathToRoot(updatedPreConfigureScript);
|
updatedPreConfigureScript = util.resolvePathToRoot(updatedPreConfigureScript);
|
||||||
}
|
}
|
||||||
if (updatedPreConfigureScript !== preConfigureScript) {
|
if (updatedPreConfigureScript !== preConfigureScript) {
|
||||||
// No IntelliSense update needed.
|
// No IntelliSense update needed.
|
||||||
readPreConfigureScript();
|
await readPreConfigureScript();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "alwaysPreConfigure";
|
subKey = "alwaysPreConfigure";
|
||||||
let updatedAlwaysPreConfigure : boolean | undefined = workspaceConfiguration.get<boolean>(subKey);
|
let updatedAlwaysPreConfigure : boolean | undefined = await util.getExpandedSetting<boolean>(subKey);
|
||||||
if (updatedAlwaysPreConfigure !== alwaysPreConfigure) {
|
if (updatedAlwaysPreConfigure !== alwaysPreConfigure) {
|
||||||
// No IntelliSense update needed.
|
// No IntelliSense update needed.
|
||||||
readAlwaysPreConfigure();
|
await readAlwaysPreConfigure();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "configurationCachePath";
|
subKey = "configurationCachePath";
|
||||||
let updatedConfigurationCachePath : string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedConfigurationCachePath : string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedConfigurationCachePath) {
|
if (updatedConfigurationCachePath) {
|
||||||
// If there is a directory defined within the configuration cache path,
|
// If there is a directory defined within the configuration cache path,
|
||||||
// honor it and don't append to extensionOutputFolder.
|
// honor it and don't append to extensionOutputFolder.
|
||||||
|
@ -1254,24 +1257,24 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
// only if the extension is not currently reading from a build log.
|
// only if the extension is not currently reading from a build log.
|
||||||
extension.getState().configureDirty = extension.getState().configureDirty ||
|
extension.getState().configureDirty = extension.getState().configureDirty ||
|
||||||
!buildLog || !util.checkFileExistsSync(buildLog);
|
!buildLog || !util.checkFileExistsSync(buildLog);
|
||||||
readConfigurationCachePath();
|
await readConfigurationCachePath();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "makePath";
|
subKey = "makePath";
|
||||||
let updatedMakePath : string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedMakePath : string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedMakePath !== makePath) {
|
if (updatedMakePath !== makePath) {
|
||||||
// Not very likely, but it is safe to consider that a different make tool
|
// Not very likely, but it is safe to consider that a different make tool
|
||||||
// may produce a different dry-run output with potential impact on IntelliSense,
|
// may produce a different dry-run output with potential impact on IntelliSense,
|
||||||
// so trigger an update (unless we read from a build log).
|
// so trigger an update (unless we read from a build log).
|
||||||
extension.getState().configureDirty = extension.getState().configureDirty ||
|
extension.getState().configureDirty = extension.getState().configureDirty ||
|
||||||
!buildLog || !util.checkFileExistsSync(buildLog);
|
!buildLog || !util.checkFileExistsSync(buildLog);
|
||||||
readMakePath();
|
await readMakePath();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "makefilePath";
|
subKey = "makefilePath";
|
||||||
let updatedMakefilePath : string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedMakefilePath : string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedMakefilePath) {
|
if (updatedMakefilePath) {
|
||||||
updatedMakefilePath = util.resolvePathToRoot(updatedMakefilePath);
|
updatedMakefilePath = util.resolvePathToRoot(updatedMakefilePath);
|
||||||
}
|
}
|
||||||
|
@ -1280,12 +1283,12 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
// only if the extension is not currently reading from a build log.
|
// only if the extension is not currently reading from a build log.
|
||||||
extension.getState().configureDirty = extension.getState().configureDirty ||
|
extension.getState().configureDirty = extension.getState().configureDirty ||
|
||||||
!buildLog || !util.checkFileExistsSync(buildLog);
|
!buildLog || !util.checkFileExistsSync(buildLog);
|
||||||
readMakefilePath();
|
await readMakefilePath();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "makeDirectory";
|
subKey = "makeDirectory";
|
||||||
let updatedMakeDirectory : string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedMakeDirectory : string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedMakeDirectory) {
|
if (updatedMakeDirectory) {
|
||||||
updatedMakeDirectory = util.resolvePathToRoot(updatedMakeDirectory);
|
updatedMakeDirectory = util.resolvePathToRoot(updatedMakeDirectory);
|
||||||
}
|
}
|
||||||
|
@ -1294,12 +1297,12 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
// only if the extension is not currently reading from a build log.
|
// only if the extension is not currently reading from a build log.
|
||||||
extension.getState().configureDirty = extension.getState().configureDirty ||
|
extension.getState().configureDirty = extension.getState().configureDirty ||
|
||||||
!buildLog || !util.checkFileExistsSync(buildLog);
|
!buildLog || !util.checkFileExistsSync(buildLog);
|
||||||
readMakeDirectory();
|
await readMakeDirectory();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "configurations";
|
subKey = "configurations";
|
||||||
let updatedMakefileConfigurations : MakefileConfiguration[] | undefined = workspaceConfiguration.get<MakefileConfiguration[]>(subKey);
|
let updatedMakefileConfigurations : MakefileConfiguration[] | undefined = await util.getExpandedSetting<MakefileConfiguration[]>(subKey);
|
||||||
if (!util.areEqual(updatedMakefileConfigurations, makefileConfigurations)) {
|
if (!util.areEqual(updatedMakefileConfigurations, makefileConfigurations)) {
|
||||||
// todo: skip over updating the IntelliSense configuration provider if the current makefile configuration
|
// todo: skip over updating the IntelliSense configuration provider if the current makefile configuration
|
||||||
// is not among the subobjects that suffered modifications.
|
// is not among the subobjects that suffered modifications.
|
||||||
|
@ -1309,105 +1312,104 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "dryrunSwitches";
|
subKey = "dryrunSwitches";
|
||||||
let updatedDryrunSwitches : string[] | undefined = workspaceConfiguration.get<string[]>(subKey);
|
let updatedDryrunSwitches : string[] | undefined = await util.getExpandedSetting<string[]>(subKey);
|
||||||
if (!util.areEqual(updatedDryrunSwitches, dryrunSwitches)) {
|
if (!util.areEqual(updatedDryrunSwitches, dryrunSwitches)) {
|
||||||
// A change in makefile.dryrunSwitches should trigger an IntelliSense update
|
// A change in makefile.dryrunSwitches should trigger an IntelliSense update
|
||||||
// only if the extension is not currently reading from a build log.
|
// only if the extension is not currently reading from a build log.
|
||||||
extension.getState().configureDirty = extension.getState().configureDirty ||
|
extension.getState().configureDirty = extension.getState().configureDirty ||
|
||||||
!buildLog || !util.checkFileExistsSync(buildLog);
|
!buildLog || !util.checkFileExistsSync(buildLog);
|
||||||
readDryrunSwitches();
|
await readDryrunSwitches();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "additionalCompilerNames";
|
subKey = "additionalCompilerNames";
|
||||||
let updatedAdditionalCompilerNames : string[] | undefined = workspaceConfiguration.get<string[]>(subKey);
|
let updatedAdditionalCompilerNames : string[] | undefined = await util.getExpandedSetting<string[]>(subKey);
|
||||||
if (!util.areEqual(updatedAdditionalCompilerNames, additionalCompilerNames)) {
|
if (!util.areEqual(updatedAdditionalCompilerNames, additionalCompilerNames)) {
|
||||||
readAdditionalCompilerNames();
|
await readAdditionalCompilerNames();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "excludeCompilerNames";
|
subKey = "excludeCompilerNames";
|
||||||
let updatedExcludeCompilerNames : string[] | undefined = workspaceConfiguration.get<string[]>(subKey);
|
let updatedExcludeCompilerNames : string[] | undefined = await util.getExpandedSetting<string[]>(subKey);
|
||||||
if (!util.areEqual(updatedExcludeCompilerNames, excludeCompilerNames)) {
|
if (!util.areEqual(updatedExcludeCompilerNames, excludeCompilerNames)) {
|
||||||
readExcludeCompilerNames();
|
await readExcludeCompilerNames();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "configureOnOpen";
|
subKey = "configureOnOpen";
|
||||||
let updatedConfigureOnOpen : boolean | undefined = workspaceConfiguration.get<boolean>(subKey);
|
let updatedConfigureOnOpen : boolean | undefined = await util.getExpandedSetting<boolean>(subKey);
|
||||||
if (updatedConfigureOnOpen !== configureOnOpen) {
|
if (updatedConfigureOnOpen !== configureOnOpen) {
|
||||||
readConfigureOnOpen();
|
await readConfigureOnOpen();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "configureOnEdit";
|
subKey = "configureOnEdit";
|
||||||
let updatedConfigureOnEdit : boolean | undefined = workspaceConfiguration.get<boolean>(subKey);
|
let updatedConfigureOnEdit : boolean | undefined = await util.getExpandedSetting<boolean>(subKey);
|
||||||
if (updatedConfigureOnEdit !== configureOnEdit) {
|
if (updatedConfigureOnEdit !== configureOnEdit) {
|
||||||
readConfigureOnEdit();
|
await readConfigureOnEdit();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "configureAfterCommand";
|
subKey = "configureAfterCommand";
|
||||||
let updatedConfigureAfterCommand : boolean | undefined = workspaceConfiguration.get<boolean>(subKey);
|
let updatedConfigureAfterCommand : boolean | undefined = await util.getExpandedSetting<boolean>(subKey);
|
||||||
if (updatedConfigureAfterCommand !== configureAfterCommand) {
|
if (updatedConfigureAfterCommand !== configureAfterCommand) {
|
||||||
readConfigureAfterCommand();
|
await readConfigureAfterCommand();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "phonyOnlyTargets";
|
subKey = "phonyOnlyTargets";
|
||||||
let updatedPhonyOnlyTargets : boolean | undefined = workspaceConfiguration.get<boolean>(subKey);
|
let updatedPhonyOnlyTargets : boolean | undefined = await util.getExpandedSetting<boolean>(subKey);
|
||||||
if (updatedPhonyOnlyTargets !== phonyOnlyTargets) {
|
if (updatedPhonyOnlyTargets !== phonyOnlyTargets) {
|
||||||
readPhonyOnlyTargets();
|
await readPhonyOnlyTargets();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "saveBeforeBuildOrConfigure";
|
subKey = "saveBeforeBuildOrConfigure";
|
||||||
let updatedSaveBeforeBuildOrConfigure : boolean | undefined = workspaceConfiguration.get<boolean>(subKey);
|
let updatedSaveBeforeBuildOrConfigure : boolean | undefined = await util.getExpandedSetting<boolean>(subKey);
|
||||||
if (updatedSaveBeforeBuildOrConfigure !== saveBeforeBuildOrConfigure) {
|
if (updatedSaveBeforeBuildOrConfigure !== saveBeforeBuildOrConfigure) {
|
||||||
readSaveBeforeBuildOrConfigure();
|
await readSaveBeforeBuildOrConfigure();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "buildBeforeLaunch";
|
subKey = "buildBeforeLaunch";
|
||||||
let updatedBuildBeforeLaunch : boolean | undefined = workspaceConfiguration.get<boolean>(subKey);
|
let updatedBuildBeforeLaunch : boolean | undefined = await util.getExpandedSetting<boolean>(subKey);
|
||||||
if (updatedBuildBeforeLaunch !== buildBeforeLaunch) {
|
if (updatedBuildBeforeLaunch !== buildBeforeLaunch) {
|
||||||
readBuildBeforeLaunch();
|
await readBuildBeforeLaunch();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "clearOutputBeforeBuild";
|
subKey = "clearOutputBeforeBuild";
|
||||||
let updatedClearOutputBeforeBuild : boolean | undefined = workspaceConfiguration.get<boolean>(subKey);
|
let updatedClearOutputBeforeBuild : boolean | undefined = await util.getExpandedSetting<boolean>(subKey);
|
||||||
if (updatedClearOutputBeforeBuild !== clearOutputBeforeBuild) {
|
if (updatedClearOutputBeforeBuild !== clearOutputBeforeBuild) {
|
||||||
readClearOutputBeforeBuild();
|
await readClearOutputBeforeBuild();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "ignoreDirectoryCommands";
|
subKey = "ignoreDirectoryCommands";
|
||||||
let updatedIgnoreDirectoryCommands : boolean | undefined = workspaceConfiguration.get<boolean>(subKey);
|
let updatedIgnoreDirectoryCommands : boolean | undefined = await util.getExpandedSetting<boolean>(subKey);
|
||||||
if (updatedIgnoreDirectoryCommands !== ignoreDirectoryCommands) {
|
if (updatedIgnoreDirectoryCommands !== ignoreDirectoryCommands) {
|
||||||
readIgnoreDirectoryCommands();
|
await readIgnoreDirectoryCommands();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "compileCommandsPath";
|
subKey = "compileCommandsPath";
|
||||||
let updatedCompileCommandsPath: string | undefined = workspaceConfiguration.get<string>(subKey);
|
let updatedCompileCommandsPath: string | undefined = await util.getExpandedSetting<string>(subKey);
|
||||||
if (updatedCompileCommandsPath) {
|
if (updatedCompileCommandsPath) {
|
||||||
updatedCompileCommandsPath = util.resolvePathToRoot(updatedCompileCommandsPath);
|
updatedCompileCommandsPath = util.resolvePathToRoot(updatedCompileCommandsPath);
|
||||||
}
|
}
|
||||||
if (updatedCompileCommandsPath !== compileCommandsPath) {
|
if (updatedCompileCommandsPath !== compileCommandsPath) {
|
||||||
readCompileCommandsPath();
|
await readCompileCommandsPath();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
subKey = "panel.visibility";
|
subKey = "panel.visibility";
|
||||||
let wasLocalDebugEnabled: boolean = isOptionalFeatureEnabled("debug");
|
let wasLocalDebugEnabled: boolean = isOptionalFeatureEnabled("debug");
|
||||||
let wasLocalRunningEnabled: boolean = isOptionalFeatureEnabled("run");
|
let wasLocalRunningEnabled: boolean = isOptionalFeatureEnabled("run");
|
||||||
readFeaturesVisibility();
|
await readFeaturesVisibility();
|
||||||
enableOptionallyVisibleCommands();
|
enableOptionallyVisibleCommands();
|
||||||
let isLocalDebugEnabled: boolean = isOptionalFeatureEnabled("debug");
|
let isLocalDebugEnabled: boolean = isOptionalFeatureEnabled("debug");
|
||||||
let isLocalRunningEnabled: boolean = isOptionalFeatureEnabled("run");
|
let isLocalRunningEnabled: boolean = isOptionalFeatureEnabled("run");
|
||||||
if ((wasLocalDebugEnabled && !isLocalDebugEnabled) || (!wasLocalDebugEnabled && isLocalDebugEnabled) ||
|
if ((wasLocalDebugEnabled !== isLocalDebugEnabled) || (wasLocalRunningEnabled !== isLocalRunningEnabled)) {
|
||||||
(wasLocalRunningEnabled && !isLocalRunningEnabled) || (!wasLocalRunningEnabled && isLocalRunningEnabled)) {
|
|
||||||
extension._projectOutlineProvider.updateTree();
|
extension._projectOutlineProvider.updateTree();
|
||||||
updatedSettingsSubkeys.push(subKey);
|
updatedSettingsSubkeys.push(subKey);
|
||||||
}
|
}
|
||||||
|
@ -1423,7 +1425,7 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
// in the object makefile.launchConfigurations and makefile.configurations
|
// in the object makefile.launchConfigurations and makefile.configurations
|
||||||
// apply exactly to the current launch configuration, since we don't collect and aggregate
|
// apply exactly to the current launch configuration, since we don't collect and aggregate
|
||||||
// information from all the array yet.
|
// information from all the array yet.
|
||||||
updatedSettingsSubkeys.forEach(subKey => {
|
updatedSettingsSubkeys.forEach(async (subKey) => {
|
||||||
let key: string = keyRoot + "." + subKey;
|
let key: string = keyRoot + "." + subKey;
|
||||||
logger.message(`${key} setting changed.`, "Verbose");
|
logger.message(`${key} setting changed.`, "Verbose");
|
||||||
try {
|
try {
|
||||||
|
@ -1431,6 +1433,7 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
// to the telemetry function. Currently, the schema for such a setting
|
// to the telemetry function. Currently, the schema for such a setting
|
||||||
// is represented differently than the workspace setting value.
|
// is represented differently than the workspace setting value.
|
||||||
let settingObj: any;
|
let settingObj: any;
|
||||||
|
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration(keyRoot);
|
||||||
if (subKey.includes(".")) {
|
if (subKey.includes(".")) {
|
||||||
const subKeys: string[] = subKey.split(".");
|
const subKeys: string[] = subKey.split(".");
|
||||||
settingObj = workspaceConfiguration;
|
settingObj = workspaceConfiguration;
|
||||||
|
@ -1441,7 +1444,7 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
settingObj = workspaceConfiguration[subKey];
|
settingObj = workspaceConfiguration[subKey];
|
||||||
}
|
}
|
||||||
|
|
||||||
telemetryProperties = telemetry.analyzeSettings(settingObj, key,
|
telemetryProperties = await telemetry.analyzeSettings(settingObj, key,
|
||||||
util.thisExtensionPackage().contributes.configuration.properties[key],
|
util.thisExtensionPackage().contributes.configuration.properties[key],
|
||||||
false, telemetryProperties);
|
false, telemetryProperties);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -1458,7 +1461,11 @@ export async function initFromStateAndSettings(): Promise<void> {
|
||||||
|
|
||||||
export async function setConfigurationByName(configurationName: string): Promise<void> {
|
export async function setConfigurationByName(configurationName: string): Promise<void> {
|
||||||
extension.getState().buildConfiguration = configurationName;
|
extension.getState().buildConfiguration = configurationName;
|
||||||
|
logger.message(`Setting configuration - ${configurationName}`);
|
||||||
|
logger.message("Re-reading settings after configuration change.");
|
||||||
await setCurrentMakefileConfiguration(configurationName);
|
await setCurrentMakefileConfiguration(configurationName);
|
||||||
|
// Refresh settings, they may reference variables or commands reading state configuration var (${configuration}).
|
||||||
|
await initFromSettings();
|
||||||
extension._projectOutlineProvider.updateConfiguration(configurationName);
|
extension._projectOutlineProvider.updateConfiguration(configurationName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1518,7 +1525,7 @@ export async function setNewConfiguration(): Promise<void> {
|
||||||
let makefileonfigurationSetting: any = workspaceConfiguration[subKey];
|
let makefileonfigurationSetting: any = workspaceConfiguration[subKey];
|
||||||
if (makefileonfigurationSetting) {
|
if (makefileonfigurationSetting) {
|
||||||
try {
|
try {
|
||||||
telemetryProperties = telemetry.analyzeSettings(makefileonfigurationSetting, key,
|
telemetryProperties = await telemetry.analyzeSettings(makefileonfigurationSetting, key,
|
||||||
util.thisExtensionPackage().contributes.configuration.properties[key],
|
util.thisExtensionPackage().contributes.configuration.properties[key],
|
||||||
true, telemetryProperties);
|
true, telemetryProperties);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -1532,12 +1539,15 @@ export async function setNewConfiguration(): Promise<void> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setTargetByName(targetName: string) : void {
|
export async function setTargetByName(targetName: string) : Promise<void> {
|
||||||
currentTarget = targetName;
|
currentTarget = targetName;
|
||||||
let displayTarget: string = targetName ? currentTarget : "Default";
|
let displayTarget: string = targetName ? currentTarget : "Default";
|
||||||
statusBar.setTarget(displayTarget);
|
statusBar.setTarget(displayTarget);
|
||||||
logger.message(`Setting target ${displayTarget}`);
|
logger.message(`Setting target ${displayTarget}`);
|
||||||
|
logger.message("Re-reading settings after target change.");
|
||||||
|
// Refresh settings, they may reference variables or commands reading state target var (${buildTarget}).
|
||||||
extension.getState().buildTarget = currentTarget;
|
extension.getState().buildTarget = currentTarget;
|
||||||
|
await initFromSettings();
|
||||||
extension._projectOutlineProvider.updateBuildTarget(targetName);
|
extension._projectOutlineProvider.updateBuildTarget(targetName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1591,7 +1601,7 @@ export async function selectTarget(): Promise<void> {
|
||||||
};
|
};
|
||||||
telemetry.logEvent("stateChanged", telemetryProperties);
|
telemetry.logEvent("stateChanged", telemetryProperties);
|
||||||
|
|
||||||
setTargetByName(chosen);
|
await setTargetByName(chosen);
|
||||||
|
|
||||||
if (configureAfterCommand) {
|
if (configureAfterCommand) {
|
||||||
// The set of build targets remains the same even if the current target has changed
|
// The set of build targets remains the same even if the current target has changed
|
||||||
|
@ -1616,11 +1626,16 @@ export async function setLaunchConfigurationByName(launchConfigurationName: stri
|
||||||
if (!currentLaunchConfiguration) {
|
if (!currentLaunchConfiguration) {
|
||||||
currentLaunchConfiguration = await stringToLaunchConfiguration(launchConfigurationName);
|
currentLaunchConfiguration = await stringToLaunchConfiguration(launchConfigurationName);
|
||||||
if (currentLaunchConfiguration) {
|
if (currentLaunchConfiguration) {
|
||||||
|
// Read again all launch configurations from settings, so that we push this incoming into that array as well
|
||||||
|
// because we want to persist the original unexpanded content of launch configurations.
|
||||||
|
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
||||||
|
let launchConfigAsInSettings: LaunchConfiguration[] = workspaceConfiguration.get<LaunchConfiguration[]>("launchConfigurations") || [];
|
||||||
|
launchConfigAsInSettings.push(currentLaunchConfiguration);
|
||||||
|
// Push into the processed 'in-memory' launch configurations array as well.
|
||||||
launchConfigurations.push(currentLaunchConfiguration);
|
launchConfigurations.push(currentLaunchConfiguration);
|
||||||
// Avoid updating the launchConfigurations array in settings.json for regression tests.
|
// Avoid updating the launchConfigurations array in settings.json for regression tests.
|
||||||
if (process.env['MAKEFILE_TOOLS_TESTING'] !== '1') {
|
if (process.env['MAKEFILE_TOOLS_TESTING'] !== '1') {
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
await workspaceConfiguration.update("launchConfigurations", launchConfigAsInSettings);
|
||||||
workspaceConfiguration.update("launchConfigurations", launchConfigurations);
|
|
||||||
}
|
}
|
||||||
logger.message(`Inserting a new entry for ${launchConfigurationName} in the array of makefile.launchConfigurations. ` +
|
logger.message(`Inserting a new entry for ${launchConfigurationName} in the array of makefile.launchConfigurations. ` +
|
||||||
"You may define any additional debug properties for it in settings.");
|
"You may define any additional debug properties for it in settings.");
|
||||||
|
@ -1641,6 +1656,9 @@ export async function setLaunchConfigurationByName(launchConfigurationName: stri
|
||||||
statusBar.setLaunchConfiguration("No launch configuration set");
|
statusBar.setLaunchConfiguration("No launch configuration set");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Refresh settings, they may reference variables or commands reading launch targets commands: ${command:makefile.getLaunchTargetPath} and others...
|
||||||
|
logger.message("Re-reading settings after launch target change.");
|
||||||
|
await initFromSettings();
|
||||||
await extension._projectOutlineProvider.updateLaunchTarget(launchConfigurationName);
|
await extension._projectOutlineProvider.updateLaunchTarget(launchConfigurationName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1713,7 +1731,7 @@ export async function selectLaunchConfiguration(): Promise<void> {
|
||||||
let launchConfigurationSetting: any = workspaceConfiguration[subKey];
|
let launchConfigurationSetting: any = workspaceConfiguration[subKey];
|
||||||
if (launchConfigurationSetting) {
|
if (launchConfigurationSetting) {
|
||||||
try {
|
try {
|
||||||
telemetryProperties = telemetry.analyzeSettings(launchConfigurationSetting, key,
|
telemetryProperties = await telemetry.analyzeSettings(launchConfigurationSetting, key,
|
||||||
util.thisExtensionPackage().contributes.configuration.properties[key],
|
util.thisExtensionPackage().contributes.configuration.properties[key],
|
||||||
true, telemetryProperties);
|
true, telemetryProperties);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -209,10 +209,20 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
|
||||||
await configuration.setNewConfiguration();
|
await configuration.setNewConfiguration();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
context.subscriptions.push(vscode.commands.registerCommand('makefile.getConfiguration', async () => {
|
||||||
|
telemetry.logEvent("getConfiguration");
|
||||||
|
return configuration.getCurrentMakefileConfiguration();
|
||||||
|
}));
|
||||||
|
|
||||||
context.subscriptions.push(vscode.commands.registerCommand('makefile.setBuildTarget', async () => {
|
context.subscriptions.push(vscode.commands.registerCommand('makefile.setBuildTarget', async () => {
|
||||||
await configuration.selectTarget();
|
await configuration.selectTarget();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
context.subscriptions.push(vscode.commands.registerCommand('makefile.getBuildTarget', async () => {
|
||||||
|
telemetry.logEvent("getBuildTarget");
|
||||||
|
return configuration.getCurrentTarget() || "";
|
||||||
|
}));
|
||||||
|
|
||||||
context.subscriptions.push(vscode.commands.registerCommand('makefile.buildTarget', async () => {
|
context.subscriptions.push(vscode.commands.registerCommand('makefile.buildTarget', async () => {
|
||||||
await make.buildTarget(make.TriggeredBy.buildTarget, configuration.getCurrentTarget() || "", false);
|
await make.buildTarget(make.TriggeredBy.buildTarget, configuration.getCurrentTarget() || "", false);
|
||||||
}));
|
}));
|
||||||
|
@ -342,15 +352,10 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
|
||||||
return vscode.commands.executeCommand("makefile.setBuildConfiguration");
|
return vscode.commands.executeCommand("makefile.setBuildConfiguration");
|
||||||
}));
|
}));
|
||||||
|
|
||||||
configuration.readLoggingLevel();
|
// Read from the workspace state before reading from settings,
|
||||||
configuration.readExtensionOutputFolder();
|
// becase the latter may use state info in variable expansion.
|
||||||
configuration.readExtensionLog();
|
configuration.initFromState();
|
||||||
|
await configuration.initFromSettings(true);
|
||||||
// Delete the extension log file, if exists
|
|
||||||
let extensionLog : string | undefined = configuration.getExtensionLog();
|
|
||||||
if (extensionLog && util.checkFileExistsSync(extensionLog)) {
|
|
||||||
util.deleteFileSync(extensionLog);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete the script that is created by this extension in the temporary folder
|
// Delete the script that is created by this extension in the temporary folder
|
||||||
// with the purpose of spliting a compilation command fragment into switch arguments
|
// with the purpose of spliting a compilation command fragment into switch arguments
|
||||||
|
@ -364,9 +369,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
|
||||||
util.deleteFileSync(parseCompilerArgsScript);
|
util.deleteFileSync(parseCompilerArgsScript);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read configuration info from settings
|
|
||||||
await configuration.initFromStateAndSettings();
|
|
||||||
|
|
||||||
if (configuration.getConfigureOnOpen() && extension.getFullFeatureSet()) {
|
if (configuration.getConfigureOnOpen() && extension.getFullFeatureSet()) {
|
||||||
// Always clean configure on open
|
// Always clean configure on open
|
||||||
await make.cleanConfigure(make.TriggeredBy.cleanConfigureOnOpen);
|
await make.cleanConfigure(make.TriggeredBy.cleanConfigureOnOpen);
|
||||||
|
@ -376,7 +378,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
|
||||||
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
||||||
let telemetryProperties: telemetry.Properties | null = {};
|
let telemetryProperties: telemetry.Properties | null = {};
|
||||||
try {
|
try {
|
||||||
telemetryProperties = telemetry.analyzeSettings(workspaceConfiguration, "makefile",
|
telemetryProperties = await telemetry.analyzeSettings(workspaceConfiguration, "makefile",
|
||||||
util.thisExtensionPackage().contributes.configuration.properties,
|
util.thisExtensionPackage().contributes.configuration.properties,
|
||||||
true, telemetryProperties);
|
true, telemetryProperties);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -1488,7 +1488,7 @@ export async function doConfigure(progress: vscode.Progress<{}>, cancel: vscode.
|
||||||
// as the caller and its result will be included into the telemetry information reported by that.
|
// as the caller and its result will be included into the telemetry information reported by that.
|
||||||
// There can be only one level of recursivity because once the target is reset to empty,
|
// There can be only one level of recursivity because once the target is reset to empty,
|
||||||
// it is impossible to get into the state of having a target that is not found in the available list.
|
// it is impossible to get into the state of having a target that is not found in the available list.
|
||||||
configuration.setTargetByName("");
|
await configuration.setTargetByName("");
|
||||||
logger.message("Automatically reconfiguring the project after a build target change.");
|
logger.message("Automatically reconfiguring the project after a build target change.");
|
||||||
recursiveDoConfigure = true;
|
recursiveDoConfigure = true;
|
||||||
|
|
||||||
|
|
|
@ -179,7 +179,7 @@ function filterKey(key: string): string {
|
||||||
// If analyzeSettings gets called before a configure (or after an unsuccesful one), it is possible to have
|
// If analyzeSettings gets called before a configure (or after an unsuccesful one), it is possible to have
|
||||||
// inaccurate or incomplete telemetry information for makefile and launch configurations.
|
// inaccurate or incomplete telemetry information for makefile and launch configurations.
|
||||||
// This is not very critical since any of their state changes will update telemetry for them.
|
// This is not very critical since any of their state changes will update telemetry for them.
|
||||||
export function analyzeSettings(setting: any, key: string, propSchema: any, ignoreDefault: boolean, telemetryProperties: Properties | null): Properties | null {
|
export async function analyzeSettings(setting: any, key: string, propSchema: any, ignoreDefault: boolean, telemetryProperties: Properties | null): Promise<Properties | null> {
|
||||||
// type can be undefined if setting is null,
|
// type can be undefined if setting is null,
|
||||||
// which happens when the user removes that setting.
|
// which happens when the user removes that setting.
|
||||||
let type : string | undefined = setting ? typeof (setting) : undefined;
|
let type : string | undefined = setting ? typeof (setting) : undefined;
|
||||||
|
@ -207,15 +207,19 @@ export function analyzeSettings(setting: any, key: string, propSchema: any, igno
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enum values always safe to report.
|
// Enum values always safe to report.
|
||||||
|
// Validate the allowed values against the expanded variable.
|
||||||
let enumValues: any[] = propSchema.enum;
|
let enumValues: any[] = propSchema.enum;
|
||||||
if (enumValues && enumValues.length > 0) {
|
if (enumValues && enumValues.length > 0) {
|
||||||
if (!enumValues.includes(setting)) {
|
const regexp: RegExp = /(makefile\.)(.+)/mg;
|
||||||
telemetryLogger(`Invalid value "${setting}" for enum "${key}". Only "${enumValues.join(";")}" values are allowed."`);
|
const res: RegExpExecArray | null = regexp.exec(key);
|
||||||
|
let expandedSetting: string = res ? await util.getExpandedSetting<string>(res[2]) : setting;
|
||||||
|
if (!enumValues.includes(expandedSetting)) {
|
||||||
|
telemetryLogger(`Invalid value "${expandedSetting}" for enum "${key}". Only "${enumValues.join(";")}" values are allowed."`);
|
||||||
if (telemetryProperties) {
|
if (telemetryProperties) {
|
||||||
telemetryProperties[filterKey(key)] = "invalid";
|
telemetryProperties[filterKey(key)] = "invalid";
|
||||||
}
|
}
|
||||||
} else if (telemetryProperties) {
|
} else if (telemetryProperties) {
|
||||||
telemetryProperties[filterKey(key)] = setting;
|
telemetryProperties[filterKey(key)] = expandedSetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
return telemetryProperties;
|
return telemetryProperties;
|
||||||
|
@ -255,7 +259,7 @@ export function analyzeSettings(setting: any, key: string, propSchema: any, igno
|
||||||
active = activeArrayItem(setting, key);
|
active = activeArrayItem(setting, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
settingsProps.forEach(prop => {
|
settingsProps.forEach(async (prop) => {
|
||||||
index++;
|
index++;
|
||||||
let jsonProps: any;
|
let jsonProps: any;
|
||||||
let newPropObj: any = setting[prop];
|
let newPropObj: any = setting[prop];
|
||||||
|
@ -302,7 +306,7 @@ export function analyzeSettings(setting: any, key: string, propSchema: any, igno
|
||||||
if (type !== "function" /*&& jsonType !== undefined*/ &&
|
if (type !== "function" /*&& jsonType !== undefined*/ &&
|
||||||
(jsonType !== "array" || prop !== "length")) {
|
(jsonType !== "array" || prop !== "length")) {
|
||||||
let newTelemetryProperties: Properties | null = {};
|
let newTelemetryProperties: Properties | null = {};
|
||||||
newTelemetryProperties = analyzeSettings(newPropObj, key + "." + prop, jsonProps, ignoreDefault,
|
newTelemetryProperties = await analyzeSettings(newPropObj, key + "." + prop, jsonProps, ignoreDefault,
|
||||||
((jsonType !== "array" || index === active)) ? newTelemetryProperties : null);
|
((jsonType !== "array" || index === active)) ? newTelemetryProperties : null);
|
||||||
|
|
||||||
// If telemetryProperties is null, it means we're not interested in reporting any telemetry for this subtree
|
// If telemetryProperties is null, it means we're not interested in reporting any telemetry for this subtree
|
||||||
|
|
|
@ -2,11 +2,20 @@
|
||||||
"C_Cpp.default.configurationProvider": "ms-vscode.makefile-tools",
|
"C_Cpp.default.configurationProvider": "ms-vscode.makefile-tools",
|
||||||
"makefile.buildLog": "./dummy_dryrun.log",
|
"makefile.buildLog": "./dummy_dryrun.log",
|
||||||
"makefile.extensionOutputFolder": "./.vscode",
|
"makefile.extensionOutputFolder": "./.vscode",
|
||||||
|
"makefile.extensionLog": "./.vscode/Makefile.out",
|
||||||
"makefile.makePath": "c:/some/other/fake/path",
|
"makefile.makePath": "c:/some/other/fake/path",
|
||||||
|
"makefile.buildBeforeLaunch": false,
|
||||||
"makefile.loggingLevel": "Debug",
|
"makefile.loggingLevel": "Debug",
|
||||||
"makefile.additionalCompilerNames": ["MyOwnFakeCompiler"],
|
"makefile.additionalCompilerNames": ["MyOwnFakeCompiler"],
|
||||||
|
"makefile.compileCommandsPath": "./.vscode/compile_commands.json",
|
||||||
|
"makefile.panel.visibility": {
|
||||||
|
"debug": true
|
||||||
|
},
|
||||||
"makefile.configureOnOpen": false,
|
"makefile.configureOnOpen": false,
|
||||||
"makefile.configurations": [
|
"makefile.configurations": [
|
||||||
|
{
|
||||||
|
"name": "varexp",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "test-make-f",
|
"name": "test-make-f",
|
||||||
"makePath": "./doesnt/exist/make",
|
"makePath": "./doesnt/exist/make",
|
||||||
|
|
|
@ -2,6 +2,35 @@ Pre-configuring...
|
||||||
Script: "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/preconfigure_nonwin.sh"
|
Script: "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/preconfigure_nonwin.sh"
|
||||||
The pre-configure succeeded.
|
The pre-configure succeeded.
|
||||||
Setting configuration - 8cc_linux
|
Setting configuration - 8cc_linux
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./8cc_linux_dryrun.log" defined for configuration "8cc_linux"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/8cc_linux_dryrun.log"
|
||||||
|
Deduced command 'c:/some/other/fake/path ' for configuration "8cc_linux"
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
Found build log path setting "./8cc_linux_dryrun.log" defined for configuration "8cc_linux"
|
Found build log path setting "./8cc_linux_dryrun.log" defined for configuration "8cc_linux"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/8cc_linux_dryrun.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/8cc_linux_dryrun.log"
|
||||||
Deduced command 'c:/some/other/fake/path ' for configuration "8cc_linux"
|
Deduced command 'c:/some/other/fake/path ' for configuration "8cc_linux"
|
||||||
|
@ -194,6 +223,35 @@ Configure succeeded.
|
||||||
Configure elapsed time: 0
|
Configure elapsed time: 0
|
||||||
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>8cc() in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>8cc() in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
||||||
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>8cc()"
|
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>8cc()"
|
||||||
|
Re-reading settings after launch target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>8cc()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
|
Found build log path setting "./8cc_linux_dryrun.log" defined for configuration "8cc_linux"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/8cc_linux_dryrun.log"
|
||||||
|
Deduced command 'c:/some/other/fake/path ' for configuration "8cc_linux"
|
||||||
Created the following debug config:
|
Created the following debug config:
|
||||||
type = cppdbg
|
type = cppdbg
|
||||||
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros)
|
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros)
|
||||||
|
@ -205,4 +263,33 @@ Created the following debug config:
|
||||||
symbolSearchPath = undefined
|
symbolSearchPath = undefined
|
||||||
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/8cc" ' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros'
|
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/8cc" ' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros'
|
||||||
Setting target all
|
Setting target all
|
||||||
|
Re-reading settings after target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>8cc()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
|
Found build log path setting "./8cc_linux_dryrun.log" defined for configuration "8cc_linux"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/8cc_linux_dryrun.log"
|
||||||
|
Deduced command 'c:/some/other/fake/path ' for configuration "8cc_linux"
|
||||||
Building target "all" with command: 'c:/some/other/fake/path all'
|
Building target "all" with command: 'c:/some/other/fake/path all'
|
||||||
|
|
|
@ -2,6 +2,35 @@ Pre-configuring...
|
||||||
Script: "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/preconfigure_nonwin.sh"
|
Script: "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/preconfigure_nonwin.sh"
|
||||||
The pre-configure succeeded.
|
The pre-configure succeeded.
|
||||||
Setting configuration - Fido_linux
|
Setting configuration - Fido_linux
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./Fido_linux_dryrun.log" defined for configuration "Fido_linux"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/Fido_linux_dryrun.log"
|
||||||
|
Deduced command 'c:/some/other/fake/path ' for configuration "Fido_linux"
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
Found build log path setting "./Fido_linux_dryrun.log" defined for configuration "Fido_linux"
|
Found build log path setting "./Fido_linux_dryrun.log" defined for configuration "Fido_linux"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/Fido_linux_dryrun.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/Fido_linux_dryrun.log"
|
||||||
Deduced command 'c:/some/other/fake/path ' for configuration "Fido_linux"
|
Deduced command 'c:/some/other/fake/path ' for configuration "Fido_linux"
|
||||||
|
@ -214,6 +243,35 @@ Configure succeeded.
|
||||||
Configure elapsed time: 0
|
Configure elapsed time: 0
|
||||||
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/foo.o() in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/foo.o() in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
||||||
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/foo.o()"
|
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/foo.o()"
|
||||||
|
Re-reading settings after launch target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/foo.o()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
|
Found build log path setting "./Fido_linux_dryrun.log" defined for configuration "Fido_linux"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/Fido_linux_dryrun.log"
|
||||||
|
Deduced command 'c:/some/other/fake/path ' for configuration "Fido_linux"
|
||||||
Created the following debug config:
|
Created the following debug config:
|
||||||
type = cppdbg
|
type = cppdbg
|
||||||
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros)
|
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros)
|
||||||
|
@ -225,4 +283,33 @@ Created the following debug config:
|
||||||
symbolSearchPath = undefined
|
symbolSearchPath = undefined
|
||||||
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/bin/foo.o" ' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros'
|
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/bin/foo.o" ' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros'
|
||||||
Setting target bin/foo.o
|
Setting target bin/foo.o
|
||||||
|
Re-reading settings after target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/foo.o()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
|
Found build log path setting "./Fido_linux_dryrun.log" defined for configuration "Fido_linux"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/Fido_linux_dryrun.log"
|
||||||
|
Deduced command 'c:/some/other/fake/path ' for configuration "Fido_linux"
|
||||||
Building target "bin/foo.o" with command: 'c:/some/other/fake/path bin/foo.o'
|
Building target "bin/foo.o" with command: 'c:/some/other/fake/path bin/foo.o'
|
||||||
|
|
|
@ -4,6 +4,35 @@ Script: "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\preconfi
|
||||||
{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>call "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\preconfigure.bat"
|
{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>call "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\preconfigure.bat"
|
||||||
The pre-configure succeeded.
|
The pre-configure succeeded.
|
||||||
Setting configuration - InterestingSmallMakefile_windows_configDebug
|
Setting configuration - InterestingSmallMakefile_windows_configDebug
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./InterestingSmallMakefile_windows_dryrunDebug.log" defined for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\InterestingSmallMakefile_windows_dryrunDebug.log"
|
||||||
|
Deduced command 'c:\some\other\fake\path.exe ' for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
Found build log path setting "./InterestingSmallMakefile_windows_dryrunDebug.log" defined for configuration "InterestingSmallMakefile_windows_configDebug"
|
Found build log path setting "./InterestingSmallMakefile_windows_dryrunDebug.log" defined for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\InterestingSmallMakefile_windows_dryrunDebug.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\InterestingSmallMakefile_windows_dryrunDebug.log"
|
||||||
Deduced command 'c:\some\other\fake\path.exe ' for configuration "InterestingSmallMakefile_windows_configDebug"
|
Deduced command 'c:\some\other\fake\path.exe ' for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
|
@ -204,6 +233,35 @@ Configure succeeded.
|
||||||
Configure elapsed time: 0
|
Configure elapsed time: 0
|
||||||
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\ARC H3\Debug\main.exe(str3a,str3b,str3c) in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\ARC H3\Debug\main.exe(str3a,str3b,str3c) in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
||||||
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\ARC H3\Debug\main.exe(str3a,str3b,str3c)"
|
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\ARC H3\Debug\main.exe(str3a,str3b,str3c)"
|
||||||
|
Re-reading settings after launch target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\ARC H3\Debug\main.exe(str3a,str3b,str3c)" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
|
Found build log path setting "./InterestingSmallMakefile_windows_dryrunDebug.log" defined for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\InterestingSmallMakefile_windows_dryrunDebug.log"
|
||||||
|
Deduced command 'c:\some\other\fake\path.exe ' for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
Created the following debug config:
|
Created the following debug config:
|
||||||
type = cppvsdbg
|
type = cppvsdbg
|
||||||
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros)
|
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros)
|
||||||
|
@ -216,6 +274,35 @@ Created the following debug config:
|
||||||
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\bin\InterestingSmallMakefile\ARC H3\Debug\main.exe" str3a str3b str3c' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros'
|
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\bin\InterestingSmallMakefile\ARC H3\Debug\main.exe" str3a str3b str3c' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros'
|
||||||
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch1\Debug\main.exe(str3a,str3b,str3c) in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch1\Debug\main.exe(str3a,str3b,str3c) in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
||||||
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch1\Debug\main.exe(str3a,str3b,str3c)"
|
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch1\Debug\main.exe(str3a,str3b,str3c)"
|
||||||
|
Re-reading settings after launch target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch1\Debug\main.exe(str3a,str3b,str3c)" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
|
Found build log path setting "./InterestingSmallMakefile_windows_dryrunDebug.log" defined for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\InterestingSmallMakefile_windows_dryrunDebug.log"
|
||||||
|
Deduced command 'c:\some\other\fake\path.exe ' for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
Created the following debug config:
|
Created the following debug config:
|
||||||
type = cppvsdbg
|
type = cppvsdbg
|
||||||
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros)
|
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros)
|
||||||
|
@ -228,6 +315,35 @@ Created the following debug config:
|
||||||
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\bin\InterestingSmallMakefile\arch1\Debug\main.exe" str3a str3b str3c' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros'
|
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\bin\InterestingSmallMakefile\arch1\Debug\main.exe" str3a str3b str3c' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros'
|
||||||
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch2\Debug\main.exe() in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch2\Debug\main.exe() in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
||||||
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch2\Debug\main.exe()"
|
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch2\Debug\main.exe()"
|
||||||
|
Re-reading settings after launch target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch2\Debug\main.exe()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
|
Found build log path setting "./InterestingSmallMakefile_windows_dryrunDebug.log" defined for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\InterestingSmallMakefile_windows_dryrunDebug.log"
|
||||||
|
Deduced command 'c:\some\other\fake\path.exe ' for configuration "InterestingSmallMakefile_windows_configDebug"
|
||||||
Created the following debug config:
|
Created the following debug config:
|
||||||
type = cppvsdbg
|
type = cppvsdbg
|
||||||
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros)
|
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros)
|
||||||
|
@ -239,10 +355,93 @@ Created the following debug config:
|
||||||
symbolSearchPath = undefined
|
symbolSearchPath = undefined
|
||||||
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\bin\InterestingSmallMakefile\arch2\Debug\main.exe" ' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros'
|
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\bin\InterestingSmallMakefile\arch2\Debug\main.exe" ' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros'
|
||||||
Setting configuration - InterestingSmallMakefile_windows_configRelSize
|
Setting configuration - InterestingSmallMakefile_windows_configRelSize
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./InterestingSmallMakefile_windows_dryrunRelSize.log" defined for configuration "InterestingSmallMakefile_windows_configRelSize"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\InterestingSmallMakefile_windows_dryrunRelSize.log"
|
||||||
|
Deduced command 'c:\some\other\fake\make.exe OPT=RelSize' for configuration "InterestingSmallMakefile_windows_configRelSize"
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch2\Debug\main.exe()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
Found build log path setting "./InterestingSmallMakefile_windows_dryrunRelSize.log" defined for configuration "InterestingSmallMakefile_windows_configRelSize"
|
Found build log path setting "./InterestingSmallMakefile_windows_dryrunRelSize.log" defined for configuration "InterestingSmallMakefile_windows_configRelSize"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\InterestingSmallMakefile_windows_dryrunRelSize.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\InterestingSmallMakefile_windows_dryrunRelSize.log"
|
||||||
Deduced command 'c:\some\other\fake\make.exe OPT=RelSize' for configuration "InterestingSmallMakefile_windows_configRelSize"
|
Deduced command 'c:\some\other\fake\make.exe OPT=RelSize' for configuration "InterestingSmallMakefile_windows_configRelSize"
|
||||||
Setting configuration - InterestingSmallMakefile_windows_configRelSpeed
|
Setting configuration - InterestingSmallMakefile_windows_configRelSpeed
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Deduced command 'c:\fake\path\make.exe OPT=RelSpeed' for configuration "InterestingSmallMakefile_windows_configRelSpeed"
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch2\Debug\main.exe()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
Deduced command 'c:\fake\path\make.exe OPT=RelSpeed' for configuration "InterestingSmallMakefile_windows_configRelSpeed"
|
Deduced command 'c:\fake\path\make.exe OPT=RelSpeed' for configuration "InterestingSmallMakefile_windows_configRelSpeed"
|
||||||
Setting target Execute_Arch3
|
Setting target Execute_Arch3
|
||||||
|
Re-reading settings after target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>bin\InterestingSmallMakefile\arch2\Debug\main.exe()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
|
Deduced command 'c:\fake\path\make.exe OPT=RelSpeed' for configuration "InterestingSmallMakefile_windows_configRelSpeed"
|
||||||
Building target "Execute_Arch3" with command: 'c:\fake\path\make.exe Execute_Arch3 OPT=RelSpeed'
|
Building target "Execute_Arch3" with command: 'c:\fake\path\make.exe Execute_Arch3 OPT=RelSpeed'
|
||||||
|
|
|
@ -4,6 +4,35 @@ Script: "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\preconfi
|
||||||
{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>call "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\preconfigure.bat"
|
{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>call "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\preconfigure.bat"
|
||||||
The pre-configure succeeded.
|
The pre-configure succeeded.
|
||||||
Setting configuration - complex_escaped_quotes
|
Setting configuration - complex_escaped_quotes
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./complex_escaped_quotes_dryrun.log" defined for configuration "complex_escaped_quotes"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\complex_escaped_quotes_dryrun.log"
|
||||||
|
Deduced command 'c:\some\other\fake\path.exe ' for configuration "complex_escaped_quotes"
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
Found build log path setting "./complex_escaped_quotes_dryrun.log" defined for configuration "complex_escaped_quotes"
|
Found build log path setting "./complex_escaped_quotes_dryrun.log" defined for configuration "complex_escaped_quotes"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\complex_escaped_quotes_dryrun.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\complex_escaped_quotes_dryrun.log"
|
||||||
Deduced command 'c:\some\other\fake\path.exe ' for configuration "complex_escaped_quotes"
|
Deduced command 'c:\some\other\fake\path.exe ' for configuration "complex_escaped_quotes"
|
||||||
|
|
|
@ -2,6 +2,35 @@ Pre-configuring...
|
||||||
Script: "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/preconfigure_nonwin.sh"
|
Script: "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/preconfigure_nonwin.sh"
|
||||||
The pre-configure succeeded.
|
The pre-configure succeeded.
|
||||||
Setting configuration - complex_escaped_quotes
|
Setting configuration - complex_escaped_quotes
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./complex_escaped_quotes_dryrun.log" defined for configuration "complex_escaped_quotes"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/complex_escaped_quotes_dryrun.log"
|
||||||
|
Deduced command 'c:/some/other/fake/path ' for configuration "complex_escaped_quotes"
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
Found build log path setting "./complex_escaped_quotes_dryrun.log" defined for configuration "complex_escaped_quotes"
|
Found build log path setting "./complex_escaped_quotes_dryrun.log" defined for configuration "complex_escaped_quotes"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/complex_escaped_quotes_dryrun.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/complex_escaped_quotes_dryrun.log"
|
||||||
Deduced command 'c:/some/other/fake/path ' for configuration "complex_escaped_quotes"
|
Deduced command 'c:/some/other/fake/path ' for configuration "complex_escaped_quotes"
|
||||||
|
|
|
@ -4,6 +4,35 @@ Script: "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\preconfi
|
||||||
{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>call "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\preconfigure.bat"
|
{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros>call "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\preconfigure.bat"
|
||||||
The pre-configure succeeded.
|
The pre-configure succeeded.
|
||||||
Setting configuration - complex_escaped_quotes_winOnly
|
Setting configuration - complex_escaped_quotes_winOnly
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./complex_escaped_quotes_winOnly_dryrun.log" defined for configuration "complex_escaped_quotes_winOnly"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\complex_escaped_quotes_winOnly_dryrun.log"
|
||||||
|
Deduced command 'c:\some\other\fake\path.exe ' for configuration "complex_escaped_quotes_winOnly"
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
Found build log path setting "./complex_escaped_quotes_winOnly_dryrun.log" defined for configuration "complex_escaped_quotes_winOnly"
|
Found build log path setting "./complex_escaped_quotes_winOnly_dryrun.log" defined for configuration "complex_escaped_quotes_winOnly"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\complex_escaped_quotes_winOnly_dryrun.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\complex_escaped_quotes_winOnly_dryrun.log"
|
||||||
Deduced command 'c:\some\other\fake\path.exe ' for configuration "complex_escaped_quotes_winOnly"
|
Deduced command 'c:\some\other\fake\path.exe ' for configuration "complex_escaped_quotes_winOnly"
|
||||||
|
|
|
@ -1,4 +1,35 @@
|
||||||
Setting configuration - test-make-f
|
Setting configuration - test-make-f
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-f"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/doesnt_exist.log"
|
||||||
|
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
||||||
|
Deduced command 'doesnt/exist/make -f ./SubDir/makefile with space' for configuration "test-make-f"
|
||||||
|
Make was not found on disk at the location provided via makefile.makePath or makefile.configurations[].makePath.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-f"
|
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-f"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/doesnt_exist.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/doesnt_exist.log"
|
||||||
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
||||||
|
@ -62,6 +93,37 @@ parseTargets: return code = 0, elapsed time = 0
|
||||||
Configure succeeded.
|
Configure succeeded.
|
||||||
Configure elapsed time: 0
|
Configure elapsed time: 0
|
||||||
Setting configuration - test-make-C
|
Setting configuration - test-make-C
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-C"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/doesnt_exist.log"
|
||||||
|
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
||||||
|
Deduced command 'doesnt/exist/make -C {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/SubDir with space/' for configuration "test-make-C"
|
||||||
|
Make was not found on disk at the location provided via makefile.makePath or makefile.configurations[].makePath.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-C"
|
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-C"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/doesnt_exist.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/doesnt_exist.log"
|
||||||
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
||||||
|
|
|
@ -1,4 +1,35 @@
|
||||||
Setting configuration - test-make-f
|
Setting configuration - test-make-f
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-f"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\doesnt_exist.log"
|
||||||
|
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
||||||
|
Deduced command 'doesnt\exist\make.exe -f ./SubDir/makefile with space' for configuration "test-make-f"
|
||||||
|
Make was not found on disk at the location provided via makefile.makePath or makefile.configurations[].makePath.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-f"
|
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-f"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\doesnt_exist.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\doesnt_exist.log"
|
||||||
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
||||||
|
@ -62,6 +93,37 @@ parseTargets: return code = 0, elapsed time = 0
|
||||||
Configure succeeded.
|
Configure succeeded.
|
||||||
Configure elapsed time: 0
|
Configure elapsed time: 0
|
||||||
Setting configuration - test-make-C
|
Setting configuration - test-make-C
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-C"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\doesnt_exist.log"
|
||||||
|
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
||||||
|
Deduced command 'doesnt\exist\make.exe -C {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\SubDir with space\' for configuration "test-make-C"
|
||||||
|
Make was not found on disk at the location provided via makefile.makePath or makefile.configurations[].makePath.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\.vscode\compile_commands.json
|
||||||
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-C"
|
Found build log path setting "./doesnt_exist.log" defined for configuration "test-make-C"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\doesnt_exist.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros\doesnt_exist.log"
|
||||||
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
Build log not found. Remove the build log setting or provide a build log file on disk at the given location.
|
||||||
|
|
|
@ -2,6 +2,35 @@ Pre-configuring...
|
||||||
Script: "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/preconfigure_nonwin.sh"
|
Script: "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/preconfigure_nonwin.sh"
|
||||||
The pre-configure succeeded.
|
The pre-configure succeeded.
|
||||||
Setting configuration - tinyvm_linux_pedantic
|
Setting configuration - tinyvm_linux_pedantic
|
||||||
|
Re-reading settings after configuration change.
|
||||||
|
Found build log path setting "./tinyvm_linux_dryrunPedantic.log" defined for configuration "tinyvm_linux_pedantic"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/tinyvm_linux_dryrunPedantic.log"
|
||||||
|
Deduced command 'c:/some/other/fake/make PEDANTIC=yes' for configuration "tinyvm_linux_pedantic"
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
No current launch configuration is set in the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
Found build log path setting "./tinyvm_linux_dryrunPedantic.log" defined for configuration "tinyvm_linux_pedantic"
|
Found build log path setting "./tinyvm_linux_dryrunPedantic.log" defined for configuration "tinyvm_linux_pedantic"
|
||||||
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/tinyvm_linux_dryrunPedantic.log"
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/tinyvm_linux_dryrunPedantic.log"
|
||||||
Deduced command 'c:/some/other/fake/make PEDANTIC=yes' for configuration "tinyvm_linux_pedantic"
|
Deduced command 'c:/some/other/fake/make PEDANTIC=yes' for configuration "tinyvm_linux_pedantic"
|
||||||
|
@ -158,6 +187,35 @@ Configure succeeded.
|
||||||
Configure elapsed time: 0
|
Configure elapsed time: 0
|
||||||
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/tvmi() in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
Inserting a new entry for {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/tvmi() in the array of makefile.launchConfigurations. You may define any additional debug properties for it in settings.
|
||||||
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/tvmi()"
|
Setting current launch target "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/tvmi()"
|
||||||
|
Re-reading settings after launch target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/tvmi()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
|
Found build log path setting "./tinyvm_linux_dryrunPedantic.log" defined for configuration "tinyvm_linux_pedantic"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/tinyvm_linux_dryrunPedantic.log"
|
||||||
|
Deduced command 'c:/some/other/fake/make PEDANTIC=yes' for configuration "tinyvm_linux_pedantic"
|
||||||
Created the following debug config:
|
Created the following debug config:
|
||||||
type = cppdbg
|
type = cppdbg
|
||||||
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros)
|
cwd = {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros (= {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros)
|
||||||
|
@ -169,4 +227,33 @@ Created the following debug config:
|
||||||
symbolSearchPath = undefined
|
symbolSearchPath = undefined
|
||||||
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/bin/tvmi" ' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros'
|
Running command '"{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/bin/tvmi" ' in the terminal from location '{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros'
|
||||||
Setting target tvmi
|
Setting target tvmi
|
||||||
|
Re-reading settings after target change.
|
||||||
|
Dropping various extension output files at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode
|
||||||
|
Writing extension log at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/Makefile.out
|
||||||
|
Logging level: Debug
|
||||||
|
Configurations cached at {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/configurationCache.log
|
||||||
|
No path to the makefile is defined in the settings file.
|
||||||
|
No folder path to the makefile is defined in the settings file.
|
||||||
|
Build log defined at "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/dummy_dryrun.log"
|
||||||
|
Always pre-configure: false
|
||||||
|
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
|
||||||
|
Additional compiler names: 'MyOwnFakeCompiler'
|
||||||
|
Found the following configurations defined in makefile.configurations setting: varexp;test-make-f;test-make-C;complex_escaped_quotes;complex_escaped_quotes_winOnly;InterestingSmallMakefile_windows_configDebug;InterestingSmallMakefile_windows_configRelSize;InterestingSmallMakefile_windows_configRelSpeed;8cc_linux;8cc_mingw;Fido_linux;Fido_mingw;tinyvm_linux_pedantic;tinyvm_mingw_pedantic
|
||||||
|
Reading current launch configuration "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros>bin/tvmi()" from the workspace state.
|
||||||
|
Default launch configuration: MIMode = undefined,
|
||||||
|
miDebuggerPath = undefined,
|
||||||
|
stopAtEntry = undefined,
|
||||||
|
symbolSearchPath = undefined
|
||||||
|
Configure on open: false
|
||||||
|
Configure on edit: true
|
||||||
|
Configure after command: true
|
||||||
|
Only .PHONY targets: false
|
||||||
|
Save before build or configure: true
|
||||||
|
Build before launch: false
|
||||||
|
Clear output before build: true
|
||||||
|
Ignore directory commands: true
|
||||||
|
compile_commands.json path: {REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/.vscode/compile_commands.json
|
||||||
|
Found build log path setting "./tinyvm_linux_dryrunPedantic.log" defined for configuration "tinyvm_linux_pedantic"
|
||||||
|
Resolving build log path to "{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/tinyvm_linux_dryrunPedantic.log"
|
||||||
|
Deduced command 'c:/some/other/fake/make PEDANTIC=yes' for configuration "tinyvm_linux_pedantic"
|
||||||
Building target "tvmi" with command: 'c:/some/other/fake/make tvmi PEDANTIC=yes'
|
Building target "tvmi" with command: 'c:/some/other/fake/make tvmi PEDANTIC=yes'
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
Expanding from './${workspaceFolder}/${configuration}/${buildTarget}/something/${configuration}/${buildTarget}/build.log' to './{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/varexp/all/something/varexp/all/build.log' for setting 'buildLog'.
|
||||||
|
Expanding from '${config:makefile.panel.visibility.debug}' to 'true' for setting 'defaultLaunchConfiguration.stopAtEntry'.
|
||||||
|
Expanding from './${workspaceRoot}/${command:makefile.getConfiguration}/${command:makefile.getBuildTarget}' to './{REPO:VSCODE-MAKEFILE-TOOLS}/src/test/fakeSuite/Repros/varexp/all' for setting 'defaultLaunchConfiguration.miDebuggerPath'.
|
||||||
|
Expanding from '${env:ProgramFiles(x86)}/${workspaceFolderBasename}/make' to '/Repros/make' for setting 'configurations.0.makePath'.
|
||||||
|
Expanding from '${command:makefile.getLaunchTargetPath}' to '' for setting 'configurations.0.makeArgs.0'.
|
||||||
|
Unrecognized variable format: ${SomeUnsupportedVar}
|
||||||
|
Expanding from '${SomeUnsupportedVar}' to 'unknown' for setting 'configurations.0.makeArgs.1'.
|
||||||
|
Detected escaped variable expansion patterns in setting 'configurations.0.makeArgs.2', within value 'try_\${escape_varexp1}_various_\${escape_varexp2}_escapes'.
|
||||||
|
Exception while executing command "makefile.inexistentCommand": 'command 'makefile.inexistentCommand' not found'
|
||||||
|
Expanding from '${command:makefile.inexistentCommand}' to 'unknown' for setting 'configurations.0.makeArgs.3'.
|
||||||
|
Expanding from '${config:makefile.inexistentSetting}' to 'unknown' for setting 'configurations.0.makeArgs.4'.
|
|
@ -0,0 +1,11 @@
|
||||||
|
Expanding from './${workspaceFolder}/${configuration}/${buildTarget}/something/${configuration}/${buildTarget}/build.log' to './{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros/varexp/all/something/varexp/all/build.log' for setting 'buildLog'.
|
||||||
|
Expanding from '${config:makefile.panel.visibility.debug}' to 'true' for setting 'defaultLaunchConfiguration.stopAtEntry'.
|
||||||
|
Expanding from './${workspaceRoot}/${command:makefile.getConfiguration}/${command:makefile.getBuildTarget}' to './{REPO:VSCODE-MAKEFILE-TOOLS}\src\test\fakeSuite\Repros/varexp/all' for setting 'defaultLaunchConfiguration.miDebuggerPath'.
|
||||||
|
Expanding from '${env:ProgramFiles(x86)}/${workspaceFolderBasename}/make' to 'C:\Program Files (x86)/Repros/make' for setting 'configurations.0.makePath'.
|
||||||
|
Expanding from '${command:makefile.getLaunchTargetPath}' to '' for setting 'configurations.0.makeArgs.0'.
|
||||||
|
Unrecognized variable format: ${SomeUnsupportedVar}
|
||||||
|
Expanding from '${SomeUnsupportedVar}' to 'unknown' for setting 'configurations.0.makeArgs.1'.
|
||||||
|
Detected escaped variable expansion patterns in setting 'configurations.0.makeArgs.2', within value 'try_\${escape_varexp1}_various_\${escape_varexp2}_escapes'.
|
||||||
|
Exception while executing command "makefile.inexistentCommand": 'command 'makefile.inexistentCommand' not found'
|
||||||
|
Expanding from '${command:makefile.inexistentCommand}' to 'unknown' for setting 'configurations.0.makeArgs.3'.
|
||||||
|
Expanding from '${config:makefile.inexistentSetting}' to 'unknown' for setting 'configurations.0.makeArgs.4'.
|
|
@ -61,7 +61,11 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
test(`Complex scenarios with quotes and escaped quotes - ${systemPlatform}`, async () => {
|
test(`Complex scenarios with quotes and escaped quotes - ${systemPlatform}`, async () => {
|
||||||
// Settings reset from the previous test run.
|
// Settings reset from the previous test run.
|
||||||
extension.getState().reset(false);
|
extension.getState().reset(false);
|
||||||
await configuration.initFromStateAndSettings();
|
configuration.setCurrentLaunchConfiguration(undefined);
|
||||||
|
configuration.setCurrentMakefileConfiguration("Default");
|
||||||
|
configuration.setCurrentTarget(undefined);
|
||||||
|
configuration.initFromState();
|
||||||
|
await configuration.initFromSettings();
|
||||||
|
|
||||||
// We define extension log here as opposed to in the fake repro .vscode/settings.json
|
// We define extension log here as opposed to in the fake repro .vscode/settings.json
|
||||||
// because the logging produced at the first project load has too few important data to verify and much variations
|
// because the logging produced at the first project load has too few important data to verify and much variations
|
||||||
|
@ -71,11 +75,10 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
// than without debugging/loading the project before.
|
// than without debugging/loading the project before.
|
||||||
// If we define extension log here instead of .vscode/settings.json, we also have to clean it up
|
// If we define extension log here instead of .vscode/settings.json, we also have to clean it up
|
||||||
// because at project load time, there is no makefile log identified and no file is deleted on activation.
|
// because at project load time, there is no makefile log identified and no file is deleted on activation.
|
||||||
let extensionLogPath: string = path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
let extensionLogPath: string = configuration.getExtensionLog() || path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
||||||
if (util.checkFileExistsSync(extensionLogPath)) {
|
if (util.checkFileExistsSync(extensionLogPath)) {
|
||||||
util.deleteFileSync(extensionLogPath);
|
util.deleteFileSync(extensionLogPath);
|
||||||
}
|
}
|
||||||
configuration.setExtensionLog(extensionLogPath);
|
|
||||||
|
|
||||||
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
||||||
// from this extension repository instead of a real installation which may vary from system to system.
|
// from this extension repository instead of a real installation which may vary from system to system.
|
||||||
|
@ -83,7 +86,7 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
await make.preConfigure(make.TriggeredBy.tests);
|
await make.preConfigure(make.TriggeredBy.tests);
|
||||||
|
|
||||||
configuration.prepareConfigurationsQuickPick();
|
configuration.prepareConfigurationsQuickPick();
|
||||||
configuration.setConfigurationByName("complex_escaped_quotes");
|
await configuration.setConfigurationByName("complex_escaped_quotes");
|
||||||
|
|
||||||
// No need to setting and building a target, running a launch target, ...etc... like the other tests
|
// No need to setting and building a target, running a launch target, ...etc... like the other tests
|
||||||
// Compare log output only from a configure to see how we parse the quotes and escape characters in compiler command lines.
|
// Compare log output only from a configure to see how we parse the quotes and escape characters in compiler command lines.
|
||||||
|
@ -101,8 +104,8 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
||||||
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
||||||
baselineLogContent = baselineLogContent.replace(/\r\n/mg, "\n");
|
baselineLogContent = baselineLogContent.replace(/\r\n/mg, "\n");
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "base.out"), baselineLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "base6.out"), baselineLogContent);
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "diff.out"), extensionLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "diff6.out"), extensionLogContent);
|
||||||
|
|
||||||
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
||||||
});
|
});
|
||||||
|
@ -111,7 +114,11 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
test(`Complex scenarios with quotes and escaped quotes - winOnly`, async () => {
|
test(`Complex scenarios with quotes and escaped quotes - winOnly`, async () => {
|
||||||
// Settings reset from the previous test run.
|
// Settings reset from the previous test run.
|
||||||
extension.getState().reset(false);
|
extension.getState().reset(false);
|
||||||
await configuration.initFromStateAndSettings();
|
configuration.setCurrentLaunchConfiguration(undefined);
|
||||||
|
configuration.setCurrentMakefileConfiguration("Default");
|
||||||
|
configuration.setCurrentTarget(undefined);
|
||||||
|
configuration.initFromState();
|
||||||
|
await configuration.initFromSettings();
|
||||||
|
|
||||||
// We define extension log here as opposed to in the fake repro .vscode/settings.json
|
// We define extension log here as opposed to in the fake repro .vscode/settings.json
|
||||||
// because the logging produced at the first project load has too few important data to verify and much variations
|
// because the logging produced at the first project load has too few important data to verify and much variations
|
||||||
|
@ -121,11 +128,10 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
// than without debugging/loading the project before.
|
// than without debugging/loading the project before.
|
||||||
// If we define extension log here instead of .vscode/settings.json, we also have to clean it up
|
// If we define extension log here instead of .vscode/settings.json, we also have to clean it up
|
||||||
// because at project load time, there is no makefile log identified and no file is deleted on activation.
|
// because at project load time, there is no makefile log identified and no file is deleted on activation.
|
||||||
let extensionLogPath: string = path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
let extensionLogPath: string = configuration.getExtensionLog() || path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
||||||
if (util.checkFileExistsSync(extensionLogPath)) {
|
if (util.checkFileExistsSync(extensionLogPath)) {
|
||||||
util.deleteFileSync(extensionLogPath);
|
util.deleteFileSync(extensionLogPath);
|
||||||
}
|
}
|
||||||
configuration.setExtensionLog(extensionLogPath);
|
|
||||||
|
|
||||||
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
||||||
// from this extension repository instead of a real installation which may vary from system to system.
|
// from this extension repository instead of a real installation which may vary from system to system.
|
||||||
|
@ -133,7 +139,7 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
await make.preConfigure(make.TriggeredBy.tests);
|
await make.preConfigure(make.TriggeredBy.tests);
|
||||||
|
|
||||||
configuration.prepareConfigurationsQuickPick();
|
configuration.prepareConfigurationsQuickPick();
|
||||||
configuration.setConfigurationByName("complex_escaped_quotes_winOnly");
|
await configuration.setConfigurationByName("complex_escaped_quotes_winOnly");
|
||||||
|
|
||||||
// No need to setting and building a target, running a launch target, ...etc... like the other tests
|
// No need to setting and building a target, running a launch target, ...etc... like the other tests
|
||||||
// Compare log output only from a configure to see how we parse the quotes and escape characters in compiler command lines.
|
// Compare log output only from a configure to see how we parse the quotes and escape characters in compiler command lines.
|
||||||
|
@ -162,21 +168,18 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
test('Interesting small makefile - windows', async () => {
|
test('Interesting small makefile - windows', async () => {
|
||||||
// Settings reset from the previous test run.
|
// Settings reset from the previous test run.
|
||||||
extension.getState().reset(false);
|
extension.getState().reset(false);
|
||||||
await configuration.initFromStateAndSettings();
|
configuration.setCurrentLaunchConfiguration(undefined);
|
||||||
|
configuration.setCurrentMakefileConfiguration("Default");
|
||||||
|
configuration.setCurrentTarget(undefined);
|
||||||
|
configuration.initFromState();
|
||||||
|
await configuration.initFromSettings();
|
||||||
|
|
||||||
// We define extension log here as opposed to in the fake repro .vscode/settings.json
|
// Extension log is defined in the test .vscode/settings.json but delete it now
|
||||||
// because the logging produced at the first project load has too few important data to verify and much variations
|
// because we are interested to compare against a baseline from this point further.
|
||||||
// that are not worth to be processed when comparing with a baseline.
|
let extensionLogPath: string = configuration.getExtensionLog() || path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
||||||
// Example: when running a test after incomplete debugging or after loading the fake repro project independently of the testing framework,
|
if (extensionLogPath && util.checkFileExistsSync(extensionLogPath)) {
|
||||||
// which leaves the workspace state not clean, resulting in a different extension output log
|
|
||||||
// than without debugging/loading the project before.
|
|
||||||
// If we define extension log here instead of .vscode/settings.json, we also have to clean it up
|
|
||||||
// because at project load time, there is no makefile log identified and no file is deleted on activation.
|
|
||||||
let extensionLogPath: string = path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
|
||||||
if (util.checkFileExistsSync(extensionLogPath)) {
|
|
||||||
util.deleteFileSync(extensionLogPath);
|
util.deleteFileSync(extensionLogPath);
|
||||||
}
|
}
|
||||||
configuration.setExtensionLog(extensionLogPath);
|
|
||||||
|
|
||||||
// Run a preconfigure script to include our tests "Program Files" path so that we always find a cl.exe
|
// Run a preconfigure script to include our tests "Program Files" path so that we always find a cl.exe
|
||||||
// from this extension repository instead of a real VS installation that happens to be in the path.
|
// from this extension repository instead of a real VS installation that happens to be in the path.
|
||||||
|
@ -184,10 +187,9 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
await make.preConfigure(make.TriggeredBy.tests);
|
await make.preConfigure(make.TriggeredBy.tests);
|
||||||
|
|
||||||
configuration.prepareConfigurationsQuickPick();
|
configuration.prepareConfigurationsQuickPick();
|
||||||
configuration.setConfigurationByName("InterestingSmallMakefile_windows_configDebug");
|
await configuration.setConfigurationByName("InterestingSmallMakefile_windows_configDebug");
|
||||||
const retc: number = await make.cleanConfigure(make.TriggeredBy.tests, true);
|
const retc: number = await make.cleanConfigure(make.TriggeredBy.tests, true);
|
||||||
|
|
||||||
configuration.setBuildBeforeLaunch(false);
|
|
||||||
const launchConfigurations: string[] = ["bin\\InterestingSmallMakefile\\ARC H3\\Debug\\main.exe(str3a,str3b,str3c)",
|
const launchConfigurations: string[] = ["bin\\InterestingSmallMakefile\\ARC H3\\Debug\\main.exe(str3a,str3b,str3c)",
|
||||||
"bin\\InterestingSmallMakefile\\arch1\\Debug\\main.exe(str3a,str3b,str3c)",
|
"bin\\InterestingSmallMakefile\\arch1\\Debug\\main.exe(str3a,str3b,str3c)",
|
||||||
"bin\\InterestingSmallMakefile\\arch2\\Debug\\main.exe()"];
|
"bin\\InterestingSmallMakefile\\arch2\\Debug\\main.exe()"];
|
||||||
|
@ -209,11 +211,11 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
// to exercise different combinations of pre-created build log and/or make tools.
|
// to exercise different combinations of pre-created build log and/or make tools.
|
||||||
// No configure is necessary to be run here, it is enough to look at what happens
|
// No configure is necessary to be run here, it is enough to look at what happens
|
||||||
// when changing a configuration.
|
// when changing a configuration.
|
||||||
configuration.setConfigurationByName("InterestingSmallMakefile_windows_configRelSize");
|
await configuration.setConfigurationByName("InterestingSmallMakefile_windows_configRelSize");
|
||||||
configuration.setConfigurationByName("InterestingSmallMakefile_windows_configRelSpeed");
|
await configuration.setConfigurationByName("InterestingSmallMakefile_windows_configRelSpeed");
|
||||||
|
|
||||||
// InterestingSmallMakefile_windows_configRelSpeed constructs a more interesting build command.
|
// InterestingSmallMakefile_windows_configRelSpeed constructs a more interesting build command.
|
||||||
configuration.setTargetByName("Execute_Arch3");
|
await configuration.setTargetByName("Execute_Arch3");
|
||||||
make.prepareBuildTarget("Execute_Arch3");
|
make.prepareBuildTarget("Execute_Arch3");
|
||||||
|
|
||||||
// Compare the output log with the baseline
|
// Compare the output log with the baseline
|
||||||
|
@ -239,21 +241,18 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
test(`8cc - ${systemPlatform}`, async () => {
|
test(`8cc - ${systemPlatform}`, async () => {
|
||||||
// Settings reset from the previous test run.
|
// Settings reset from the previous test run.
|
||||||
extension.getState().reset(false);
|
extension.getState().reset(false);
|
||||||
await configuration.initFromStateAndSettings();
|
configuration.setCurrentLaunchConfiguration(undefined);
|
||||||
|
configuration.setCurrentMakefileConfiguration("Default");
|
||||||
|
configuration.setCurrentTarget(undefined);
|
||||||
|
configuration.initFromState();
|
||||||
|
await configuration.initFromSettings();
|
||||||
|
|
||||||
// We define extension log here as opposed to in the fake repro .vscode/settings.json
|
// Extension log is defined in the test .vscode/settings.json but delete it now
|
||||||
// because the logging produced at the first project load has too few important data to verify and much variations
|
// because we are interested to compare against a baseline from this point further.
|
||||||
// that are not worth to be processed when comparing with a baseline.
|
let extensionLogPath: string = configuration.getExtensionLog() || path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
||||||
// Example: when running a test after incomplete debugging or after loading the fake repro project independently of the testing framework,
|
if (extensionLogPath && util.checkFileExistsSync(extensionLogPath)) {
|
||||||
// which leaves the workspace state not clean, resulting in a different extension output log
|
|
||||||
// than without debugging/loading the project before.
|
|
||||||
// If we define extension log here instead of .vscode/settings.json, we also have to clean it up
|
|
||||||
// because at project load time, there is no makefile log identified and no file is deleted on activation.
|
|
||||||
let extensionLogPath: string = path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
|
||||||
if (util.checkFileExistsSync(extensionLogPath)) {
|
|
||||||
util.deleteFileSync(extensionLogPath);
|
util.deleteFileSync(extensionLogPath);
|
||||||
}
|
}
|
||||||
configuration.setExtensionLog(extensionLogPath);
|
|
||||||
|
|
||||||
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
||||||
// from this extension repository instead of a real installation which may vary from system to system.
|
// from this extension repository instead of a real installation which may vary from system to system.
|
||||||
|
@ -261,10 +260,9 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
await make.preConfigure(make.TriggeredBy.tests);
|
await make.preConfigure(make.TriggeredBy.tests);
|
||||||
|
|
||||||
configuration.prepareConfigurationsQuickPick();
|
configuration.prepareConfigurationsQuickPick();
|
||||||
configuration.setConfigurationByName(process.platform === "linux" ? "8cc_linux" : "8cc_mingw");
|
await configuration.setConfigurationByName(process.platform === "linux" ? "8cc_linux" : "8cc_mingw");
|
||||||
const retc: number = await make.cleanConfigure(make.TriggeredBy.tests, true);
|
const retc: number = await make.cleanConfigure(make.TriggeredBy.tests, true);
|
||||||
|
|
||||||
configuration.setBuildBeforeLaunch(false);
|
|
||||||
const launchConfigurations: string[] = ["8cc()"];
|
const launchConfigurations: string[] = ["8cc()"];
|
||||||
for (const config of launchConfigurations) {
|
for (const config of launchConfigurations) {
|
||||||
await configuration.setLaunchConfigurationByName(vscode.workspace.rootPath + ">" + config);
|
await configuration.setLaunchConfigurationByName(vscode.workspace.rootPath + ">" + config);
|
||||||
|
@ -280,7 +278,7 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configuration.setTargetByName("all");
|
await configuration.setTargetByName("all");
|
||||||
make.prepareBuildTarget("all");
|
make.prepareBuildTarget("all");
|
||||||
|
|
||||||
// Compare the output log with the baseline
|
// Compare the output log with the baseline
|
||||||
|
@ -293,8 +291,8 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
let baselineLogContent: string = util.readFile(baselineLogPath) || "";
|
let baselineLogContent: string = util.readFile(baselineLogPath) || "";
|
||||||
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
||||||
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "base.out"), baselineLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "base5.out"), baselineLogContent);
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "diff.out"), extensionLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "diff5.out"), extensionLogContent);
|
||||||
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -304,21 +302,18 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
test(`Fido - ${systemPlatform}`, async () => {
|
test(`Fido - ${systemPlatform}`, async () => {
|
||||||
// Settings reset from the previous test run.
|
// Settings reset from the previous test run.
|
||||||
extension.getState().reset(false);
|
extension.getState().reset(false);
|
||||||
await configuration.initFromStateAndSettings();
|
configuration.setCurrentLaunchConfiguration(undefined);
|
||||||
|
configuration.setCurrentMakefileConfiguration("Default");
|
||||||
|
configuration.setCurrentTarget(undefined);
|
||||||
|
configuration.initFromState();
|
||||||
|
await configuration.initFromSettings();
|
||||||
|
|
||||||
// We define extension log here as opposed to in the fake repro .vscode/settings.json
|
// Extension log is defined in the test .vscode/settings.json but delete it now
|
||||||
// because the logging produced at the first project load has too few important data to verify and much variations
|
// because we are interested to compare against a baseline from this point further.
|
||||||
// that are not worth to be processed when comparing with a baseline.
|
let extensionLogPath: string = configuration.getExtensionLog() || path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
||||||
// Example: when running a test after incomplete debugging or after loading the fake repro project independently of the testing framework,
|
if (extensionLogPath && util.checkFileExistsSync(extensionLogPath)) {
|
||||||
// which leaves the workspace state not clean, resulting in a different extension output log
|
|
||||||
// than without debugging/loading the project before.
|
|
||||||
// If we define extension log here instead of .vscode/settings.json, we also have to clean it up
|
|
||||||
// because at project load time, there is no makefile log identified and no file is deleted on activation.
|
|
||||||
let extensionLogPath: string = path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
|
||||||
if (util.checkFileExistsSync(extensionLogPath)) {
|
|
||||||
util.deleteFileSync(extensionLogPath);
|
util.deleteFileSync(extensionLogPath);
|
||||||
}
|
}
|
||||||
configuration.setExtensionLog(extensionLogPath);
|
|
||||||
|
|
||||||
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
||||||
// from this extension repository instead of a real installation which may vary from system to system.
|
// from this extension repository instead of a real installation which may vary from system to system.
|
||||||
|
@ -326,10 +321,9 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
await make.preConfigure(make.TriggeredBy.tests);
|
await make.preConfigure(make.TriggeredBy.tests);
|
||||||
|
|
||||||
configuration.prepareConfigurationsQuickPick();
|
configuration.prepareConfigurationsQuickPick();
|
||||||
configuration.setConfigurationByName(process.platform === "linux" ? "Fido_linux" : "Fido_mingw");
|
await configuration.setConfigurationByName(process.platform === "linux" ? "Fido_linux" : "Fido_mingw");
|
||||||
const retc: number = await make.cleanConfigure(make.TriggeredBy.tests, true);
|
const retc: number = await make.cleanConfigure(make.TriggeredBy.tests, true);
|
||||||
|
|
||||||
configuration.setBuildBeforeLaunch(false);
|
|
||||||
const launchConfigurations: string[] = ["bin/foo.o()"];
|
const launchConfigurations: string[] = ["bin/foo.o()"];
|
||||||
for (const config of launchConfigurations) {
|
for (const config of launchConfigurations) {
|
||||||
await configuration.setLaunchConfigurationByName(vscode.workspace.rootPath + ">" + config);
|
await configuration.setLaunchConfigurationByName(vscode.workspace.rootPath + ">" + config);
|
||||||
|
@ -345,7 +339,7 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configuration.setTargetByName("bin/foo.o");
|
await configuration.setTargetByName("bin/foo.o");
|
||||||
make.prepareBuildTarget("bin/foo.o");
|
make.prepareBuildTarget("bin/foo.o");
|
||||||
|
|
||||||
// Compare the output log with the baseline
|
// Compare the output log with the baseline
|
||||||
|
@ -358,8 +352,8 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
let baselineLogContent: string = util.readFile(baselineLogPath) || "";
|
let baselineLogContent: string = util.readFile(baselineLogPath) || "";
|
||||||
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
||||||
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "base.out"), baselineLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "base4.out"), baselineLogContent);
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "diff.out"), extensionLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "diff4.out"), extensionLogContent);
|
||||||
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -369,21 +363,18 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
test(`tinyvm - ${systemPlatform}`, async () => {
|
test(`tinyvm - ${systemPlatform}`, async () => {
|
||||||
// Settings reset from the previous test run.
|
// Settings reset from the previous test run.
|
||||||
extension.getState().reset(false);
|
extension.getState().reset(false);
|
||||||
await configuration.initFromStateAndSettings();
|
configuration.setCurrentLaunchConfiguration(undefined);
|
||||||
|
configuration.setCurrentMakefileConfiguration("Default");
|
||||||
|
configuration.setCurrentTarget(undefined);
|
||||||
|
configuration.initFromState();
|
||||||
|
await configuration.initFromSettings();
|
||||||
|
|
||||||
// We define extension log here as opposed to in the fake repro .vscode/settings.json
|
// Extension log is defined in the test .vscode/settings.json but delete it now
|
||||||
// because the logging produced at the first project load has too few important data to verify and much variations
|
// because we are interested to compare against a baseline from this point further.
|
||||||
// that are not worth to be processed when comparing with a baseline.
|
let extensionLogPath: string = configuration.getExtensionLog() || path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
||||||
// Example: when running a test after incomplete debugging or after loading the fake repro project independently of the testing framework,
|
if (extensionLogPath && util.checkFileExistsSync(extensionLogPath)) {
|
||||||
// which leaves the workspace state not clean, resulting in a different extension output log
|
|
||||||
// than without debugging/loading the project before.
|
|
||||||
// If we define extension log here instead of .vscode/settings.json, we also have to clean it up
|
|
||||||
// because at project load time, there is no makefile log identified and no file is deleted on activation.
|
|
||||||
let extensionLogPath: string = path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
|
||||||
if (util.checkFileExistsSync(extensionLogPath)) {
|
|
||||||
util.deleteFileSync(extensionLogPath);
|
util.deleteFileSync(extensionLogPath);
|
||||||
}
|
}
|
||||||
configuration.setExtensionLog(extensionLogPath);
|
|
||||||
|
|
||||||
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
// Run a preconfigure script to include our tests fake compilers path so that we always find gcc/gpp/clang/...etc...
|
||||||
// from this extension repository instead of a real installation which may vary from system to system.
|
// from this extension repository instead of a real installation which may vary from system to system.
|
||||||
|
@ -391,10 +382,9 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
await make.preConfigure(make.TriggeredBy.tests);
|
await make.preConfigure(make.TriggeredBy.tests);
|
||||||
|
|
||||||
configuration.prepareConfigurationsQuickPick();
|
configuration.prepareConfigurationsQuickPick();
|
||||||
configuration.setConfigurationByName(process.platform === "linux" ? "tinyvm_linux_pedantic" : "tinyvm_mingw_pedantic");
|
await configuration.setConfigurationByName(process.platform === "linux" ? "tinyvm_linux_pedantic" : "tinyvm_mingw_pedantic");
|
||||||
const retc: number = await make.cleanConfigure(make.TriggeredBy.tests, true);
|
const retc: number = await make.cleanConfigure(make.TriggeredBy.tests, true);
|
||||||
|
|
||||||
configuration.setBuildBeforeLaunch(false);
|
|
||||||
const launchConfigurations: string[] = ["bin/tvmi()"];
|
const launchConfigurations: string[] = ["bin/tvmi()"];
|
||||||
for (const config of launchConfigurations) {
|
for (const config of launchConfigurations) {
|
||||||
await configuration.setLaunchConfigurationByName(vscode.workspace.rootPath + ">" + config);
|
await configuration.setLaunchConfigurationByName(vscode.workspace.rootPath + ">" + config);
|
||||||
|
@ -410,7 +400,7 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configuration.setTargetByName("tvmi");
|
await configuration.setTargetByName("tvmi");
|
||||||
make.prepareBuildTarget("tvmi");
|
make.prepareBuildTarget("tvmi");
|
||||||
|
|
||||||
// Compare the output log with the baseline
|
// Compare the output log with the baseline
|
||||||
|
@ -423,8 +413,8 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
let baselineLogContent: string = util.readFile(baselineLogPath) || "";
|
let baselineLogContent: string = util.readFile(baselineLogPath) || "";
|
||||||
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
||||||
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "base.out"), baselineLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "base3.out"), baselineLogContent);
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "diff.out"), extensionLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "diff3.out"), extensionLogContent);
|
||||||
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -432,28 +422,25 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
test(`Test real make - ${systemPlatform}`, async () => {
|
test(`Test real make - ${systemPlatform}`, async () => {
|
||||||
// Settings reset from the previous test run.
|
// Settings reset from the previous test run.
|
||||||
extension.getState().reset(false);
|
extension.getState().reset(false);
|
||||||
await configuration.initFromStateAndSettings();
|
configuration.setCurrentLaunchConfiguration(undefined);
|
||||||
|
configuration.setCurrentMakefileConfiguration("Default");
|
||||||
|
configuration.setCurrentTarget(undefined);
|
||||||
|
configuration.initFromState();
|
||||||
|
await configuration.initFromSettings();
|
||||||
|
|
||||||
// We define extension log here as opposed to in the fake repro .vscode/settings.json
|
// Extension log is defined in the test .vscode/settings.json but delete it now
|
||||||
// because the logging produced at the first project load has too few important data to verify and much variations
|
// because we are interested to compare against a baseline from this point further.
|
||||||
// that are not worth to be processed when comparing with a baseline.
|
let extensionLogPath: string = configuration.getExtensionLog() || path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
||||||
// Example: when running a test after incomplete debugging or after loading the fake repro project independently of the testing framework,
|
if (extensionLogPath && util.checkFileExistsSync(extensionLogPath)) {
|
||||||
// which leaves the workspace state not clean, resulting in a different extension output log
|
|
||||||
// than without debugging/loading the project before.
|
|
||||||
// If we define extension log here instead of .vscode/settings.json, we also have to clean it up
|
|
||||||
// because at project load time, there is no makefile log identified and no file is deleted on activation.
|
|
||||||
let extensionLogPath: string = path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
|
||||||
if (util.checkFileExistsSync(extensionLogPath)) {
|
|
||||||
util.deleteFileSync(extensionLogPath);
|
util.deleteFileSync(extensionLogPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
configuration.setExtensionLog(extensionLogPath);
|
|
||||||
configuration.prepareConfigurationsQuickPick();
|
configuration.prepareConfigurationsQuickPick();
|
||||||
|
|
||||||
configuration.setConfigurationByName("test-make-f");
|
await configuration.setConfigurationByName("test-make-f");
|
||||||
await make.cleanConfigure(make.TriggeredBy.tests);
|
await make.cleanConfigure(make.TriggeredBy.tests);
|
||||||
|
|
||||||
configuration.setConfigurationByName("test-make-C");
|
await configuration.setConfigurationByName("test-make-C");
|
||||||
await make.buildTarget(make.TriggeredBy.tests, "all", true);
|
await make.buildTarget(make.TriggeredBy.tests, "all", true);
|
||||||
|
|
||||||
// Compare the output log with the baseline
|
// Compare the output log with the baseline
|
||||||
|
@ -468,9 +455,64 @@ suite('Fake dryrun parsing', /*async*/() => {
|
||||||
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
||||||
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
||||||
baselineLogContent = baselineLogContent.replace(/\r\n/mg, "\n");
|
baselineLogContent = baselineLogContent.replace(/\r\n/mg, "\n");
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "base.out"), baselineLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "base2.out"), baselineLogContent);
|
||||||
// fs.writeFileSync(path.join(parsedPath.dir, "diff.out"), extensionLogContent);
|
// fs.writeFileSync(path.join(parsedPath.dir, "diff2.out"), extensionLogContent);
|
||||||
|
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(`Variables expansion - ${systemPlatform}`, async () => {
|
||||||
|
// Settings reset from the previous test run.
|
||||||
|
extension.getState().reset(false);
|
||||||
|
configuration.setCurrentLaunchConfiguration(undefined);
|
||||||
|
configuration.setCurrentMakefileConfiguration("Default");
|
||||||
|
configuration.setCurrentTarget(undefined);
|
||||||
|
configuration.initFromState();
|
||||||
|
await configuration.initFromSettings();
|
||||||
|
|
||||||
|
configuration.prepareConfigurationsQuickPick();
|
||||||
|
await configuration.setConfigurationByName("varexp");
|
||||||
|
await configuration.setTargetByName("all");
|
||||||
|
|
||||||
|
// Delete extension log a bit later than other tests. For this one, we only care to capture varexp.
|
||||||
|
// All else that happens before, it was covered during the other tests in this suite.
|
||||||
|
let extensionLogPath: string = configuration.getExtensionLog() || path.join(vscode.workspace.rootPath || "./", ".vscode/Makefile.out");
|
||||||
|
if (extensionLogPath && util.checkFileExistsSync(extensionLogPath)) {
|
||||||
|
util.deleteFileSync(extensionLogPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
await util.getExpandedSettingVal("buildLog", "./${workspaceFolder}/${configuration}/${buildTarget}/something/${configuration}/${buildTarget}/build.log");
|
||||||
|
|
||||||
|
let stopAtEntry: string = await util.expandVariablesInSetting("defaultLaunchConfiguration.stopAtEntry", "${config:makefile.panel.visibility.debug}");
|
||||||
|
let tmpDefaultLaunchConfiguration: configuration.DefaultLaunchConfiguration = {
|
||||||
|
miDebuggerPath: "./${workspaceRoot}/${command:makefile.getConfiguration}/${command:makefile.getBuildTarget}",
|
||||||
|
stopAtEntry: util.booleanify(stopAtEntry)
|
||||||
|
};
|
||||||
|
await util.getExpandedSettingVal<configuration.DefaultLaunchConfiguration>("defaultLaunchConfiguration", tmpDefaultLaunchConfiguration);
|
||||||
|
|
||||||
|
let tmpConfigurations: configuration.MakefileConfiguration[] = [{
|
||||||
|
name: "MyTmpName",
|
||||||
|
makePath: "${env:ProgramFiles(x86)}/${workspaceFolderBasename}/make",
|
||||||
|
makeArgs: ["${command:makefile.getLaunchTargetPath}",
|
||||||
|
"${SomeUnsupportedVar}",
|
||||||
|
"try_\\${escape_varexp1}_various_\\${escape_varexp2}_escapes",
|
||||||
|
"${command:makefile.inexistentCommand}",
|
||||||
|
"${config:makefile.inexistentSetting}"]}];
|
||||||
|
await util.getExpandedSettingVal<configuration.MakefileConfiguration>("configurations", tmpConfigurations);
|
||||||
|
|
||||||
|
// Compare the output log with the baseline
|
||||||
|
// TODO: incorporate relevant diff snippets into the test log.
|
||||||
|
// Until then, print into base and diff files for easier viewing
|
||||||
|
// when the test fails.
|
||||||
|
let parsedPath: path.ParsedPath = path.parse(extensionLogPath);
|
||||||
|
let baselineLogPath: string = path.join(parsedPath.dir, process.platform === "win32" ? "../varexp_win32_baseline.out" : "../varexp_baseline.out");
|
||||||
|
let extensionLogContent: string = util.readFile(extensionLogPath) || "";
|
||||||
|
extensionLogContent = extensionLogContent.replace(/\r\n/mg, "\n");
|
||||||
|
let baselineLogContent: string = util.readFile(baselineLogPath) || "";
|
||||||
|
let extensionRootPath: string = path.resolve(__dirname, "../../../../");
|
||||||
|
baselineLogContent = baselineLogContent.replace(/{REPO:VSCODE-MAKEFILE-TOOLS}/mg, extensionRootPath);
|
||||||
|
baselineLogContent = baselineLogContent.replace(/\r\n/mg, "\n");
|
||||||
|
// fs.writeFileSync(path.join(parsedPath.dir, "base1.out"), baselineLogContent);
|
||||||
|
// fs.writeFileSync(path.join(parsedPath.dir, "diff1.out"), extensionLogContent);
|
||||||
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
expect(extensionLogContent).to.be.equal(baselineLogContent);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
293
src/util.ts
293
src/util.ts
|
@ -3,17 +3,18 @@
|
||||||
|
|
||||||
// Helper APIs used by this extension
|
// Helper APIs used by this extension
|
||||||
|
|
||||||
|
import * as configuration from './configuration';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as child_process from 'child_process';
|
import * as child_process from 'child_process';
|
||||||
import * as logger from './logger';
|
import * as logger from './logger';
|
||||||
import * as make from './make';
|
import * as make from './make';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
import * as telemetry from './telemetry';
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
|
|
||||||
// C/CPP standard versions
|
// C/CPP standard versions
|
||||||
export type StandardVersion = 'c89' | 'c99' | 'c11' | 'c17' | 'c++98' | 'c++03' | 'c++11' | 'c++14' | 'c++17' | 'c++20' | 'c++23' |
|
export type StandardVersion = 'c89' | 'c99' | 'c11' | 'c17' | 'c++98' | 'c++03' | 'c++11' | 'c++14' | 'c++17' | 'c++20' | 'c++23' |
|
||||||
'gnu89' | 'gnu99' | 'gnu11' | 'gnu17' | 'gnu++98' | 'gnu++03' | 'gnu++11' | 'gnu++14' | 'gnu++17' | 'gnu++20' | 'gnu++23'
|
'gnu89' | 'gnu99' | 'gnu11' | 'gnu17' | 'gnu++98' | 'gnu++03' | 'gnu++11' | 'gnu++14' | 'gnu++17' | 'gnu++20' | 'gnu++23' | undefined;
|
||||||
undefined;
|
|
||||||
|
|
||||||
// Supported target architectures (for code generated by the compiler)
|
// Supported target architectures (for code generated by the compiler)
|
||||||
export type TargetArchitecture = 'x86' | 'x64' | 'arm' | 'arm64' | undefined;
|
export type TargetArchitecture = 'x86' | 'x64' | 'arm' | 'arm64' | undefined;
|
||||||
|
@ -603,9 +604,291 @@ export function resolvePathToRoot(relPath: string): string {
|
||||||
return relPath;
|
return relPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper for substituting workspace paths.
|
// Return the string representing the user home location.
|
||||||
export function resolveSubstitutedPath(path: string): string {
|
// Inspired from CMake Tools. TODO: implement more such paths and refactor into a separate class.
|
||||||
return path.replace(/^\${workspace(Folder|Root)}/, getWorkspaceRoot());
|
export function userHome(): string {
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
return path.join(process.env['HOMEDRIVE'] || 'C:', process.env['HOMEPATH'] || 'Users\\Public');
|
||||||
|
} else {
|
||||||
|
return process.env['HOME'] || process.env['PROFILE'] || "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper to correctly interpret boolean values out of strings.
|
||||||
|
// Currently used during settings variable expansion.
|
||||||
|
export function booleanify(value: string) : boolean {
|
||||||
|
const truthy: string[] = ["true", "True", "1"];
|
||||||
|
return truthy.includes(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read setting from workspace settings and expand according to various supported patterns.
|
||||||
|
// Do this for the simple types (converting to boolean or numerals when the varexp syntax
|
||||||
|
// is used on such types of settings) and for arrays or objects, expand recursively
|
||||||
|
// until we reach the simple types for submembers. This handles any structure.
|
||||||
|
export async function getExpandedSetting<T>(settingId: string, propSchema?: any): Promise<T | undefined> {
|
||||||
|
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("makefile");
|
||||||
|
let settingVal: any | undefined = workspaceConfiguration.get<T>(settingId);
|
||||||
|
|
||||||
|
if (!propSchema) {
|
||||||
|
propSchema = thisExtensionPackage().contributes.configuration.properties;
|
||||||
|
propSchema = propSchema.properties ? propSchema.properties[`makefile.${settingId}`] : propSchema[`makefile.${settingId}`];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read what's at settingId in the workspace settings and for objects and arrays of complex types make sure
|
||||||
|
// to copy into a new counterpart that we will modify, because we don't want to persist expanded values in settings.
|
||||||
|
let copySettingVal: any | undefined;
|
||||||
|
if (propSchema && propSchema.type === "array") {
|
||||||
|
// A simple .concat() is not enough. We need to push(Object.assign) on all object entries in the array.
|
||||||
|
copySettingVal = [];
|
||||||
|
(settingVal as any[]).forEach(element => {
|
||||||
|
let copyElement: any = {};
|
||||||
|
copyElement = (typeof(element) === "object") ? Object.assign(copyElement, element) : element;
|
||||||
|
copySettingVal.push(copyElement);
|
||||||
|
});
|
||||||
|
} else if (propSchema && propSchema.type === "object") {
|
||||||
|
copySettingVal = {};
|
||||||
|
copySettingVal = Object.assign(copySettingVal, settingVal);
|
||||||
|
} else {
|
||||||
|
copySettingVal = settingVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return getExpandedSettingVal<T>(settingId, copySettingVal, propSchema);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Same as above but read from an object instead of the settings (as if we get<> before calling this).
|
||||||
|
// Such approach was needed for tests.
|
||||||
|
export async function getExpandedSettingVal<T>(settingId: string, settingVal: any, propSchema?: any): Promise<T | undefined> {
|
||||||
|
// Currently, we have no ${} variables in the default values of our settings.
|
||||||
|
// Skip expanding defaults to keep things faster simpler and safer.
|
||||||
|
// Change this when needed.
|
||||||
|
const typeJson: string | undefined = propSchema ? propSchema.type : undefined;
|
||||||
|
if (settingVal !== undefined &&
|
||||||
|
((propSchema && !areEqual(propSchema.default, settingVal)) ||
|
||||||
|
!propSchema)) { // This OR is for variables not defined in the extension package.json
|
||||||
|
// but the user can define any variable in settings.json to reference later
|
||||||
|
if (typeof(settingVal) === 'string') {
|
||||||
|
const expandedVal: string = await expandVariablesInSetting(settingId, settingVal);
|
||||||
|
let result: T = expandedVal as T;
|
||||||
|
if (typeJson === "boolean") {
|
||||||
|
result = booleanify(expandedVal) as T;
|
||||||
|
} else if (typeJson === "number" || typeJson === "integer") {
|
||||||
|
result = Number(expandedVal) as T;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} else if (typeof(settingVal) === 'object') {
|
||||||
|
// arrays are also seen as objects:
|
||||||
|
// example: array[5] is seen as property object with index array.5
|
||||||
|
// and at the next call we'll see the string.
|
||||||
|
let properties: string[] = Object.getOwnPropertyNames(settingVal);
|
||||||
|
for (let p: number = 0; p < properties.length; p++) {
|
||||||
|
let prop: string = properties[p];
|
||||||
|
let childPropSchema: any;
|
||||||
|
if (propSchema) {
|
||||||
|
if (typeJson === "array") {
|
||||||
|
childPropSchema = propSchema.items;
|
||||||
|
} else {
|
||||||
|
childPropSchema = propSchema.properties ? propSchema.properties[`${prop}`] : propSchema[`${prop}`];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// The settingVal that was given to this function was already a separate copy from its workspace settings counterpart
|
||||||
|
// but if that contained an array anywhere in its structure, if we don't copy here, this expansion will modify
|
||||||
|
// workspace settings which we want to leave untouched.
|
||||||
|
let copySettingValProp: any = settingVal[prop];
|
||||||
|
if (childPropSchema && childPropSchema.type === "array") {
|
||||||
|
copySettingValProp = [].concat(settingVal[prop]);
|
||||||
|
}
|
||||||
|
|
||||||
|
let expandedProp: T = await getExpandedSettingVal<typeof childPropSchema>(settingId + "." + prop, copySettingValProp, childPropSchema);
|
||||||
|
if (!areEqual(settingVal[prop], expandedProp)) {
|
||||||
|
settingVal[prop] = expandedProp;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
logger.message(`Exception while expanding string "${settingId}.${prop}": '${e.message}'`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return settingVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper for expanding variables in a setting. The following scenarios are currently supported:
|
||||||
|
// - predefined VSCode variables (more should be supported with the next release):
|
||||||
|
// ${workspaceFolder} (which is the same as the deprecated ${workspaceRoot} which we still support),
|
||||||
|
// ${workspaceFolderBasename}, ${userHome}
|
||||||
|
// - special Makefile Tools variables (implement more in future):
|
||||||
|
// ${configuration}, ${buildTarget} (these map to the first two UI elements in the "C/C++" left panel)
|
||||||
|
// - environment variables: ${env:USERNAME}
|
||||||
|
// - (any extensions) configuration variables: ${config:extension.setting}
|
||||||
|
// - command variables: ${command:extension.command} (currently, without commands input variables support)
|
||||||
|
// - allow for escaping a varexp sequence in case the user wants to pass that through as is.
|
||||||
|
// The escape character is backslash and in json one backslash is not allowed inside a string, so we'll always get double.
|
||||||
|
// When used in paths, we can't know if a \\ is wanted as a path separator or an escape character so we assume
|
||||||
|
// it is always an escape character. Whenever this is not the case, the user can switch to forward slashes in the paths.
|
||||||
|
// Example: "drive:\\folder1\\folder2_\\${variable}\\folder3" may be wanted as "drive:\\folder1\\folder2_\\value\\folder3"
|
||||||
|
// or as "drive:\\folder1\\folder2_${variable}\\folder3". $ does not make much sense to be left in a path
|
||||||
|
// but also the analysis of the meaning of a string (especially if not full path) is not simple.
|
||||||
|
// Forward slashes are recommended in paths.
|
||||||
|
// NOTES:
|
||||||
|
// - ${command:makefile.getConfiguration} is the same as ${configuration}
|
||||||
|
// - ${command:makefile.getBuildTarget} is the same as ${buildTarget}
|
||||||
|
// - we need the above two commands because launch.json and tasks.json
|
||||||
|
// don't work with our predefined variables, only with the VSCode predefined variables.
|
||||||
|
// Such data is useful to be accessible to launch/tasks jsons too.
|
||||||
|
// But settings.json works with our predefined variables, VSCode predefined variables
|
||||||
|
// and any commands.
|
||||||
|
// TODO: Currently, after applying any expansion pattern, if the result is another expansion pattern
|
||||||
|
// we log an error but in future let's handle the recursivity and complications of expanding anything
|
||||||
|
// coming via this entrypoint.
|
||||||
|
export async function expandVariablesInSetting(settingId: string, settingVal: string): Promise<string> {
|
||||||
|
// Do some string preprocessing first, related to escaping.
|
||||||
|
// Since we don't want to change the value persisted in settings but we need to lose the separator
|
||||||
|
// (so that the final beneficiaries of these settings don't need to handle the separator character)
|
||||||
|
// we will keep the varexp pattern in the final value without the escape character.
|
||||||
|
// The escape character is only for our regexp here to know to not expand it.
|
||||||
|
// Safe to replace \\${ with ESCAPED_VARIABLE_EXPANSION. This will cause the pattern to be skipped
|
||||||
|
// by the regular expression below and also we will replace in reverse at the end (without \\).
|
||||||
|
const telemetryProperties: telemetry.Properties = {setting: settingId};
|
||||||
|
let preprocStr: string = settingVal.replace(/\\\$\{/mg, "ESCAPED_VARIABLE_EXPANSION");
|
||||||
|
if (preprocStr !== settingVal) {
|
||||||
|
logger.message(`Detected escaped variable expansion patterns in setting '${settingId}', within value '${settingVal}'.`);
|
||||||
|
telemetryProperties.pattern = "escaped";
|
||||||
|
telemetry.logEvent("varexp", telemetryProperties);
|
||||||
|
settingVal = preprocStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try the predefined VSCode variable first. The regexp for ${variable} won't fit the others because of the ":".
|
||||||
|
let expandedSetting: string = settingVal;
|
||||||
|
let regexpVSCodeVar: RegExp = /(\$\{(\w+)\})|(\$\{(\w+):(.+?)\})/mg;
|
||||||
|
let result: RegExpExecArray | null = regexpVSCodeVar.exec(expandedSetting);
|
||||||
|
while (result) {
|
||||||
|
const telemetryProperties: telemetry.Properties = {setting: settingId};
|
||||||
|
let toStr: string = "";
|
||||||
|
if (result[2] === "workspaceFolder" || result[2] === "workspaceRoot") {
|
||||||
|
toStr = getWorkspaceRoot();
|
||||||
|
telemetryProperties.pattern = result[2];
|
||||||
|
} else if (result[2] === "workspaceFolderBasename") {
|
||||||
|
toStr = path.basename(getWorkspaceRoot());
|
||||||
|
telemetryProperties.pattern = result[2];
|
||||||
|
} else if (result[2] === "userHome") {
|
||||||
|
toStr = userHome();
|
||||||
|
telemetryProperties.pattern = result[2];
|
||||||
|
} else if (result[2] === "configuration") {
|
||||||
|
toStr = configuration.getCurrentMakefileConfiguration();
|
||||||
|
telemetryProperties.pattern = result[2];
|
||||||
|
} else if (result[2] === "buildTarget") {
|
||||||
|
toStr = configuration.getCurrentTarget() || "";
|
||||||
|
telemetryProperties.pattern = result[2];
|
||||||
|
} else if (result[4] === "env" && result[5]) {
|
||||||
|
toStr = process.env[result[5]] || "";
|
||||||
|
telemetryProperties.pattern = result[4];
|
||||||
|
} else if (result[4] === "command") {
|
||||||
|
telemetryProperties.pattern = result[4];
|
||||||
|
telemetryProperties.info = result[5];
|
||||||
|
try {
|
||||||
|
toStr = await vscode.commands.executeCommand(result[5]);
|
||||||
|
} catch (e) {
|
||||||
|
toStr = "unknown";
|
||||||
|
logger.message(`Exception while executing command "${result[5]}": '${e.message}'`);
|
||||||
|
}
|
||||||
|
} else if (result[4] === "config" && result[5]) {
|
||||||
|
// Extract the name of the extension we read this setting from (before the dot)
|
||||||
|
// and the setting follows the first dot.
|
||||||
|
telemetryProperties.pattern = result[4];
|
||||||
|
telemetryProperties.info = result[5];
|
||||||
|
const regexpCfg: RegExp = /(\w+)\.(.+)/mg;
|
||||||
|
const res: RegExpExecArray | null = regexpCfg.exec(result[5]);
|
||||||
|
if (res && res[1] && res[2]) {
|
||||||
|
let workspaceCfg: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration(res[1]);
|
||||||
|
toStr = (workspaceCfg.get(res[2]) as string);
|
||||||
|
|
||||||
|
// The setting is either undefined or maybe we encountered a case with multiple names separated by dot for a property:
|
||||||
|
// makefile.set1.set2.set3.set4... which cannot be seen if given the whole setting ID at once.
|
||||||
|
// Example:
|
||||||
|
// "makefile.set1.set2.set3": {
|
||||||
|
// "set4.set5": "val"
|
||||||
|
// "something.else": "other"
|
||||||
|
// }
|
||||||
|
// A get on the root workspace cannot see "makefile.set1.set2.set3.set4.set5", returns undefined.
|
||||||
|
// In the above case, one get of "makefile.set1.set2.set3" returns an object, then an access on "set4.set5" gets the final value "val".
|
||||||
|
// We don't know at which dot to stop for the first and the subsequent get operations, so starting with the workspace root
|
||||||
|
// we query for properties and see how much it matches from the full setting id, then we query again on the left over,
|
||||||
|
// until we get the final value.
|
||||||
|
// In the above case, the root makefile workspace has a property set1 (not set1.set2.set3), then the object retrieved
|
||||||
|
// has a set2 property then set3. That last object has a "set4.set5" property (not set4 then set5).
|
||||||
|
if (toStr === null || toStr === undefined) {
|
||||||
|
toStr = getSettingMultipleDots(workspaceCfg, res[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toStr === null || toStr === undefined) {
|
||||||
|
toStr = "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.message(`Unrecognized variable format: ${result[0]}`);
|
||||||
|
toStr = "unknown";
|
||||||
|
telemetryProperties.pattern = "unrecognized";
|
||||||
|
}
|
||||||
|
|
||||||
|
telemetry.logEvent("varexp", telemetryProperties);
|
||||||
|
|
||||||
|
// Because we replace at the same time as we evaluate possible consecutive $ patterns
|
||||||
|
// we need to start each time the search from the beginning (otherwise the lastIndex gets messed up).
|
||||||
|
// It is guaranteed we exit this loop because if we match, we replace with something.
|
||||||
|
// That is why we cannot leave the ${} as they are and we replace with "unknown" when they can't resolve.
|
||||||
|
// Replacing with empty string was not an option because we want unrecognized patterns to stand out quickly.
|
||||||
|
regexpVSCodeVar.lastIndex = 0;
|
||||||
|
|
||||||
|
// Warn if the expanded value contains yet another expansion pattern and leave as is.
|
||||||
|
// We will address in future multiple passes.
|
||||||
|
if (regexpVSCodeVar.exec(toStr) !== null) {
|
||||||
|
logger.message(`"${result[0]}" resolves to "${toStr}" which requires another expansion.` +
|
||||||
|
" We will support multiple expansion passes in the future. ");
|
||||||
|
expandedSetting = expandedSetting.replace(result[0], "unknown");
|
||||||
|
} else {
|
||||||
|
expandedSetting = expandedSetting.replace(result[0], toStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
regexpVSCodeVar.lastIndex = 0;
|
||||||
|
result = regexpVSCodeVar.exec(expandedSetting);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expandedSetting !== settingVal) {
|
||||||
|
logger.message(`Expanding from '${settingVal}' to '${expandedSetting}' for setting '${settingId}'.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reverse the preprocessing done at the beginning, except that we don't keep the escape character.
|
||||||
|
preprocStr = expandedSetting.replace(/ESCAPED_VARIABLE_EXPANSION/mg, "${");
|
||||||
|
return preprocStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function specialized to get properties with multiple dots in their names.
|
||||||
|
// In case of more possibilities, return last.
|
||||||
|
// Example: get the value of "makefile.panel.visibility" or a general hypothetic setting like
|
||||||
|
// "makefile.set1.set2.set3.set4": {
|
||||||
|
// "set5.set6": "val1",
|
||||||
|
// "set7.set8": "val2"
|
||||||
|
// }
|
||||||
|
// getSettingMultipleDots will return "val2" for "makefile.set1.set2.set3.set4.set7.set8"
|
||||||
|
// and workspaceConfiguration.get<> will not see it as a whole.
|
||||||
|
function getSettingMultipleDots(scope: any, settingId: string) : any {
|
||||||
|
let result: any;
|
||||||
|
if (scope) {
|
||||||
|
let rootProps: string[] = Object.getOwnPropertyNames(scope);
|
||||||
|
rootProps = rootProps.filter(item => (item && (settingId.startsWith(`${item}.`) || settingId === item)));
|
||||||
|
rootProps.forEach(prop => {
|
||||||
|
if (settingId === prop) {
|
||||||
|
result = scope[prop];
|
||||||
|
} else {
|
||||||
|
result = getSettingMultipleDots(scope[prop], settingId.substring(prop.length + 1, settingId.length));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Schedule a task to be run at some future time. This allows other pending tasks to
|
// Schedule a task to be run at some future time. This allows other pending tasks to
|
||||||
|
|
Загрузка…
Ссылка в новой задаче