From 5f64aeb1d89c44cdc95ed0cf48d90b0abcf526f5 Mon Sep 17 00:00:00 2001 From: Alexey Stratulat <alexey.stratulat@demlabs.net> Date: Sat, 8 Jun 2019 00:25:12 +0700 Subject: [PATCH] The problem with the names was fixed, the library itself is now called libdap_python_module. The libdapConnector.py file was also created, which contains the dap class, and is responsible for working with libdap_python_module. Fixed CMake file so that subprojects are built with the -fPIC flag. Until I learned to collect dynamic libraries and set certain parameters in CMake. Also added that when cmake is running from the src directory, it copies the file libdapConnector.py. --- CMakeLists.txt | 32 +++++++++++++++++++++++++++----- src/libdap-python.c | 8 ++++---- src/libdap-python.h | 4 ++-- src/libdapConnector.py | 15 +++++++++++++++ 4 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 src/libdapConnector.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 29eeafc..c0447f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,21 +1,43 @@ -project(dap-python C) +project(dap_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) +set(SUBMODULES_NO_BUILD ON) add_subdirectory(libdap) +add_subdirectory(libdap-crypto) file(GLOB CORE_SRCS src/*.c) file(GLOB CORE_HEADERS src/*.h) -set(Python_ADDITIONAL_VERSIONS 2.7) -find_package (PythonLibs) +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}) -add_library(${PROJECT_NAME} STATIC ${CORE_SRCS} ${CORE_UNIX_SRCS}) +#set(CMAKE_C_FLAGS "-fpic") +#set_property(GLOBAL PROPERTY CMAKE_C_FLAGS "-std=c11 -Wall -Wextra -fpic") + +#target_link_libraries(${PROJECT_NAME} dap_core) + +#add_executable(${PROJECT_NAME} ${CORE_SRCS} ${CORE_UNIX_SRCS}) +add_library(${PROJECT_NAME} SHARED ${CORE_SRCS} ${CORE_UNIX_SRCS}) +#add_library(${PROJECT_NAME} STATIC ${CORE_SRCS} ${CORE_UNIX_SRCS}) + +target_link_libraries(${PROJECT_NAME} ${PYTHON_LIBRARIES}) + +target_compile_options( + dap_core PRIVATE + "-fpic" +) + +target_link_libraries(${PROJECT_NAME} dap_core dap_crypto) + +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/src/libdapConnector.py + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) if(BUILD_DAP_TESTS) enable_testing() diff --git a/src/libdap-python.c b/src/libdap-python.c index fe18fae..5e03e03 100644 --- a/src/libdap-python.c +++ b/src/libdap-python.c @@ -12,7 +12,7 @@ static PyObject *dap_init(PyObject *self, PyObject *args) int lenDapAppName=0; int countSeparators=0; int lenMassives = 0; - while (*(data+lenMassives) != '\0' ||*(data+lenMassives) != NULL) + while (*(data+lenMassives) != '\0') { if (*(data+lenMassives)=='\n') { @@ -47,7 +47,7 @@ static PyObject *dap_deinit(PyObject *self) return PyLong_FromLong(0); } -PyMODINIT_FUNC PyInit_dap(void) +PyMODINIT_FUNC PyInit_libdap_python_module(void) { return PyModule_Create(&dapmodule); } @@ -60,7 +60,7 @@ int main(int argc, char **argv) { } /* Add a built-in module, before Py_Initialize */ - PyImport_AppendInittab("dap", PyInit_dap); + PyImport_AppendInittab("libdap_python_module", PyInit_libdap_python_module); /* Pass argv[0] to the Python interpreter */ Py_SetProgramName(program); @@ -71,7 +71,7 @@ int main(int argc, char **argv) { /* Optionally import the module; alternatively, import can be deferred until the embedded script imports it. */ - PyImport_ImportModule("dap"); + PyImport_ImportModule("libdap_python_module"); PyMem_RawFree(program); return 0; diff --git a/src/libdap-python.h b/src/libdap-python.h index 6f12eb9..02f9806 100644 --- a/src/libdap-python.h +++ b/src/libdap-python.h @@ -19,14 +19,14 @@ static PyMethodDef DapMethods[] = { static struct PyModuleDef dapmodule = { PyModuleDef_HEAD_INIT, - "dap", /* name of module */ + "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. */ DapMethods }; -PyMODINIT_FUNC PyInit_dap(void); +PyMODINIT_FUNC PyInit_libdap_python_module(void); #ifdef __cplusplus } diff --git a/src/libdapConnector.py b/src/libdapConnector.py new file mode 100644 index 0000000..03c03b4 --- /dev/null +++ b/src/libdapConnector.py @@ -0,0 +1,15 @@ +import json +import libdap_python_module + +class Dap: + def __init__(self, data): + res = json.loads(data) + self.modules=res['modules'] + self.config_dir=res['dap']['config_dir'] + self.log_level=res['dap']['log_level'] + self.application_name=res['dap']['application_name'] +# dap.init('/opt/var/ler\njaryt\ndebug') + libdap_python_module.init(res['dap']['config_dir']+"\n"+res['dap']['application_name']+"\n") + def __del__(self): + libdap_python_module.deinit() + -- GitLab