From f2541bb90af059680aa7036f315f052175999355 Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Wed, 8 Apr 2015 03:09:47 +0000 Subject: Imported from /home/lorry/working-area/delta_boost-tarball/boost_1_58_0.tar.bz2. --- libs/python/meta/libraries.json | 15 +++++++++++++++ libs/python/src/exec.cpp | 16 +++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 libs/python/meta/libraries.json (limited to 'libs/python') diff --git a/libs/python/meta/libraries.json b/libs/python/meta/libraries.json new file mode 100644 index 000000000..9fdb065db --- /dev/null +++ b/libs/python/meta/libraries.json @@ -0,0 +1,15 @@ +{ + "key": "python", + "name": "Python", + "authors": [ + "Dave Abrahams" + ], + "description": "The Boost Python Library is a framework for interfacing Python and C++. It allows you to quickly and seamlessly expose C++ classes functions and objects to Python, and vice-versa, using no special tools -- just your C++ compiler.", + "category": [ + "Inter-language" + ], + "maintainers": [ + "Ralf Grosse-Kunstleve ", + "Ravi Rajagopal " + ] +} diff --git a/libs/python/src/exec.cpp b/libs/python/src/exec.cpp index 9fe1b23b7..2910db7c8 100644 --- a/libs/python/src/exec.cpp +++ b/libs/python/src/exec.cpp @@ -84,22 +84,24 @@ object BOOST_PYTHON_DECL exec_file(str filename, object global, object local) if (local.is_none()) local = global; // should be 'char const *' but older python versions don't use 'const' yet. char *f = python::extract(filename); + + // Let python open the file to avoid potential binary incompatibilities. #if PY_VERSION_HEX >= 0x03000000 - // TODO(bhy) temporary workaround for Python 3. - // should figure out a way to avoid binary incompatibilities as the Python 2 - // version did. - FILE *fs = fopen(f, "r"); + // See http://www.codeproject.com/Articles/820116/Embedding-Python-program-in-a-C-Cplusplus-code + FILE *fs = _Py_fopen(f, "r"); #else - // Let python open the file to avoid potential binary incompatibilities. PyObject *pyfile = PyFile_FromString(f, const_cast("r")); if (!pyfile) throw std::invalid_argument(std::string(f) + " : no such file"); python::handle<> file(pyfile); FILE *fs = PyFile_AsFile(file.get()); #endif - PyObject* result = PyRun_File(fs, + + int closeit = 1; // Close file before PyRun returns + PyObject* result = PyRun_FileEx(fs, f, Py_file_input, - global.ptr(), local.ptr()); + global.ptr(), local.ptr(), + closeit); if (!result) throw_error_already_set(); return object(detail::new_reference(result)); } -- cgit v1.2.1