Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openj9
Path: blob/master/sourcetools/j9constantpool/com/ibm/oti/VMCPTool/CmakeFlagInfo.java
6004 views
1
/*******************************************************************************
2
* Copyright (c) 2017, 2021 IBM Corp. and others
3
*
4
* This program and the accompanying materials are made available under
5
* the terms of the Eclipse Public License 2.0 which accompanies this
6
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/
7
* or the Apache License, Version 2.0 which accompanies this distribution and
8
* is available at https://www.apache.org/licenses/LICENSE-2.0.
9
*
10
* This Source Code may also be made available under the following
11
* Secondary Licenses when the conditions for such availability set
12
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
13
* General Public License, version 2 with the GNU Classpath
14
* Exception [1] and GNU General Public License, version 2 with the
15
* OpenJDK Assembly Exception [2].
16
*
17
* [1] https://www.gnu.org/software/classpath/license.html
18
* [2] http://openjdk.java.net/legal/assembly-exception.html
19
*
20
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception
21
*******************************************************************************/
22
package com.ibm.oti.VMCPTool;
23
24
import java.io.BufferedReader;
25
import java.io.FileReader;
26
import java.util.HashSet;
27
import java.util.Set;
28
import java.util.regex.Matcher;
29
import java.util.regex.Pattern;
30
31
class CmakeFlagInfo implements IFlagInfo {
32
33
private Set<String> seenFlags = new HashSet<>();
34
private Set<String> setFlags = new HashSet<>();
35
36
// Convert string to bool using same rules as cmake
37
private static boolean strToBool(String str) {
38
str = str.trim().toUpperCase();
39
if (str.isEmpty() || str.equals("NO") || str.equals("FALSE") || str.equals("OFF") || str.endsWith("-NOTFOUND")) {
40
return false;
41
}
42
return true;
43
}
44
45
public CmakeFlagInfo(String cacheInfo) throws Throwable {
46
// CMake cache file lines look like this:
47
// <VariableName>:<Type>=<Value>
48
49
// Pick out any lines Where <Type> == BOOL
50
Pattern cacheVarPattern = Pattern.compile("([a-zA-Z0-9_]+):BOOL=(.*)$");
51
try (BufferedReader reader = new BufferedReader(new FileReader(cacheInfo))) {
52
String line;
53
54
while (null != (line = reader.readLine())) {
55
Matcher matcher = cacheVarPattern.matcher(line);
56
if (matcher.matches()) {
57
String flagName = matcher.group(1);
58
boolean flagValue = strToBool(matcher.group(2));
59
60
if (flagName.startsWith("J9VM_")) {
61
flagName = Util.transformFlag(flagName);
62
if (flagValue) {
63
setFlags.add(flagName);
64
}
65
seenFlags.add(flagName);
66
}
67
}
68
}
69
}
70
}
71
72
@Override
73
public Set<String> getAllSetFlags() {
74
return setFlags;
75
}
76
77
@Override
78
public boolean isFlagValid(String flagName) {
79
// TODO We need to properly define all the flags from cmake before we turn this on
80
// return seenFlags.contains(Util.transformFlag(flagName));
81
return true;
82
}
83
84
}
85
86