Skip to content

Commit 848a2f3

Browse files
authored
udpates (#4)
1 parent e98443a commit 848a2f3

5 files changed

Lines changed: 51 additions & 43 deletions

File tree

.github/workflows/build_osx.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,3 @@ jobs:
2121
curl -Lo mkn https://github.com/mkn/mkn/releases/download/latest/mkn_osx
2222
chmod +x mkn
2323
KLOG=2 ./mkn clean build run -dtOa "-std=c++17 -fPIC"
24-
KLOG=2 ./mkn clean build run -dtOp test -a "-std=c++17 -fPIC"

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
# lang.pybind11
1+
# python3.module
22

3-
** python3 pybind11 maiken module **
3+
** python3 maiken module **
44

5-
[![Travis](https://travis-ci.org/mkn-mod/lang.pybind11.svg?branch=master)](https://travis-ci.org/mkn-mod/lang.pybind11)
5+
Make a python3 module from your code
66

77
Link phase module
88

99
## Prerequisites
10-
[maiken](https://github.com/Dekken/maiken)
10+
[maiken](https://github.com/mkn/mkn)
1111

1212
## Usage
1313

1414
```yaml
1515
mod:
16-
- name: lang.pybind11
16+
- name: python3.module
1717

1818
```
1919

mkn.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11

2-
name: lang.pybind11
2+
name: python3.module
33
version: master
44
property:
55
maiken_location: ${MKN_HOME}/app/mkn/${version}
66
maiken_scm: https://github.com/mkn/mkn
77

88
parent: base
9-
src: mod.pybind11.cpp
9+
src: mod.cpp
1010
mode: shared
1111

1212
profile:

mod.pybind11.cpp renamed to mod.cpp

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
Copyright (c) 2013, Philip Deegan.
2+
Copyright (c) 2024, Philip Deegan.
33
All rights reserved.
44
55
Redistribution and use in source and binary forms, with or without
@@ -28,60 +28,66 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2828
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2929
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3030
*/
31+
#include "maiken/module/init.hpp"
3132
#include <cstdint>
3233
#include <unordered_set>
33-
#include "maiken/module/init.hpp"
3434

3535
namespace mkn {
36-
namespace lang {
36+
namespace python3 {
3737

38-
class PyBind11Module : public maiken::Module {
39-
private:
38+
class ModuleMaker : public maiken::Module {
39+
private:
4040
#if defined(_WIN32)
4141
const bool config_expected = 0;
4242
#else
4343
const bool config_expected = 1;
4444
#endif
4545
bool pyconfig_found = 0;
4646
std::string HOME, PY = "python3", PYTHON, PY_CONFIG = "python-config",
47-
PY3_CONFIG = "python3-config", PATH = mkn::kul::env::GET("PATH");
47+
PY3_CONFIG = "python3-config",
48+
PATH = mkn::kul::env::GET("PATH");
4849
mkn::kul::Dir bin;
4950
std::shared_ptr<kul::cli::EnvVar> path_var;
5051

51-
protected:
52-
static void VALIDATE_NODE(YAML::Node const& node) {
52+
protected:
53+
static void VALIDATE_NODE(YAML::Node const &node) {
5354
using namespace mkn::kul::yaml;
5455
Validator({NodeValidator("args")}).validate(node);
5556
}
5657

57-
public:
58-
void init(maiken::Application& a, YAML::Node const& node)
58+
public:
59+
void init(maiken::Application &a, YAML::Node const &node)
5960
KTHROW(std::exception) override {
6061
bool finally = 0;
61-
if (!kul::env::WHICH(PY.c_str())) PY = "python";
62+
if (!kul::env::WHICH(PY.c_str()))
63+
PY = "python";
6264
PYTHON = mkn::kul::env::GET("PYTHON");
63-
if (!PYTHON.empty()) PY = PYTHON;
65+
if (!PYTHON.empty())
66+
PY = PYTHON;
6467
#if defined(_WIN32)
65-
if (PY.rfind(".exe") == std::string::npos) PY += ".exe";
68+
if (PY.rfind(".exe") == std::string::npos)
69+
PY += ".exe";
6670
#endif
6771
mkn::kul::Process p(PY);
6872
mkn::kul::ProcessCapture pc(p);
6973
HOME = mkn::kul::env::GET("PYTHON3_HOME");
7074
if (!HOME.empty()) {
7175
#if defined(_WIN32)
7276
bin = mkn::kul::Dir(HOME);
73-
if (!bin) KEXCEPT(kul::Exception, "$PYTHON3_HOME does not exist");
77+
if (!bin)
78+
KEXCEPT(kul::Exception, "$PYTHON3_HOME does not exist");
7479
#else
7580
bin = mkn::kul::Dir("bin", HOME);
76-
if (!bin) KEXCEPT(kul::Exception, "$PYTHON3_HOME/bin does not exist");
81+
if (!bin)
82+
KEXCEPT(kul::Exception, "$PYTHON3_HOME/bin does not exist");
7783
#endif
78-
path_var = std::make_shared<kul::cli::EnvVar>("PATH", bin.real(),
79-
mkn::kul::cli::EnvVarMode::PREP);
84+
path_var = std::make_shared<kul::cli::EnvVar>(
85+
"PATH", bin.real(), mkn::kul::cli::EnvVarMode::PREP);
8086
mkn::kul::env::SET(path_var->name(), path_var->toString().c_str());
8187
p.var(path_var->name(), path_var->toString());
8288
};
8389
#if defined(_WIN32)
84-
pyconfig_found = false; // doesn't exist on windows (generally)
90+
pyconfig_found = false; // doesn't exist on windows (generally)
8591
#else
8692
pyconfig_found = mkn::kul::env::WHICH(PY3_CONFIG.c_str());
8793
#endif
@@ -98,23 +104,25 @@ class PyBind11Module : public maiken::Module {
98104
finally = 1;
99105
KEXCEPT(kul::Exception, "python-config does not exist on path");
100106
}
101-
} catch (const mkn::kul::Exception& e) {
107+
} catch (const mkn::kul::Exception &e) {
102108
KERR << e.stack();
103-
} catch (const std::exception& e) {
109+
} catch (const std::exception &e) {
104110
KERR << e.what();
105111
} catch (...) {
106112
KERR << "UNKNOWN ERROR CAUGHT";
107113
}
108-
if (finally) exit(2);
114+
if (finally)
115+
exit(2);
109116
using namespace mkn::kul::cli;
110-
auto& evs = a.envVars();
117+
auto &evs = a.envVars();
111118
std::string extension;
112119
if (pyconfig_found) {
113120
mkn::kul::os::PushDir pushd(a.project().dir());
114121
mkn::kul::Process p(PY3_CONFIG);
115122
mkn::kul::ProcessCapture pc(p);
116123
p << "--extension-suffix";
117-
if (path_var) p.var(path_var->name(), path_var->toString());
124+
if (path_var)
125+
p.var(path_var->name(), path_var->toString());
118126
p.start();
119127
extension = pc.outs();
120128
} else {
@@ -126,18 +134,18 @@ class PyBind11Module : public maiken::Module {
126134
p.start();
127135
extension = pc.outs();
128136
}
129-
a.m_cInfo.lib_ext = mkn::kul::String::LINES(extension)[0]; // drop EOL
137+
a.m_cInfo.lib_ext = mkn::kul::String::LINES(extension)[0]; // drop EOL
130138
a.m_cInfo.lib_prefix = "";
131139
a.mode(maiken::compiler::Mode::SHAR);
132140
}
133141
};
134-
} // namespace lang
135-
} // namespace mkn
142+
} // namespace python3
143+
} // namespace mkn
136144

137-
extern "C" KUL_PUBLISH maiken::Module* maiken_module_construct() {
138-
return new mkn::lang::PyBind11Module;
145+
extern "C" KUL_PUBLISH maiken::Module *maiken_module_construct() {
146+
return new mkn::python3::ModuleMaker;
139147
}
140148

141-
extern "C" KUL_PUBLISH void maiken_module_destruct(maiken::Module* p) {
149+
extern "C" KUL_PUBLISH void maiken_module_destruct(maiken::Module *p) {
142150
delete p;
143151
}

test.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11

22

3-
#include <maiken.hpp>
43
#include "mkn/kul/signal.hpp"
54
#include "mkn/kul/yaml.hpp"
5+
#include <maiken.hpp>
66

77
const std::string yArgs = "";
88

9-
int main(int argc, char* argv[]) {
9+
int main(int argc, char *argv[]) {
1010
mkn::kul::Signal sig;
1111
try {
1212
YAML::Node node = mkn::kul::yaml::String(yArgs).root();
13-
char* argv2[2] = {argv[0], (char*)"-O"};
13+
char *argv2[2] = {argv[0], (char *)"-O"};
1414
auto app = (maiken::Application::CREATE(2, argv2))[0];
1515
auto loader(maiken::ModuleLoader::LOAD(*app));
1616
loader->module()->init(*app, node);
1717
loader->module()->compile(*app, node);
1818
loader->module()->link(*app, node);
1919
loader->module()->pack(*app, node);
2020
loader->unload();
21-
for (const auto inc : app->includes()) KLOG(INF) << inc.first;
22-
} catch (const mkn::kul::Exception& e) {
21+
for (const auto inc : app->includes())
22+
KLOG(INF) << inc.first;
23+
} catch (const mkn::kul::Exception &e) {
2324
KLOG(ERR) << e.what();
2425
return 2;
25-
} catch (const std::exception& e) {
26+
} catch (const std::exception &e) {
2627
KERR << e.what();
2728
return 3;
2829
} catch (...) {

0 commit comments

Comments
 (0)