Skip to content

Commit

Permalink
[skip-changelog] regression: Fix property expansion of "recipe.prepro…
Browse files Browse the repository at this point in the history
…c.macros" (#2268)

Previously the undefined template placeholders in "recipe.preproc.macros"
were silently replaced the empty string. This changed after a
refactoring in 0585435.

Previously it was:

0585435#diff-371f93465ca5a66f01cbe876348f67990750091d27a827781c8633456b93ef3bL62
-       cmd, err := builder_utils.PrepareCommandForRecipe(buildProperties, "recipe.preproc.macros", true, ctx.PackageManager.GetEnvVarsForSpawnedProcess())

The `true` parameter in the call to `builder_utils.PrepareCommandForRecipe` is the parameter `removeUnsetProperties`.

This behaviour has not been ported over after the "refactoring":
0585435#diff-733dda6759fe968eb8a8d7305c37c7a320a8df52764ca0cba8e88a6f1d077eb5R44-R65

+       const gccPreprocRecipeProperty = "recipe.preproc.macros"
+       if gccBuildProperties.Get(gccPreprocRecipeProperty) == "" {
+               // autogenerate preprocess macros recipe from compile recipe
+               preprocPattern := gccBuildProperties.Get("recipe.cpp.o.pattern")
+               // add {preproc.macros.flags} to {compiler.cpp.flags}
+               preprocPattern = strings.Replace(preprocPattern, "{compiler.cpp.flags}", "{compiler.cpp.flags} {preproc.macros.flags}", 1)
+               // replace "{object_file}" with "{preprocessed_file_path}"
+               preprocPattern = strings.Replace(preprocPattern, "{object_file}", "{preprocessed_file_path}", 1)
+
+               gccBuildProperties.Set(gccPreprocRecipeProperty, preprocPattern)
+       }
+
+       pattern := gccBuildProperties.Get(gccPreprocRecipeProperty)
+       if pattern == "" {
+               return nil, nil, errors.Errorf(tr("%s pattern is missing"), gccPreprocRecipeProperty)
+       }
+
+       commandLine := gccBuildProperties.ExpandPropsInString(pattern)
+       args, err := properties.SplitQuotedString(commandLine, `"'`, false)
+       if err != nil {
+               return nil, nil, err
+       }

that is missing the call to `properties.DeleteUnexpandedPropsFromString`.
  • Loading branch information
cmaglie authored Aug 18, 2023
1 parent 9510d61 commit 3bd60c6
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions arduino/builder/preprocessor/gcc.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ func GCC(sourceFilePath *paths.Path, targetFilePath *paths.Path, includes paths.
}

commandLine := gccBuildProperties.ExpandPropsInString(pattern)
commandLine = properties.DeleteUnexpandedPropsFromString(commandLine)
args, err := properties.SplitQuotedString(commandLine, `"'`, false)
if err != nil {
return nil, nil, err
Expand Down

0 comments on commit 3bd60c6

Please sign in to comment.