aboutsummaryrefslogtreecommitdiff
blob: d64253ac7da05098ce371bbcc0400cea7dd6f253 (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
150
151
152
153
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=6 # >=portage-2.2.25
KEYWORDS="~x86 ~amd64"
RESTRICT="mirror"

USE_DOTNET="net45"
# debug = debug configuration (symbols and defines for debugging)
# test = allow NUnit tests to run
# developer = generate symbols information (to view line numbers in stack traces, either in debug or release configuration)
# aot = compile to machine code and store to disk during install, to save time later during startups
# nupkg = create .nupkg file from .nuspec
# gac = install into gac
# pkg-config = register in pkg-config database
IUSE="+${USE_DOTNET} debug +developer test +aot doc"

TOOLS_VERSION=14.0

inherit gac nupkg

get_revision()
{
	git rev-list --count $2..$1
}

get_dlldir() {
	echo /usr/lib64/mono/${PN}
}

NAME="mono-packaging-tools"
HOMEPAGE="https://arsenshnurkov.github.io/mono-packaging-tools"

REPOSITORY_URL="https://github.com/ArsenShnurkov/${NAME}"

EGIT_COMMIT="98dfea6ddcc47de78a59014728f823bfe773fb25"
SRC_URI="${REPOSITORY_URL}/archive/${EGIT_COMMIT}.tar.gz -> ${PN}-${PV}.tar.gz"
S="${WORKDIR}/${NAME}-${EGIT_COMMIT}"

SLOT="0"

DESCRIPTION="Command line utilities for packaging mono assemblies with portage"
LICENSE="GPL-3"
LICENSE_URL="https://raw.githubusercontent.com/ArsenShnurkov/mono-packaging-tools/master/LICENSE"

COMMON_DEPENDENCIES="|| ( >=dev-lang/mono-4.2 <dev-lang/mono-9999 )
	dev-dotnet/mono-options[gac]
	>=dev-dotnet/slntools-1.1.3_p201508170-r1[gac]
	>=dev-dotnet/eto-parse-1.4.0[gac]
	"
DEPEND="${COMMON_DEPENDENCIES}
	dev-dotnet/msbuildtasks
	sys-apps/sed"
RDEPEND="${COMMON_DEPENDENCIES}
	"

NUSPEC_VERSION=${PV}
ASSEMBLY_VERSION=${PV}

SLN_FILE="mono-packaging-tools.sln"
METAFILETOBUILD="${S}/${SLN_FILE}"
NUSPEC_ID="${NAME}"
COMMIT_DATE_INDEX="$(get_version_component_count ${PV} )"
COMMIT_DATE="$(get_version_component_range $COMMIT_DATE_INDEX ${PV} )"
NUSPEC_FILENAME="${PN}.nuspec"
#ICON_FILENAME="${PN}.png"
#ICON_FINALNAME="${NUSPEC_ID}.${NUSPEC_VERSION}.png"
#ICON_PATH="$(get_nuget_trusted_icons_location)/${ICON_FINALNAME}"

src_prepare() {
	eapply "${FILESDIR}/MSBuildExtensionsPath.patch"

	#change version in .nuspec
	# PV = Package version (excluding revision, if any), for example 6.3.
	# It should reflect the upstream versioning scheme
	sed "s/@VERSION@/${NUSPEC_VERSION}/g" "${FILESDIR}/${NUSPEC_ID}.nuspec" >"${S}/${NUSPEC_ID}.nuspec" || die

	# restoring is not necessary after switching to GAC references
	# enuget_restore "${METAFILETOBUILD}"
	default
}

src_compile() {
	exbuild_strong /p:VersionNumber="${ASSEMBLY_VERSION}" "${METAFILETOBUILD}"
	enuspec "${NUSPEC_ID}.nuspec"
}

src_install() {
	# install dlls
	insinto "$(get_dlldir)/slot-${SLOT}"
	if use debug; then
		DIR="Debug"
	else
		DIR="Release"
	fi
	doins mpt-core/bin/${DIR}/mpt-core.dll
	dosym slot-${SLOT}/mpt-core.dll $(get_dlldir)/mpt-core.dll
	einstall_pc_file ${PN} ${ASSEMBLY_VERSION} mpt-core

	insinto "/usr/share/${PN}/slot-${SLOT}"
	install_tool mpt-gitmodules
	install_tool mpt-sln
	install_tool mpt-csproj
	install_tool mpt-machine
	install_tool mpt-nuget

	enupkg "${WORKDIR}/${NUSPEC_ID}.${NUSPEC_VERSION}.nupkg"

	if use doc; then
		dodoc README.md
	fi
}

pkg_prerm() {
	if use gac; then
		# TODO determine version for uninstall from slot-N dir
		einfo "removing from GAC"
		gacutil -u mpt-core
		# don't die, it there is no such assembly in GAC
	fi
}

pkg_postinst() {
	if use gac; then
		einfo "adding to GAC"
		gacutil -i "$(get_dlldir)/slot-${SLOT}/mpt-core.dll" || die
	fi
}

install_tool() {
	if use debug; then
		DIR="Debug"
	else
		DIR="Release"
	fi

	# installs .exe, .exe.config (if any), .mdb (if exists)
	doins "$1"/bin/${DIR}/*.exe
	if [ -f "$1"/bin/${DIR}/*.exe.config ]; then
		doins "$1"/bin/${DIR}/*.exe.config
	fi
	if use developer; then
		doins "$1"/bin/${DIR}/*.mdb
	fi

	MONO=/usr/bin/mono

	if use debug; then
		make_wrapper "$1" "${MONO} --debug /usr/share/${PN}/slot-${SLOT}/$1.exe"
	else
		make_wrapper "$1" "${MONO} /usr/share/${PN}/slot-${SLOT}/$1.exe"
	fi;
}