-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support gljdeps.edn in go module roots, automating pkgmap and glj sou…
…rce embedding for glojure projects (#43) * Move pkgmap gen to internal package Signed-off-by: James Hamlin <[email protected]> * Generate pkgmap from deps.edn Signed-off-by: James Hamlin <[email protected]> * Move glj main logic to reusable package Signed-off-by: James Hamlin <[email protected]> * Bootstrap runtime from gljmain Signed-off-by: James Hamlin <[email protected]> * gljimports automatically adds exports to the pkgmap Signed-off-by: James Hamlin <[email protected]> * Generate embed FS from deps.edn pkgs and auto-add to load path Signed-off-by: James Hamlin <[email protected]> * gofmt generated deps.edn embed file Signed-off-by: James Hamlin <[email protected]> * Autogen local glj from deps.edn, support for (seq) for go maps Signed-off-by: James Hamlin <[email protected]> * Fix for go map seq Signed-off-by: James Hamlin <[email protected]> * Fixes for mapping over chunked seqs Signed-off-by: James Hamlin <[email protected]> * Deps file is gljdeps.edn, not deps.edn Signed-off-by: James Hamlin <[email protected]> --------- Signed-off-by: James Hamlin <[email protected]>
- Loading branch information
Showing
35 changed files
with
1,115 additions
and
302 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,51 +1,40 @@ | ||
package main | ||
|
||
import ( | ||
"bufio" | ||
"fmt" | ||
"log" | ||
"os" | ||
"os/exec" | ||
"syscall" | ||
|
||
"github.com/glojurelang/glojure/pkg/lang" | ||
"github.com/glojurelang/glojure/pkg/reader" | ||
"github.com/glojurelang/glojure/pkg/repl" | ||
"github.com/glojurelang/glojure/pkg/runtime" | ||
"github.com/glojurelang/glojure/internal/deps" | ||
|
||
// Bootstrap the runtime | ||
_ "github.com/glojurelang/glojure/pkg/glj" | ||
"github.com/glojurelang/glojure/pkg/gljmain" | ||
) | ||
|
||
func main() { | ||
args := os.Args[1:] | ||
|
||
runtime.AddLoadPath(os.DirFS(".")) | ||
dps, err := deps.Load() | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
if dps != nil { | ||
if err := dps.Gen(); err != nil { | ||
panic(err) | ||
} | ||
|
||
if len(args) == 0 { | ||
repl.Start() | ||
} else { | ||
file, err := os.Open(os.Args[1]) | ||
exe, err := exec.LookPath("go") | ||
if err != nil { | ||
log.Fatal(err) | ||
panic(fmt.Errorf("failed to find `go` executable: %v", err)) | ||
} | ||
env := lang.GlobalEnv | ||
|
||
core := lang.FindNamespace(lang.NewSymbol("glojure.core")) | ||
core.FindInternedVar(lang.NewSymbol("*command-line-args*")).BindRoot(lang.Seq(os.Args[2:])) | ||
|
||
rdr := reader.New(bufio.NewReader(file), reader.WithGetCurrentNS(func() *lang.Namespace { | ||
return env.CurrentNamespace() | ||
})) | ||
for { | ||
val, err := rdr.ReadOne() | ||
if err == reader.ErrEOF { | ||
break | ||
} | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
_, err = env.Eval(val) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
argv := append([]string{"go", "run", "./glj/cmd/glj"}, os.Args[1:]...) | ||
if err := syscall.Exec(exe, argv, os.Environ()); err != nil { | ||
log.Fatalf("failed to run %v: %v", exe, err) | ||
} | ||
panic("a successful exec syscall should replace this process") | ||
} | ||
|
||
gljmain.Main(os.Args[1:]) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package deps | ||
|
||
import "fmt" | ||
|
||
// Deps is a struct that contains all the dependencies for the | ||
// Glojure application. | ||
type Deps struct { | ||
goModName string | ||
goModDir string | ||
|
||
Pkgs []string | ||
Deps map[string]map[string]string | ||
} | ||
|
||
func (d *Deps) Gen() error { | ||
if err := d.Get(); err != nil { | ||
return fmt.Errorf("failed to fetch dependencies: %w", err) | ||
} | ||
if err := d.Embed(); err != nil { | ||
return fmt.Errorf("failed to generate embed for packages: %w", err) | ||
} | ||
if err := d.GLJ(); err != nil { | ||
return fmt.Errorf("failed to generate glj main: %w", err) | ||
} | ||
|
||
return nil | ||
} |
Oops, something went wrong.