summaryrefslogtreecommitdiff
path: root/Makefile
blob: 3bb55a870d0e3222b153fd62c34a4532d1519dc0 (plain)
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
APPNAME := riseup-vpn
SYSTRAY := 0xacab.org/leap/bitmask-vpn
STAGING := staging
SYSTRAY_BIN := bitmask-vpn
HELPER_BIN := bitmask_helper
APP_NAME := RiseupVPN
BUILD_RELEASE?=no
WIN_CERT_PATH?=z:\leap\LEAP.pfx
WIN_CERT_PASS?=
OSX_CERT = "Developer ID Installer: LEAP Encryption Access Project"
VERSION = $(shell git -C `go env GOPATH`/src/$(SYSTRAY)  describe --tags --always)

TGZ_PATH = $(shell pwd)/dist/$(APPNAME)-$(VERSION)
tgz:
	# XXX not needed anymore
	mkdir -p $(TGZ_PATH)
	git -C `go env GOPATH`/src/$(SYSTRAY) archive HEAD | tar -x -C $(TGZ_PATH)
	mkdir -p $(TGZ_PATH)/helpers
	wget -O $(TGZ_PATH)/helpers/bitmask-root https://0xacab.org/leap/bitmask-dev/raw/master/src/leap/bitmask/vpn/helpers/linux/bitmask-root
	chmod +x $(TGZ_PATH)/helpers/bitmask-root
	wget -O $(TGZ_PATH)/helpers/se.leap.bitmask.policy https://0xacab.org/leap/bitmask-dev/raw/master/src/leap/bitmask/vpn/helpers/linux/se.leap.bitmask.policy
	cd dist; tar cvzf $(APPNAME)-$(VERSION).tgz $(APPNAME)-$(VERSION)
	rm -r $(TGZ_PATH)

# -----------------------------------------------------------------------------
# Windows 
# -----------------------------------------------------------------------------
CROSS_FLAGS = CGO_ENABLED=1 GOARCH=386 GOOS=windows CC="/usr/bin/i686-w64-mingw32-gcc" CGO_LDFLAGS="-lssp" CXX="i686-w64-mingw32-c++"

deps_win:
	choco install -y golang python nssm nsis wget 7zip
openvpn_win:
	if not exist staging\openvpn mkdir staging\openvpn
	wget https://build.openvpn.net/downloads/releases/latest/tap-windows-latest-stable.exe -O staging/openvpn/tap-windows.exe
# eventually, this should be built statically and cross compiled in the same pipeline that we build the installer. 
	wget https://downloads.leap.se/thirdparty/windows/openvpn-x86_64-w64-mingw32.tar.bz2 -O staging/openvpn/openvpn.tar.bz2
	7z e -y -ostaging/openvpn/ staging/openvpn/openvpn.tar.bz2
	7z e -y -r -ostaging/openvpn/ staging/openvpn/openvpn.tar *.dll
	7z e -y -r -ostaging/openvpn/ staging/openvpn/openvpn.tar *.exe
	copy .\staging\openvpn\openvpn.exe .\staging
	copy .\staging\openvpn\*.dll .\staging
openvpn_cross_win:
	mkdir -p staging/openvpn
	wget https://build.openvpn.net/downloads/releases/latest/tap-windows-latest-stable.exe -O $(STAGING)/openvpn/tap-windows.exe
	wget https://downloads.leap.se/thirdparty/windows/openvpn-x86_64-w64-mingw32.tar.bz2 -O $(STAGING)/openvpn/openvpn.tar.bz2
	tar xvjf $(STAGING)/openvpn/openvpn.tar.bz2 -C $(STAGING)/openvpn/
	cp $(STAGING)/openvpn/bin/openvpn.exe $(STAGING)/openvpn
	cp $(STAGING)/openvpn/bin/*.dll $(STAGING)
	cp $(STAGING)/openvpn/lib/engines-1_1/*.dll $(STAGING)
helper_win:
	go build -ldflags "-s -w" -o $(STAGING)/$(HELPER_BIN).exe $(SYSTRAY)/cmd/bitmask-helper
systray_win:
	go get -u $(SYSTRAY)/cmd/bitmask-vpn
	powershell '$$gopath=go env GOPATH;$$version=git -C $$gopath/src/$(SYSTRAY) describe --tags; go build -ldflags "-H windowsgui -s -w -X main.version=$$version" -o $(STAGING)/$(SYSTRAY_BIN).exe $(SYSTRAY)/cmd/bitmask-vpn'
build_win: staging\nssm.exe helper_win systray_win
# since it's tedious, I assume you did bootstrap openvpn_win manually already.
	echo "[+] building windows"
	if not exist dist mkdir dist
	powershell '$$gopath=go env GOPATH;$$version=git -C $$gopath/src/$(SYSTRAY) describe --tags; $(MAKE) -C win VERSION=$$version'
	"C:\Program Files (x86)\NSIS\makensis.exe" win/RiseupVPN-installer.nsi
sign_win:
	echo "[+] signing windows build"
	python win/sign.py $(WIN_CERT_PATH) $(WIN_CERT_PASS)
build_cross_win: staging/nssm.exe
	echo "!define VERSION $(VERSION)" > $(STAGING)/version.nsh
	go get 0xacab.org/leap/bitmask-vpn/cmd/bitmask-helper
	go get 0xacab.org/leap/bitmask-vpn/cmd/bitmask-vpn
	$(CROSS_FLAGS) $(MAKE) helper_win
	$(CROSS_FLAGS) go get $(SYSTRAY)/cmd/bitmask-vpn
	$(CROSS_FLAGS) go build -ldflags "-H windowsgui -s -w -X main.version=$(VERSION)" -o $(STAGING)/$(SYSTRAY_BIN).exe $(SYSTRAY)/cmd/bitmask-vpn
	mkdir -p dist
	make -C win VERSION=$(VERSION)
	makensis win/RiseupVPN-installer.nsi

# -----------------------------------------------------------------------------
# OSX
# -----------------------------------------------------------------------------

deps_osx:
# TODO - bootstrap homebrew if not there
	brew install python golang make upx
openvpn_osx:
	echo "[+] downloading openvpn..."
	wget -O $(STAGING)/openvpn https://downloads.leap.se/thirdparty/osx/openvpn/openvpn
helper_osx:
	go get -u github.com/sevlyar/go-daemon
	go build -ldflags "-s -w" -o $(STAGING)/$(HELPER_BIN) $(SYSTRAY)/cmd/bitmask-helper
	upx $(STAGING)/$(HELPER_BIN)
systray_osx:
	go get -u $(SYSTRAY)/cmd/bitmask-vpn
	go build -ldflags "-X main.version=$(VERSION)" -o $(STAGING)/$(SYSTRAY_BIN) $(SYSTRAY)/cmd/bitmask-vpn
	upx $(STAGING)/$(SYSTRAY_BIN)
bundle_osx:
	mkdir -p dist
	make -C osx VERSION=$(VERSION)
pkg_osx:
	osx/quickpkg --output dist/$(APP_NAME)-$(VERSION)_unsigned.pkg --scripts osx/scripts/ dist/$(APP_NAME).app/
	@if [ $(BUILD_RELEASE) = no ]; then\
		echo "[!] BUILD_RELEASE=no, skipping signature";\
	else\
		echo "[+] Signing the bundle";\
		productsign --sign $(OSX_CERT) dist/$(APP_NAME)-$(VERSION)_unsigned.pkg dist/$(APP_NAME)-$(VERSION).pkg;\
	fi
build_osx: openvpn_osx helper_osx systray_osx bundle_osx pkg_osx
	echo "[+] building osx..."

# -----------------------------------------------------------------------------
# Linux 
# -----------------------------------------------------------------------------

build_snap:
	echo "[+] building snap..."
	snapcraft build
	snapcraft snap
	mkdir -p dist
	mv $(APPNAME)* dist/

testfoo:
	dch -v $(VERSION) -M "debian package generated from the git repository";\

build_deb:  tgz
	echo "[+] building deb..."
	@if [ $(BUILD_RELEASE) = no ]; then\
		dch -v $(VERSION) -M "debian package generated from the git repository" && echo "[!] BUILD_RELEASE=no, incrementing changelog";\
	else\
		echo "[!] BUILD_RELEASE";\
	fi
	mkdir -p build
	cp dist/$(APPNAME)-$(VERSION).tgz build/$(APPNAME)_$(shell echo ${VERSION} | cut -d '-' -f 1-2).orig.tar.gz
	cd build && tar xzf $(APPNAME)_$(shell echo ${VERSION} | cut -d '-' -f 1-2).orig.tar.gz
	cp -r debian/ build/$(APPNAME)-$(VERSION)/
	cd build/$(APPNAME)-$(VERSION) && debuild -us -uc
	cp build/*.deb dist/
	git checkout -- debian/changelog

# -----------------------------------------------------------------------------
# Utils
# -----------------------------------------------------------------------------

clean:
	rm -rf dist/ build/

staging\nssm.exe:
	xcopy /y "C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe" $(STAGING)
staging/nssm.exe:
	wget https://nssm.cc/release/nssm-2.24.zip -O $(STAGING)/nssm.zip
	unzip $(STAGING)/nssm.zip -d $(STAGING)
	mv $(STAGING)/nssm-*/win32/nssm.exe $(STAGING)
	rm -rf $(STAGING)/nssm-* $(STAGING)/nssm.zip