a050431f26
Interestingly, ksh(1) on OpenBSD does not export PWD by default, and it also has a notion of the "logical cwd" vs the "physical cwd", with the latter being passed to chdir, but the former being stored in the non-exported PWD and displayed to the user. This means that if you `cd` into a directory that's comprised of symlinks, exec'd processes will see the physical path. Observe: # ksh # mkdir a # ln -s a b # cd b # pwd /root/b # ksh -c pwd /root/a The fact of separating physical and logical paths is not too uncommon for shells (bash does it too), but not exporting PWD is very odd. Since this is common behavior for many shells, libraries that return the working directory will do something strange: they `stat(".")` and then `stat(getenv("PWD"))`, and if these point to the same inode, they roll with the value of `getenv("PWD")`, or otherwise fallback to asking the kernel for the cwd. Since PWD was not exported by ksh(1), Go's dep utility did not understand it was operating inside of our faked GOPATH and became upset. This patch works around the whole situation by simply exporting PWD before executing dep.
50 lines
1.5 KiB
Makefile
50 lines
1.5 KiB
Makefile
PREFIX ?= /usr
|
|
DESTDIR ?=
|
|
BINDIR ?= $(PREFIX)/bin
|
|
|
|
ifeq ($(shell go env GOOS),linux)
|
|
ifeq ($(wildcard .git),)
|
|
$(error Do not build this for Linux. Instead use the Linux kernel module. See wireguard.com/install/ for more info.)
|
|
endif
|
|
endif
|
|
|
|
all: wireguard-go
|
|
|
|
export GOPATH := $(CURDIR)/.gopath
|
|
export PATH := $(PATH):$(CURDIR)/.gopath/bin
|
|
GO_IMPORT_PATH := git.zx2c4.com/wireguard-go
|
|
|
|
version.go:
|
|
@export GIT_CEILING_DIRECTORIES="$(realpath $(CURDIR)/..)" && \
|
|
tag="$$(git describe --dirty 2>/dev/null)" && \
|
|
ver="$$(printf 'package main\nconst WireGuardGoVersion = "%s"\n' "$$tag")" && \
|
|
[ "$$(cat $@ 2>/dev/null)" != "$$ver" ] && \
|
|
echo "$$ver" > $@ && \
|
|
git update-index --assume-unchanged $@ || true
|
|
|
|
.gopath/.created:
|
|
rm -rf .gopath
|
|
mkdir -p $(dir .gopath/src/$(GO_IMPORT_PATH))
|
|
ln -s ../../.. .gopath/src/$(GO_IMPORT_PATH)
|
|
touch $@
|
|
|
|
vendor/.created: Gopkg.toml Gopkg.lock | .gopath/.created
|
|
command -v dep >/dev/null || go get -v github.com/golang/dep/cmd/dep
|
|
export PWD; cd .gopath/src/$(GO_IMPORT_PATH) && dep ensure -vendor-only -v
|
|
touch $@
|
|
|
|
wireguard-go: $(wildcard *.go) $(wildcard */*.go) .gopath/.created vendor/.created version.go
|
|
go build -v $(GO_IMPORT_PATH)
|
|
|
|
install: wireguard-go
|
|
@install -v -d "$(DESTDIR)$(BINDIR)" && install -v -m 0755 wireguard-go "$(DESTDIR)$(BINDIR)/wireguard-go"
|
|
|
|
clean:
|
|
rm -f wireguard-go
|
|
|
|
update-dep: | .gopath/.created
|
|
command -v dep >/dev/null || go get -v github.com/golang/dep/cmd/dep
|
|
cd .gopath/src/$(GO_IMPORT_PATH) && dep ensure -update -v
|
|
|
|
.PHONY: clean install update-dep version.go
|