Add python extensions to cpp libraries
This commit is contained in:
parent
784577ebb9
commit
6549160985
@ -19,16 +19,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include <ios> // std::ios
|
#include <ios> // std::ios
|
||||||
#include <iostream> // std::cin, std::cout, std::cerr
|
#include <iostream> // std::cin, std::cout, std::cerr
|
||||||
#include <string> // std::string
|
#include <string> // std::string
|
||||||
#include "lib/comfortable_swipe"
|
#include "lib/comfortable-swipe"
|
||||||
|
|
||||||
/* A FORWARD DECLARATION */
|
/* A FORWARD DECLARATION */
|
||||||
int main(int argc, char** args);
|
int main(int argc, char** args);
|
||||||
|
|
||||||
/* Import python module here */
|
|
||||||
#include "comfortable-swipe.python.cpp"
|
|
||||||
|
|
||||||
/* MAIN DRIVER FUNCTION */
|
/* MAIN DRIVER FUNCTION */
|
||||||
|
|
||||||
int main(int argc, char** args)
|
int main(int argc, char** args)
|
||||||
{
|
{
|
||||||
// improve buffering by decoupling loggers from stdio
|
// improve buffering by decoupling loggers from stdio
|
||||||
|
|||||||
@ -1,82 +0,0 @@
|
|||||||
/*
|
|
||||||
Comfortable Swipe
|
|
||||||
by Rico Tiongson
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Porting to Python */
|
|
||||||
#ifdef __COMFORTABLE_SWIPE__PYTHON__
|
|
||||||
#ifndef __COMFORTABLE_SWIPE__PYTHON_MAIN__
|
|
||||||
#define __COMFORTABLE_SWIPE__PYTHON_MAIN__
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <Python.h>
|
|
||||||
|
|
||||||
// some useful readable macros
|
|
||||||
// http://python3porting.com/cextensions.html
|
|
||||||
#if PY_MAJOR_VERSION >= 3
|
|
||||||
#define MOD_ERROR_VAL NULL
|
|
||||||
#define MOD_SUCCESS_VAL(val) val
|
|
||||||
#define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void)
|
|
||||||
#define MOD_DEF(ob, name, doc, methods) \
|
|
||||||
static struct PyModuleDef moduledef = { \
|
|
||||||
PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \
|
|
||||||
ob = PyModule_Create(&moduledef);
|
|
||||||
#else
|
|
||||||
#define MOD_ERROR_VAL
|
|
||||||
#define MOD_SUCCESS_VAL(val)
|
|
||||||
#define MOD_INIT(name) void init##name(void)
|
|
||||||
#define MOD_DEF(ob, name, doc, methods) \
|
|
||||||
ob = Py_InitModule3(name, methods, doc);
|
|
||||||
#endif /* PY_MAJOR_VERSION >= 3 */
|
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
test(PyObject * self, PyObject * args, PyObject * kwargs)
|
|
||||||
{
|
|
||||||
std::puts("TESTING FUNCTION");
|
|
||||||
Py_RETURN_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// python module methods
|
|
||||||
static PyMethodDef comfortable_swipe_methods[] = {
|
|
||||||
/* The cast of the function is necessary since PyCFunction values
|
|
||||||
* only take two PyObject* parameters, and test() takes
|
|
||||||
* three.
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
"test",
|
|
||||||
(PyCFunction) test,
|
|
||||||
METH_VARARGS | METH_KEYWORDS,
|
|
||||||
"Test"
|
|
||||||
},
|
|
||||||
{NULL, NULL, 0, NULL} /* sentinel */
|
|
||||||
};
|
|
||||||
|
|
||||||
// how the python module is defined
|
|
||||||
MOD_INIT(comfortable_swipe)
|
|
||||||
{
|
|
||||||
PyObject *m;
|
|
||||||
|
|
||||||
MOD_DEF(m, "comfortable_swipe", "Comfortable swipe", comfortable_swipe_methods);
|
|
||||||
|
|
||||||
if (m == NULL)
|
|
||||||
return MOD_ERROR_VAL;
|
|
||||||
|
|
||||||
return MOD_SUCCESS_VAL(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __COMFORTABLE_SWIPE__PYTHON_MAIN__ */
|
|
||||||
#endif /* __COMFORTABLE_SWIPE__PYTHON__ */
|
|
||||||
0
comfortable_swipe/__init__.py
Normal file
0
comfortable_swipe/__init__.py
Normal file
@ -1,44 +0,0 @@
|
|||||||
#ifndef __COMFORTABLE_SWIPE__
|
|
||||||
#define __COMFORTABLE_SWIPE__
|
|
||||||
|
|
||||||
/*
|
|
||||||
Comfortable Swipe
|
|
||||||
by Rico Tiongson
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "index.hpp"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make sure to include all implementation (.cpp) files below to be ready for export.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "gesture/xdo_gesture.cpp"
|
|
||||||
#include "gesture/swipe_gesture.cpp"
|
|
||||||
#include "gesture/swipe_gesture.regex.cpp"
|
|
||||||
#include "service/autostart.cpp"
|
|
||||||
#include "service/buffer.cpp"
|
|
||||||
#include "service/config.cpp"
|
|
||||||
#include "service/debug.cpp"
|
|
||||||
#include "service/help.cpp"
|
|
||||||
#include "service/restart.cpp"
|
|
||||||
#include "service/start.cpp"
|
|
||||||
#include "service/status.cpp"
|
|
||||||
#include "service/stop.cpp"
|
|
||||||
#include "util/autostart_filename.cpp"
|
|
||||||
#include "util/conf_filename.cpp"
|
|
||||||
#include "util/read_config_file.cpp"
|
|
||||||
|
|
||||||
#endif /* __COMFORTABLE_SWIPE__ */
|
|
||||||
@ -1,68 +0,0 @@
|
|||||||
#ifndef __COMFORTABLE_SWIPE__index_hpp__
|
|
||||||
#define __COMFORTABLE_SWIPE__index_hpp__
|
|
||||||
|
|
||||||
/*
|
|
||||||
Comfortable Swipe
|
|
||||||
by Rico Tiongson
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// global defines
|
|
||||||
#ifndef __COMFORTABLE_SWIPE__PROGRAM__
|
|
||||||
#define __COMFORTABLE_SWIPE__PROGRAM__ "/usr/local/bin/comfortable-swipe"
|
|
||||||
#endif /* __COMFORTABLE_SWIPE__PROGRAM__ */
|
|
||||||
|
|
||||||
#ifndef __COMFORTABLE_SWIPE__CONFIG__
|
|
||||||
#define __COMFORTABLE_SWIPE__CONFIG__ "/usr/local/share/comfortable-swipe/comfortable-swipe.conf"
|
|
||||||
#endif /* __COMFORTABLE_SWIPE__CONFIG__ */
|
|
||||||
|
|
||||||
#ifndef __COMFORTABLE_SWIPE__VERSION__
|
|
||||||
#error __COMFORTABLE_SWIPE__VERSION__ must be defined.
|
|
||||||
#endif /* __COMFORTABLE_SWIPE__VERSION__ */
|
|
||||||
|
|
||||||
#include <map> // std::map
|
|
||||||
#include <string> // std::string
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make sure to include your header files here so that they can be imported by other modules.
|
|
||||||
*/
|
|
||||||
#include "gesture/xdo_gesture.h"
|
|
||||||
#include "gesture/swipe_gesture.h"
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
namespace comfortable_swipe
|
|
||||||
{
|
|
||||||
namespace util
|
|
||||||
{
|
|
||||||
const char* autostart_filename();
|
|
||||||
constexpr const char* conf_filename();
|
|
||||||
std::map<std::string, std::string> read_config_file(const char*);
|
|
||||||
}
|
|
||||||
namespace service
|
|
||||||
{
|
|
||||||
void autostart();
|
|
||||||
void buffer();
|
|
||||||
void config();
|
|
||||||
void debug();
|
|
||||||
void help();
|
|
||||||
void restart();
|
|
||||||
void start();
|
|
||||||
void status();
|
|
||||||
void stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __COMFORTABLE_SWIPE__index_hpp__ */
|
|
||||||
@ -19,12 +19,12 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../util/__index__.hpp"
|
||||||
#include <iostream> // std::cerr, std::cout, std::endl
|
#include <iostream> // std::cerr, std::cout, std::endl
|
||||||
#include <fstream> // std::ifstream, std::ofstream
|
#include <fstream> // std::ifstream, std::ofstream
|
||||||
#include <string> // std::string
|
#include <string> // std::string
|
||||||
#include <cstdio> // std::remove
|
#include <cstdio> // std::remove
|
||||||
#include <cstdlib> // std::system
|
#include <cstdlib> // std::system
|
||||||
#include "../index.hpp"
|
|
||||||
|
|
||||||
namespace comfortable_swipe::service
|
namespace comfortable_swipe::service
|
||||||
{
|
{
|
||||||
|
|||||||
@ -19,8 +19,9 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../util/__index__.hpp"
|
||||||
|
#include "../gesture/__index__.hpp"
|
||||||
#include <cstdio> // fgets_unlocked, stdin
|
#include <cstdio> // fgets_unlocked, stdin
|
||||||
#include "../index.hpp"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts the comfortable-swipe service by buffering libinput debug-events.
|
* Starts the comfortable-swipe service by buffering libinput debug-events.
|
||||||
|
|||||||
@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../index.hpp"
|
#include "../util/__index__.hpp"
|
||||||
#include <cstdio> // std::puts
|
#include <cstdio> // std::puts
|
||||||
|
|
||||||
namespace comfortable_swipe::service
|
namespace comfortable_swipe::service
|
||||||
|
|||||||
@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../util/__index__.hpp"
|
||||||
#include <cstdio> // std::puts, std::printf
|
#include <cstdio> // std::puts, std::printf
|
||||||
#include "../index.hpp"
|
|
||||||
|
|
||||||
namespace comfortable_swipe::service
|
namespace comfortable_swipe::service
|
||||||
{
|
{
|
||||||
|
|||||||
@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../index.hpp"
|
#include "../service/__index__.hpp"
|
||||||
|
|
||||||
namespace comfortable_swipe::service
|
namespace comfortable_swipe::service
|
||||||
{
|
{
|
||||||
|
|||||||
@ -19,7 +19,6 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../index.hpp"
|
|
||||||
#include <cstdlib> // std::system
|
#include <cstdlib> // std::system
|
||||||
|
|
||||||
namespace comfortable_swipe::service
|
namespace comfortable_swipe::service
|
||||||
|
|||||||
@ -19,7 +19,8 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../index.hpp"
|
#include "../util/__index__.hpp"
|
||||||
|
#include "../gesture/__index__.hpp"
|
||||||
#include <stdexcept> // std::runtime_error
|
#include <stdexcept> // std::runtime_error
|
||||||
#include <unistd.h> // popen, pclose, getpid, access, F_OK
|
#include <unistd.h> // popen, pclose, getpid, access, F_OK
|
||||||
#include <memory> // std::unique_ptr
|
#include <memory> // std::unique_ptr
|
||||||
|
|||||||
@ -19,8 +19,6 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../index.hpp"
|
|
||||||
|
|
||||||
namespace comfortable_swipe::util
|
namespace comfortable_swipe::util
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
|||||||
26
setup.py
26
setup.py
@ -7,14 +7,16 @@ __DIR__ = os.path.abspath(os.path.dirname(__file__))
|
|||||||
__URL__ = 'https://github.com/Hikari9/comfortable-swipe-ubuntu'
|
__URL__ = 'https://github.com/Hikari9/comfortable-swipe-ubuntu'
|
||||||
|
|
||||||
NAME = 'comfortable-swipe'
|
NAME = 'comfortable-swipe'
|
||||||
|
PYTHON_NAME = NAME.replace('-', '_')
|
||||||
VERSION = '1.1.0'
|
VERSION = '1.1.0'
|
||||||
PROGRAM = os.path.join('/usr/local/bin', NAME)
|
PROGRAM = os.path.join('/usr/local/bin', NAME)
|
||||||
CONFIG = os.path.join(PROGRAM, 'comfortable-swipe.conf')
|
CONFIG = os.path.join('/usr/local/share', NAME, NAME + '.conf')
|
||||||
|
|
||||||
# for C++ library
|
# for C++ library
|
||||||
cpp_sources = ['comfortable-swipe.cpp']
|
cpp_sources = ['comfortable-swipe.cpp']
|
||||||
cpp_macros = dict(
|
cpp_macros = dict(
|
||||||
__COMFORTABLE_SWIPE__PYTHON__='',
|
__COMFORTABLE_SWIPE__PYTHON__='',
|
||||||
|
__COMFORTABLE_SWIPE__BOOST_PYTHON__='',
|
||||||
__COMFORTABLE_SWIPE__PYTHON_MODULE_NAME__='"{}"'.format(NAME.replace('-', '_')),
|
__COMFORTABLE_SWIPE__PYTHON_MODULE_NAME__='"{}"'.format(NAME.replace('-', '_')),
|
||||||
__COMFORTABLE_SWIPE__PROGRAM__='"{}"'.format(PROGRAM),
|
__COMFORTABLE_SWIPE__PROGRAM__='"{}"'.format(PROGRAM),
|
||||||
__COMFORTABLE_SWIPE__VERSION__='"{}"'.format(VERSION),
|
__COMFORTABLE_SWIPE__VERSION__='"{}"'.format(VERSION),
|
||||||
@ -33,16 +35,18 @@ try:
|
|||||||
with open('LICENSE', 'r') as LICENSE_file:
|
with open('LICENSE', 'r') as LICENSE_file:
|
||||||
LICENSE = LICENSE_file.read()
|
LICENSE = LICENSE_file.read()
|
||||||
|
|
||||||
# read C++ library for comfortable swipe
|
# read C++ libraries for comfortable swipe
|
||||||
comfortable_swipe = Extension(
|
extension_names = ['gesture', 'service', 'util']
|
||||||
name=NAME.replace('-', '_'),
|
extensions = []
|
||||||
define_macros=list(cpp_macros.items()),
|
|
||||||
libraries=['xdo'],
|
|
||||||
include_dirs=['/usr/local/lib'],
|
|
||||||
sources=cpp_sources,
|
|
||||||
extra_compile_args=['-O2', '-Wno-unused-result']
|
|
||||||
|
|
||||||
)
|
for extension_name in extension_names:
|
||||||
|
extensions.append(Extension(
|
||||||
|
name='{}.{}'.format(PYTHON_NAME, extension_name),
|
||||||
|
define_macros=list(cpp_macros.items()),
|
||||||
|
sources=['lib/__index__.cpp'],
|
||||||
|
extra_compile_args=['-O2', '-Wno-unused-result'],
|
||||||
|
libraries=['xdo', 'boost_python']
|
||||||
|
))
|
||||||
|
|
||||||
# setup python script
|
# setup python script
|
||||||
setup(
|
setup(
|
||||||
@ -56,7 +60,7 @@ try:
|
|||||||
url=__URL__,
|
url=__URL__,
|
||||||
# import external modules (aka. C++)
|
# import external modules (aka. C++)
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
ext_modules=[comfortable_swipe]
|
ext_modules=extensions
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user