File: build.ps1

package info (click to toggle)
etcd 3.5.16-10
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,892 kB
  • sloc: sh: 3,139; makefile: 478
file content (81 lines) | stat: -rw-r--r-- 2,718 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
$ORG_PATH="go.etcd.io"
$REPO_PATH="$ORG_PATH/etcd"
$PWD = $((Get-Item -Path ".\" -Verbose).FullName)
$FSROOT = $((Get-Location).Drive.Name+":")
$FSYS = $((Get-WMIObject win32_logicaldisk -filter "DeviceID = '$FSROOT'").filesystem)

if ($FSYS.StartsWith("FAT","CurrentCultureIgnoreCase")) {
	echo "Error: Cannot build etcd using the $FSYS filesystem (use NTFS instead)"
	exit 1
}

# Set $Env:GO_LDFLAGS="-s" for building without symbols.
$GO_LDFLAGS="$Env:GO_LDFLAGS -X $REPO_PATH/version.GitSHA=$GIT_SHA"

# rebuild symlinks
git ls-files -s cmd | select-string -pattern 120000 | ForEach {
	$l = $_.ToString()
	$lnkname = $l.Split('	')[1]
	$target = "$(git log -p HEAD -- $lnkname | select -last 2 | select -first 1)"
	$target = $target.SubString(1,$target.Length-1).Replace("/","\")
	$lnkname = $lnkname.Replace("/","\")

	$terms = $lnkname.Split("\")
	$dirname = $terms[0..($terms.length-2)] -join "\"
	$lnkname = "$PWD\$lnkname"
	$targetAbs = "$((Get-Item -Path "$dirname\$target").FullName)"
	$targetAbs = $targetAbs.Replace("/", "\")

	if (test-path -pathtype container "$targetAbs") {
		if (Test-Path "$lnkname") {
			if ((Get-Item "$lnkname") -is [System.IO.DirectoryInfo]) {
				# rd so deleting junction doesn't take files with it
				cmd /c rd  "$lnkname"
			}
		}
		if (Test-Path "$lnkname") {
			if (!((Get-Item "$lnkname") -is [System.IO.DirectoryInfo])) {
				cmd /c del /A /F  "$lnkname"
			}
		}
		cmd /c mklink /J  "$lnkname"   "$targetAbs"  ">NUL"
	} else {
		# Remove file with symlink data (first run)
		if (Test-Path "$lnkname") {
			cmd /c del /A /F  "$lnkname"
		}
		cmd /c mklink /H  "$lnkname"   "$targetAbs"  ">NUL"
	}
}

if (-not $env:GOPATH) {
	$orgpath="$PWD\gopath\src\" + $ORG_PATH.Replace("/", "\")
	if (Test-Path "$orgpath\etcd") {
		if ((Get-Item "$orgpath\etcd") -is [System.IO.DirectoryInfo]) {
			# rd so deleting junction doesn't take files with it
			cmd /c rd  "$orgpath\etcd"
		}
	}
	if (Test-Path "$orgpath") {
		if ((Get-Item "$orgpath") -is [System.IO.DirectoryInfo]) {
			# rd so deleting junction doesn't take files with it
			cmd /c rd  "$orgpath"
		}
	}
	if (Test-Path "$orgpath") {
		if (!((Get-Item "$orgpath") -is [System.IO.DirectoryInfo])) {
			# Remove file with symlink data (first run)
			cmd /c del /A /F  "$orgpath"
		}
	}
	cmd /c mkdir  "$orgpath"
	cmd /c mklink /J  "$orgpath\etcd"   "$PWD"  ">NUL"
	$env:GOPATH = "$PWD\gopath"
}

# Static compilation is useful when etcd is run in a container
$env:CGO_ENABLED = 0
$env:GO15VENDOREXPERIMENT = 1
$GIT_SHA="$(git rev-parse --short HEAD)"
go build -a -installsuffix cgo -ldflags $GO_LDFLAGS -o bin\etcd.exe "$REPO_PATH"
go build -a -installsuffix cgo -ldflags $GO_LDFLAGS -o bin\etcdctl.exe "$REPO_PATH\etcdctl"