Initial Commit

This commit is contained in:
2023-10-28 17:42:18 +02:00
parent 517470b42a
commit 6ab8de5125
6 changed files with 117 additions and 0 deletions

39
.gitignore vendored Normal file
View File

@@ -0,0 +1,39 @@
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
**/build
**/lcoverage
.idea
cmake-*
.vscode
**/CMakeFiles
**/gcovr-report

15
CMakeLists.txt Normal file
View File

@@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.5)
project(testcpy)
set( CMAKE_CXX_STANDARD 17)
set( CMAKE_CXX_STANDARD_REQUIRED ON )
find_package(Python3 3.11...3.11.9 COMPONENTS Interpreter Development REQUIRED)
message("Python_FOUND:${Python3_FOUND}")
message("Python_VERSION:${Python3_VERSION}")
message("Python_Development_FOUND:${Python3_Development_FOUND}")
message("Python_LIBRARIES:${Python3_LIBRARIES}")
message("Python_INCLUDE_DIRS ${Python3_INCLUDE_DIRS}")
add_subdirectory(src)

6
src/CMakeLists.txt Normal file
View File

@@ -0,0 +1,6 @@
include_directories(${Python3_INCLUDE_DIRS})
add_executable(main main.cc PyWrap.cc)
target_link_libraries(main ${Python3_LIBRARIES})

32
src/PyWrap.cc Normal file
View File

@@ -0,0 +1,32 @@
#define PY_SSIZE_T_CLEAN
#include <stdexcept>
#include "PyWrap.h"
namespace pywrap {
void PyWrap::doCommand(const std::string& command)
{
auto status = initPython(command);
if (PyStatus_Exception(status)) {
throw std::runtime_error("Error initializing Python");
}
Py_RunMain();
}
PyStatus PyWrap::initPython(const std::string& command)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
config.isolated = 0;
wchar_t* commandCoded = Py_DecodeLocale(command.c_str(), NULL);
config.run_command = commandCoded;
status = PyConfig_Read(&config);
if (PyStatus_Exception(status)) {
throw std::runtime_error("Error reading config");
}
status = Py_InitializeFromConfig(&config);
PyConfig_Clear(&config);
return status;
}
}

17
src/PyWrap.h Normal file
View File

@@ -0,0 +1,17 @@
#ifndef PYWRAP_H
#define PYWRAP_H
#include <Python.h>
#include <string>
namespace pywrap {
class PyWrap {
public:
PyWrap() = default;
~PyWrap() = default;
void doCommand(const std::string& command);
private:
PyStatus initPython(const std::string& command);
};
} /* namespace python */
#endif /* PYWRAP_H */

8
src/main.cc Normal file
View File

@@ -0,0 +1,8 @@
#include "PyWrap.h"
int main(int argc, char* argv[])
{
auto wrap = pywrap::PyWrap();
wrap.doCommand("from stree import Stree; print(Stree().version())");
return 0;
}