[MDEV-25777] JAVA_INCLUDE_PATH and JAVA_INCLUDE_PATH2 not found with out of source configuration and Ninja generator Created: 2021-05-26  Updated: 2021-06-04  Resolved: 2021-05-28

Status: Closed
Project: MariaDB Server
Component/s: Configuration, Storage Engine - Connect
Affects Version/s: 10.6.0
Fix Version/s: 10.6.2

Type: Bug Priority: Major
Reporter: Anel Husakovic Assignee: Anel Husakovic
Resolution: Fixed Votes: 0
Labels: None
Environment:

Linux



 Description   

10.6 doesn't work with Ninja for OOS (out-of-source) builds.
It works with (IS) in-source with Ninja as well as OOS with make).

$ cmake ../../10.6 -DCMAKE_BUILD_TYPE=Debug -DCONC_WITH_{UNITTEST,SSL}=OFF -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,PERFSCHEMA,SPIDER,SPHINX}=NO -DWITH_SAFEMALLOC=OFF -DWITH_SSL=bundled -DENABLE_GCOV=OFF -G Ninja
-- Configuring done
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
JAVA_INCLUDE_PATH (ADVANCED)
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
JAVA_INCLUDE_PATH2 (ADVANCED)
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect

//Path to a file.
JAVA_AWT_INCLUDE_PATH:PATH=JAVA_AWT_INCLUDE_PATH-NOTFOUND
//Path to a library.
JAVA_AWT_LIBRARY:FILEPATH=/usr/lib/jvm/default-java/lib/libjawt.so
//Path to a file.
JAVA_INCLUDE_PATH:PATH=JAVA_INCLUDE_PATH-NOTFOUND
//Path to a file.
JAVA_INCLUDE_PATH2:PATH=JAVA_INCLUDE_PATH2-NOTFOUND
//Path to a library.
JAVA_JVM_LIBRARY:FILEPATH=/usr/lib/jvm/default-java/lib/server/libjvm.so
//Path to a program.
Java_IDLJ_EXECUTABLE:FILEPATH=Java_IDLJ_EXECUTABLE-NOTFOUND
//Path to a program.
Java_JARSIGNER_EXECUTABLE:FILEPATH=Java_JARSIGNER_EXECUTABLE-NOTFOUND
//Path to a program.
Java_JAR_EXECUTABLE:FILEPATH=Java_JAR_EXECUTABLE-NOTFOUND
//Path to a program.
Java_JAVAC_EXECUTABLE:FILEPATH=Java_JAVAC_EXECUTABLE-NOTFOUND
//Path to a program.
Java_JAVADOC_EXECUTABLE:FILEPATH=Java_JAVADOC_EXECUTABLE-NOTFOUND
//Path to a program.
Java_JAVAH_EXECUTABLE:FILEPATH=Java_JAVAH_EXECUTABLE-NOTFOUND
//Path to a program.
Java_JAVA_EXECUTABLE:FILEPATH=/usr/bin/java

$ which java
/usr/bin/java
$ ls -la /usr/bin/|grep java
lrwxrwxrwx  1 root   root           22 Dec 10 04:08 java -> /etc/alternatives/java
$ dpkg -S java|grep bin/java
openjdk-11-jre-headless:amd64: /usr/lib/jvm/java-11-openjdk-amd64/bin/java
$ ls -la /usr/lib/jvm/
total 24
drwxr-xr-x   3 root root  4096 Apr 29 09:02 .
drwxr-xr-x 160 root root 12288 Maj 25 08:03 ..
lrwxrwxrwx   1 root root    25 Feb 20  2019 default-java -> java-1.11.0-openjdk-amd64
lrwxrwxrwx   1 root root    21 Nov 10  2020 java-1.11.0-openjdk-amd64 -> java-11-openjdk-amd64
-rw-r--r--   1 root root  2047 Apr 21 11:15 .java-1.11.0-openjdk-amd64.jinfo
drwxr-xr-x   7 root root  4096 Apr 29 09:02 java-11-openjdk-amd64

Related commit f9f8cae9fe22c13
Related reference: FindJNI

Note JNI_FOUND should be true iff both conditions are met:

JAVA_INCLUDE_PATH     = the include path to jni.h
JAVA_INCLUDE_PATH2    = the include path to jni_md.h
JAVA_AWT_INCLUDE_PATH = the include path to jawt.h
 
JAVA_AWT_LIBRARY      = the path to the jawt library
JAVA_JVM_LIBRARY      = the path to the jvm library
JNI_LIBRARIES         = the libraries to use
 
JNI_FOUND             = TRUE if JNI headers and libraries were found.



 Comments   
Comment by Anel Husakovic [ 2021-05-26 ]

In case of OOS builds with make

//Path to a library.
JAVA_AWT_LIBRARY:FILEPATH=/usr/lib/jvm/java-11-openjdk-amd64/lib/libjawt.so
 
//Path to a file.
JAVA_INCLUDE_PATH:PATH=JAVA_INCLUDE_PATH-NOTFOUND
 
//Path to a library.
JAVA_JVM_LIBRARY:FILEPATH=/usr/lib/jvm/java-11-openjdk-amd64/lib/server/libjvm.so
 
//Path to a program.
Java_IDLJ_EXECUTABLE:FILEPATH=Java_IDLJ_EXECUTABLE-NOTFOUND
 
//Path to a program.
Java_JARSIGNER_EXECUTABLE:FILEPATH=Java_JARSIGNER_EXECUTABLE-NOTFOUND
 
//Path to a program.
Java_JAR_EXECUTABLE:FILEPATH=Java_JAR_EXECUTABLE-NOTFOUND
 
//Path to a program.
Java_JAVAC_EXECUTABLE:FILEPATH=Java_JAVAC_EXECUTABLE-NOTFOUND
 
//Path to a program.
Java_JAVADOC_EXECUTABLE:FILEPATH=Java_JAVADOC_EXECUTABLE-NOTFOUND
 
//Path to a program.
Java_JAVAH_EXECUTABLE:FILEPATH=Java_JAVAH_EXECUTABLE-NOTFOUND
 
//Path to a program.
Java_JAVA_EXECUTABLE:FILEPATH=/usr/lib/jvm/java-11-openjdk-amd64/bin/java

Note: ninja is using symlink, while make is not using - not relevant!

Case of tracing the module cmake/FindJNI.cmake} }with {{cmake -trace-source

$ cmake ../../10.6 -DCMAKE_BUILD_TYPE=Debug -DCONC_WITH_{UNITTEST,SSL}=OFF -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,PERFSCHEMA,SPIDER,SPHINX}=NO -DWITH_SAFEMALLOC=OFF -DWITH_SSL=bundled -DENABLE_GCOV=OFF -G Ninja --trace --trace-expand --trace-source=cmake/FindJNI.cmake --trace-redirect=./cmakeninjaoos
 
 
$ cat cmakeninjaoos
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(1):  if(JAVA_AWT_LIBRARY )
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(5):  if(DEFINED JAVA_AWT_LIBRARY )
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(10):  set(JAVA_INCLUDE_PATH2 NotNeeded )
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(11):  set(JAVA_AWT_INCLUDE_PATH NotNeeded )
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(13):  set(orig_CMAKE_MODULE_PATH /home/anel/mariadb/10.6/cmake;/home/anel/mariadb/10.6/cmake/Internal/CPack )
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(14):  unset(CMAKE_MODULE_PATH )
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(15):  include(FindJNI )
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(16):  set(CMAKE_MODULE_PATH /home/anel/mariadb/10.6/cmake;/home/anel/mariadb/10.6/cmake/Internal/CPack )
 
Second invocation of above command
$ cat cmakeninjaoos
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(1):  if(JAVA_AWT_LIBRARY )
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(2):  set(JNI_FOUND TRUE )
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(3):  return()

Have done full tracing:
Looking into JAVA_HOME:

$ cat cmakeninjaoos_full|grep JAVA_HOME
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(6):  set(_JAVA_HOME  )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(7):  if(JAVA_HOME AND IS_DIRECTORY  )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(11):  set(_ENV_JAVA_HOME  )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(12):  if(DEFINED ENV{JAVA_HOME} )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(13):  file(TO_CMAKE_PATH /usr/lib/jvm/java-11-openjdk-amd64/ _ENV_JAVA_HOME )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(15):  if(_ENV_JAVA_HOME AND IS_DIRECTORY /usr/lib/jvm/java-11-openjdk-amd64 )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(16):  set(_JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64 )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(17):  set(_JAVA_HOME_EXPLICIT 1 )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(30):  unset(_ENV_JAVA_HOME )
/usr/local/share/cmake-3.20/Modules/FindJava.cmake(88):  if(_JAVA_HOME )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(6):  set(_JAVA_HOME  )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(7):  if(JAVA_HOME AND IS_DIRECTORY  )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(11):  set(_ENV_JAVA_HOME  )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(12):  if(DEFINED ENV{JAVA_HOME} )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(13):  file(TO_CMAKE_PATH /usr/lib/jvm/java-11-openjdk-amd64/ _ENV_JAVA_HOME )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(15):  if(_ENV_JAVA_HOME AND IS_DIRECTORY /usr/lib/jvm/java-11-openjdk-amd64 )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(16):  set(_JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64 )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(17):  set(_JAVA_HOME_EXPLICIT 1 )
/usr/local/share/cmake-3.20/Modules/CMakeFindJavaCommon.cmake(30):  unset(_ENV_JAVA_HOME )
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(131):  if(_JAVA_HOME_EXPLICIT )
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(136):  if(_JAVA_HOME )
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(264):  if(_JAVA_HOME )

So _JAVA_HOME should exist!

Tracing JAVA_INCLUDE_PATH:

$ cat cmakeninjaoos_full|grep JAVA_INCLUDE_PATH
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(351):  find_path(JAVA_INCLUDE_PATH jni.h /usr/lib/jvm/java-11-openjdk-amd64/include )
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(355):  find_path(JAVA_INCLUDE_PATH2 NAMES jni_md.h jniport.h PATHS JAVA_INCLUDE_PATH-NOTFOUND JAVA_INCLUDE_PATH-NOTFOUND/darwin JAVA_INCLUDE_PATH-NOTFOUND/win32 JAVA_INCLUDE_PATH-NOTFOUND/linux JAVA_INCLUDE_PATH-NOTFOUND/freebsd JAVA_INCLUDE_PATH-NOTFOUND/openbsd JAVA_INCLUDE_PATH-NOTFOUND/solaris JAVA_INCLUDE_PATH-NOTFOUND/hp-ux JAVA_INCLUDE_PATH-NOTFOUND/alpha JAVA_INCLUDE_PATH-NOTFOUND/aix )
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(369):  find_path(JAVA_AWT_INCLUDE_PATH jawt.h JAVA_INCLUDE_PATH-NOTFOUND )
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(382):  FIND_PACKAGE_HANDLE_STANDARD_ARGS(JNI DEFAULT_MSG JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH )
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake(405):  set(FPHSA_REQUIRED_VARS JAVA_AWT_LIBRARY;JAVA_JVM_LIBRARY;JAVA_INCLUDE_PATH;JAVA_INCLUDE_PATH2;JAVA_AWT_INCLUDE_PATH )
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake(487):  foreach(_CURRENT_VAR JAVA_AWT_LIBRARY;JAVA_JVM_LIBRARY;JAVA_INCLUDE_PATH;JAVA_INCLUDE_PATH2;JAVA_AWT_INCLUDE_PATH )
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake(488):  if(NOT JAVA_INCLUDE_PATH )
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake(490):  string(APPEND MISSING_VARS  JAVA_INCLUDE_PATH )
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake(488):  if(NOT JAVA_INCLUDE_PATH2 )
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake(490):  string(APPEND MISSING_VARS  JAVA_INCLUDE_PATH2 )
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake(594):  _FPHSA_FAILURE_MESSAGE(Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)  )
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake(225):  set(__msg Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)  )
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake(233):  message(STATUS Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)  )
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(388):  mark_as_advanced(JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_AWT_INCLUDE_PATH JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 )
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(401):  set(JNI_INCLUDE_DIRS JAVA_INCLUDE_PATH-NOTFOUND JAVA_INCLUDE_PATH2-NOTFOUND JAVA_AWT_INCLUDE_PATH-NOTFOUND )
 
/home/anel/mariadb/10.6/cmake/plugin.cmake(308):  IF(V MATCHES ^PLUGIN_ AND JAVA_INCLUDE_PATH MATCHES YES )
/home/anel/mariadb/10.6/cmake/plugin.cmake(308):  IF(V MATCHES ^PLUGIN_ AND JAVA_INCLUDE_PATH2 MATCHES YES )

Note that: include file doesn't exist!

$ ls /usr/lib/jvm/java-11-openjdk-amd64/include
ls: cannot access '/usr/lib/jvm/java-11-openjdk-amd64/include': No such file or directory

By adding NotNeeded in the FindJNI.cmake it will be first evaluated:

$ cat cmakeninjaoos_full|grep JAVA_INCLUDE_PATH
/home/anel/mariadb/10.6/cmake/FindJNI.cmake(10):  set(JAVA_INCLUDE_PATH2 NotNeeded )
/usr/local/share/cmake-3.20/Modules/FindJNI.cmake(351):  find_path(JAVA_INCLUDE_PATH jni.h /usr/lib/jvm/java-11-openjdk-amd64/include )

Comment by Anel Husakovic [ 2021-05-26 ]

wlad hack:

# Source
anel@anel:~/mariadb/10.6$ git clean -dffx
anel@anel:~/mariadb/10.6$ git status
On branch bb-10.6-anel-marko
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)
	modified:   extra/wolfssl/wolfssl (untracked content)
	modified:   storage/connect/CMakeLists.txt
no changes added to commit (use "git add" and/or "git commit -a")
anel@anel:~/mariadb/10.6$ git diff
diff --git a/extra/wolfssl/wolfssl b/extra/wolfssl/wolfssl
--- a/extra/wolfssl/wolfssl
+++ b/extra/wolfssl/wolfssl
@@ -1 +1 @@
-Subproject commit 9c87f979a7f1d3a6d786b260653d566c1d31a1c4
+Subproject commit 9c87f979a7f1d3a6d786b260653d566c1d31a1c4-dirty
diff --git a/storage/connect/CMakeLists.txt b/storage/connect/CMakeLists.txt
index ebb61bb487b..e96598c1c59 100644
--- a/storage/connect/CMakeLists.txt
+++ b/storage/connect/CMakeLists.txt
@@ -13,6 +13,10 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1335 USA
+IF(WITHOUT_DYNAMIC_PLUGINS OR WITH_NONE OR (PLUGIN_${name} STREQUAL "NO"))
+  RETURN()
+ENDIF()
+
 SET(CONNECT_PLUGIN_STATIC  "connect")
 SET(CONNECT_PLUGIN_DYNAMIC "connect")
# BUILDS:
anel@anel:~/mariadb/builds/10.6$ rm -rf ./*
anel@anel:~/mariadb/builds/10.6$ cmake ../../10.6 -DCMAKE_BUILD_TYPE=Debug -DCONC_WITH_{UNITTEST,SSL}=OFF -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,PERFSCHEMA,SPIDER,SPHINX}=NO -DWITH_SAFEMALLOC=OFF -DWITH_SSL=bundled -DENABLE_GCOV=OFF -G Ninja --trace-expand --trace-redirect=./cmakeninjaoos_full
anel@anel:~/mariadb/builds/10.6$ ninja
JAVA_INCLUDE_PATH (ADVANCED)
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
JAVA_INCLUDE_PATH2 (ADVANCED)
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect
   used as include directory in directory /home/anel/mariadb/10.6/storage/connect

Comment by Anel Husakovic [ 2021-05-26 ]

Hi serg can you please review: https://github.com/MariaDB/server/commit/a40c14acec07106d15c6051179e78ea54f1882ed

Comment by Anel Husakovic [ 2021-05-28 ]

Pushed with 904edfd24b23ee447bf to 10.6

Generated at Thu Feb 08 09:40:17 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.