ax_jni_include_dir.m4 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. # ===========================================================================
  2. # http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html
  3. # ===========================================================================
  4. #
  5. # SYNOPSIS
  6. #
  7. # AX_JNI_INCLUDE_DIR
  8. #
  9. # DESCRIPTION
  10. #
  11. # AX_JNI_INCLUDE_DIR finds include directories needed for compiling
  12. # programs using the JNI interface.
  13. #
  14. # JNI include directories are usually in the Java distribution. This is
  15. # deduced from the value of $JAVA_HOME, $JAVAC, or the path to "javac", in
  16. # that order. When this macro completes, a list of directories is left in
  17. # the variable JNI_INCLUDE_DIRS.
  18. #
  19. # Example usage follows:
  20. #
  21. # AX_JNI_INCLUDE_DIR
  22. #
  23. # for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
  24. # do
  25. # CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
  26. # done
  27. #
  28. # If you want to force a specific compiler:
  29. #
  30. # - at the configure.in level, set JAVAC=yourcompiler before calling
  31. # AX_JNI_INCLUDE_DIR
  32. #
  33. # - at the configure level, setenv JAVAC
  34. #
  35. # Note: This macro can work with the autoconf M4 macros for Java programs.
  36. # This particular macro is not part of the original set of macros.
  37. #
  38. # LICENSE
  39. #
  40. # Copyright (c) 2008 Don Anderson <dda@sleepycat.com>
  41. #
  42. # Copying and distribution of this file, with or without modification, are
  43. # permitted in any medium without royalty provided the copyright notice
  44. # and this notice are preserved. This file is offered as-is, without any
  45. # warranty.
  46. #serial 10
  47. AU_ALIAS([AC_JNI_INCLUDE_DIR], [AX_JNI_INCLUDE_DIR])
  48. AC_DEFUN([AX_JNI_INCLUDE_DIR],[
  49. JNI_INCLUDE_DIRS=""
  50. if test "x$JAVA_HOME" != x; then
  51. _JTOPDIR="$JAVA_HOME"
  52. else
  53. if test "x$JAVAC" = x; then
  54. JAVAC=javac
  55. fi
  56. AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no])
  57. if test "x$_ACJNI_JAVAC" = xno; then
  58. AC_MSG_WARN([cannot find JDK; try setting \$JAVAC or \$JAVA_HOME])
  59. fi
  60. _ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC")
  61. _JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'`
  62. fi
  63. case "$host_os" in
  64. darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
  65. _JINC="$_JTOPDIR/Headers";;
  66. *) _JINC="$_JTOPDIR/include";;
  67. esac
  68. _AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR])
  69. _AS_ECHO_LOG([_JINC=$_JINC])
  70. # On Mac OS X 10.6.4, jni.h is a symlink:
  71. # /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h
  72. # -> ../../CurrentJDK/Headers/jni.h.
  73. AC_CACHE_CHECK(jni headers, ac_cv_jni_header_path,
  74. [
  75. if test -f "$_JINC/jni.h"; then
  76. ac_cv_jni_header_path="$_JINC"
  77. JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path"
  78. else
  79. _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
  80. if test -f "$_JTOPDIR/include/jni.h"; then
  81. ac_cv_jni_header_path="$_JTOPDIR/include"
  82. JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path"
  83. else
  84. ac_cv_jni_header_path=none
  85. fi
  86. fi
  87. ])
  88. # get the likely subdirectories for system specific java includes
  89. case "$host_os" in
  90. bsdi*) _JNI_INC_SUBDIRS="bsdos";;
  91. darwin*) _JNI_INC_SUBDIRS="darwin";;
  92. freebsd*) _JNI_INC_SUBDIRS="freebsd";;
  93. linux*) _JNI_INC_SUBDIRS="linux genunix";;
  94. osf*) _JNI_INC_SUBDIRS="alpha";;
  95. solaris*) _JNI_INC_SUBDIRS="solaris";;
  96. mingw*) _JNI_INC_SUBDIRS="win32";;
  97. cygwin*) _JNI_INC_SUBDIRS="win32";;
  98. *) _JNI_INC_SUBDIRS="genunix";;
  99. esac
  100. if test "x$ac_cv_jni_header_path" != "xnone"; then
  101. # add any subdirectories that are present
  102. for JINCSUBDIR in $_JNI_INC_SUBDIRS
  103. do
  104. if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
  105. JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
  106. fi
  107. done
  108. fi
  109. ])
  110. # _ACJNI_FOLLOW_SYMLINKS <path>
  111. # Follows symbolic links on <path>,
  112. # finally setting variable _ACJNI_FOLLOWED
  113. # ----------------------------------------
  114. AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[
  115. # find the include directory relative to the javac executable
  116. _cur="$1"
  117. while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
  118. AC_MSG_CHECKING([symlink for $_cur])
  119. _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
  120. case "$_slink" in
  121. /*) _cur="$_slink";;
  122. # 'X' avoids triggering unwanted echo options.
  123. *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";;
  124. esac
  125. AC_MSG_RESULT([$_cur])
  126. done
  127. _ACJNI_FOLLOWED="$_cur"
  128. ])# _ACJNI