]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/dist, cmd/go: add environment variable override for pkg-config
authorBoris Nagaev <nagaev@google.com>
Sat, 25 Jun 2016 11:51:06 +0000 (13:51 +0200)
committerIan Lance Taylor <iant@golang.org>
Mon, 3 Oct 2016 18:08:01 +0000 (18:08 +0000)
Allow overriding default name of `pkg-config` tool via environment
variable PKG_CONFIG (same as used by autoconf pkg.m4 macros). This
facilitates easy cross-compilation of cgo code.

Original patch against Go <= 1.4 was written by
xnox_canonical <dimitri.ledkov@canonical.com> in 2014.
Source: https://codereview.appspot.com/104960043/

Fixes #16253

Change-Id: I31c33ffc3ecbff65da31421e6188d092ab4fe7e4
Reviewed-on: https://go-review.googlesource.com/29991
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/cgo/doc.go
src/cmd/dist/build.go
src/cmd/dist/buildgo.go
src/cmd/go/alldocs.go
src/cmd/go/build.go
src/cmd/go/help.go
src/make.bash

index d3a7b6d2a7385447ff64bd538b7bfe4b8f9a486c..e6f9173aaf83f6daa3e4fba4c238b1a40cdcdeb4 100644 (file)
@@ -53,6 +53,8 @@ For example:
        // #include <png.h>
        import "C"
 
+The default pkg-config tool may be changed by setting the PKG_CONFIG environment variable.
+
 When building, the CGO_CFLAGS, CGO_CPPFLAGS, CGO_CXXFLAGS, CGO_FFLAGS and
 CGO_LDFLAGS environment variables are added to the flags derived from
 these directives.  Package-specific flags should be set using the
index 9eb9caf392197a094e8722f326308e4292d2609c..28a145581dc60b0dc575e9a8b658f600264be7fd 100644 (file)
@@ -21,30 +21,31 @@ import (
 
 // The usual variables.
 var (
-       goarch           string
-       gobin            string
-       gohostarch       string
-       gohostos         string
-       goos             string
-       goarm            string
-       go386            string
-       goroot           string
-       goroot_final     string
-       goextlinkenabled string
-       gogcflags        string // For running built compiler
-       workdir          string
-       tooldir          string
-       oldgoos          string
-       oldgoarch        string
-       slash            string
-       exe              string
-       defaultcc        string
-       defaultcflags    string
-       defaultldflags   string
-       defaultcxxtarget string
-       defaultcctarget  string
-       rebuildall       bool
-       defaultclang     bool
+       goarch                 string
+       gobin                  string
+       gohostarch             string
+       gohostos               string
+       goos                   string
+       goarm                  string
+       go386                  string
+       goroot                 string
+       goroot_final           string
+       goextlinkenabled       string
+       gogcflags              string // For running built compiler
+       workdir                string
+       tooldir                string
+       oldgoos                string
+       oldgoarch              string
+       slash                  string
+       exe                    string
+       defaultcc              string
+       defaultcflags          string
+       defaultldflags         string
+       defaultcxxtarget       string
+       defaultcctarget        string
+       defaultpkgconfigtarget string
+       rebuildall             bool
+       defaultclang           bool
 
        vflag int // verbosity
 )
@@ -208,6 +209,12 @@ func xinit() {
        }
        defaultcxxtarget = b
 
+       b = os.Getenv("PKG_CONFIG")
+       if b == "" {
+               b = "pkg-config"
+       }
+       defaultpkgconfigtarget = b
+
        // For tools being invoked but also for os.ExpandEnv.
        os.Setenv("GO386", go386)
        os.Setenv("GOARCH", goarch)
index 3fab2354ad267835dfac6752351a3a1fc85124f9..dc478f87fec72250ea58fa8c788a6297186b736e 100644 (file)
@@ -19,6 +19,7 @@ import (
 //     package main
 //     const defaultCC = <defaultcc>
 //     const defaultCXX = <defaultcxx>
+//     const defaultPkgConfig = <defaultpkgconfig>
 //
 // It is invoked to write cmd/go/zdefaultcc.go
 // but we also write cmd/cgo/zdefaultcc.go
@@ -29,8 +30,9 @@ func mkzdefaultcc(dir, file string) {
                        "package main\n"+
                        "\n"+
                        "const defaultCC = `%s`\n"+
-                       "const defaultCXX = `%s`\n",
-               defaultcctarget, defaultcxxtarget)
+                       "const defaultCXX = `%s`\n"+
+                       "const defaultPkgConfig = `%s`\n",
+               defaultcctarget, defaultcxxtarget, defaultpkgconfigtarget)
 
        writefile(out, file, writeSkipSame)
 
index 522f7914732acf660037dff90fa4068e67e08be0..71befe57c48b06d86edb29b5236da2736e6ca508 100644 (file)
 //             Flags that cgo will pass to the compiler when linking.
 //     CXX
 //             The command to use to compile C++ code.
+//     PKG_CONFIG
+//             Path to pkg-config tool.
 //
 // Architecture-specific environment variables:
 //
index 4344d84702aca5c72fdc44db4d93a0e2b604b1cc..5c317cef81a7ce1f496d783df24421ec12a2a23d 100644 (file)
@@ -1624,13 +1624,19 @@ func (b *builder) build(a *action) (err error) {
        return nil
 }
 
+// pkgconfigCmd returns a pkg-config binary name
+// defaultPkgConfig is defined in zdefaultcc.go, written by cmd/dist.
+func (b *builder) pkgconfigCmd() string {
+       return envList("PKG_CONFIG", defaultPkgConfig)[0]
+}
+
 // Calls pkg-config if needed and returns the cflags/ldflags needed to build the package.
 func (b *builder) getPkgConfigFlags(p *Package) (cflags, ldflags []string, err error) {
        if pkgs := p.CgoPkgConfig; len(pkgs) > 0 {
                var out []byte
-               out, err = b.runOut(p.Dir, p.ImportPath, nil, "pkg-config", "--cflags", pkgs)
+               out, err = b.runOut(p.Dir, p.ImportPath, nil, b.pkgconfigCmd(), "--cflags", pkgs)
                if err != nil {
-                       b.showOutput(p.Dir, "pkg-config --cflags "+strings.Join(pkgs, " "), string(out))
+                       b.showOutput(p.Dir, b.pkgconfigCmd()+" --cflags "+strings.Join(pkgs, " "), string(out))
                        b.print(err.Error() + "\n")
                        err = errPrintedOutput
                        return
@@ -1638,9 +1644,9 @@ func (b *builder) getPkgConfigFlags(p *Package) (cflags, ldflags []string, err e
                if len(out) > 0 {
                        cflags = strings.Fields(string(out))
                }
-               out, err = b.runOut(p.Dir, p.ImportPath, nil, "pkg-config", "--libs", pkgs)
+               out, err = b.runOut(p.Dir, p.ImportPath, nil, b.pkgconfigCmd(), "--libs", pkgs)
                if err != nil {
-                       b.showOutput(p.Dir, "pkg-config --libs "+strings.Join(pkgs, " "), string(out))
+                       b.showOutput(p.Dir, b.pkgconfigCmd()+" --libs "+strings.Join(pkgs, " "), string(out))
                        b.print(err.Error() + "\n")
                        err = errPrintedOutput
                        return
index 8ad85e3b1f25bd3a248a0957b5ceaac5118a31bf..410701646d977740cb4a82c754cc5243c9094a1e 100644 (file)
@@ -465,6 +465,8 @@ Environment variables for use with cgo:
                Flags that cgo will pass to the compiler when linking.
        CXX
                The command to use to compile C++ code.
+       PKG_CONFIG
+               Path to pkg-config tool.
 
 Architecture-specific environment variables:
 
index 1a1412a00cf57e26ef31996e8e285bf094107bf4..84aaab56db3dffa46a47ece143873f57b759a06e 100755 (executable)
@@ -47,6 +47,8 @@
 # FC: Command line to run to compile Fortran code for GOARCH.
 # This is used by cgo. Default is "gfortran".
 #
+# PKG_CONFIG: Path to pkg-config tool. Default is "pkg-config".
+#
 # GO_DISTFLAGS: extra flags to provide to "dist bootstrap".
 
 set -e