From f5a37a9a6e1a5710e21460e54bf357404e6c067f Mon Sep 17 00:00:00 2001 From: Clonkk Date: Tue, 28 May 2024 21:50:15 +0200 Subject: [PATCH 1/2] Add example of advanced init + few comments --- examples/ex11_external_deps.nim | 2 +- examples/ex12_advanced_init.nim | 80 +++++++++++++++++++++++++++++++++ nimjl/glucose.nim | 1 + 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 examples/ex12_advanced_init.nim diff --git a/examples/ex11_external_deps.nim b/examples/ex11_external_deps.nim index 4d32b82..d66f60c 100644 --- a/examples/ex11_external_deps.nim +++ b/examples/ex11_external_deps.nim @@ -8,11 +8,11 @@ proc main() = add(name="LinearAlgebra") add("DSP") + defer: Julia.exit() Julia.useModule("Pkg") let jlpkg = Julia.getModule("Pkg") discard jlpkg.status() - Julia.exit() when isMainModule: main() diff --git a/examples/ex12_advanced_init.nim b/examples/ex12_advanced_init.nim new file mode 100644 index 0000000..cc74b1e --- /dev/null +++ b/examples/ex12_advanced_init.nim @@ -0,0 +1,80 @@ +import nimjl +import std/[os, strformat, exitprocs] + +proc compileCurrentFile(curRun: static int) = + let cmd = getCurrentCompilerExe() & &" cpp -d:run{curRun} -o:./run{curRun}.out " & currentSourcePath() + debugEcho cmd + discard execShellCmd(cmd) + +proc cleanUp() = + var envdir = "./julia-custom-env" + if dirExists(envdir): removeDir(envdir) + + envdir = "./julia-empty-env" + if dirExists(envdir): removeDir(envdir) + + discard tryRemoveFile("run1.out") + discard tryRemoveFile("run2.out") + discard tryRemoveFile("run3.out") + + +proc postJlInit() = + echo "code executed after Julia VM is initialized and env is activated but before dependencies" + let Pkg = Julia.getModule("Pkg") + + discard Pkg.update() + discard Pkg.status() + +proc firstRunmain() = + ## See https://pkgdocs.julialang.org/dev/api/#Pkg.add for more info + Julia.init(4): + activate("./julia-custom-env") + # Call postJlInit() if it exists + # Call Pkg + external dependencies + Pkg: + add(name="LinearAlgebra") + add("DSP") + defer: Julia.exit() + +proc mainNoPkgSameEnv() = + ## See https://pkgdocs.julialang.org/dev/api/#Pkg.add for more info + Julia.init(4): + # activate julia venv + activate("./julia-custom-env") + defer: Julia.exit() + +proc mainNoPkgDifferentEnv() = + ## See https://pkgdocs.julialang.org/dev/api/#Pkg.add for more info + Julia.init(4): + activate("./julia-empty-env") + defer: Julia.exit() + +when isMainModule: + when defined(run1): + echo "First Run:" + echo " * Pkg.status show empty deps" + echo " * dependencies are downloaded" + echo "===================================================" + firstRunMain() + echo "===================================================" + elif defined(run2): + echo "No Pkg in init but same env:" + echo " * Pkg.status show deps in projects" + echo "===================================================" + mainNoPkgSameEnv() + echo "===================================================" + elif defined(run3): + echo "No Pkg in init and different env:" + echo " * Pkg.status show empty deps" + echo "===================================================" + mainNoPkgDifferentEnv() + echo "===================================================" + else: + compileCurrentFile(curRun=1) + compileCurrentFile(curRun=2) + compileCurrentFile(curRun=3) + discard execShellCmd("./run1.out") + discard execShellCmd("./run2.out") + discard execShellCmd("./run3.out") + cleanUp() + diff --git a/nimjl/glucose.nim b/nimjl/glucose.nim index 9093347..13525c1 100644 --- a/nimjl/glucose.nim +++ b/nimjl/glucose.nim @@ -134,6 +134,7 @@ template init*(jl: type Julia, nthreads: int, body: untyped) = packages = jl_pkg_private_scope template activate(env: string) {.used.} = + ## Activate a Julia virtual env pkgEnv = string(expandTilde(Path(env))) template Embed(innerbody: untyped) {.used.} = From c9d7a7e6c7b783e39d032b5edc1b61386704365f Mon Sep 17 00:00:00 2001 From: Clonkk Date: Tue, 28 May 2024 21:50:40 +0200 Subject: [PATCH 2/2] bump nimble --- nimjl.nimble | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nimjl.nimble b/nimjl.nimble index 2e7eea6..8479095 100644 --- a/nimjl.nimble +++ b/nimjl.nimble @@ -1,6 +1,6 @@ # Nimjl # Licensed and distributed under MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT). -version = "0.8.2" +version = "0.8.3" author = "Regis Caillaud" description = "Nim Julia bridge" license = "MIT"