cli.go (1325B)
1 package tplc 2 3 import ( 4 "flag" 5 "log" 6 "os" 7 "path" 8 ) 9 10 var ( 11 flagDir string 12 flagDst string 13 flagExt string 14 flagPkg string 15 ) 16 17 func init() { 18 flag.StringVar( 19 &flagDir, "dir", ".", 20 "Path to source directory.\nThe compiler does not process files in subdirectories.") 21 flag.StringVar( 22 &flagDst, "dst", "", 23 "Path to distribution directory.") 24 flag.StringVar( 25 &flagExt, "ext", ".html", 26 "Extension name with leading dot.\nOnly files with this extension are compiled.") 27 flag.StringVar( 28 &flagPkg, "pkg", "", 29 "Package name. For default, name of dist directory is used.", 30 ) 31 } 32 33 func (b *Builder) Run() { 34 flag.Parse() 35 36 if len(flagDst) == 0 { 37 flagDst = flagDir 38 } 39 40 if len(flagPkg) == 0 { 41 pkg, err := getPackageName(flagDst) 42 if err != nil { 43 log.Fatalf("cannot get package name: %s\n", err.Error()) 44 } 45 flagPkg = pkg 46 } 47 48 files, err := os.ReadDir(flagDir) 49 if err != nil { 50 log.Fatalf("readdir failed: %s", err.Error()) 51 } 52 53 for _, file := range files { 54 if file.IsDir() { 55 continue 56 } 57 58 var ( 59 src = path.Join(flagDir, file.Name()) 60 dst = path.Join(flagDst, file.Name()+".go") 61 ) 62 63 if path.Ext(src) != flagExt { 64 continue 65 } 66 67 log.Printf( 68 "Build: %s => %s", 69 src, dst, 70 ) 71 72 err = b.build(src, dst, flagPkg) 73 if err != nil { 74 log.Fatalf("Build failed: %s\n", err.Error()) 75 } 76 } 77 }