diff options
Diffstat (limited to 'Omni')
-rwxr-xr-x[-rw-r--r--] | Omni/Bild.hs | 65 | ||||
-rw-r--r-- | Omni/Bild/Builder.nix | 7 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Bild/Deps.hs | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Bild/Example.c | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Bild/Example.hs | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Bild/Example.lisp | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Bild/Example.py | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Bild/Example.rs | 1 | ||||
-rw-r--r-- | Omni/Bild/Meta.hs | 34 | ||||
-rwxr-xr-x | Omni/Bot.scm | 2 | ||||
-rwxr-xr-x | Omni/Ide/hooks/post-applypatch | 2 | ||||
-rwxr-xr-x | Omni/Ide/hooks/post-commit | 2 | ||||
-rwxr-xr-x | Omni/Ide/hooks/post-rewrite | 2 | ||||
-rwxr-xr-x | Omni/Ide/hooks/pre-auto-gc | 2 | ||||
-rwxr-xr-x | Omni/Ide/hooks/reference-transaction | 2 | ||||
-rwxr-xr-x | Omni/Ide/ns.sh | 1 | ||||
-rwxr-xr-x | Omni/Ide/run.sh | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Lint.hs | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Llamacpp.py | 1 | ||||
-rw-r--r-- | Omni/Namespace.hs | 9 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Repl.py | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | Omni/Wipbase.c | 1 |
22 files changed, 73 insertions, 66 deletions
diff --git a/Omni/Bild.hs b/Omni/Bild.hs index 648bfcb..92bbb78 100644..100755 --- a/Omni/Bild.hs +++ b/Omni/Bild.hs @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE LambdaCase #-} @@ -479,15 +480,13 @@ cab = outToPath :: Meta.Out -> FilePath outToPath = \case - Meta.Bin o -> cab </> "bin" </> o - Meta.Lib o -> cab </> "lib" </> o - Meta.None -> mempty + Just o -> cab </> "bin" </> o + Nothing -> mempty outname :: Meta.Out -> FilePath outname = \case - Meta.Bin o -> o - Meta.Lib o -> o - Meta.None -> mempty + Just o -> o + Nothing -> mempty bindir, intdir, nixdir, vardir :: FilePath bindir = cab </> "bin" @@ -500,8 +499,7 @@ createHier :: String -> IO () createHier root = traverse_ (Dir.createDirectoryIfMissing True) - [ root </> (outToPath <| Meta.Bin ""), - root </> (outToPath <| Meta.Lib ""), + [ root </> (outToPath <| Just ""), root </> intdir, root </> nixdir, root </> vardir @@ -524,7 +522,7 @@ analyze hmap ns = case Map.lookup ns hmap of Just _ -> pure hmap where analyzeOne :: Namespace -> IO (Maybe Target) - analyzeOne namespace@(Namespace _ ext) = do + analyzeOne namespace@(Namespace parts ext) = do let path = Namespace.toPath namespace root <- Env.getEnv "CODEROOT" let abspath = root </> path @@ -537,6 +535,10 @@ analyze hmap ns = case Map.lookup ns hmap of IO.hSetEncoding h IO.utf8_bom >> Text.IO.hGetContents h /> Text.lines + -- if the file is exe but doesn't have 'out' metadata, just use the + -- dot-separated namespace instead + isExe <- Dir.getPermissions quapath /> Dir.executable + let defaultOut = isExe ?: (Just <| Namespace.dotSeparated parts, Nothing) case ext of -- basically we don't support building these Namespace.Css -> pure Nothing @@ -569,7 +571,7 @@ analyze hmap ns = case Map.lookup ns hmap of sysdeps = psys, langdeps = pdep, outPath = outToPath pout, - out = pout, + out = pout <|> defaultOut, packageSet = "python.packages", mainModule = Namespace.toModule namespace, rundeps = prun, @@ -586,13 +588,13 @@ analyze hmap ns = case Map.lookup ns hmap of wrapper = Nothing, compiler = Gcc, builder = "c", - out = pout, + out = pout <|> defaultOut, packageSet = "c.packages", mainModule = Namespace.toModule namespace, compilerFlags = case pout of - Meta.Bin o -> + Just o -> ["-o", o, path] <> Set.toList parg |> map Text.pack - _ -> panic "can only bild C exes, not libs", + Nothing -> panic "can only bild C exes, not libs", outPath = outToPath pout, -- implement detectCImports, then I can fill this out srcs = Set.empty, @@ -627,18 +629,18 @@ analyze hmap ns = case Map.lookup ns hmap of "$CODEROOT" </> quapath ] ++ case pout of - Meta.Bin o -> + Just o -> [ "-main-is", Namespace.toHaskellModule namespace, "-o", o ] - _ -> [] + Nothing -> [] |> map Text.pack, sysdeps = Meta.detect (Meta.sys "--") contentLines, outPath = outToPath pout, rundeps = prun, - out = pout, + out = pout <|> defaultOut, .. } |> Just @@ -689,8 +691,8 @@ analyze hmap ns = case Map.lookup ns hmap of str <| "import " <> root </> "Omni/Bild.nix {}" ] |> map Text.pack, - out = Meta.None, - outPath = outToPath Meta.None, + out = Nothing, + outPath = outToPath Nothing, srcs = Set.empty, packageSet = "", mainModule = Namespace.toModule namespace, @@ -718,12 +720,12 @@ analyze hmap ns = case Map.lookup ns hmap of |> map Text.pack, builder = "base", outPath = outToPath pout, - out = pout, + out = pout <|> defaultOut, srcs = Set.empty, -- implement detectSchemeImports -- TODO: wrapper should just be removed, instead rely on -- upstream nixpkgs builders to make wrappers wrapper = - (pout == Meta.None) + isNothing pout ?: ( Nothing, [ "#!/usr/bin/env bash", "guile -C \"" @@ -754,17 +756,17 @@ analyze hmap ns = case Map.lookup ns hmap of mainModule = Namespace.toModule namespace, wrapper = Nothing, sysdeps = psys <> Set.singleton "rustc", - out = pout, + out = pout <|> defaultOut, compiler = Rustc, compilerFlags = case pout of - Meta.Bin o -> + Just o -> map Text.pack [ "$CODEROOT" </> path, "-o", o ] - _ -> panic "can't build rust libs", + Nothing -> panic "can't build rust libs", builder = "base", outPath = outToPath pout, -- implement detectRustImports @@ -916,31 +918,24 @@ build andTest loud jobs cpus analysis = forM (Map.elems analysis) <| \target@Target {..} -> fst </ case compiler of CPython -> case out of - Meta.Bin _ -> + Just _ -> Log.info ["bild", "nix", "python", nschunk namespace] >> nixBuild loud jobs cpus target +> (\r -> (isSuccess (fst r) && andTest) ?: (test loud target, pure r)) - _ -> + Nothing -> Log.info ["bild", "nix", "python", nschunk namespace, "cannot build library"] >> pure (Exit.ExitSuccess, mempty) Gcc -> - Log.info ["bild", label, "gcc", nschunk namespace] + Log.info ["bild", "nix", "gcc", nschunk namespace] >> nixBuild loud jobs cpus target - where - label = case out of - Meta.Bin _ -> "bin" - _ -> "lib" Ghc -> case out of - Meta.None -> pure (Exit.ExitSuccess, mempty) - Meta.Bin _ -> do + Nothing -> pure (Exit.ExitSuccess, mempty) + Just _ -> do Log.info ["bild", "nix", user <> "@" <> host, nschunk namespace] result <- nixBuild loud jobs cpus target if andTest && (isSuccess <| fst result) then test loud target else pure result - Meta.Lib _ -> do - Log.info ["bild", "dev", "ghc-lib", nschunk namespace] - proc loud namespace (toNixFlag compiler) compilerFlags Guile -> do Log.info ["bild", "dev", "guile", nschunk namespace] _ <- proc loud namespace (toNixFlag compiler) compilerFlags diff --git a/Omni/Bild/Builder.nix b/Omni/Bild/Builder.nix index a78f311..b4e6780 100644 --- a/Omni/Bild/Builder.nix +++ b/Omni/Bild/Builder.nix @@ -124,7 +124,12 @@ let . ${commonBash} cp ${../../pyproject.toml} ./pyproject.toml check ruff format --exclude 'setup.py' --check . - check ruff check --exclude 'setup.py' --exclude '__init__.py' . + # ignore EXE here to support run.sh shebangs + check ruff check \ + --ignore EXE \ + --exclude 'setup.py' \ + --exclude '__init__.py' \ + . touch ./py.typed check python -m mypy \ --explicit-package-bases \ diff --git a/Omni/Bild/Deps.hs b/Omni/Bild/Deps.hs index c2fe53f..7183c26 100644..100755 --- a/Omni/Bild/Deps.hs +++ b/Omni/Bild/Deps.hs @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} diff --git a/Omni/Bild/Example.c b/Omni/Bild/Example.c index 2f4bfd4..49b93f8 100644..100755 --- a/Omni/Bild/Example.c +++ b/Omni/Bild/Example.c @@ -1,3 +1,4 @@ +//usr/bin/env run.sh $0; exit // : out examplesodium.exe // : dep libsodium // : arg -lsodium diff --git a/Omni/Bild/Example.hs b/Omni/Bild/Example.hs index 025391c..3c7c144 100644..100755 --- a/Omni/Bild/Example.hs +++ b/Omni/Bild/Example.hs @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE NoImplicitPrelude #-} diff --git a/Omni/Bild/Example.lisp b/Omni/Bild/Example.lisp index cdabe7c..1063047 100644..100755 --- a/Omni/Bild/Example.lisp +++ b/Omni/Bild/Example.lisp @@ -1,3 +1,4 @@ +;/usr/bin/env run.sh $0; exit ;; : out helloworld.exe (require 'alexandria) (defun main () diff --git a/Omni/Bild/Example.py b/Omni/Bild/Example.py index e5766ba..462a497 100644..100755 --- a/Omni/Bild/Example.py +++ b/Omni/Bild/Example.py @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh """ Test that bild can build Python stuff. diff --git a/Omni/Bild/Example.rs b/Omni/Bild/Example.rs index ba98dda..d6d738b 100644..100755 --- a/Omni/Bild/Example.rs +++ b/Omni/Bild/Example.rs @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh // : out helloworld fn main() { println!("Hello world!"); diff --git a/Omni/Bild/Meta.hs b/Omni/Bild/Meta.hs index 44bcff0..a5f722e 100644 --- a/Omni/Bild/Meta.hs +++ b/Omni/Bild/Meta.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE LambdaCase #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE NoImplicitPrelude #-} @@ -6,7 +5,6 @@ module Omni.Bild.Meta where import Alpha -import qualified Data.Aeson as Aeson import qualified Data.Char as Char import qualified Data.Set as Set import qualified Data.Text as Text @@ -29,15 +27,7 @@ type Run = String -- command. Should be used sparingly, and not all builds will support this. type Arg = String -data Out = Lib String | Bin String | None - deriving (Show, Eq) - -instance Aeson.ToJSON Out where - toJSON = - Aeson.String <. Text.pack <. \case - Bin a -> a - Lib a -> a - None -> "" +type Out = Maybe String data Parsed = Parsed { pdep :: Set Dep, @@ -56,19 +46,24 @@ detect m cl = |> Set.fromList -- | 'Out' is always singular, so it gets a special function -detectOut :: Regex.RE Char Out -> [Text] -> Out +detectOut :: Regex.RE Char String -> [Text] -> Out detectOut m cl = cl /> Text.unpack /> Regex.match m |> catMaybes |> head - |> fromMaybe None -detectAll :: [Char] -> [Text] -> Parsed +-- | Detect all metadata +detectAll :: + -- | The comment character(s) to match on + [Char] -> + -- | Lines of text to parse + [Text] -> + Parsed detectAll m cl = Parsed {..} where - pout = detectOut (out m <|> lib m) cl + pout = detectOut (out m) cl detect_ re = detect (re m) cl pdep = detect_ dep psys = detect_ sys @@ -85,17 +80,10 @@ sys comment = Regex.string (comment ++ " : sys ") *> Regex.many (Regex.psym (not <. Char.isSpace)) -out :: [Char] -> Regex.RE Char Out +out :: [Char] -> Regex.RE Char String out comment = Regex.string (comment ++ " : out ") *> Regex.many (Regex.psym (/= ' ')) - /> Bin - -lib :: [Char] -> Regex.RE Char Out -lib comment = - Regex.string (comment ++ " : lib ") - *> Regex.many (Regex.psym (/= ' ')) - /> Lib arg :: [Char] -> Regex.RE Char Arg arg comment = diff --git a/Omni/Bot.scm b/Omni/Bot.scm index c526507..ff81c53 100755 --- a/Omni/Bot.scm +++ b/Omni/Bot.scm @@ -1,3 +1,5 @@ +#!/usr/bin/env run.sh +!# ;; : out omnibot ;; ;; Usage with ii: diff --git a/Omni/Ide/hooks/post-applypatch b/Omni/Ide/hooks/post-applypatch index 5071dc5..4919e84 100755 --- a/Omni/Ide/hooks/post-applypatch +++ b/Omni/Ide/hooks/post-applypatch @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash ## START BRANCHLESS CONFIG git branchless hook post-applypatch "$@" diff --git a/Omni/Ide/hooks/post-commit b/Omni/Ide/hooks/post-commit index cd1f195..bdccee3 100755 --- a/Omni/Ide/hooks/post-commit +++ b/Omni/Ide/hooks/post-commit @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash ## START BRANCHLESS CONFIG git branchless hook post-commit "$@" diff --git a/Omni/Ide/hooks/post-rewrite b/Omni/Ide/hooks/post-rewrite index 8b3237a..711cc0c 100755 --- a/Omni/Ide/hooks/post-rewrite +++ b/Omni/Ide/hooks/post-rewrite @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash ## START BRANCHLESS CONFIG git branchless hook post-rewrite "$@" diff --git a/Omni/Ide/hooks/pre-auto-gc b/Omni/Ide/hooks/pre-auto-gc index c92a844..30d4a44 100755 --- a/Omni/Ide/hooks/pre-auto-gc +++ b/Omni/Ide/hooks/pre-auto-gc @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash ## START BRANCHLESS CONFIG git branchless hook pre-auto-gc "$@" diff --git a/Omni/Ide/hooks/reference-transaction b/Omni/Ide/hooks/reference-transaction index ea0cce6..474e52d 100755 --- a/Omni/Ide/hooks/reference-transaction +++ b/Omni/Ide/hooks/reference-transaction @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash ## START BRANCHLESS CONFIG # Avoid canceling the reference transaction in the case that `branchless` fails diff --git a/Omni/Ide/ns.sh b/Omni/Ide/ns.sh index a56ed89..cddb35a 100755 --- a/Omni/Ide/ns.sh +++ b/Omni/Ide/ns.sh @@ -27,6 +27,7 @@ fzf_flags=( --bind "alt-enter:execute(repl.sh --bash {})" --bind "ctrl-space:execute(ship.sh {} ; read -p [fin])" --bind "alt-t:execute(bild {} ; run.sh {} test ; read -p [fin])" + --bind "alt-e:execute({} ; read -p [fin])" --bind "ctrl-/:change-preview-window(right,88|right,70%|hidden|)" --bind "alt-0:change-preview(bat -p --color=always {})" --bind "alt-1:change-preview(git log --color=always --date=relative --abbrev-commit --pretty=format:'%Cred%h%Creset %s / %an %Creset%C(yellow)%d%Creset%Cgreen(%cr)%Creset' -- {})" diff --git a/Omni/Ide/run.sh b/Omni/Ide/run.sh index 506aa92..e300fcc 100755 --- a/Omni/Ide/run.sh +++ b/Omni/Ide/run.sh @@ -3,4 +3,5 @@ set -eu target=$1 shift out=$(bild --plan "$target" | jq --raw-output ".\"${target}\".out") +[[ -f "$out" ]] || bild "$target" exec "${CODEROOT:?}/_/bin/$out" "$@" diff --git a/Omni/Lint.hs b/Omni/Lint.hs index 45d1523..0cc428a 100644..100755 --- a/Omni/Lint.hs +++ b/Omni/Lint.hs @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} diff --git a/Omni/Llamacpp.py b/Omni/Llamacpp.py index 66b57d8..b8975f2 100644..100755 --- a/Omni/Llamacpp.py +++ b/Omni/Llamacpp.py @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh """ Test that llama.cpp can build and exec in the omni repo. diff --git a/Omni/Namespace.hs b/Omni/Namespace.hs index ef8cefd..5884507 100644 --- a/Omni/Namespace.hs +++ b/Omni/Namespace.hs @@ -17,6 +17,7 @@ module Omni.Namespace fromPythonModule, isCab, groupByExt, + dotSeparated, ) where @@ -93,13 +94,17 @@ fromHaskellContent c = case Regex.findFirstInfix haskellModule c of </ (Regex.string "\nmodule " *> Regex.many (name <|> dot)) <*> pure Hs +dotSeparated :: [String] -> String +dotSeparated = joinWith "." + toModule :: Namespace -> String -toModule (Namespace parts Hs) = joinWith "." parts -toModule (Namespace parts Py) = joinWith "." parts +toModule (Namespace parts Hs) = dotSeparated parts +toModule (Namespace parts Py) = dotSeparated parts toModule (Namespace parts Scm) = "(" ++ joinWith " " parts ++ ")" toModule (Namespace parts Rs) = joinWith "::" parts toModule (Namespace parts C) = joinWith "/" parts <> ".c" toModule (Namespace parts Nix) = joinWith "/" parts <> ".nix" +toModule (Namespace parts Lisp) = "(" ++ joinWith " " parts ++ ")" toModule (Namespace {..}) = panic <| "toModule not implemented for " <> show ext toHaskellModule :: Namespace -> String diff --git a/Omni/Repl.py b/Omni/Repl.py index 1cf2f65..8d191e2 100644..100755 --- a/Omni/Repl.py +++ b/Omni/Repl.py @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh """ Improve the standard Python REPL. diff --git a/Omni/Wipbase.c b/Omni/Wipbase.c index 31996a2..1ee1978 100644..100755 --- a/Omni/Wipbase.c +++ b/Omni/Wipbase.c @@ -1,3 +1,4 @@ +//usr/bin/env run.sh $0 "$@"; exit // : out wip |