Skip to content

Commit c13194e

Browse files
authored
gopy: add environment variable support
1 parent c29e95e commit c13194e

File tree

2 files changed

+65
-28
lines changed

2 files changed

+65
-28
lines changed

bind/utils.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,28 @@ func getPythonConfig(vm string) (pyconfig, error) {
9797
code := `import sys
9898
import distutils.sysconfig as ds
9999
import json
100-
print(json.dumps({
101-
"version": sys.version_info.major,
102-
"incdir": ds.get_python_inc(),
103-
"libdir": ds.get_config_var("LIBDIR"),
104-
"libpy": ds.get_config_var("LIBRARY"),
105-
"shlibs": ds.get_config_var("SHLIBS"),
106-
"syslibs": ds.get_config_var("SYSLIBS"),
107-
"shlinks": ds.get_config_var("LINKFORSHARED"),
100+
import os
101+
version=sys.version_info.major
102+
103+
if "GOPY_INCLUDE" in os.environ and "GOPY_LIBDIR" in os.environ and "GOPY_PYLIB" in os.environ:
104+
print(json.dumps({
105+
"version": version,
106+
"incdir": os.environ["GOPY_INCLUDE"],
107+
"libdir": os.environ["GOPY_LIBDIR"],
108+
"libpy": os.environ["GOPY_PYLIB"],
109+
"shlibs": ds.get_config_var("SHLIBS"),
110+
"syslibs": ds.get_config_var("SYSLIBS"),
111+
"shlinks": ds.get_config_var("LINKFORSHARED"),
112+
}))
113+
else:
114+
print(json.dumps({
115+
"version": sys.version_info.major,
116+
"incdir": ds.get_python_inc(),
117+
"libdir": ds.get_config_var("LIBDIR"),
118+
"libpy": ds.get_config_var("LIBRARY"),
119+
"shlibs": ds.get_config_var("SHLIBS"),
120+
"syslibs": ds.get_config_var("SYSLIBS"),
121+
"shlinks": ds.get_config_var("LINKFORSHARED"),
108122
}))
109123
`
110124

@@ -138,6 +152,8 @@ print(json.dumps({
138152
}
139153

140154
raw.IncDir = filepath.ToSlash(raw.IncDir)
155+
raw.LibDir = filepath.ToSlash(raw.LibDir)
156+
141157
if strings.HasSuffix(raw.LibPy, ".a") {
142158
raw.LibPy = raw.LibPy[:len(raw.LibPy)-len(".a")]
143159
}

cmd_build.go

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ package main
66

77
import (
88
"fmt"
9+
"github.com/go-python/gopy/bind"
10+
"github.com/gonuts/commander"
11+
"github.com/gonuts/flag"
912
"log"
1013
"os"
1114
"os/exec"
15+
"path/filepath"
16+
"runtime"
1217
"strings"
13-
14-
"github.com/go-python/gopy/bind"
15-
"github.com/gonuts/commander"
16-
"github.com/gonuts/flag"
1718
)
1819

1920
func gopyMakeCmdBuild() *commander.Command {
@@ -170,28 +171,48 @@ func runBuild(mode bind.BuildMode, odir, outname, cmdstr, vm, mainstr string, sy
170171
return err
171172
}
172173
cccmd := strings.TrimSpace(string(cccmdb))
174+
var cflags, ldflags []byte
175+
if runtime.GOOS != "windows" {
176+
fmt.Printf("%v-config --cflags\n", vm)
177+
cmd = exec.Command(vm+"-config", "--cflags") // TODO: need minor version!
178+
cflags, err = cmd.CombinedOutput()
179+
if err != nil {
180+
fmt.Printf("cmd had error: %v output:\n%v\n", err, string(cflags))
181+
return err
182+
}
173183

174-
fmt.Printf("%v-config --cflags\n", vm)
175-
cmd = exec.Command(vm+"-config", "--cflags") // TODO: need minor version!
176-
cflags, err := cmd.CombinedOutput()
177-
if err != nil {
178-
fmt.Printf("cmd had error: %v output:\n%v\n", err, string(cflags))
179-
return err
184+
fmt.Printf("%v-config --ldflags\n", vm)
185+
cmd = exec.Command(vm+"-config", "--ldflags")
186+
ldflags, err = cmd.CombinedOutput()
187+
if err != nil {
188+
fmt.Printf("cmd had error: %v output:\n%v\n", err, string(ldflags))
189+
return err
190+
}
180191
}
181-
182-
fmt.Printf("%v-config --ldflags\n", vm)
183-
cmd = exec.Command(vm+"-config", "--ldflags")
184-
ldflags, err := cmd.CombinedOutput()
185-
if err != nil {
186-
fmt.Printf("cmd had error: %v output:\n%v\n", err, string(ldflags))
187-
return err
192+
extext := libExt
193+
if runtime.GOOS == "windows" {
194+
extext = ".pyd"
188195
}
189-
190-
modlib := "_" + outname + libExt
196+
modlib := "_" + outname + extext
191197
gccargs := []string{outname + ".c", extraGccArgs, outname + "_go" + libExt, "-o", modlib}
192198
gccargs = append(gccargs, strings.Split(strings.TrimSpace(string(cflags)), " ")...)
193199
gccargs = append(gccargs, strings.Split(strings.TrimSpace(string(ldflags)), " ")...)
194-
gccargs = append(gccargs, "-fPIC", "--shared")
200+
gccargs = append(gccargs, "-fPIC", "--shared", "-Ofast")
201+
if !symbols {
202+
gccargs = append(gccargs, "-s")
203+
}
204+
include, exists := os.LookupEnv("GOPY_INCLUDE")
205+
if exists {
206+
gccargs = append(gccargs, "-I"+filepath.ToSlash(include))
207+
}
208+
lib, exists := os.LookupEnv("GOPY_LIBDIR")
209+
if exists {
210+
gccargs = append(gccargs, "-L"+filepath.ToSlash(lib))
211+
}
212+
libname, exists := os.LookupEnv("GOPY_PYLIB")
213+
if exists {
214+
gccargs = append(gccargs, "-l"+filepath.ToSlash(libname))
215+
}
195216

196217
gccargs = func(vs []string) []string {
197218
o := make([]string, 0, len(gccargs))

0 commit comments

Comments
 (0)