*/*: [QA] Remove redundant `|| die` guards
[gentoo.git] / dev-java / jamvm / jamvm-2.0.0-r1.ebuild
1 # Copyright 1999-2016 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=5
5
6 inherit eutils flag-o-matic multilib java-vm-2 autotools
7
8 DESCRIPTION="An extremely small and specification-compliant virtual machine"
9 HOMEPAGE="http://jamvm.sourceforge.net/"
10 SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"
11
12 LICENSE="GPL-2"
13 SLOT="0"
14 KEYWORDS="amd64 x86"
15 IUSE="debug libffi"
16
17 DEPEND="dev-java/gnu-classpath:0.98
18         || ( dev-java/eclipse-ecj:* dev-java/ecj-gcj:* )
19         libffi? ( virtual/libffi )
20         ppc64? ( virtual/libffi )
21         sparc? ( virtual/libffi )"
22 RDEPEND="${DEPEND}"
23
24 PATCHES=(
25         "${FILESDIR}"/"${P}-classes-location.patch"
26         "${FILESDIR}"/"${P}-noexecstack.patch"
27 )
28
29 src_prepare() {
30         # without this patch, classes.zip is not found at runtime
31         epatch "${PATCHES[@]}"
32         eautoreconf
33
34         # These come precompiled.
35         # configure script uses detects the compiler
36         # from PATH. I guess we should compile this from source.
37         # Then just make sure not to hit
38         # https://bugs.gentoo.org/show_bug.cgi?id=163801
39         #
40         #rm -v lib/classes.zip || die
41 }
42
43 src_configure() {
44         filter-flags "-fomit-frame-pointer"
45
46         if use ppc64 || use sparc || use libffi; then
47                 append-cflags "$(pkg-config --cflags-only-I libffi)"
48         fi
49
50         local fficonf="--enable-ffi"
51         if { ! use ppc64 && ! use sparc; }; then
52                 fficonf="$(use_enable libffi ffi)"
53         fi
54
55         econf ${fficonf} \
56                 --disable-dependency-tracking \
57                 $(use_enable debug trace) \
58                 --libdir="${EPREFIX}"/usr/$(get_libdir)/${PN} \
59                 --includedir="${EPREFIX}"/usr/include/${PN} \
60                 --with-classpath-install-dir=/usr
61 }
62
63 create_launcher() {
64         local script="${D}/${INSTALL_DIR}/bin/${1}"
65         cat > "${script}" <<-EOF
66                 #!/bin/sh
67                 exec /usr/bin/jamvm \
68                         -Xbootclasspath/p:/usr/share/classpath/tools.zip" \
69                         gnu.classpath.tools.${1}.Main "\$@"
70         EOF
71         chmod +x "${script}" || die
72 }
73
74 src_install() {
75         local libdir=$(get_libdir)
76         local CLASSPATH_DIR=/usr/libexec/gnu-classpath-0.98
77         local JDK_DIR=/usr/${libdir}/${PN}-jdk
78
79         emake DESTDIR="${D}" install
80
81         dodoc ACKNOWLEDGEMENTS AUTHORS ChangeLog NEWS README
82
83         set_java_env "${FILESDIR}/${P}-env.file"
84
85         dodir ${JDK_DIR}/bin
86         dosym /usr/bin/jamvm ${JDK_DIR}/bin/java
87         for files in ${CLASSPATH_DIR}/g*; do
88                 if [ $files = "${CLASSPATH_DIR}/bin/gjdoc" ] ; then
89                         dosym $files ${JDK_DIR}/bin/javadoc
90                 else
91                         dosym $files \
92                                 ${JDK_DIR}/bin/$(echo $files|sed "s#$(dirname $files)/g##")
93                 fi
94         done
95
96         dodir ${JDK_DIR}/jre/lib
97         dosym /usr/share/classpath/glibj.zip ${JDK_DIR}/jre/lib/rt.jar
98         dodir ${JDK_DIR}/lib
99         dosym /usr/share/classpath/tools.zip ${JDK_DIR}/lib/tools.jar
100
101         local ecj_jar="$(readlink "${EPREFIX}"/usr/share/eclipse-ecj/ecj.jar)"
102         exeinto ${JDK_DIR}/bin
103         sed -e "s#@JAVA@#/usr/bin/jamvm#" \
104                 -e "s#@ECJ_JAR@#${ecj_jar}#" \
105                 -e "s#@RT_JAR@#/usr/share/classpath/glibj.zip#" \
106                 -e "s#@TOOLS_JAR@#/usr/share/classpath/tools.zip#" \
107                 "${FILESDIR}"/"${P}-javac.in" | newexe - javac
108
109         local libarch="${ARCH}"
110         [ ${ARCH} == x86 ] && libarch="i386"
111         [ ${ARCH} == x86_64 ] && libarch="amd64"
112         dodir ${JDK_DIR}/jre/lib/${libarch}/client
113         dodir ${JDK_DIR}/jre/lib/${libarch}/server
114         dosym /usr/${libdir}/${PN}/libjvm.so ${JDK_DIR}/jre/lib/${libarch}/client/libjvm.so
115         dosym /usr/${libdir}/${PN}/libjvm.so ${JDK_DIR}/jre/lib/${libarch}/server/libjvm.so
116         dosym /usr/${libdir}/classpath/libjawt.so ${JDK_DIR}/jre/lib/${libarch}/libjawt.so
117
118         # Can't use java-vm_set-pax-markings as doesn't work with symbolic links
119         # Ensure a PaX header is created.
120         local pax_markings="C"
121         # Usally disabeling MPROTECT is sufficent.
122         local pax_markings+="m"
123         # On x86 for heap sizes over 700MB disable SEGMEXEC and PAGEEXEC as well.
124         use x86 && pax_markings+="sp"
125
126         pax-mark ${pax_markings} "${ED}"/usr/bin/jamvm
127 }