From c72d0b64effc215890b723cdd198ab400f0ae2cd Mon Sep 17 00:00:00 2001 From: Audrius Butkevicius Date: Wed, 30 Nov 2016 21:42:23 +0000 Subject: [PATCH 1/3] build: Support building on Windows --- make-go.bash | 12 ++++++++++-- make-syncthing.bash | 6 ++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/make-go.bash b/make-go.bash index f85702c5..79c80d14 100755 --- a/make-go.bash +++ b/make-go.bash @@ -70,12 +70,20 @@ if [ ! -e ../VERSION ]; then echo "$(git describe --tags)" > ../VERSION fi -./make.bash --no-banner +BUILDER_EXT=bash +case "$(uname)" in + *MINGW* | *WIN32* | *CYGWIN*) + BUILDER_EXT=bat + ;; +esac + +./make.${BUILDER_EXT} --no-banner + cp -a ../bin "${GOROOT_FINAL}"/ cp -a ../pkg "${GOROOT_FINAL}"/ cp -a ../src "${GOROOT_FINAL}"/ -if [[ -e ./make.bash ]]; then +if [[ -e ./make.${BUILDER_EXT} ]]; then pushd ../ git clean -f popd diff --git a/make-syncthing.bash b/make-syncthing.bash index 267ac602..d4b50188 100755 --- a/make-syncthing.bash +++ b/make-syncthing.bash @@ -35,6 +35,12 @@ unset GOPATH #Set by build.go export GOROOT=${MYDIR}/ext/golang/dist/go-${GOOS}-${GOARCH} export PATH=${GOROOT}/bin:${PATH} +case "$(uname)" in + *CYGWIN*) + export GOROOT=`cygpath -w $GOROOT` + ;; +esac + pushd ext/syncthing/src/github.com/syncthing/syncthing _GOOS=$GOOS From 6f01894c679c5978bd4fd96ec858c477578e8226 Mon Sep 17 00:00:00 2001 From: Audrius Butkevicius Date: Wed, 30 Nov 2016 21:42:58 +0000 Subject: [PATCH 2/3] go: Update Go to 1.7.3, patch DNS (fixes #723) --- ext/golang/go | 2 +- patches/golang/all/dns.patch | 71 +++++++++++++++++------------------- 2 files changed, 34 insertions(+), 39 deletions(-) diff --git a/ext/golang/go b/ext/golang/go index 57e459e0..2f655723 160000 --- a/ext/golang/go +++ b/ext/golang/go @@ -1 +1 @@ -Subproject commit 57e459e02b4b01567f92542f92cd9afde209e193 +Subproject commit 2f6557233c5a5c311547144c34b4045640ff9f71 diff --git a/patches/golang/all/dns.patch b/patches/golang/all/dns.patch index c75e5ca7..5d3ea26d 100644 --- a/patches/golang/all/dns.patch +++ b/patches/golang/all/dns.patch @@ -1,37 +1,22 @@ -diff --git a/net/dnsclient_unix.go b/net/dnsclient_unix.go -index 17188f0..15a1663 100644 ---- a/net/dnsclient_unix.go -+++ b/net/dnsclient_unix.go -@@ -279,12 +279,6 @@ func (conf *resolverConfig) tryUpdate(name string) { - return - } - conf.modTime = fi.ModTime() -- } else { -- // If modTime wasn't set prior, assume nothing has changed. -- if conf.modTime.IsZero() { -- return -- } -- conf.modTime = time.Time{} - } - - dnsConf := dnsReadConfig(name) -diff --git a/net/dnsconfig_unix.go b/net/dnsconfig_unix.go -index 6073fdb..bd6ca41 100644 ---- a/net/dnsconfig_unix.go -+++ b/net/dnsconfig_unix.go -@@ -8,7 +8,53 @@ - +--- /net/dnsconfig_unix.go 2016-08-20 08:14:05.763235602 -0400 ++++ /net/dnsconfig_unix.go 2016-08-20 08:14:05.763235602 -0400 +@@ -9,15 +9,58 @@ package net --var defaultNS = []string{"127.0.0.1", "::1"} -+import ( + import ( + "fmt" + "os" + "os/exec" + "strings" -+) -+ -+var currentNS []string -+ + "time" + ) + + var ( +- defaultNS = []string{"127.0.0.1:53", "[::1]:53"} ++ currentNS []string + getHostname = os.Hostname // variable for testing + ) + +func getDefaultNS() []string { + var servers []string + for _, prop := range []string{"net.dns1", "net.dns2"} { @@ -42,12 +27,12 @@ index 6073fdb..bd6ca41 100644 + } + output := strings.Trim(string(outputBytes), "\n") + if ParseIP(output) != nil { -+ servers = append(servers, output) ++ servers = append(servers, output + ":53") + } + } + + if len(servers) == 0 { -+ servers = []string{"8.8.8.8", "8.8.4.4", "4.2.2.1"} ++ servers = []string{"8.8.8.8:53", "8.8.4.4:53", "4.2.2.1:53"} + } + + if !slicesEqual(currentNS, servers) { @@ -71,24 +56,34 @@ index 6073fdb..bd6ca41 100644 + + return true +} - ++ type dnsConfig struct { - servers []string // servers to use -@@ -33,7 +79,7 @@ func dnsReadConfig(filename string) *dnsConfig { + servers []string // server addresses (in host:port form) to use + search []string // rooted suffixes to append to local name +@@ -40,7 +83,7 @@ } file, err := open(filename) if err != nil { - conf.servers = defaultNS + conf.servers = getDefaultNS() + conf.search = dnsDefaultSearch() conf.err = err return conf - } -@@ -110,7 +156,7 @@ func dnsReadConfig(filename string) *dnsConfig { +@@ -49,7 +92,7 @@ + if fi, err := file.file.Stat(); err == nil { + conf.mtime = fi.ModTime() + } else { +- conf.servers = defaultNS ++ conf.servers = getDefaultNS() + conf.search = dnsDefaultSearch() + conf.err = err + return conf +@@ -126,7 +169,7 @@ } } if len(conf.servers) == 0 { - conf.servers = defaultNS + conf.servers = getDefaultNS() } - return conf - } + if len(conf.search) == 0 { + conf.search = dnsDefaultSearch() From 6048b955911fb3d69850eca4760c7e6d52cd51e0 Mon Sep 17 00:00:00 2001 From: Audrius Butkevicius Date: Thu, 1 Dec 2016 23:30:56 +0000 Subject: [PATCH 3/3] build: Update windows build instructions (fixes #219) --- README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e47a21d0..1f1221c0 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ A wrapper of [Syncthing](https://github.com/syncthing/syncthing) for Android. -screenshot 1 -screenshot 2 +screenshot 1 +screenshot 2 screenshot 3 [Get it on Google Play](https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid) [Get it on F-Droid](https://f-droid.org/app/com.nutomic.syncthingandroid) @@ -39,9 +39,13 @@ To check for updated gradle dependencies, run `gradle dependencyUpdates`. Additi ### Building on Windows -To build the Syncthing app on Windows we need to include the native Syncthing binaries: -- Download the `syncthing-linux-386` and `syncthing-linux-arm` archives from [Syncthing releases](https://github.com/syncthing/syncthing/releases) and extract them. In each there is a `syncthing` executable. Rename and place both of these to `libs/x86/libsyncthing.so` and `libs/armeabi/libsyncthing.so` respectively. -Use `./gradlew assembleDebug` in the project directory to compile the APK. +To build the Syncthing app on Windows we need to have cygwin installed. + +From a cygwin shell in the project directory, build Go using `./make-go.bash [arch]` +After Go is built, compile syncthing using `./make-syncthing.bash [arch]` + +Lastly, use `./gradlew assembleDebug` in the project directory to compile the APK, +or use Android Studio to build/deploy the APK. # License