Author: Antonio Cuni <[email protected]>
Branch: fix-vmprof-stacklet-switch-2
Changeset: r93489:df87d2ec0d1b
Date: 2017-12-19 15:49 +0100
http://bitbucket.org/pypy/pypy/changeset/df87d2ec0d1b/

Log:    move the ECI stuff into a proper function: this way, it will be
        easier to ensure that the ECI is not created at all on unsupported
        platforms

diff --git a/rpython/rlib/rvmprof/cintf.py b/rpython/rlib/rvmprof/cintf.py
--- a/rpython/rlib/rvmprof/cintf.py
+++ b/rpython/rlib/rvmprof/cintf.py
@@ -19,62 +19,68 @@
 SHARED = SRC.join('shared')
 BACKTRACE = SHARED.join('libbacktrace')
 
-compile_extra = ['-DRPYTHON_VMPROF']
-separate_module_files = [
-    SHARED.join('symboltable.c'),
-    SHARED.join('vmprof_unix.c')
-]
-if sys.platform.startswith('linux'):
-    separate_module_files += [
-       BACKTRACE.join('atomic.c'),
-       BACKTRACE.join('backtrace.c'),
-       BACKTRACE.join('state.c'),
-       BACKTRACE.join('elf.c'),
-       BACKTRACE.join('dwarf.c'),
-       BACKTRACE.join('fileline.c'),
-       BACKTRACE.join('mmap.c'),
-       BACKTRACE.join('mmapio.c'),
-       BACKTRACE.join('posix.c'),
-       BACKTRACE.join('sort.c'),
+def make_eci():
+    if make_eci.called:
+        raise ValueError("make_eci() should be called at most once")
+    #
+    compile_extra = ['-DRPYTHON_VMPROF']
+    separate_module_files = [
+        SHARED.join('symboltable.c'),
+        SHARED.join('vmprof_unix.c')
     ]
-    _libs = ['dl']
-    compile_extra += ['-DVMPROF_UNIX']
-    compile_extra += ['-DVMPROF_LINUX']
-elif sys.platform == 'win32':
-    compile_extra += ['-DVMPROF_WINDOWS']
-    separate_module_files = [SHARED.join('vmprof_win.c')]
-    _libs = []
-else:
-    # Guessing a BSD-like Unix platform
-    compile_extra += ['-DVMPROF_UNIX']
-    compile_extra += ['-DVMPROF_MAC']
-    if sys.platform.startswith('freebsd'):
-        _libs = ['unwind']
+    if sys.platform.startswith('linux'):
+        separate_module_files += [
+           BACKTRACE.join('atomic.c'),
+           BACKTRACE.join('backtrace.c'),
+           BACKTRACE.join('state.c'),
+           BACKTRACE.join('elf.c'),
+           BACKTRACE.join('dwarf.c'),
+           BACKTRACE.join('fileline.c'),
+           BACKTRACE.join('mmap.c'),
+           BACKTRACE.join('mmapio.c'),
+           BACKTRACE.join('posix.c'),
+           BACKTRACE.join('sort.c'),
+        ]
+        _libs = ['dl']
+        compile_extra += ['-DVMPROF_UNIX']
+        compile_extra += ['-DVMPROF_LINUX']
+    elif sys.platform == 'win32':
+        compile_extra += ['-DVMPROF_WINDOWS']
+        separate_module_files = [SHARED.join('vmprof_win.c')]
+        _libs = []
     else:
-        _libs = []
+        # Guessing a BSD-like Unix platform
+        compile_extra += ['-DVMPROF_UNIX']
+        compile_extra += ['-DVMPROF_MAC']
+        if sys.platform.startswith('freebsd'):
+            _libs = ['unwind']
+        else:
+            _libs = []
 
 
-eci_kwds = dict(
-    include_dirs = [SRC, SHARED, BACKTRACE],
-    includes = ['rvmprof.h','vmprof_stack.h'],
-    libraries = _libs,
-    separate_module_files = [
-        SRC.join('rvmprof.c'),
-        SHARED.join('compat.c'),
-        SHARED.join('machine.c'),
-        SHARED.join('vmp_stack.c'),
-        SHARED.join('vmprof_memory.c'),
-        SHARED.join('vmprof_common.c'),
-        # symbol table already in separate_module_files
-    ] + separate_module_files,
-    post_include_bits=[],
-    compile_extra=compile_extra
-    )
-if sys.platform != 'win32':
-    eci_kwds['separate_module_files'].append(
-        SHARED.join('vmprof_mt.c'),
-    )
-global_eci = ExternalCompilationInfo(**eci_kwds)
+    eci_kwds = dict(
+        include_dirs = [SRC, SHARED, BACKTRACE],
+        includes = ['rvmprof.h','vmprof_stack.h'],
+        libraries = _libs,
+        separate_module_files = [
+            SRC.join('rvmprof.c'),
+            SHARED.join('compat.c'),
+            SHARED.join('machine.c'),
+            SHARED.join('vmp_stack.c'),
+            SHARED.join('vmprof_memory.c'),
+            SHARED.join('vmprof_common.c'),
+            # symbol table already in separate_module_files
+        ] + separate_module_files,
+        post_include_bits=[],
+        compile_extra=compile_extra
+        )
+    if sys.platform != 'win32':
+        eci_kwds['separate_module_files'].append(
+            SHARED.join('vmprof_mt.c'),
+        )
+    make_eci.called = True
+    return ExternalCompilationInfo(**eci_kwds), eci_kwds
+make_eci.called = False
 
 def configure_libbacktrace_linux():
     bits = 32 if sys.maxsize == 2**31-1 else 64
@@ -88,11 +94,11 @@
     if sys.platform.startswith('linux'):
         configure_libbacktrace_linux()
 
+    eci, eci_kwds = make_eci()
     eci_kwds['compile_extra'].append('-DRPYTHON_LL2CTYPES')
     platform.verify_eci(ExternalCompilationInfo(
                         **eci_kwds))
 
-    eci = global_eci
     vmprof_init = rffi.llexternal("vmprof_init",
                                   [rffi.INT, rffi.DOUBLE, rffi.INT, rffi.INT,
                                    rffi.CCHARP, rffi.INT, rffi.INT],
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to