mirror of
https://github.com/janet-lang/janet
synced 2024-11-16 13:44:48 +00:00
ec32d11b76
We can now build windows executables with jpm.
109 lines
2.7 KiB
Plaintext
109 lines
2.7 KiB
Plaintext
#!/usr/bin/env janet
|
|
|
|
# CLI tool for building janet projects. Wraps cook.
|
|
|
|
(import cook)
|
|
|
|
(def- argpeg
|
|
(peg/compile
|
|
'(* "--" '(some (if-not "=" 1)) (+ (* "=" '(any 1)) -1))))
|
|
|
|
(defn- local-rule
|
|
[rule]
|
|
(cook/import-rules "./project.janet")
|
|
(cook/do-rule rule))
|
|
|
|
(defn- help
|
|
[]
|
|
(print `
|
|
usage: jpm [--key=value, --flag] ... [subcommand] [args] ...
|
|
|
|
Subcommands are:
|
|
build : build all artifacts
|
|
install (repo) : install artifacts. If a repo is given, install the contents of that
|
|
git repository, assuming that the repository is a jpm project. If not, build
|
|
and install the current project.
|
|
uninstall (module) : uninstall a module. If no module is given, uninstall the module
|
|
defined by the current directory.
|
|
clean : remove any generated files or artifacts
|
|
test : run tests
|
|
deps : install dependencies.
|
|
clear-cache : clear the git cache. Useful for updating dependencies.
|
|
|
|
Keys are:
|
|
--modpath : The directory to install modules to. Defaults to $JANET_MODPATH or (dyn :syspath)
|
|
--headerpath : The directory containing janet headers. Defaults to $JANET_HEADERPATH.
|
|
--binpath : The directory to install binaries and scripts. Defaults to $JANET_BINPATH.
|
|
--libpath : The directory containing janet C libraries (libjanet.*). Defaults to $JANET_LIBPATH.
|
|
--optimize : Optimization level for natives. Defaults to 2.
|
|
--compiler : C compiler to use for natives. Defaults to cc (cl on windows).
|
|
--linker : C linker to use for linking natives. Defaults to cc (link on windows).
|
|
--cflags : Extra compiler flags for native modules.
|
|
--lflags : Extra linker flags for native modules.
|
|
|
|
Flags are:
|
|
--verbose : Print shell commands as they are executed.
|
|
`))
|
|
|
|
(defn build
|
|
[]
|
|
(local-rule "build"))
|
|
|
|
(defn clean
|
|
[]
|
|
(local-rule "clean"))
|
|
|
|
(defn install
|
|
[&opt repo]
|
|
(if repo
|
|
(cook/install-git repo)
|
|
(local-rule "install")))
|
|
|
|
(defn test
|
|
[]
|
|
(local-rule "test"))
|
|
|
|
(defn uninstall
|
|
[&opt what]
|
|
(if what
|
|
(cook/uninstall what)
|
|
(local-rule "uninstall")))
|
|
|
|
(defn deps
|
|
[]
|
|
(local-rule "install-deps"))
|
|
|
|
(def subcommands
|
|
{"build" build
|
|
"clean" clean
|
|
"install" install
|
|
"test" test
|
|
"help" help
|
|
"deps" deps
|
|
"clear-cache" cook/clear-cache
|
|
"uninstall" uninstall})
|
|
|
|
(def args (tuple/slice (dyn :args) 1))
|
|
(def len (length args))
|
|
(var i 0)
|
|
|
|
# Get flags
|
|
(while (< i len)
|
|
(if-let [m (peg/match argpeg (args i))]
|
|
(if (= 2 (length m))
|
|
(let [[key value] m]
|
|
(setdyn (keyword key) value))
|
|
(setdyn (keyword (m 0)) true))
|
|
(break))
|
|
(++ i))
|
|
|
|
# Run subcommand
|
|
(if (= i len)
|
|
(help)
|
|
(do
|
|
(if-let [com (subcommands (args i))]
|
|
(com ;(tuple/slice args (+ i 1)))
|
|
(do
|
|
(print "invalid command " (args i))
|
|
(help)))))
|