janet/src/jpm/cli.janet

107 lines
3.1 KiB
Clojure

###
### Command Line interface for jpm.
###
(use ./config)
(import ./commands)
# Import some submodules to create a jpm env.
(import ./declare :prefix "" :export true)
(import ./rules :prefix "" :export true)
(import ./shutil :prefix "" :export true)
(import ./cc :prefix "" :export true)
(import ./pm :prefix "" :export true)
(def- _env (curenv))
(def- argpeg
(peg/compile
'(* "--" '(some (if-not "=" 1)) (+ (* "=" '(any 1)) -1))))
(defn main
"Script entry."
[& argv]
(def- args (tuple/slice argv 1))
(def- len (length args))
(var i :private 0)
# Get env variables
(def JANET_PATH (os/getenv "JANET_PATH"))
(def JANET_HEADERPATH (os/getenv "JANET_HEADERPATH"))
(def JANET_LIBPATH (os/getenv "JANET_LIBPATH"))
(def JANET_MODPATH (os/getenv "JANET_MODPATH"))
(def JANET_BINPATH (os/getenv "JANET_BINPATH"))
(def JANET_PKGLIST (os/getenv "JANET_PKGLIST"))
(def JANET_GIT (os/getenv "JANET_GIT"))
(def JANET_OS_WHICH (os/getenv "JANET_OS_WHICH"))
(def CC (os/getenv "CC"))
(def CXX (os/getenv "CXX"))
(def AR (os/getenv "AR"))
# Set dynamic bindings
(setdyn :gitpath (or JANET_GIT "git"))
(setdyn :pkglist (or JANET_PKGLIST "https://github.com/janet-lang/pkgs.git"))
(setdyn :modpath (or JANET_MODPATH (dyn :syspath)))
(setdyn :headerpath (or JANET_HEADERPATH "/usr/local/include/janet"))
(setdyn :libpath (or JANET_LIBPATH "/usr/local/lib"))
(setdyn :binpath (or JANET_BINPATH "/usr/local/bin"))
(setdyn :use-batch-shell false)
(setdyn :cc (or CC "cc"))
(setdyn :c++ (or CXX "c++"))
(setdyn :cc-link (or CC "cc"))
(setdyn :c++-link (or CXX "c++"))
(setdyn :ar (or AR "ar"))
(setdyn :lflags @[])
(setdyn :ldflags @[])
(setdyn :cflags @["-std=c99" "-Wall" "-Wextra"])
(setdyn :cppflags @["-std=c++11" "-Wall" "-Wextra"])
(setdyn :dynamic-lflags @["-shared" "-lpthread"])
(setdyn :dynamic-cflags @["-fPIC"])
(setdyn :optimize 2)
(setdyn :modext ".so")
(setdyn :statext ".a")
(setdyn :is-msvc false)
(setdyn :libjanet (string (dyn :libpath) "/libjanet.a"))
(setdyn :janet-ldflags @[])
(setdyn :janet-lflags @["-lm" "-ldl" "-lrt" "-lpthread"])
(setdyn :janet-cflags @[])
(setdyn :jpm-env _env)
(setdyn :janet (dyn :executable))
(setdyn :auto-shebang true)
(setdyn :workers nil)
(setdyn :verbose false)
# Get flags
(def cmdbuf @[])
(var flags-done false)
(each a args
(cond
(= a "--")
(set flags-done true)
flags-done
(array/push cmdbuf a)
(if-let [m (peg/match argpeg a)]
(do
(def key (keyword (get m 0)))
(def value-parser (get config-dyns key))
(unless value-parser
(error (string "unknown cli option " key)))
(if (= 2 (length m))
(do
(def v (value-parser key (get m 1)))
(setdyn key v))
(setdyn key true)))
(array/push cmdbuf a))))
# Run subcommand
(if (empty? cmdbuf)
(commands/help)
(if-let [com (get commands/subcommands (first cmdbuf))]
(com ;(slice cmdbuf 1))
(do
(print "invalid command " (first cmdbuf))
(commands/help)))))