@@ -33,113 +33,139 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3333
3434#include " maiken/module/init.hpp"
3535
36- namespace mkn {
37- namespace python3 {
36+ namespace mkn
37+ {
38+ namespace python3
39+ {
3840
39- class ModuleMaker : public maiken ::Module {
40- private:
41+ class ModuleMaker : public maiken ::Module
42+ {
43+ private:
4144#if defined(_WIN32)
42- const bool config_expected = 0 ;
45+ const bool config_expected = 0 ;
4346#else
44- const bool config_expected = 1 ;
47+ const bool config_expected = 1 ;
4548#endif
46- bool pyconfig_found = 0 ;
47- std::string HOME, PY = " python3" , PYTHON, PY_CONFIG = " python-config" ,
48- PY3_CONFIG = " python3-config" ,
49- PATH = mkn::kul::env::GET(" PATH" );
50- mkn::kul::Dir bin;
51- std::shared_ptr<kul::cli::EnvVar> path_var;
49+ bool pyconfig_found = 0 ;
50+ std::string HOME, PY = " python3" , PYTHON, PY_CONFIG = " python-config" ,
51+ PY3_CONFIG = " python3-config" , PATH = mkn::kul::env::GET(" PATH" );
52+ mkn::kul::Dir bin;
53+ std::shared_ptr<kul::cli::EnvVar> path_var;
5254
53- protected:
54- static void VALIDATE_NODE (YAML::Node const &node) {
55- using namespace mkn ::kul::yaml;
56- Validator ({NodeValidator (" args" )}).validate (node);
57- }
55+ protected:
56+ static void VALIDATE_NODE (YAML::Node const & node)
57+ {
58+ using namespace mkn ::kul::yaml;
59+ Validator ({NodeValidator (" args" )}).validate (node);
60+ }
5861
59- public:
60- void init (maiken::Application &a, YAML::Node const & /* node*/ )
61- KTHROW(std::exception) override {
62- bool finally = 0 ;
63- if (!kul::env::WHICH (PY.c_str ())) PY = " python" ;
64- PYTHON = mkn::kul::env::GET (" PYTHON" );
65- if (!PYTHON.empty ()) PY = PYTHON;
62+ public:
63+ void init (maiken::Application& a, YAML::Node const & /* node*/ )
64+ KTHROW(std::exception) override
65+ {
66+ bool finally = 0 ;
67+ if (!kul::env::WHICH (PY.c_str ()))
68+ PY = " python" ;
69+ PYTHON = mkn::kul::env::GET (" PYTHON" );
70+ if (!PYTHON.empty ())
71+ PY = PYTHON;
6672#if defined(_WIN32)
67- if (PY.rfind (" .exe" ) == std::string::npos) PY += " .exe" ;
73+ if (PY.rfind (" .exe" ) == std::string::npos)
74+ PY += " .exe" ;
6875#endif
69- mkn::kul::Process p (PY);
70- mkn::kul::ProcessCapture pc (p);
71- HOME = mkn::kul::env::GET (" PYTHON3_HOME" );
72- if (!HOME.empty ()) {
76+ mkn::kul::Process p (PY);
77+ mkn::kul::ProcessCapture pc (p);
78+ HOME = mkn::kul::env::GET (" PYTHON3_HOME" );
79+ if (!HOME.empty ())
80+ {
7381#if defined(_WIN32)
74- bin = mkn::kul::Dir (HOME);
75- if (!bin) KEXCEPT (kul::Exception, " $PYTHON3_HOME does not exist" );
82+ bin = mkn::kul::Dir (HOME);
83+ if (!bin)
84+ KEXCEPT (kul::Exception, " $PYTHON3_HOME does not exist" );
7685#else
77- bin = mkn::kul::Dir (" bin" , HOME);
78- if (!bin) KEXCEPT (kul::Exception, " $PYTHON3_HOME/bin does not exist" );
86+ bin = mkn::kul::Dir (" bin" , HOME);
87+ if (!bin)
88+ KEXCEPT (kul::Exception, " $PYTHON3_HOME/bin does not exist" );
7989#endif
80- path_var = std::make_shared<kul::cli::EnvVar>(
81- " PATH " , bin. real (), mkn::kul::cli::EnvVarMode::PREP);
82- mkn::kul::env::SET (path_var->name (), path_var->toString ().c_str ());
83- p.var (path_var->name (), path_var->toString ());
84- };
90+ path_var = std::make_shared<kul::cli::EnvVar>(" PATH " , bin. real (),
91+ mkn::kul::cli::EnvVarMode::PREP);
92+ mkn::kul::env::SET (path_var->name (), path_var->toString ().c_str ());
93+ p.var (path_var->name (), path_var->toString ());
94+ };
8595#if defined(_WIN32)
86- pyconfig_found = false ; // doesn't exist on windows (generally)
96+ pyconfig_found = false ; // doesn't exist on windows (generally)
8797#else
88- pyconfig_found = mkn::kul::env::WHICH (PY3_CONFIG.c_str ());
98+ pyconfig_found = mkn::kul::env::WHICH (PY3_CONFIG.c_str ());
8999#endif
90- if (!pyconfig_found) {
91- pyconfig_found = mkn::kul::env::WHICH (PY_CONFIG.c_str ());
92- PY3_CONFIG = PY_CONFIG;
93- }
94- try {
95- p << " -c"
96- << " \" import sys; print(sys.version_info[0])\" " ;
97- p.start ();
100+ if (!pyconfig_found)
101+ {
102+ pyconfig_found = mkn::kul::env::WHICH (PY_CONFIG.c_str ());
103+ PY3_CONFIG = PY_CONFIG;
104+ }
105+ try
106+ {
107+ p << " -c"
108+ << " \" import sys; print(sys.version_info[0])\" " ;
109+ p.start ();
98110
99- if (!pyconfig_found && config_expected) {
100- finally = 1 ;
101- KEXCEPT (kul::Exception, " python-config does not exist on path" );
102- }
103- } catch (const mkn::kul::Exception &e) {
104- KERR << e.stack ();
105- } catch (const std::exception &e) {
106- KERR << e.what ();
107- } catch (...) {
108- KERR << " UNKNOWN ERROR CAUGHT" ;
109- }
110- if (finally) exit (2 );
111- using namespace mkn ::kul::cli;
111+ if (!pyconfig_found && config_expected)
112+ {
113+ finally = 1 ;
114+ KEXCEPT (kul::Exception, " python-config does not exist on path" );
115+ }
116+ }
117+ catch (const mkn::kul::Exception& e)
118+ {
119+ KERR << e.stack ();
120+ }
121+ catch (const std::exception& e)
122+ {
123+ KERR << e.what ();
124+ }
125+ catch (...)
126+ {
127+ KERR << " UNKNOWN ERROR CAUGHT" ;
128+ }
129+ if (finally)
130+ exit (2 );
131+ using namespace mkn ::kul::cli;
112132
113- std::string extension;
114- if (pyconfig_found) {
115- mkn::kul::os::PushDir pushd (a.project ().dir ());
116- mkn::kul::Process p (PY3_CONFIG);
117- mkn::kul::ProcessCapture pc (p);
118- p << " --extension-suffix" ;
119- if (path_var) p.var (path_var->name (), path_var->toString ());
120- p.start ();
121- extension = pc.outs ();
122- } else {
123- mkn::kul::Process p (PY);
124- mkn::kul::ProcessCapture pc (p);
125- p << " -c"
126- << " \" import sysconfig; "
127- " print(sysconfig.get_config_var('EXT_SUFFIX'))\" " ;
128- p.start ();
129- extension = pc.outs ();
130- }
131- a.m_cInfo .lib_ext = mkn::kul::String::LINES (extension)[0 ]; // drop EOL
132- a.m_cInfo .lib_prefix = " " ;
133- a.mode (maiken::compiler::Mode::SHAR);
134- }
135- };
136- } // namespace python3
137- } // namespace mkn
133+ std::string extension;
134+ if (pyconfig_found)
135+ {
136+ mkn::kul::os::PushDir pushd (a.project ().dir ());
137+ mkn::kul::Process p (PY3_CONFIG);
138+ mkn::kul::ProcessCapture pc (p);
139+ p << " --extension-suffix" ;
140+ if (path_var)
141+ p.var (path_var->name (), path_var->toString ());
142+ p.start ();
143+ extension = pc.outs ();
144+ }
145+ else
146+ {
147+ mkn::kul::Process p (PY);
148+ mkn::kul::ProcessCapture pc (p);
149+ p << " -c"
150+ << " \" import sysconfig; "
151+ " print(sysconfig.get_config_var('EXT_SUFFIX'))\" " ;
152+ p.start ();
153+ extension = pc.outs ();
154+ }
155+ a.m_cInfo .lib_ext = mkn::kul::String::LINES (extension)[0 ]; // drop EOL
156+ a.m_cInfo .lib_prefix = " " ;
157+ a.mode (maiken::compiler::Mode::SHAR);
158+ }
159+ };
160+ } // namespace python3
161+ } // namespace mkn
138162
139- extern " C" KUL_PUBLISH maiken::Module *maiken_module_construct () {
140- return new mkn::python3::ModuleMaker;
163+ extern " C" MKN_KUL_PUBLISH maiken::Module* maiken_module_construct ()
164+ {
165+ return new mkn::python3::ModuleMaker;
141166}
142167
143- extern " C" KUL_PUBLISH void maiken_module_destruct (maiken::Module *p) {
144- delete p;
168+ extern " C" MKN_KUL_PUBLISH void maiken_module_destruct (maiken::Module* p)
169+ {
170+ delete p;
145171}
0 commit comments