diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7d8aa76..9027333 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,45 +19,32 @@ jobs: ubuntu: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - - env: - MKN_KUL_GIT_CO: --depth 1 - run: | + - uses: actions/checkout@v6 + - run: | $CURL_GET -o mkn ${PATH_GET}/mkn_nix chmod +x mkn - KLOG=2 ./mkn clean build run -dtOa "-std=c++20 -fPIC" - KLOG=2 ./mkn clean build run -dtOp test -a "-std=c++20 -fPIC" + PATH=$PWD:$PATH ./res/ci/linux.sh macos: runs-on: macos-latest steps: - - uses: actions/checkout@v4 - - - env: - MKN_LIB_LINK_LIB: 1 - MKN_KUL_GIT_CO: --depth 1 - run: | + - uses: actions/checkout@v6 + - run: | $CURL_GET -o mkn ${PATH_GET}/mkn_arm_osx chmod +x mkn KLOG=2 ./mkn clean build run -dtOa "-std=c++20 -fPIC" - KLOG=2 ./mkn clean build run -dtOp test -a "-std=c++20 -fPIC" windows: runs-on: windows-latest steps: - - uses: actions/checkout@v4 - + - uses: actions/checkout@v6 - uses: ilammy/msvc-dev-cmd@v1 with: arch: amd64 - - - env: - MKN_KUL_GIT_CO: --depth 1 + - shell: cmd + env: MKN_CL_PREFERRED: 1 - shell: cmd run: | # /bin/link interferes with cl/link.exe bash -c "rm /bin/link" bash -c '$CURL_GET -o mkn.exe ${PATH_GET}/mkn.exe' bash -c 'KLOG=2 ./mkn clean build run -dtOa "-EHsc -std:c++20"' - bash -c 'KLOG=2 ./mkn clean build run -dtOp test -a "-EHsc -std:c++20"' diff --git a/README.md b/README.md index 427fe60..e512da2 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Compile/Link phase module ## Prerequisites - [maiken](https://github.com/Dekken/maiken) + [maiken](https://github.com/mkn/mkn) ## Usage diff --git a/mkn.yaml b/mkn.yaml index 978e692..4f1a389 100644 --- a/mkn.yaml +++ b/mkn.yaml @@ -2,9 +2,6 @@ name: lang.python3 version: master -property: - maiken_location: ${MKN_HOME}/app/mkn/${version} - maiken_scm: https://github.com/mkn/mkn parent: base src: mod.cpp @@ -12,15 +9,13 @@ mode: shared profile: - name: base - dep: mkn&${maiken_location}(${maiken_scm})[mod] + dep: mkn.mod + if_dep: + bsd: parse.yaml[lib] + win: parse.yaml[lib] if_arg: - win_shared: -DYAML_CPP_DLL - shared: -DMKN_KUL_SHARED - -- name: test - parent: base - main: test.cpp - dep: mkn&${maiken_location}(${maiken_scm})[lib] + shared: -DMKN_KUL_SHARED + win_static: -DYAML_CPP_STATIC_DEFINE - name: format mod: | diff --git a/mod.cpp b/mod.cpp index eaf281c..c2f93b0 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,5 +1,5 @@ /** -Copyright (c) 2013, Philip Deegan. +Copyright (c) 2026, Philip Deegan. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -28,31 +28,24 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "maiken/module/init.hpp" // IWYU pragma: keep - -#include "maiken/app.hpp" // for Application -#include "maiken/compiler.hpp" // for CompilationInfo, Mode +#include "mkn/mod/init.hpp" // IWYU pragma: keep #include "mkn/kul/os.hpp" // for Dir, WHICH, PushDir -#include "mkn/kul/cli.hpp" // for EnvVar, EnvVarMode -#include "mkn/kul/env.hpp" // for GET, SET +#include "mkn/kul/env.hpp" // for GET, SET, Var, Var::Mode #include "mkn/kul/log.hpp" // for KERR #include "mkn/kul/defs.hpp" // for MKN_KUL_PUBLISH #include "mkn/kul/proc.hpp" // for Process, ProcessCapture, AProcess #include "mkn/kul/yaml.hpp" // for NodeValidator, Validator -#include "maiken/project.hpp" // for Project #include "mkn/kul/except.hpp" // for Exception, KEXCEPT, KTHROW #include "mkn/kul/string.hpp" // for String #include // for basic_string, string #include // for vector -#include // for stringstream #include // for exit #include // for exception #include // for exception -namespace mkn { -namespace lang { +namespace mkn::lang { kul::File find_python3() KTHROW(std::exception) { std::string const HOME = kul::env::GET("PYTHON3_HOME"); @@ -83,8 +76,8 @@ kul::File find_python3() KTHROW(std::exception) { throw std::runtime_error("Could not find python!"); } -kul::cli::EnvVar python3_path_var(kul::File const& exe) { - return {"PATH", exe.dir().real(), kul::cli::EnvVarMode::PREP}; +kul::env::Var python3_path_var(kul::File const& exe) { + return {"PATH", exe.dir().real(), kul::env::Var::Mode::PREP}; } kul::File find_python_set_env() { @@ -113,15 +106,15 @@ std::string pyexec_for_string(std::string const& cmd) { throw; } auto ret = kul::String::LINES(pc.outs())[0]; - if(ret.back() == '\n') ret.pop_back(); - if(ret.back() == '\r') ret.pop_back(); + if (ret.back() == '\n') ret.pop_back(); + if (ret.back() == '\r') ret.pop_back(); return ret; } -class Python3Module : public maiken::Module { +class Python3Module : public mkn::mod::Module { public: - void compile(maiken::Application& a, YAML::Node const& node) KTHROW(std::exception) override; - void link(maiken::Application& a, YAML::Node const& node) KTHROW(std::exception) override; + void compile(mkn::mod::Context& a, YAML::Node const& node) KTHROW(std::exception) override; + void link(mkn::mod::Context& a, YAML::Node const& node) KTHROW(std::exception) override; private: auto py_include() const { @@ -176,7 +169,7 @@ class Python3Module : public maiken::Module { } }; -void Python3Module::compile(maiken::Application& a, YAML::Node const& node) KTHROW(std::exception) { +void Python3Module::compile(mkn::mod::Context& a, YAML::Node const& node) KTHROW(std::exception) { VALIDATE_NODE(node); std::vector incs{py_include()}; @@ -199,10 +192,10 @@ void Python3Module::compile(maiken::Application& a, YAML::Node const& node) KTHR } for (auto const& inc : incs) { kul::Dir const req_include(inc); - if (req_include) { - a.addInclude(req_include.real()); - for (auto* rep : a.revendencies()) rep->addInclude(req_include.real()); + a.compilerState().add(mkn::mod::IncludeInput{req_include.real()}); + for (auto* rep : a.state().dependents) + rep->compilerState().add(mkn::mod::IncludeInput{req_include.real()}); } } } catch (kul::Exception const& e) { @@ -214,7 +207,7 @@ void Python3Module::compile(maiken::Application& a, YAML::Node const& node) KTHR } } -void Python3Module::link(maiken::Application& a, YAML::Node const& node) KTHROW(std::exception) { +void Python3Module::link(mkn::mod::Context& a, YAML::Node const& node) KTHROW(std::exception) { VALIDATE_NODE(node); auto const embed = kul::String::BOOL(kul::env::GET("MKN_PYTHON_LIB_EMBED", "0")); @@ -223,30 +216,25 @@ void Python3Module::link(maiken::Application& a, YAML::Node const& node) KTHROW( auto const prefx = py_prefix(); if (prefx.size()) - if (auto const lib = kul::Dir(kul::Dir::JOIN(prefx, "lib"))) a.addLibpath(lib.real()); - -#if defined(_WIN32) // or fallback - if (prefx.size()) - if (auto const lib = kul::Dir{"libs", python_exe.dir()}) // windows fallback - a.addLibpath(lib.escm()); -#endif + if (auto const lib = kul::Dir(kul::Dir::JOIN(prefx, "lib"))) + a.compilerState().add(mkn::mod::LibPathInput{lib.real()}); #if defined(_WIN32) // or fallback if (prefx.size()) if (auto const lib = kul::Dir{"libs", python_exe.dir()}) // windows fallback - a.addLibpath(lib.escm()); + a.compilerState().add(mkn::mod::LibPathInput{lib.escm()}); #endif - if (embed) a.addLib(py_libname()); + if (embed) a.compilerState().add(mkn::mod::LibInput{py_libname()}); - if (a.mode() != maiken::compiler::Mode::STAT) a.prependLinkString(linker); + if (a.state().buildMode != mkn::mod::Mode::STAT) + a.compilerState().add(mkn::mod::LinkPrefixInput{linker}); } -} // namespace lang -} // namespace mkn +} // namespace mkn::lang -extern "C" MKN_KUL_PUBLISH maiken::Module* maiken_module_construct() { +extern "C" MKN_KUL_PUBLISH mkn::mod::Module* maiken_module_construct() { return new mkn::lang::Python3Module; } -extern "C" MKN_KUL_PUBLISH void maiken_module_destruct(maiken::Module* p) { delete p; } +extern "C" MKN_KUL_PUBLISH void maiken_module_destruct(mkn::mod::Module* p) { delete p; } diff --git a/res/ci/linux.sh b/res/ci/linux.sh new file mode 100755 index 0000000..3fc631c --- /dev/null +++ b/res/ci/linux.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -ex + +KLOG=2 mkn clean build run -dtOa "-std=c++20 -fPIC" diff --git a/test.cpp b/test.cpp deleted file mode 100644 index 73c4abe..0000000 --- a/test.cpp +++ /dev/null @@ -1,35 +0,0 @@ - -#include - -#include "mkn/kul/signal.hpp" -#include "mkn/kul/yaml.hpp" - -std::string const yArgs = ""; - -int main(int argc, char* argv[]) { - KOUT(NON) << __FILE__; - mkn::kul::Signal sig; - try { - YAML::Node node = mkn::kul::yaml::String(yArgs).root(); - char* argv2[2] = {argv[0], (char*)"-O"}; - char* argv3[3] = {argv[0], (char*)"-Op", (char*)"test"}; - auto app = (maiken::Application::CREATE(2, argv2))[0]; - auto loader(maiken::ModuleLoader::LOAD(*app)); - auto appTest = (maiken::Application::CREATE(3, argv3))[0]; - loader->module()->init(*appTest, node); - loader->module()->compile(*appTest, node); - loader->module()->link(*appTest, node); - loader->module()->pack(*appTest, node); - loader->unload(); - } catch (mkn::kul::Exception const& e) { - KLOG(ERR) << e.what(); - return 2; - } catch (std::exception const& e) { - KERR << e.what(); - return 3; - } catch (...) { - KERR << "UNKNOWN EXCEPTION TYPE CAUGHT"; - return 5; - } - return 0; -}