OpenJDK 9 的目錄架構略有改變,所以編譯 tclBlend 會失敗。經過查看 openSUSE 的目錄架構,按照錯誤提示,修改 tcljava.m4,下面是 github 上的修改記錄:
+ # OpenJDK 9 Linux (server JVM)
+
+ F=lib/libjava.so
+ if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
+ AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F], 1)
+ if test -f $ac_java_jvm_dir/$F ; then
+ AC_MSG_LOG([Found $ac_java_jvm_dir/$F], 1)
+
+ D=`dirname $ac_java_jvm_dir/$F`
+ ac_java_jvm_jni_lib_runtime_path=$D
+ ac_java_jvm_jni_lib_flags="-L$D -ljava -lverify"
+
+ D=$ac_java_jvm_dir/lib/server
+ ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
+ ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
+ fi
+ fi
+
然後使用 autoconf 更新設定,下面是 github 上 configure 的修改記錄:
+ # OpenJDK 9 Linux (server JVM)
+
+ F=lib/libjava.so
+ if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
+
+ echo Looking for $ac_java_jvm_dir/$F >&5
+
+
+ if test -f $ac_java_jvm_dir/$F ; then
+
+ echo Found $ac_java_jvm_dir/$F >&5
+
+
+
+ D=`dirname $ac_java_jvm_dir/$F`
+ ac_java_jvm_jni_lib_runtime_path=$D
+ ac_java_jvm_jni_lib_flags="-L$D -ljava -lverify"
+
+ D=$ac_java_jvm_dir/lib/server
+ ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
+ ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
+ fi
+ fi
+
這樣就可以正確編譯。
不過還沒辦法拿去 openSUSE build service 進行驗證。
BuildRequires: java-1_8_0-openjdk-devel
目前主流的 JDK 版本仍然是 8,openSUSE build service 我暫時沒有更動。如果使用者升級到 OpenJDK 9,那麼要改 BuildRequires,
BuildRequires: java-9-openjdk-devel
更新(目前的 Oracle 規畫):
所以如果是甲骨文,JDK 9 將會是一個過渡的版本,接下來將會推出 18.3,然後再來是 18.9,而 18.9 才是一個長期支援的版本。而 OpenJDK 對應的是 JDK Project,目前還沒有開 18.3 repositories 出來。
這表示大規模遷移到 Java 9 的機率不大,目前大多數仍然會留在 Java 8,直到下一個長期支援版本到來(目前 Oracle 設定為 18.9)。
這也代表我不用急著更新 RPM spec 以後丟上去 openSUSE build service 測試,至少在 18.9 出現以前,JDK 8 都會是目前的主要版本。
所以策略還是一樣,要等 openSUE LEAP 15 才知道是否需要修改 tclBlend RPM spec。如果預設的 JDK 還是 8,那就不用更動,如果升到 18.9,我就需要研究一下按照版本不同而進行設定的 BuildRequires。
沒有留言:
張貼留言