diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..1d0fdf2134f8da1096da1c62b4dca2bed963d999 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,35 @@ +project(dap_app_cli_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_definitions("-fpic") +add_definitions("-DDAP_LOG_MT") + +if(NOT (${SUBMODULES_NO_BUILD} MATCHES ON)) + if (NOT (TARGET dap_core)) + add_subdirectory(libdap) + target_compile_options( + dap_core PRIVATE + "-fpic" + ) + endif() +endif() + +file(GLOB APP_CLI_PYTHON_SRCS src/*.c) +file(GLOB APP_CLI_PYTHON_HEADERS include/*.h) + +set(Python_ADDITIONAL_VERSIONS 3.7 3.6 3.5 3.4) +find_package (PythonLibs REQUIRED) +include_directories(${PYTHON_INCLUDE_DIR} include/) + +add_library(${PROJECT_NAME} STATIC ${APP_CLI_PYTHON_SRCS} ${APP_CLI_PYTHON_HEADERS}) + +target_link_libraries(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} dap_core dap_app_cli ) + +target_include_directories(${PROJECT_NAME} PUBLIC include/ ) + diff --git a/include/libdap-app-cli-python.h b/include/libdap-app-cli-python.h new file mode 100644 index 0000000000000000000000000000000000000000..5d16592c7f9fa93fed063a76a8d4f3f8687f8b87 --- /dev/null +++ b/include/libdap-app-cli-python.h @@ -0,0 +1,79 @@ +#pragma once + +#define PY_SSIZE_T_CLEAN +#include <Python.h> +#include "dap_common.h" +#include "dap_app_cli.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct PyAppCli{ + PyObject_HEAD +}PyAppCliObject; + + +PyObject* dap_app_cli_main_py(PyObject *self, PyObject *args); + +static PyMethodDef AppCliMethods[] = { + {"main", dap_app_cli_main_py, METH_VARARGS | METH_STATIC, "Main CLI function"}, + {NULL, NULL, 0, NULL} +}; + +static PyTypeObject DapAppCli_dapAppCliType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.AppCli", /* tp_name */ + sizeof(PyAppCliObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "AppCli object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + AppCliMethods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc*/ + 0, /* tp_bases*/ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ + 0, /* tp_del */ + 0, /* tp_version_tag*/ + 0, /* tp_finalize*/ +}; + +#ifdef __cplusplus +} +#endif diff --git a/src/libdap-app-cli-python.c b/src/libdap-app-cli-python.c new file mode 100644 index 0000000000000000000000000000000000000000..3a03edcf7c6f2cbc6c6a0335c5d1119fcc4098af --- /dev/null +++ b/src/libdap-app-cli-python.c @@ -0,0 +1,32 @@ +#include "dap_common.h" +#include "libdap-app-cli-python.h" + +#define LOG_TAG "libdap-app-cli-crypto" + +/** + * @brief dap_app_cli_main_py + * @param self + * @param args + * @return + */ +PyObject* dap_app_cli_main_py(PyObject *self, PyObject *args) +{ + (void) self; + char *l_app_name = NULL; + int l_argc = 0; + char ** l_argv = NULL; + PyObject* l_args_py = NULL; + if (!PyArg_ParseTuple(args, "sI", &l_app_name, &l_args_py)) + return NULL; + + Py_ssize_t l_args_py_size = PyList_Size(l_args_py); + if ( l_args_py_size ){ + l_argc = l_args_py_size; + l_argv = DAP_NEW_Z_SIZE(char*, sizeof(char**)*l_argc ); + for ( int i = 0; i< l_argc; i++){ + l_argv[i] = PyBytes_AsString(PyList_GetItem(l_args_py, i)); + } + } + + return PyLong_FromLong((long) dap_app_cli_main(l_app_name,l_argc,l_argv)); +}