Skip to content

Commit cbcd002

Browse files
author
jan
committed
Keep the hooks in order and avoid extended env vars
1 parent 91088ff commit cbcd002

File tree

7 files changed

+79
-72
lines changed

7 files changed

+79
-72
lines changed

io.sloeber.autoBuild/src/io/sloeber/autoBuild/api/AutoBuildConfigurationExtensionDescription.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.sloeber.autoBuild.api;
22

3+
import java.util.LinkedHashMap;
34
import java.util.Set;
4-
import java.util.TreeMap;
55

66
import io.sloeber.autoBuild.helpers.api.KeyValueTree;
77

@@ -113,8 +113,8 @@ public String getDiscoveryCommand(String languageId) {
113113

114114
public abstract boolean equals(AutoBuildConfigurationExtensionDescription base);
115115

116-
public abstract TreeMap< String, String> getPrebuildSteps();
116+
public abstract LinkedHashMap< String, String> getPrebuildSteps();
117117

118-
public abstract TreeMap<String, String> getPostbuildSteps() ;
118+
public abstract LinkedHashMap<String, String> getPostbuildSteps() ;
119119

120120
}

io.sloeber.autoBuild/src/io/sloeber/autoBuild/api/IAutoBuildConfigurationDescription.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static io.sloeber.autoBuild.helpers.api.AutoBuildConstants.*;
44

55
import java.util.ArrayList;
6+
import java.util.LinkedHashMap;
67
import java.util.List;
78
import java.util.Map;
89
import java.util.Set;
@@ -17,7 +18,6 @@
1718
import org.eclipse.core.resources.IFolder;
1819
import org.eclipse.core.resources.IProject;
1920
import org.eclipse.core.resources.IResource;
20-
2121
import io.sloeber.autoBuild.buildTools.api.IBuildTools;
2222
import io.sloeber.autoBuild.buildTools.api.IBuildToolsManager.ToolFlavour;
2323
import io.sloeber.autoBuild.integration.AutoBuildConfigurationDescription;
@@ -445,13 +445,13 @@ public static ICSourceEntry[] getResolvedSourceEntries(IAutoBuildConfigurationDe
445445
* getPrebuildSteps returns getPrebuildStep and possibly more commands provided by extensions
446446
* @return
447447
*/
448-
public TreeMap<String,String> getPrebuildSteps();
448+
public LinkedHashMap<String,String> getPrebuildSteps();
449449

450450
/**
451451
* Same thing as getPrebuildSteps but for post Build
452452
* @return
453453
*/
454-
public TreeMap<String, String> getPostbuildSteps();
454+
public LinkedHashMap<String, String> getPostbuildSteps();
455455

456456

457457
}

io.sloeber.autoBuild/src/io/sloeber/autoBuild/extensionPoint/providers/InternalBuildRunner.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
import java.text.MessageFormat;
2626
import java.util.ArrayList;
2727
import java.util.Arrays;
28+
import java.util.LinkedHashMap;
2829
import java.util.List;
2930
import java.util.Map.Entry;
3031
import java.util.Set;
31-
import java.util.TreeMap;
3232
import java.util.concurrent.ExecutorService;
3333
import java.util.concurrent.Executors;
3434
import java.util.concurrent.TimeUnit;
@@ -53,7 +53,6 @@
5353
import org.eclipse.core.runtime.Path;
5454
import org.eclipse.core.runtime.Status;
5555
import org.eclipse.core.runtime.SubMonitor;
56-
5756
import io.sloeber.autoBuild.api.IAutoBuildConfigurationDescription;
5857
import io.sloeber.autoBuild.api.IAutoBuildMakeRule;
5958
import io.sloeber.autoBuild.api.IBuildRunner;
@@ -144,7 +143,7 @@ public boolean invokeBuild(int kind, String targetName, IAutoBuildConfigurationD
144143
boolean lastSequenceID = true;
145144

146145
// Run preBuildStep if existing
147-
TreeMap<String,String> preBuildSteps = autoData.getPrebuildSteps();
146+
LinkedHashMap<String,String> preBuildSteps = autoData.getPrebuildSteps();
148147
for (Entry<String, String> preBuildStep:preBuildSteps.entrySet()) {
149148
String announcement = preBuildStep.getKey();
150149
String command = preBuildStep.getValue();
@@ -227,7 +226,7 @@ public boolean invokeBuild(int kind, String targetName, IAutoBuildConfigurationD
227226
} while (!(lastSequenceID || myHasBuildError));
228227
// Run postBuildStep if existing
229228

230-
TreeMap<String,String> postBuildSteps = autoData.getPostbuildSteps();
229+
LinkedHashMap<String,String> postBuildSteps = autoData.getPostbuildSteps();
231230
for (Entry<String, String> step:postBuildSteps.entrySet()) {
232231
String announcement = step.getKey();
233232
String command = step.getValue();

io.sloeber.autoBuild/src/io/sloeber/autoBuild/integration/AutoBuildConfigurationDescription.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.Arrays;
1111
import java.util.HashMap;
1212
import java.util.HashSet;
13+
import java.util.LinkedHashMap;
1314
import java.util.List;
1415
import java.util.Map;
1516
import java.util.Map.Entry;
@@ -545,6 +546,9 @@ public void setBuildFolderString(String buildFolder) {
545546

546547
@Override
547548
public String getBuildFolderString() {
549+
if (myBuildFolderString.isBlank()) {
550+
return myCdtConfigurationDescription.getName();
551+
}
548552
return myBuildFolderString;
549553
}
550554

@@ -1344,8 +1348,8 @@ public boolean equals(IAutoBuildConfigurationDescription other) {
13441348
}
13451349

13461350
@Override
1347-
public TreeMap<String, String> getPrebuildSteps() {
1348-
TreeMap<String, String> ret=new TreeMap<>();
1351+
public LinkedHashMap<String, String> getPrebuildSteps() {
1352+
LinkedHashMap<String, String> ret=new LinkedHashMap<>();
13491353

13501354
String preBuildStep = resolve(getPrebuildStep(), EMPTY_STRING, WHITESPACE, this);
13511355
if (!preBuildStep.isEmpty()) {
@@ -1359,8 +1363,8 @@ public TreeMap<String, String> getPrebuildSteps() {
13591363
}
13601364

13611365
@Override
1362-
public TreeMap<String, String> getPostbuildSteps() {
1363-
TreeMap<String, String> ret=new TreeMap<>();
1366+
public LinkedHashMap<String, String> getPostbuildSteps() {
1367+
LinkedHashMap<String, String> ret=new LinkedHashMap<>();
13641368

13651369
if(myAutoBuildCfgExtDes!=null) {
13661370
ret.putAll(myAutoBuildCfgExtDes.getPostbuildSteps());

io.sloeber.core/src/io/sloeber/core/api/BoardDescription.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
import java.util.ArrayList;
1111
import java.util.Collections;
1212
import java.util.HashMap;
13+
import java.util.LinkedHashMap;
14+
import java.util.LinkedHashSet;
1315
import java.util.List;
1416
import java.util.Map;
1517
import java.util.Map.Entry;
1618
import java.util.Set;
1719
import java.util.TreeMap;
18-
import java.util.TreeSet;
19-
2020
import org.eclipse.cdt.core.parser.util.StringUtil;
2121
import org.eclipse.core.runtime.IPath;
2222
import org.eclipse.core.runtime.IStatus;
@@ -1019,7 +1019,7 @@ private static Map<String, String> getEnvVarPlatformFileTools(ArduinoPlatformVer
10191019
* @param confDesc
10201020
* @param boardsDescriptor
10211021
*/
1022-
private Map<String, String> getEnvVarsPostProcessing(Map<String, String> vars) {
1022+
private static Map<String, String> getEnvVarsPostProcessing(Map<String, String> vars) {
10231023

10241024
Map<String, String> extraVars = new HashMap<>();
10251025

@@ -1043,8 +1043,8 @@ private Map<String, String> getEnvVarsPostProcessing(Map<String, String> vars) {
10431043
return extraVars;
10441044
}
10451045

1046-
public TreeMap<String, String> getHookSteps(TreeSet<String> hookNames,IAutoBuildConfigurationDescription autoData) {
1047-
TreeMap<String, String> hookSteps = new TreeMap<>();
1046+
public LinkedHashMap<String, String> getHookSteps(LinkedHashSet<String> hookNames,IAutoBuildConfigurationDescription autoData) {
1047+
LinkedHashMap<String, String> hookSteps = new LinkedHashMap<>();
10481048
KeyValueTree keyValueTree = KeyValueTree.createRoot();
10491049

10501050
PlatformTxtFile referencedPlatfromFile = getreferencedCorePlatformFile();
@@ -1075,7 +1075,7 @@ public TreeMap<String, String> getHookSteps(TreeSet<String> hookNames,IAutoBuild
10751075

10761076
// Try to find the nums from 1 to 10 in order
10771077
// that is 01 1 02 2
1078-
1078+
10791079
for (int hoookNum = 1; hoookNum < 10; hoookNum++) {
10801080
boolean exists=false;
10811081
for (int numDigits = 1; numDigits <= 2; numDigits++) {

io.sloeber.core/src/io/sloeber/core/builder/SloeberBuilderExtension.java

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77
import java.io.IOException;
88
import java.nio.charset.Charset;
99
import java.util.Arrays;
10-
import java.util.TreeMap;
11-
import java.util.TreeSet;
12-
10+
import java.util.LinkedHashMap;
11+
import java.util.LinkedHashSet;
1312
import org.apache.commons.io.FileUtils;
1413
import org.eclipse.cdt.core.IMarkerGenerator;
1514
import org.eclipse.cdt.core.resources.IConsole;
@@ -22,14 +21,12 @@
2221
import io.sloeber.autoBuild.api.IAutoBuildConfigurationDescription;
2322
import io.sloeber.autoBuild.api.IAutoBuildMakeRule;
2423
import io.sloeber.autoBuild.api.IAutoBuildMakeRules;
25-
import io.sloeber.autoBuild.extensionPoint.providers.AutoBuildMakeRule;
2624
import io.sloeber.autoBuild.helpers.api.AutoBuildConstants;
2725
import io.sloeber.autoBuild.integration.AutoBuildConfigurationDescription;
2826
import io.sloeber.autoBuild.schema.api.IBuilder;
2927
import io.sloeber.core.Messages;
3028
import io.sloeber.core.api.BoardDescription;
3129
import io.sloeber.core.api.Common;
32-
import io.sloeber.core.api.ISloeberConfiguration;
3330
import io.sloeber.core.internal.SloeberConfiguration;
3431
import io.sloeber.core.tools.Helpers;
3532

@@ -41,28 +38,28 @@ public String[] modifyRecipes(AutoBuildConfigurationDescription autoBuildConfDat
4138

4239
default:
4340
return super.modifyRecipes(autoBuildConfData,autoBuildMakeRule,buildRecipes);
44-
case "io.sloeber.tool.combine":
41+
case "io.sloeber.tool.combine": //$NON-NLS-1$
4542
SloeberConfiguration confDesc = SloeberConfiguration.getFromAutoBuildConfDesc(autoBuildConfData);
4643
BoardDescription boardDescription=confDesc.getBoardDescription();
47-
TreeSet<String> recipes=new TreeSet<String>();
48-
TreeMap<String, String> pre=new TreeMap<>();
49-
TreeSet <String> preHooks=new TreeSet<>();
50-
preHooks.add("linking");
51-
preHooks.add("prelink");
52-
TreeSet <String> postHooks=new TreeSet<>();
53-
postHooks.add("linking");
54-
postHooks.add("postlink");
55-
pre.putAll(boardDescription.getHookSteps(preHooks,autoBuildConfData)); //$NON-NLS-1$
56-
TreeMap<String, String> post=new TreeMap<>();
57-
post.putAll(boardDescription.getHookSteps(postHooks,autoBuildConfData)); //$NON-NLS-1$
44+
LinkedHashSet<String> recipes=new LinkedHashSet<>();
45+
LinkedHashMap<String, String> pre=new LinkedHashMap<>();
46+
LinkedHashSet <String> preHooks=new LinkedHashSet<>();
47+
preHooks.add("linking"); //$NON-NLS-1$
48+
preHooks.add("prelink"); //$NON-NLS-1$
49+
LinkedHashSet <String> postHooks=new LinkedHashSet<>();
50+
postHooks.add("linking"); //$NON-NLS-1$
51+
postHooks.add("postlink"); //$NON-NLS-1$
52+
pre.putAll(boardDescription.getHookSteps(preHooks,autoBuildConfData));
53+
LinkedHashMap<String, String> post=new LinkedHashMap<>();
54+
post.putAll(boardDescription.getHookSteps(postHooks,autoBuildConfData));
5855
recipes.addAll(pre.values());
5956
recipes.addAll(Arrays.asList(buildRecipes));
6057
recipes.addAll(post.values());
6158
return super.modifyRecipes(autoBuildConfData,autoBuildMakeRule, recipes.toArray(new String[recipes.size()]));
6259
}
6360

6461
}
65-
62+
6663

6764
@Override
6865
public void beforeAddingSourceRules(IAutoBuildMakeRules makeRules,

io.sloeber.core/src/io/sloeber/core/internal/SloeberConfiguration.java

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,17 @@
33
import java.util.Collection;
44
import java.util.HashMap;
55
import java.util.HashSet;
6+
import java.util.LinkedHashMap;
7+
import java.util.LinkedHashSet;
68
import java.util.Map;
79
import java.util.Map.Entry;
810
import java.util.Set;
9-
import java.util.TreeMap;
10-
import java.util.TreeSet;
11-
1211
import static io.sloeber.core.api.Common.*;
1312
import static io.sloeber.core.api.Const.*;
1413

14+
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
1515
import org.eclipse.cdt.core.settings.model.ICSourceEntry;
16+
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
1617
import org.eclipse.core.resources.IFile;
1718
import org.eclipse.core.resources.IFolder;
1819
import org.eclipse.core.resources.IProject;
@@ -58,9 +59,17 @@ public class SloeberConfiguration extends AutoBuildConfigurationExtensionDescrip
5859
public static SloeberConfiguration getFromAutoBuildConfDesc(IAutoBuildConfigurationDescription autoBuildConfData) {
5960
return (SloeberConfiguration) autoBuildConfData.getAutoBuildConfigurationExtensionDescription();
6061
}
61-
62-
63-
62+
63+
public static SloeberConfiguration getConfig(ICConfigurationDescription cConfigDesc) {
64+
CConfigurationData confData=cConfigDesc.getConfigurationData();
65+
if(confData instanceof IAutoBuildConfigurationDescription) {
66+
return (SloeberConfiguration) ((IAutoBuildConfigurationDescription)confData).getAutoBuildConfigurationExtensionDescription();
67+
}
68+
return null;
69+
}
70+
71+
72+
6473
/**
6574
* copy constructor This constructor must be implemented for each derived class
6675
* of AutoBuildConfigurationExtensionDescription or you will get run time errors
@@ -139,7 +148,7 @@ public void serialize(KeyValueTree keyValuePairs) {
139148
for (Entry<String, String> curEnvVar : envVars.entrySet()) {
140149
keyValuePairs.addValue( curEnvVar.getKey() , curEnvVar.getValue() );
141150
}
142-
configureIfDirty();
151+
configureWhenDirty();
143152
}
144153

145154
public SloeberConfiguration(IAutoBuildConfigurationDescription autoCfgDescription, KeyValueTree keyValues) {
@@ -181,16 +190,19 @@ public IFolder getArduinoLibraryFolder() {
181190

182191
@Override
183192
public Map<String, String> getEnvironmentVariables() {
184-
configureIfDirty();
193+
configureWhenDirty();
185194

186195
return myEnvironmentVariables;
187196
}
188197

189-
private void configureIfDirty() {
198+
private void configureWhenDirty() {
190199
if (myMemoryIsDirty) {
191200
myMemoryIsDirty = getEnvVarsNonExpanding();
192-
getEnvVarsExpanding();
193201
}
202+
203+
}
204+
205+
private void LinkToCore() {
194206
if (!ResourcesPlugin.getWorkspace().isTreeLocked()) {
195207
if (projectNeedsUpdate()) {
196208
updateArduinoCodeLinks();
@@ -199,7 +211,6 @@ private void configureIfDirty() {
199211
}
200212

201213

202-
203214
private boolean projectNeedsUpdate() {
204215
IPath corePath = myBoardDescription.getActualCoreCodePath();
205216
IFolder coreFolder = getArduinoCoreFolder();
@@ -228,19 +239,7 @@ private boolean projectNeedsUpdate() {
228239
return false;
229240
}
230241

231-
/**
232-
* Get the environment variables that need environment variables to know the value
233-
* For instance the build path is typically related to the configuration name as sutch
234-
* uses the environment variable ${confname}
235-
* Because resolving the environment variables requires the environmentvarioblas of sloeber
236-
* we get a reentrnacy problem
237-
* By seperating the variables that need expansion (Because I assume the expanding variables
238-
* do not rely on expanding variables) I can cope wiith the reentrancy
239-
*/
240-
private void getEnvVarsExpanding() {
241-
myEnvironmentVariables.put(ENV_KEY_BUILD_PATH,
242-
getAutoBuildDescription().getBuildFolder().getLocation().toOSString());
243-
}
242+
244243

245244
/**
246245
* get the environment variables that do not reliy on variable expansion to get the value.
@@ -249,6 +248,9 @@ private void getEnvVarsExpanding() {
249248
private boolean getEnvVarsNonExpanding() {
250249
myEnvironmentVariables.clear();
251250

251+
myEnvironmentVariables.put(ENV_KEY_BUILD_PATH,
252+
getProject().getFolder(getAutoBuildDescription().getBuildFolderString()).getLocation().toOSString());
253+
252254
myEnvironmentVariables.put(ENV_KEY_BUILD_SOURCE_PATH,getCodeLocation().toOSString());
253255
// myEnvironmentVariables.put(ENV_KEY_BUILD_PATH,
254256
// getAutoBuildDescription().getBuildFolder().getLocation().toOSString());
@@ -584,21 +586,26 @@ public boolean equals(AutoBuildConfigurationExtensionDescription base) {
584586
}
585587

586588
@Override
587-
public TreeMap<String, String> getPrebuildSteps() {
588-
TreeMap<String, String> ret=new TreeMap<>();
589-
TreeSet <String> hookNamess=new TreeSet<>();
590-
hookNamess.add("prebuild");
591-
ret.putAll(myBoardDescription.getHookSteps(hookNamess,getAutoBuildDescription())); //$NON-NLS-1$
589+
public LinkedHashMap<String, String> getPrebuildSteps() {
590+
LinkedHashMap<String, String> ret=new LinkedHashMap<>();
591+
LinkedHashSet <String> hookNamess=new LinkedHashSet<>();
592+
hookNamess.add("prebuild"); //$NON-NLS-1$
593+
ret.putAll(myBoardDescription.getHookSteps(hookNamess,getAutoBuildDescription()));
592594
return ret;
593595
}
594596

595597
@Override
596-
public TreeMap<String, String> getPostbuildSteps() {
597-
TreeMap<String, String> ret=new TreeMap<>();
598-
TreeSet <String> hookNamess=new TreeSet<>();
599-
hookNamess.add("postbuild");
600-
ret.putAll(myBoardDescription.getHookSteps(hookNamess,getAutoBuildDescription())); //$NON-NLS-1$
598+
public LinkedHashMap<String, String> getPostbuildSteps() {
599+
LinkedHashMap<String, String> ret=new LinkedHashMap<>();
600+
LinkedHashSet <String> hookNamess=new LinkedHashSet<>();
601+
hookNamess.add("postbuild"); //$NON-NLS-1$
602+
ret.putAll(myBoardDescription.getHookSteps(hookNamess,getAutoBuildDescription()));
601603
return ret;
602604
}
603605

606+
public void apply() {
607+
configureWhenDirty() ;
608+
LinkToCore();
609+
}
610+
604611
}

0 commit comments

Comments
 (0)