1 $ORG_PATH="go.etcd.io"
2 $REPO_PATH="$ORG_PATH/etcd"
3 $PWD = $((Get-Item -Path ".\" -Verbose).FullName)
4 $FSROOT = $((Get-Location).Drive.Name+":")
5 $FSYS = $((Get-WMIObject win32_logicaldisk -filter "DeviceID = '$FSROOT'").filesystem)
6 
7 if ($FSYS.StartsWith("FAT","CurrentCultureIgnoreCase")) {
8 	echo "Error: Cannot build etcd using the $FSYS filesystem (use NTFS instead)"
9 	exit 1
10 }
11 
12 # Set $Env:GO_LDFLAGS="-s" for building without symbols.
13 $GO_LDFLAGS="$Env:GO_LDFLAGS -X $REPO_PATH/version.GitSHA=$GIT_SHA"
14 
15 # rebuild symlinks
16 git ls-files -s cmd | select-string -pattern 120000 | ForEach {
17 	$l = $_.ToString()
18 	$lnkname = $l.Split('	')[1]
19 	$target = "$(git log -p HEAD -- $lnkname | select -last 2 | select -first 1)"
20 	$target = $target.SubString(1,$target.Length-1).Replace("/","\")
21 	$lnkname = $lnkname.Replace("/","\")
22 
23 	$terms = $lnkname.Split("\")
24 	$dirname = $terms[0..($terms.length-2)] -join "\"
25 	$lnkname = "$PWD\$lnkname"
26 	$targetAbs = "$((Get-Item -Path "$dirname\$target").FullName)"
27 	$targetAbs = $targetAbs.Replace("/", "\")
28 
29 	if (test-path -pathtype container "$targetAbs") {
30 		if (Test-Path "$lnkname") {
31 			if ((Get-Item "$lnkname") -is [System.IO.DirectoryInfo]) {
32 				# rd so deleting junction doesn't take files with it
33 				cmd /c rd  "$lnkname"
34 			}
35 		}
36 		if (Test-Path "$lnkname") {
37 			if (!((Get-Item "$lnkname") -is [System.IO.DirectoryInfo])) {
38 				cmd /c del /A /F  "$lnkname"
39 			}
40 		}
41 		cmd /c mklink /J  "$lnkname"   "$targetAbs"  ">NUL"
42 	} else {
43 		# Remove file with symlink data (first run)
44 		if (Test-Path "$lnkname") {
45 			cmd /c del /A /F  "$lnkname"
46 		}
47 		cmd /c mklink /H  "$lnkname"   "$targetAbs"  ">NUL"
48 	}
49 }
50 
51 if (-not $env:GOPATH) {
52 	$orgpath="$PWD\gopath\src\" + $ORG_PATH.Replace("/", "\")
53 	if (Test-Path "$orgpath\etcd") {
54 		if ((Get-Item "$orgpath\etcd") -is [System.IO.DirectoryInfo]) {
55 			# rd so deleting junction doesn't take files with it
56 			cmd /c rd  "$orgpath\etcd"
57 		}
58 	}
59 	if (Test-Path "$orgpath") {
60 		if ((Get-Item "$orgpath") -is [System.IO.DirectoryInfo]) {
61 			# rd so deleting junction doesn't take files with it
62 			cmd /c rd  "$orgpath"
63 		}
64 	}
65 	if (Test-Path "$orgpath") {
66 		if (!((Get-Item "$orgpath") -is [System.IO.DirectoryInfo])) {
67 			# Remove file with symlink data (first run)
68 			cmd /c del /A /F  "$orgpath"
69 		}
70 	}
71 	cmd /c mkdir  "$orgpath"
72 	cmd /c mklink /J  "$orgpath\etcd"   "$PWD"  ">NUL"
73 	$env:GOPATH = "$PWD\gopath"
74 }
75 
76 # Static compilation is useful when etcd is run in a container
77 $env:CGO_ENABLED = 0
78 $env:GO15VENDOREXPERIMENT = 1
79 $GIT_SHA="$(git rev-parse --short HEAD)"
80 go build -a -installsuffix cgo -ldflags $GO_LDFLAGS -o bin\etcd.exe "$REPO_PATH"
81 go build -a -installsuffix cgo -ldflags $GO_LDFLAGS -o bin\etcdctl.exe "$REPO_PATH\etcdctl"
82