summaryrefslogtreecommitdiff
path: root/net/syncthing/Makefile
blob: 7c5c839195b96a48b8a82073766f33d89b247cf5 (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
# $NetBSD: Makefile,v 1.73 2018/07/25 21:30:45 abs Exp $

# Upstream regularly breaks protocol compatibility.  While users of
# pkgsrc syncthing on multiple systems can update synchronously, an
# important use case is interoperating with syncthing-android.
# Therefore, pkgsrc will update to a new major version (e.g. 0.12.x vs
# 0.11.x) when a corresponding syncthing-android version becomes
# available in the f-droid.org repository:
# https://f-droid.org/repository/browse/?fdid=com.nutomic.syncthingandroid
# Updates to new major versions must be tested against the android
# version from f-droid prior to commiting.  (This is an attempt to
# avoid having to version syncthing in pkgsrc.)
# Note that the android versioning is disconnected from syncthing versioning;
# see https://github.com/syncthing/syncthing-android/issues/652 for
# a fuller explanation.
DISTNAME=	syncthing-0.14.49
CATEGORIES=	net
MASTER_SITES=	${MASTER_SITE_GITHUB:=syncthing/}

# Minor version updates may be committed without asking.  Major
# updates not following the above policy will be reverted.
COMMENT=	Keeps directories in sync across hosts
HOMEPAGE=	https://syncthing.net/
MAINTAINER=	gdt@NetBSD.org
LICENSE=	mpl-2.0

# System pax fails on NetBSD 6.  Just use gtar until this is understood.
EXTRACT_USING=		gtar

GITHUB_TAG=	v${PKGVERSION_NOREV}

.include "../../lang/go/version.mk"

BUILD_DEPENDS+=		go-${GO_VERSION}*:../../lang/go

# The 'zillode' dependency calls the compiler on certain archs.
USE_LANGUAGES=		c
NO_CONFIGURE=		yes

INSTALLATION_DIRS=	bin

# Go has very strong notions of how building is supposed to work, and
# paths.  Until 0.14, syncthing had symlink workarounds to have
# sources be found via a gopath directory.  Then, building failed
# because the sources are not a subdirectory of a component of GOPATH..
# See the following discussion for some hints.
# http://stackoverflow.com/questions/18149601/go-install-always-fails-no-install-directory-outside-gopath#18164310

# Upstream's build instructions say to place tarball contents under a
# particular named subdirectory of gopath:
# https://docs.syncthing.net/dev/building.html
# We attempt to follow their instructions as closely as possible.

# We set up a gopath directory, and a directory where we will place
# the tarball contents.  We use the non-standard variable name
# WRKPLACE so that we can let WRKSRC refer to where pkgsrc naturally
# unpacked the tarball.
GOPATH=			${WRKDIR}/gopath
WRKPLACEP=		${GOPATH}/src/github.com/syncthing
WRKPLACE=		${WRKPLACEP}/syncthing

MAKE_ENV+=		GOPATH=${GOPATH} GOCACHE=${WRKDIR}/.cache

CHECK_RELRO_SKIP+=	bin/syncthing

SUBST_CLASSES+=		version
SUBST_STAGE.version=	pre-build
SUBST_MESSAGE.version=	Fixing version string
SUBST_FILES.version=	build.go
SUBST_SED.version=	-e 's|runError("git", "describe", "--always", "--dirty")|runError("echo","v${PKGVERSION_NOREV}")|'
SUBST_SED.version+=	-e 's|runError("git", "show", "-s", "--format=%ct")|runError("false")|'
SUBST_SED.version+=	-e 's|"go"|"${GO}"|'


# Create WRKPLACE's parent, but not WRKPLACE.  Move the contents of
# the distribution tarball to the directory name desired by upstream's
# build instructions.  Make a symlink so that the rest of the pkgsrc
# machinery that expects ${WRKSRC} to contain the tarball contents
# works.
post-extract:
	${MKDIR} ${GOPATH}/src/github.com/syncthing/
	${MV} ${WRKSRC} ${WRKPLACE}
	${LN} -s ${WRKPLACE} ${WRKSRC}

do-build:
	cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${GO} run build.go build syncthing

# Binaries other than syncthing proper should perhaps be installed.
do-install:
	${INSTALL_PROGRAM} ${WRKSRC}/syncthing ${DESTDIR}/${PREFIX}/bin

.include "../../mk/bsd.pkg.mk"