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 29eeafcc..c0447f34 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 fe18faec..5e03e030 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 6f12eb93..02f98063 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 00000000..03c03b43
--- /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