Author: Armin Rigo <[email protected]>
Branch:
Changeset: r87367:edaa11222a1e
Date: 2016-09-24 22:33 +0200
http://bitbucket.org/pypy/pypy/changeset/edaa11222a1e/
Log: Document 'search-path-from-libpypy', and write down what it
simplifies in embedding.rst (fwiw)
diff --git a/pypy/doc/embedding.rst b/pypy/doc/embedding.rst
--- a/pypy/doc/embedding.rst
+++ b/pypy/doc/embedding.rst
@@ -34,9 +34,11 @@
This function searches the PyPy standard library starting from the given
"PyPy home directory". The arguments are:
- * ``home``: NULL terminated path to an executable inside the pypy directory
+ * ``home``: path to an executable inside the pypy directory
(can be a .so name, can be made up). Used to look up the standard
- library, and is also set as ``sys.executable``.
+ library, and is also set as ``sys.executable``. From PyPy 5.5, you can
+ just say NULL here, as long as the ``libpypy-c.so/dylib/dll`` is itself
+ inside this directory.
* ``verbose``: if non-zero, it will print error messages to stderr
@@ -82,18 +84,14 @@
Note that this API is a lot more minimal than say CPython C API, so at first
it's obvious to think that you can't do much. However, the trick is to do
-all the logic in Python and expose it via `cffi`_ callbacks. Let's assume
-we're on linux and pypy is installed in ``/opt/pypy`` (with
-subdirectories like ``lib-python`` and ``lib_pypy``), and with the
-library in ``/opt/pypy/bin/libpypy-c.so``. (It doesn't need to be
-installed; you can also replace these paths with a local extract of the
-installation tarballs, or with your local checkout of pypy.) We write a
-little C program:
+all the logic in Python and expose it via `cffi`_ callbacks.
+We write a little C program:
.. code-block:: c
#include "PyPy.h"
#include <stdio.h>
+ #include <stdlib.h>
static char source[] = "print 'hello from pypy'";
@@ -102,9 +100,9 @@
int res;
rpython_startup_code();
- /* note: in the path /opt/pypy/x, the final x is ignored and
- replaced with lib-python and lib_pypy. */
- res = pypy_setup_home("/opt/pypy/x", 1);
+ /* Before PyPy 5.5, you may need to say e.g. "/opt/pypy/bin" instead
+ * of NULL. */
+ res = pypy_setup_home(NULL, 1);
if (res) {
printf("Error setting pypy home!\n");
return 1;
@@ -123,11 +121,6 @@
$ LD_LIBRARY_PATH=/opt/pypy/bin ./x
hello from pypy
-.. note:: If the compilation fails because of missing PyPy.h header file,
- you are running PyPy <= 2.2.1. Get it here__.
-
-.. __:
https://bitbucket.org/pypy/pypy/raw/c4cd6eca9358066571500ac82aaacfdaa3889e8c/include/PyPy.h
-
On OSX it is necessary to set the rpath of the binary if one wants to link to
it,
with a command like::
@@ -181,6 +174,7 @@
/* C example */
#include "PyPy.h"
#include <stdio.h>
+ #include <stdlib.h>
struct API {
double (*add_numbers)(double x, double y);
@@ -196,7 +190,7 @@
int res;
rpython_startup_code();
- res = pypy_setup_home("/opt/pypy/x", 1);
+ res = pypy_setup_home(NULL, 1);
if (res) {
fprintf(stderr, "Error setting pypy home!\n");
return -1;
@@ -237,6 +231,8 @@
Finding pypy_home
-----------------
+**You can usually skip this section if you are running PyPy >= 5.5.**
+
The function pypy_setup_home() takes as first parameter the path to a
file from which it can deduce the location of the standard library.
More precisely, it tries to remove final components until it finds
diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst
--- a/pypy/doc/whatsnew-head.rst
+++ b/pypy/doc/whatsnew-head.rst
@@ -21,3 +21,14 @@
JIT residual calls: if the called function starts with a fast-path
like "if x.foo != 0: return x.foo", then inline the check before
doing the CALL. For now, string hashing is about the only case.
+
+.. branch: search-path-from-libpypy
+
+The compiled pypy now looks for its lib-python/lib_pypy path starting
+from the location of the *libpypy-c* instead of the executable. This is
+arguably more consistent, and also it is what occurs anyway if you're
+embedding pypy. Linux distribution packagers, take note! At a minimum,
+the ``libpypy-c.so`` must really be inside the path containing
+``lib-python`` and ``lib_pypy``. Of course, you can put a symlink to it
+from somewhere else. You no longer have to do the same with the
+``pypy`` executable, as long as it finds its ``libpypy-c.so`` library.
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit