1
- #! /bin/sh -e
1
+ #! /bin/sh
2
+ set -eu
2
3
3
4
# #############################################################################
4
5
# Author : Stephane Micheloud
@@ -26,14 +27,14 @@ CLASS_DIR=natives-jvm.obj
26
27
27
28
if [ ! -f " ${CLASS_DIR} /${CLASS_NAME} .class" ]; then
28
29
echo " first you need to run this within sbt:"
29
- echo " partest --debug test/files/jvm/natives.scala"
30
+ echo " sbt \" partest --debug test/files/jvm/natives.scala\" "
30
31
exit
31
32
fi
32
33
33
34
OBJ_NAME=natives
34
35
LIB_NAME=libnatives
35
36
36
- if [ -z " ${JAVA_HOME} " ]; then
37
+ if [ -z " ${JAVA_HOME:- } " ]; then
37
38
echo " environment variable JAVA_HOME is undefined."
38
39
exit
39
40
elif $cygwin ; then
@@ -42,16 +43,7 @@ elif $cygwin; then
42
43
fi
43
44
44
45
JAVAH=${JAVA_HOME} /bin/javah
45
- JAVAH_OPTIONS=" -jni -force -classpath ${CLASS_DIR} -o ${OBJ_NAME} .h"
46
-
47
- if [ ! -f " ${JAVAH} " ]; then
48
- # Oracle removed `javah`. The replacement is `javac -h`, but
49
- # requiring 8 seems fine for now, especially since we commit
50
- # the generated files to version control, so this script hardly
51
- # ever needs to be run at all
52
- echo " this script only works on Java 8"
53
- exit
54
- fi
46
+ JAVA=${JAVA_HOME} /bin/java
55
47
56
48
CC=gcc
57
49
76
68
FULL_LIB_NAME=${LIB_NAME} .so
77
69
fi
78
70
71
+ ljavah () {
72
+ local lclass_dir=" ${1} "
73
+ local lobj_name=" ${2} "
74
+ local lclass_name=" ${3} "
75
+ if [ -f " ${JAVAH} " ]; then
76
+ echo " javah exists in JAVA_HOME, will be used."
77
+ ${JAVAH} -jni -force -classpath ${lclass_dir} -o ${lobj_name} .h ${lclass_name}
78
+ else
79
+ echo " javah does not exist in JAVA_HOME. Wrapper for .h generation from .class filess will be downloaded and used."
80
+ local gjavah_version=0.3.1
81
+ local gjava=gjavah-${gjavah_version} .jar
82
+ local asm=asm-9.1.jar
83
+ local url=" https://github.com/Glavo/gjavah/releases/download/${gjavah_version} "
84
+ if [ ! -f " ${gjava} " ]; then
85
+ curl -k -f -L -O " ${url} /${gjava} "
86
+ fi
87
+ if [ ! -f " ${asm} " ]; then
88
+ curl -k -f -L -O " ${url} /${asm} "
89
+ fi
90
+ ${JAVA} -jar ${gjava} -classpath ${lclass_dir} ${lclass_name}
91
+ mv Test__.h ${lobj_name} .h
92
+ fi
93
+ }
94
+
79
95
# #############################################################################
80
96
# commands
81
97
82
- [ $debug ] && echo ${JAVAH } ${JAVAH_OPTIONS } ${CLASS_NAME}
83
- ${JAVAH } ${JAVAH_OPTIONS } ${CLASS_NAME}
98
+ [ $debug ] && echo ljavah ${CLASS_DIR } ${OBJ_NAME } ${CLASS_NAME}
99
+ ljavah ${CLASS_DIR } ${OBJ_NAME } ${CLASS_NAME}
84
100
85
101
[ $debug ] && echo ${CC} ${CC_OPTIONS} ${CC_INCLUDES} -o ${OBJ_NAME} .o natives.c
86
102
${CC} ${CC_OPTIONS} ${CC_INCLUDES} -o ${OBJ_NAME} .o natives.c
0 commit comments