Author: Armin Rigo <armin.r...@gmail.com>
Branch: 
Changeset: r91939:8fcad79f230c
Date: 2017-07-20 07:53 +0000
http://bitbucket.org/pypy/pypy/changeset/8fcad79f230c/

Log:    Merged in smihnea/pypy_nopax/nopax (pull request #551)

        Adding nopax option for system that use PaX

diff --git a/lib_pypy/_tkinter/tklib_build.py b/lib_pypy/_tkinter/tklib_build.py
--- a/lib_pypy/_tkinter/tklib_build.py
+++ b/lib_pypy/_tkinter/tklib_build.py
@@ -22,12 +22,23 @@
     linklibs = ['tcl', 'tk']
     libdirs = []
 else:
+    # On some Linux distributions, the tcl and tk libraries are
+    # stored in /usr/include, so we must check this case also
+    found = False
     for _ver in ['', '8.6', '8.5', '']:
         incdirs = ['/usr/include/tcl' + _ver]
         linklibs = ['tcl' + _ver, 'tk' + _ver]
         libdirs = []
         if os.path.isdir(incdirs[0]):
+            found = True
             break
+    if not found:
+        for _ver in ['8.6', '8.5', '']:
+            incdirs = ['/usr/include']
+            linklibs = ['tcl' + _ver, 'tk' + _ver]
+            libdirs=[]
+            if os.path.isfile(''.join(['/usr/lib/lib', linklibs[1], '.so'])):
+                break
 
 config_ffi = FFI()
 config_ffi.cdef("""
diff --git a/rpython/config/support.py b/rpython/config/support.py
--- a/rpython/config/support.py
+++ b/rpython/config/support.py
@@ -35,3 +35,15 @@
         return int(count)
     except (OSError, ValueError):
         return 1
+
+def detect_pax():
+    """
+    Function to determine if your system comes with PAX protection.
+    """
+    if sys.platform.startswith('linux'):
+        # we need a running process PID and 1 is always running
+        with open("/proc/1/status") as fd:
+            data = fd.read()
+        if 'PaX' in data:
+            return True
+    return False
diff --git a/rpython/translator/c/genc.py b/rpython/translator/c/genc.py
--- a/rpython/translator/c/genc.py
+++ b/rpython/translator/c/genc.py
@@ -14,6 +14,7 @@
 from rpython.translator.gensupp import uniquemodulename, NameManager
 from rpython.translator.tool.cbuild import ExternalCompilationInfo
 
+
 _CYGWIN = sys.platform == 'cygwin'
 
 _CPYTHON_RE = py.std.re.compile('^Python 2.[567]')
@@ -458,7 +459,7 @@
 
             if self.config.translation.shared:
                 mk.rule('$(PROFOPT_TARGET)', '$(TARGET) main.o',
-                         '$(CC_LINK) $(LDFLAGS_LINK) main.o -L. 
-l$(SHARED_IMPORT_LIB) -o $@ $(RPATH_FLAGS) -lgcov')
+                         ['$(CC_LINK) $(LDFLAGS_LINK) main.o -L. 
-l$(SHARED_IMPORT_LIB) -o $@ $(RPATH_FLAGS) -lgcov', '$(MAKE) postcompile 
BIN=$(PROFOPT_TARGET)'])
             else:
                 mk.definition('PROFOPT_TARGET', '$(TARGET)')
 
diff --git a/rpython/translator/platform/posix.py 
b/rpython/translator/platform/posix.py
--- a/rpython/translator/platform/posix.py
+++ b/rpython/translator/platform/posix.py
@@ -3,6 +3,7 @@
 import py, os, sys
 
 from rpython.translator.platform import Platform, log, _run_subprocess
+from rpython.config.support import detect_pax
 
 import rpython
 rpydir = str(py.path.local(rpython.__file__).join('..'))
@@ -196,9 +197,17 @@
         for args in definitions:
             m.definition(*args)
 
+        # Post compile rule to be executed after a TARGET is ran
+        #
+        # Some processing might be necessary on the resulting binary,
+        # which is received in $(BIN) parameter
+        postcompile_rule = ('postcompile', '', ['true'])
+        if detect_pax():
+            postcompile_rule[2].append('attr -q -s pax.flags -V m $(BIN)')
+
         rules = [
             ('all', '$(DEFAULT_TARGET)', []),
-            ('$(TARGET)', '$(OBJECTS)', '$(CC_LINK) $(LDFLAGSEXTRA) -o $@ 
$(OBJECTS) $(LIBDIRS) $(LIBS) $(LINKFILES) $(LDFLAGS)'),
+            ('$(TARGET)', '$(OBJECTS)', ['$(CC_LINK) $(LDFLAGSEXTRA) -o $@ 
$(OBJECTS) $(LIBDIRS) $(LIBS) $(LINKFILES) $(LDFLAGS)', '$(MAKE) postcompile 
BIN=$(TARGET)']),
             ('%.o', '%.c', '$(CC) $(CFLAGS) $(CFLAGSEXTRA) -o $@ -c $< 
$(INCLUDEDIRS)'),
             ('%.o', '%.s', '$(CC) $(CFLAGS) $(CFLAGSEXTRA) -o $@ -c $< 
$(INCLUDEDIRS)'),
             ('%.o', '%.cxx', '$(CXX) $(CFLAGS) $(CFLAGSEXTRA) -o $@ -c $< 
$(INCLUDEDIRS)'),
@@ -207,6 +216,8 @@
         for rule in rules:
             m.rule(*rule)
 
+        m.rule(*postcompile_rule)
+
         if shared:
             m.definition('SHARED_IMPORT_LIB', libname),
             m.definition('PYPY_MAIN_FUNCTION', "pypy_main_startup")
@@ -216,7 +227,7 @@
                    'int main(int argc, char* argv[]) '
                    '{ return $(PYPY_MAIN_FUNCTION)(argc, argv); }" > $@')
             m.rule('$(DEFAULT_TARGET)', ['$(TARGET)', 'main.o'],
-                   '$(CC_LINK) $(LDFLAGS_LINK) main.o -L. 
-l$(SHARED_IMPORT_LIB) -o $@ $(RPATH_FLAGS)')
+                   ['$(CC_LINK) $(LDFLAGS_LINK) main.o -L. 
-l$(SHARED_IMPORT_LIB) -o $@ $(RPATH_FLAGS)', '$(MAKE) postcompile 
BIN=$(DEFAULT_TARGET)'])
 
         return m
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to