Skip to content

Commit 365cbc4

Browse files
committed
allow building a native image without CoverageTool or CPUSampler on the classpath
1 parent e8e9b6c commit 365cbc4

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
import java.util.function.Supplier;
4141
import java.util.logging.Level;
4242

43-
import org.graalvm.nativeimage.ImageInfo;
44-
4543
import com.oracle.graal.python.PythonLanguage;
4644
import com.oracle.graal.python.builtins.modules.ArrayModuleBuiltins;
4745
import com.oracle.graal.python.builtins.modules.AstModuleBuiltins;
@@ -193,6 +191,8 @@
193191
import com.oracle.truffle.api.source.Source;
194192
import com.oracle.truffle.api.source.SourceSection;
195193

194+
import org.graalvm.nativeimage.ImageInfo;
195+
196196
/**
197197
* The core is intended to the immutable part of the interpreter, including most modules and most
198198
* types.
@@ -265,6 +265,24 @@ private static final String[] initializeCoreFiles() {
265265

266266
private final PythonBuiltins[] builtins;
267267

268+
private static final boolean hasCoverageTool;
269+
private static final boolean hasProfilerTool;
270+
static {
271+
Class<?> c = null;
272+
try {
273+
c = Class.forName("com.oracle.truffle.tools.coverage.CoverageTracker");
274+
} catch (LinkageError | ClassNotFoundException e) {
275+
}
276+
hasCoverageTool = c != null;
277+
c = null;
278+
try {
279+
c = Class.forName("com.oracle.truffle.tools.profiler.CPUSampler");
280+
} catch (LinkageError | ClassNotFoundException e) {
281+
}
282+
hasProfilerTool = c != null;
283+
c = null;
284+
}
285+
268286
private static final PythonBuiltins[] initializeBuiltins() {
269287
List<PythonBuiltins> builtins = new ArrayList<>(Arrays.asList(
270288
new BuiltinConstructors(),
@@ -379,10 +397,14 @@ private static final PythonBuiltins[] initializeBuiltins() {
379397
new LZMADecompressorBuiltins(),
380398
new MultiprocessingModuleBuiltins(),
381399
new SemLockBuiltins(),
382-
new TraceModuleBuiltins(),
383-
new LsprofModuleBuiltins(),
384-
LsprofModuleBuiltins.newProfilerBuiltins(),
385400
new GraalPythonModuleBuiltins()));
401+
if (hasCoverageTool) {
402+
builtins.add(new TraceModuleBuiltins());
403+
}
404+
if (hasProfilerTool) {
405+
builtins.add(new LsprofModuleBuiltins());
406+
builtins.add(LsprofModuleBuiltins.newProfilerBuiltins());
407+
}
386408
if (!TruffleOptions.AOT) {
387409
ServiceLoader<PythonBuiltins> providers = ServiceLoader.load(PythonBuiltins.class, Python3Core.class.getClassLoader());
388410
for (PythonBuiltins builtin : providers) {

graalpython/lib-graalpython/_lsprof.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,10 @@ def getstats(self):
7272
return getstats
7373

7474

75-
Profiler.getstats = make_wrapped_getstats(Profiler.getstats)
75+
try:
76+
Profiler.getstats = make_wrapped_getstats(Profiler.getstats)
77+
except NameError:
78+
pass # Profiler isn't available, we've been built without tools
7679

7780

7881
# cleanup

0 commit comments

Comments
 (0)