check_jni_methods.sh

来自「linux下建立JAVA虚拟机的源码KAFFE」· Shell 代码 · 共 64 行

SH
64
字号
#!/bin/sh# Fail if any command failsset -e# Don't override existing filesset -CTMPFILE=/tmp/check-jni-methods.$$.1TMPFILE2=/tmp/check-jni-methods.$$.2TMPFILE3=/tmp/check-jni-methods.$$.3# Find all methods defined in the header files generated# from the java source files.grep -h '^JNIEXPORT .* Java_' include/*.h | \        LC_ALL=C sed -e 's,.*JNICALL \(Java_[a-z_A-Z0-9]*\).*$,\1,' | \	sort > $TMPFILE# Find all methods in the JNI C source files.find native/jni -name \*.c | \	xargs grep -h '^Java_' | \        LC_ALL=C sed -e 's,^\(Java_[a-z_A-Z0-9]*\) *(.*$,\1,' > $TMPFILE2# Or in the the C++ files. (Note that cpp doesn't follow gnu conventions atm)# So we try to match both GNU style and some other style.find native/jni -name \*.cpp | \	xargs grep -h '^Java_' | \        LC_ALL=C sed -e 's,^\(Java_[a-z_A-Z0-9]*\) *(.*$,\1,' >> $TMPFILE2find native/jni -name \*.cpp | \	xargs egrep -h '^(JNIEXPORT .* JNICALL )?Java_' | \	cut -f4 -d\  | \        LC_ALL=C sed -e 's,^\JNIEXPORT .* JNICALL \(Java_[a-z_A-Z0-9]*\) *(.*$,\1,' >> $TMPFILE2mv $TMPFILE2 $TMPFILE3sort $TMPFILE3 > $TMPFILE2rm $TMPFILE3# Write temporary ignore file.cat > $TMPFILE3 << EOF-Java_gnu_java_awt_peer_gtk_GtkMenuComponentPeer_dispose-Java_java_lang_VMSystem_arraycopy-Java_java_lang_VMSystem_identityHashCodeEOF# Compare again silently.# Use fgrep and direct the output to /dev/null for compatibility with older# grep instead of using the non portable -q.if diff -b -U 0 $TMPFILE $TMPFILE2 | grep '^[+-]Java' | \    fgrep -v -f $TMPFILE3 > /dev/null;then  PROBLEM=1  echo "Found a problem with the JNI methods declared and implemented."  echo "(-) missing in implementation, (+) missing in header files"  # Compare the found method lists.  diff -b -U 0 $TMPFILE $TMPFILE2  | grep '^[+-]Java' | fgrep -v -f $TMPFILE3fi# Cleanup.rm -f $TMPFILE $TMPFILE2 $TMPFILE3if test "$PROBLEM" = "1" ; then  exit 1fiexit 0

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?