summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvyzo <vyzo@hackzen.org>2024-02-23 21:46:17 +0200
committerGitHub <noreply@github.com>2024-02-23 14:46:17 -0500
commit33fb6b109eab4d64730558efa37cbc60ba90649d (patch)
treed800b8e383f4332d8b33a9ac2ae252f8af6c1650
parent1ddc3ede30a21e9ababf0acdd0100a14b95c8ff2 (diff)
consistently take local package context into account in gerbil tools (#1132)
So that we dont have to `gerbil env gerbil test` and :facepalm: Also, #1131 didn't quite fix the bug :scream_cat:
-rw-r--r--src/std/interface.ss2
-rwxr-xr-xsrc/tools/build.ss3
-rw-r--r--src/tools/env.ss14
-rw-r--r--src/tools/gxensemble.ss4
-rw-r--r--src/tools/gxprof.ss4
-rw-r--r--src/tools/gxtags.ss4
-rw-r--r--src/tools/gxtest.ss4
7 files changed, 29 insertions, 6 deletions
diff --git a/src/std/interface.ss b/src/std/interface.ss
index b4fc81e6..15ffc8a9 100644
--- a/src/std/interface.ss
+++ b/src/std/interface.ss
@@ -568,7 +568,7 @@
instance-satisfies-predicate: (quote-syntax instance-predicate)
implementation-methods: [(quote-syntax method-impl-name) ...]
unchecked-implementation-methods: [(quote-syntax unchecked-method-impl-name) ...]))))
- #'(begin defklass defdescriptor defmake defpred defpred-instance definfo
+ #'(begin defklass defdescriptor defmake deftry-make defpred defpred-instance definfo
defmethod-impl ...)))))
(defsyntax-for-export (interface-out stx)
diff --git a/src/tools/build.ss b/src/tools/build.ss
index c1005cdd..20820079 100755
--- a/src/tools/build.ss
+++ b/src/tools/build.ss
@@ -3,7 +3,8 @@
(import :std/build-script)
(defbuild-script
- '("gxprof"
+ '("env"
+ "gxprof"
"gxtags"
"gxpkg"
"gxtest"
diff --git a/src/tools/env.ss b/src/tools/env.ss
new file mode 100644
index 00000000..684640fe
--- /dev/null
+++ b/src/tools/env.ss
@@ -0,0 +1,14 @@
+;;; -*- Gerbil -*-
+;;; © vyzo
+;;; common environment context for tools
+(import (only-in :gerbil/runtime/init cons-load-path))
+(export #t)
+
+(def (setup-local-env!)
+ (unless (getenv "GERBIL_PATH" #f)
+ (let* ((here (path-normalize (current-directory)))
+ (gerbil.pkg (path-expand "gerbil.pkg" here))
+ (gerbil-path (path-expand ".gerbil" here)))
+ (when (and (file-exists? gerbil.pkg) (file-exists? gerbil-path))
+ (setenv "GERBIL_PATH" gerbil-path)
+ (cons-load-path (path-expand "lib" gerbil-path))))))
diff --git a/src/tools/gxensemble.ss b/src/tools/gxensemble.ss
index 89374e71..301b2e90 100644
--- a/src/tools/gxensemble.ss
+++ b/src/tools/gxensemble.ss
@@ -16,7 +16,8 @@
:std/misc/process
:std/os/hostname
:std/sugar
- :std/text/hex)
+ :std/text/hex
+ ./env)
(export main)
(def (main . args)
@@ -414,6 +415,7 @@
gopts ...))))
(def (gxensemble-main cmd opt)
+ (setup-local-env!)
(dispatch-command cmd opt main-commands))
(defcommand-nested do-admin admin-commands "gxensemble admin"
diff --git a/src/tools/gxprof.ss b/src/tools/gxprof.ss
index ec073134..960f16dc 100644
--- a/src/tools/gxprof.ss
+++ b/src/tools/gxprof.ss
@@ -11,7 +11,8 @@
:std/cli/getopt
:std/format
:std/sort
- :std/sugar)
+ :std/sugar
+ ./env)
(export main)
(def (main . args)
@@ -33,6 +34,7 @@
help: "arguments to pass to the executable module's main")))
(def (gxprof-main opt)
+ (setup-local-env!)
(let-hash opt
(if .?module
(let* ((ctx (import-module (module-path .module) #f #t))
diff --git a/src/tools/gxtags.ss b/src/tools/gxtags.ss
index b34f059e..f54fb039 100644
--- a/src/tools/gxtags.ss
+++ b/src/tools/gxtags.ss
@@ -14,7 +14,8 @@
:std/sort
(only-in :std/srfi/1 delete-duplicates reverse!)
:std/sugar
- :std/text/utf8)
+ :std/text/utf8
+ ./env)
(export main make-tags)
(def (main . args)
@@ -33,6 +34,7 @@
help: "source file or directory")))
(def (gxtags-main opt)
+ (setup-local-env!)
(run (hash-ref opt 'input ["."])
(hash-get opt 'output)
(hash-get opt 'append)
diff --git a/src/tools/gxtest.ss b/src/tools/gxtest.ss
index e48228ec..1fc6e84f 100644
--- a/src/tools/gxtest.ss
+++ b/src/tools/gxtest.ss
@@ -10,7 +10,8 @@
:std/sort
:std/srfi/13
:std/sugar
- :std/test)
+ :std/test
+ ./env)
(export main)
(def (main . args)
@@ -28,6 +29,7 @@
help: "test files or directories to execute tests in; appending /... to a directory will recursively execute or tests in it. If no arguments are passed, all tests in the current directory are executed.")))
(def (gxtest-main opt)
+ (setup-local-env!)
(let-hash opt
(cond
((null? .args)