summaryrefslogtreecommitdiff
path: root/dev-java/snappy-java/snappy-java-1.1.10.7-r1.ebuild
blob: 49f3c61e5e135737b0e57118431a97e88c49b12f (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
154
155
156
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

JAVA_PKG_IUSE="doc source test"
MAVEN_ID="org.xerial.snappy:snappy-java:${PV}"
JAVA_TESTING_FRAMEWORKS="junit-4"

inherit edo check-reqs java-pkg-2 java-pkg-simple toolchain-funcs

DESCRIPTION="Snappy compressor/decompressor for Java"
HOMEPAGE="https://github.com/xerial/snappy-java/"
# ::gentoo does not have hadoop-common packaged. Currently we bundle the binary version.
# It's used for testing only and does not get installed.
HCV="3.3.5"
SRC_URI="https://github.com/xerial/snappy-java/archive/v${PV}.tar.gz -> ${P}.tar.gz
	test? ( https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-common/${HCV}/hadoop-common-${HCV}.jar )"
S="${WORKDIR}/${P}"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64 ~arm64 ~ppc64"

CP_DEPEND="dev-java/osgi-core:0"

CDEPEND="
	app-arch/snappy
	>=dev-libs/bitshuffle-0.3.5-r1
"

DEPEND="
	>=virtual/jdk-1.8:*
	${CP_DEPEND}
	${CDEPEND}
	test? (
		>=dev-java/ant-1.10.15:0[junit4]
		dev-java/commons-io:1
		dev-java/commons-lang:3.6
		dev-java/plexus-classworlds:0
		dev-java/xerial-core:0
	)
"

RDEPEND="
	>=virtual/jre-1.8:*
	${CP_DEPEND}
	${CDEPEND}
"

PATCHES=(
	"${FILESDIR}/snappy-1.1.10.5-SnappyOutputStreamTest.patch"
	"${FILESDIR}/snappy-java-1.1.10.7-skipFailingTest.patch"
)

JAVA_RESOURCE_DIRS="src/main/resources"
JAVA_SRC_DIR="src/main/java"

JAVA_TEST_GENTOO_CLASSPATH="
	commons-io-1
	commons-lang-3.6
	junit-4
	plexus-classworlds
	xerial-core
"

JAVA_TEST_RESOURCE_DIRS="src/test/resources"
JAVA_TEST_SRC_DIR="src/test/java"

check_env() {
	if use test; then
		# this is needed only for tests
		CHECKREQS_MEMORY="2560M"
		check-reqs_pkg_pretend
	fi
}

pkg_pretend() {
	check_env
}

pkg_setup() {
	check_env
	java-pkg-2_pkg_setup
}

src_prepare() {
	default #780585
	java-pkg-2_src_prepare
	# remove pre-compiled sofiles
	rm -r src/main/resources/org/xerial/snappy/native || die
	rm -r src/test/resources/lib || die
}

compile_lib() {
	edo "$(tc-getCC)" "${@}" ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} \
		$(java-pkg_get-jni-cflags)
}

src_compile() {
	java-pkg-simple_src_compile

	# Create some directories, Java 8 doesn't do it for us.
	mkdir -p build/objects target/jni-classes || die "mkdir"

	einfo "Generate headers"
	ejavac \
		-h build/jni-headers \
		-d target/jni-classes \
		-sourcepath src/main/java \
		src/main/java/org/xerial/snappy/SnappyNative.java \
		src/main/java/org/xerial/snappy/BitShuffleNative.java

	einfo "Generate native library"
	compile_lib -o build/objects/BitShuffleNative.o \
		-Ibuild/build/jni-headers \
		-c src/main/java/org/xerial/snappy/BitShuffleNative.cpp

	compile_lib -o build/objects/SnappyNative.o \
		-Ibuild/build/jni-headers \
		-c src/main/java/org/xerial/snappy/SnappyNative.cpp

	compile_lib -o build/objects/libsnappyjava.so \
		build/objects/{SnappyNative.o,BitShuffleNative.o} \
		-shared -lsnappy -lbitshuffle
}

src_test() {
	JAVA_GENTOO_CLASSPATH_EXTRA="${DISTDIR}/hadoop-common-${HCV}.jar"

	# Setting use.systemlib=true is essential.
	JAVA_TEST_EXTRA_ARGS=(
		-Xmx${CHECKREQS_MEMORY}
		-Djava.library.path=build/objects
		-Dorg.xerial.snappy.use.systemlib=true
	)
	local vm_version="$(java-config -g PROVIDES_VERSION)"
	if ver_test "${vm_version}" -ge 17; then
		java-pkg-simple_src_test
	else
		einfo "Tests need jdk-17 to pass."
	fi
}

src_install() {
	java-pkg-simple_src_install

	local jniext=.so
	if [[ ${CHOST} == *-darwin* ]] ; then
		jniext=.jnilib
		# avoid install_name check failure
		install_name_tool -id "@loader_path/libsnappyjava${jniext}" \
			"target/libsnappyjava${jniext}"
	fi
	java-pkg_doso "build/objects/libsnappyjava${jniext}"
}