From c813334cdddc713d2a0e80f8413d04978280dde1 Mon Sep 17 00:00:00 2001 From: Alexey Stratulat <--local> Date: Wed, 31 Jul 2019 16:03:41 +0700 Subject: [PATCH] Created a basis for dap_server_core wrapping --- .gitmodules | 9 ++++++ CMakeLists.txt | 49 +++++++++++++++++++++++++++++ include/libdap-server-core-python.h | 36 +++++++++++++++++++++ libdap | 1 + libdap-crypto | 1 + libdap-server-core | 1 + src/libdap-server-core-python.c | 38 ++++++++++++++++++++++ 7 files changed, 135 insertions(+) create mode 100644 .gitmodules create mode 100644 CMakeLists.txt create mode 100644 include/libdap-server-core-python.h create mode 160000 libdap create mode 160000 libdap-crypto create mode 160000 libdap-server-core create mode 100644 src/libdap-server-core-python.c diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..85477867 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "libdap-server-core"] + path = libdap-server-core + url = https://gitlab.demlabs.net/cellframe/libdap-server-core.git +[submodule "libdap"] + path = libdap + url = https://gitlab.demlabs.net/cellframe/libdap.git +[submodule "libdap-crypto"] + path = libdap-crypto + url = https://gitlab.demlabs.net/cellframe/libdap-crypto.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..6a66d475 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,49 @@ +project(dap_server_core_python_module C) +cmake_minimum_required(VERSION 2.8) + +set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_COLOR_MAKEFILE ON) +set(CMAKE_C_STANDARD 11) +set(SUBMODULES_NO_BUILD ON) + +add_subdirectory(libdap) +add_subdirectory(libdap-crypto) +add_subdirectory(libdap-server-core) + +file(GLOB SERVER_CORE_PYTHON_SRCS src/*.c) +file(GLOB SERVER_CORE_PYTHON_HEADERS include/*.h) + +set(Python_ADDITIONAL_VERSIONS 3.7) +find_package (PythonLibs REQUIRED) +#find_package(PkgConfig) +#pkg_check_modules(PC_JSON-C REQUIRED json-c) +include_directories(${PYTHON_INCLUDE_DIR} include/) + +add_library(${PROJECT_NAME} SHARED ${SERVER_CORE_PYTHON_SRCS} ${SERVER_CORE_PYTHON_HEADERS}) + +target_link_libraries(${PROJECT_NAME}) + +target_compile_options( + dap_server_core PRIVATE + "-fpic" +) + +target_compile_options( + dap_core PRIVATE + "-fpic" +) +target_compile_options( + dap_crypto PRIVATE + "-fpic" +) + + +#target_link_libraries(${PROJECT_NAME} dap_core dap_crypto) +#targat_link_libraries(${PROJECT_NAME} dap_server_core) +target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_server_core) + +#if(BUILD_DAP_PYTHON_TESTS) +# add_subdirectory(test) +# enable_testing() +#endif() + diff --git a/include/libdap-server-core-python.h b/include/libdap-server-core-python.h new file mode 100644 index 00000000..87b2402a --- /dev/null +++ b/include/libdap-server-core-python.h @@ -0,0 +1,36 @@ +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#include "dap_server.h" + +#ifdef __cplusplus +extern "C" { +#endif + +static PyObject *dap_server_core_init(PyObject *self, PyObject *args); +static PyObject *dap_server_core_deinit(); + +static PyMethodDef DapServerCorePythonMethods[] = { + {"init", dap_server_core_init, METH_VARARGS, "Initialization of the DAP (Deus Applicaions Prototypes) server core library"}, + {"deinit", dap_server_core_deinit, METH_NOARGS, "Deinitialization of the DAP (Deus Applicaions Prototypes) server core library"}, + {NULL, NULL, 0, NULL} +}; + +static struct PyModuleDef dapservercorepythonmodule = { + PyModuleDef_HEAD_INIT, + "libdap_python_module", /* name of module */ + NULL, /* module documentation, may be NULL */ + -1, /* size of per-interpreter state of the module, + or -1 if the module keeps state in global variables. */ + DapServerCorePythonMethods +}; + +PyMODINIT_FUNC PyInit_libdap_server_core_python_module(void); + + + + + + +#ifdef __cplusplus +} +#endif diff --git a/libdap b/libdap new file mode 160000 index 00000000..67993d1f --- /dev/null +++ b/libdap @@ -0,0 +1 @@ +Subproject commit 67993d1f4cec44de464acee32a4d4f71d51c7e7d diff --git a/libdap-crypto b/libdap-crypto new file mode 160000 index 00000000..6249887f --- /dev/null +++ b/libdap-crypto @@ -0,0 +1 @@ +Subproject commit 6249887fdd5c9ed88eb26c1e10f853ea9f7001b6 diff --git a/libdap-server-core b/libdap-server-core new file mode 160000 index 00000000..6778521f --- /dev/null +++ b/libdap-server-core @@ -0,0 +1 @@ +Subproject commit 6778521f9f646e2985994e63f470067b3e2c1e48 diff --git a/src/libdap-server-core-python.c b/src/libdap-server-core-python.c new file mode 100644 index 00000000..431db0e3 --- /dev/null +++ b/src/libdap-server-core-python.c @@ -0,0 +1,38 @@ +#include "libdap-server-core-python.h" + + +static PyObject *dap_server_core_init(PyObject *self, PyObject *args){ + return PyLong_FromLong(0); +} +static PyObject *dap_server_core_deinit(){ + return PyLong_FromLong(0); +} + +PyMODINIT_FUNC PyInit_libdap_server_core_python_module(void){ + return PyModule_Create(&dapservercorepythonmodule); +} + +int main(int argc, char **argv) { + wchar_t *program = Py_DecodeLocale(argv[0], NULL); + if (program == NULL) { + fprintf(stderr, "Fatal error: cannot decode argv[0]\n"); + exit(1); + } + + /* Add a built-in module, before Py_Initialize */ + PyImport_AppendInittab("libdap_server_core_python_module", PyInit_libdap_server_core_python_module); + + /* Pass argv[0] to the Python interpreter */ + Py_SetProgramName(program); + + /* Initialize the Python interpreter. Required. */ + Py_Initialize(); + + /* Optionally import the module; alternatively, + import can be deferred until the embedded script + imports it. */ + PyImport_ImportModule("libdap_server_core_python_module"); + + PyMem_RawFree(program); + return 0; +} -- GitLab