conf.Mode &^= printer.SourcePos
}
+ if *objDir == "" {
+ *objDir = "_obj"
+ }
+
args := flag.Args()
if len(args) < 1 {
usage()
cPrefix = fmt.Sprintf("_%x", h.Sum(nil)[0:6])
- if *objDir == "" {
- *objDir = "_obj"
- }
- // make sure that `objDir` directory exists, so that we can write
- // all the output files there.
- os.MkdirAll(*objDir, 0o700)
- *objDir += string(filepath.Separator)
-
for i, input := range goFiles {
f := fs[i]
p.Translate(f)
// writeDefs creates output files to be compiled by gc and gcc.
func (p *Package) writeDefs() {
var fgo2, fc io.Writer
- f := creat(*objDir + "_cgo_gotypes.go")
+ f := creat("_cgo_gotypes.go")
defer f.Close()
fgo2 = f
if *gccgo {
- f := creat(*objDir + "_cgo_defun.c")
+ f := creat("_cgo_defun.c")
defer f.Close()
fc = f
}
- fm := creat(*objDir + "_cgo_main.c")
+ fm := creat("_cgo_main.c")
var gccgoInit strings.Builder
fmt.Fprintf(fgo2, "//go:cgo_ldflag %q\n", arg)
}
} else {
- fflg := creat(*objDir + "_cgo_flags")
+ fflg := creat("_cgo_flags")
for _, arg := range p.LdFlags {
fmt.Fprintf(fflg, "_CGO_LDFLAGS=%s\n", arg)
}
}
}
- fgcc := creat(*objDir + "_cgo_export.c")
- fgcch := creat(*objDir + "_cgo_export.h")
+ fgcc := creat("_cgo_export.c")
+ fgcch := creat("_cgo_export.h")
if *gccgo {
p.writeGccgoExports(fgo2, fm, fgcc, fgcch)
} else {
}
if *exportHeader != "" && len(p.ExpFunc) > 0 {
- fexp := creat(*exportHeader)
- fgcch, err := os.Open(*objDir + "_cgo_export.h")
+ fexp, err := os.Create(*exportHeader)
+ if err != nil {
+ fatalf("%s", err)
+ }
+ fgcch, err := os.Open(filepath.Join(outputDir(), "_cgo_export.h"))
if err != nil {
fatalf("%s", err)
}
base := srcfile
base = strings.TrimSuffix(base, ".go")
base = filepath.Base(base)
- fgo1 := creat(*objDir + base + ".cgo1.go")
- fgcc := creat(*objDir + base + ".cgo2.c")
+ fgo1 := creat(base + ".cgo1.go")
+ fgcc := creat(base + ".cgo2.c")
p.GoFiles = append(p.GoFiles, base+".cgo1.go")
p.GccFiles = append(p.GccFiles, base+".cgo2.c")
fatalf("unable to locate gccgo: %v", err)
}
}
- gccgoMangler, err = pkgpath.ToSymbolFunc(cmd, *objDir)
+ gccgoMangler, err = pkgpath.ToSymbolFunc(cmd, outputDir())
if err != nil {
fatalf("%v", err)
}
"go/token"
"os"
"os/exec"
+ "path/filepath"
"slices"
)
fmt.Fprintf(os.Stderr, "\n")
}
+// create creates a file in the output directory.
func creat(name string) *os.File {
- f, err := os.Create(name)
+ f, err := os.Create(filepath.Join(outputDir(), name))
if err != nil {
fatalf("%s", err)
}
return f
}
+
+// outputDir returns the output directory, making sure that it exists.
+func outputDir() string {
+ os.MkdirAll(*objDir, 0o700)
+ return *objDir
+}