diff --git a/samples/python_extension/README.md b/samples/python_extension/README.md index 4cb791768a2..8ae6b7d5dc3 100644 --- a/samples/python_extension/README.md +++ b/samples/python_extension/README.md @@ -17,13 +17,13 @@ To build and run the sample do the following: * On macOS copy Kotlin binary to extension's directory and change install name with `install_name_tool` tool, i.e. ``` - sudo cp libserver.dylib /Library/Python/2.7/site-packages/ + sudo cp ./build/libserver.dylib /Library/Python/2.7/site-packages/ sudo install_name_tool /Library/Python/2.7/site-packages/kotlin_bridge.so \ -change libserver.dylib @loader_path/libserver.dylib ``` * On Linux copy Kotlin binary in some place where libraries could be loaded from, i.e. ``` - cp libserver.so /usr/local/lib/ + cp ./build/libserver.so /usr/local/lib/ ldconfig ``` or modify dynamic loader search path with diff --git a/samples/python_extension/build.sh b/samples/python_extension/build.sh index 483a1970853..f091f2cda3d 100755 --- a/samples/python_extension/build.sh +++ b/samples/python_extension/build.sh @@ -11,6 +11,7 @@ fi KONAN_USER_DIR=${KONAN_DATA_DIR:-"$HOME/.konan"} KONAN_DEPS="$KONAN_USER_DIR/dependencies" +# python3 shall work as well. PYTHON=python mkdir -p $DIR/build diff --git a/samples/python_extension/src/main/c/kotlin_bridge.c b/samples/python_extension/src/main/c/kotlin_bridge.c index 239e5134896..d010e9ff6fd 100644 --- a/samples/python_extension/src/main/c/kotlin_bridge.c +++ b/samples/python_extension/src/main/c/kotlin_bridge.c @@ -108,6 +108,38 @@ static PyMethodDef kotlin_bridge_funcs[] = { { NULL } }; +#if PY_MAJOR_VERSION >= 3 + +struct module_state { + server_kref_demo_Server server; +}; + +static int kotlin_bridge_traverse(PyObject *m, visitproc visit, void *arg) { + return 0; +} + +static int kotlin_bridge_clear(PyObject *m) { + return 0; +} + +static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, + "kotlin_bridge", + NULL, + sizeof(struct module_state), + kotlin_bridge_funcs, + NULL, + kotlin_bridge_traverse, + kotlin_bridge_clear, + NULL +}; + +PyMODINIT_FUNC PyInit_kotlin_bridge(void) { + PyObject *module = PyModule_Create(&moduledef); + return module; +} +#else void initkotlin_bridge(void) { Py_InitModule3("kotlin_bridge", kotlin_bridge_funcs, "Kotlin/Native example module"); } +#endif diff --git a/samples/python_extension/src/main/python/main.py b/samples/python_extension/src/main/python/main.py index 021f032ad34..bb7111128e5 100644 --- a/samples/python_extension/src/main/python/main.py +++ b/samples/python_extension/src/main/python/main.py @@ -9,13 +9,13 @@ import kotlin_bridge session = kotlin_bridge.open_session(239, 'konan') message = kotlin_bridge.greet_server(session) -print "Greet '%s'" % (message) +print("Greet '{}'".format(message)) message = kotlin_bridge.concat_server(session, "Coding", "fun") -print "Concat '%s'" % (message) +print("Concat '{}'".format(message)) message = kotlin_bridge.add_server(session, 1, 60) -print "Sum '%d'" % (message) +print("Sum '{}'".format(message)) kotlin_bridge.close_session(session)