From 69c63e459ecca0d525e059de24df262b2e1ee148 Mon Sep 17 00:00:00 2001 From: PhilipDeegan Date: Wed, 19 Aug 2026 20:50:08 +0200 Subject: [PATCH 1/2] ++ --- .github/workflows/build.yml | 27 +++++----------- README.md | 2 +- mkn.yaml | 10 +----- mod.cpp | 62 +++++++++++++++---------------------- test.cpp | 35 --------------------- 5 files changed, 34 insertions(+), 102 deletions(-) delete mode 100644 test.cpp diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7d8aa76..1d3ca3f 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" 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..0f5838c 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,16 +9,11 @@ mode: shared profile: - name: base - dep: mkn&${maiken_location}(${maiken_scm})[mod] + dep: mkn.mod 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] - - name: format mod: | clang.format{init:{style: google, paths: .}} 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/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; -} From 230a765a0be482ceab4bc94703871b6a79aff334 Mon Sep 17 00:00:00 2001 From: PhilipDeegan Date: Thu, 20 Aug 2026 00:37:04 +0200 Subject: [PATCH 2/2] ++ --- .github/workflows/build.yml | 2 +- mkn.yaml | 7 +++++-- res/ci/linux.sh | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100755 res/ci/linux.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1d3ca3f..9027333 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: - run: | $CURL_GET -o mkn ${PATH_GET}/mkn_nix chmod +x mkn - KLOG=2 ./mkn clean build run -dtOa "-std=c++20 -fPIC" + PATH=$PWD:$PATH ./res/ci/linux.sh macos: runs-on: macos-latest diff --git a/mkn.yaml b/mkn.yaml index 0f5838c..4f1a389 100644 --- a/mkn.yaml +++ b/mkn.yaml @@ -10,9 +10,12 @@ mode: shared profile: - name: base dep: mkn.mod + if_dep: + bsd: parse.yaml[lib] + win: parse.yaml[lib] if_arg: - win_shared: -DYAML_CPP_DLL - shared: -DMKN_KUL_SHARED + shared: -DMKN_KUL_SHARED + win_static: -DYAML_CPP_STATIC_DEFINE - name: format mod: | 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"