Skip to content

Commit 9f21ea4

Browse files
committed
java: clean up MPI Java configury
The Java configury is split into two parts: 1. Determine if we want MPI Java bindings. 2. Find the Java compiler (and related). This commit does a few things: - Move the "Find the Java compiler" step from OPAL to OMPI (because there is no Java in OPAL, and there doesn't appear to be any immanent danger that there will be). - As a direct consequence, remove the --enable-java CLI option (--enable-mpi-java still remains). Enabling the MPI Java bindings and enabling Java are now considered the same thing (since there is no Java elsewhere in the code base, the different was meaningless). - Only invoke the "Find the Java compiler" step if we actually want the MPI Java bindings. - A few miscellaneous Java-related cleanups in configury (E.g., change testing "$foo" == "1" to $foo -eq 1, etc. This commit is mostly s/opal/ompi/gi in many places in configury and shifting code around. But it looks bigger than it actually is because of two reasons: 1. Some files were renamed: * ompi_setup_java.m4 -> ompi_setup_mpi_java.m4 (setup MPI Java bindings) * opal_setup_java.m4 -> ompi_setup_java.m4 (setup Java compiler) 2. Indenting level changed in (the new) ompi_setup_java.m4. Signed-off-by: Jeff Squyres <[email protected]>
1 parent d72c4e9 commit 9f21ea4

File tree

6 files changed

+314
-331
lines changed

6 files changed

+314
-331
lines changed

config/ompi_setup_java.m4

Lines changed: 221 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -13,92 +13,237 @@ dnl All rights reserved.
1313
dnl Copyright (c) 2006-2012 Los Alamos National Security, LLC. All rights
1414
dnl reserved.
1515
dnl Copyright (c) 2007-2012 Oracle and/or its affiliates. All rights reserved.
16-
dnl Copyright (c) 2008-2012 Cisco Systems, Inc. All rights reserved.
17-
dnl Copyright (c) 2015 Research Organization for Information Science
16+
dnl Copyright (c) 2008-2018 Cisco Systems, Inc. All rights reserved
17+
dnl Copyright (c) 2013 Intel, Inc. All rights reserved.
18+
dnl Copyright (c) 2015-2018 Research Organization for Information Science
1819
dnl and Technology (RIST). All rights reserved.
20+
dnl Copyright (c) 2017 FUJITSU LIMITED. All rights reserved.
1921
dnl $COPYRIGHT$
2022
dnl
2123
dnl Additional copyrights may follow
2224
dnl
2325
dnl $HEADER$
2426
dnl
2527

26-
# This macro is necessary to get the title to be displayed first. :-)
27-
AC_DEFUN([OMPI_SETUP_JAVA_BINDINGS_BANNER],[
28-
opal_show_subtitle "Java MPI bindings"
29-
])
28+
dnl _OMPI_SETUP_JAVA()
29+
dnl ----------------
30+
dnl Invoked by OMPI_SETUP_JAVA only if --enable-mpi-java was specified.
31+
AC_DEFUN([_OMPI_SETUP_JAVA],[
32+
OPAL_VAR_SCOPE_PUSH([ompi_java_bad ompi_java_found ompi_java_dir ompi_java_jnih ompi_java_PATH_save ompi_java_CPPFLAGS_save])
3033

31-
# OMPI_SETUP_JAVA_BINDINGS()
32-
# ----------------
33-
# Do everything required to setup the Java MPI bindings. Safe to AC_REQUIRE
34-
# this macro.
35-
AC_DEFUN([OMPI_SETUP_JAVA_BINDINGS],[
36-
# must have Java setup
37-
AC_REQUIRE([OPAL_SETUP_JAVA])
38-
39-
AC_REQUIRE([OMPI_SETUP_JAVA_BINDINGS_BANNER])
40-
41-
AC_MSG_CHECKING([if want Java bindings])
42-
AC_ARG_ENABLE(mpi-java,
43-
AC_HELP_STRING([--enable-mpi-java],
44-
[enable Java MPI bindings (default: disabled)]))
45-
46-
# check for required support
47-
if test "$opal_java_happy" = "no" && test "$enable_mpi_java" = "yes"; then
48-
AC_MSG_RESULT([yes])
49-
AC_MSG_WARN([Java bindings requested but no Java support found])
50-
AC_MSG_ERROR([cannot continue])
51-
fi
34+
# Check for bozo case: ensure a directory was specified
35+
AS_IF([test "$with_jdk_dir" = "yes" || test "$with_jdk_dir" = "no"],
36+
[AC_MSG_WARN([Must specify a directory name for --with-jdk-dir])
37+
AC_MSG_ERROR([Cannot continue])])
38+
AS_IF([test "$with_jdk_bindir" = "yes" || test "$with_jdk_bindir" = "no"],
39+
[AC_MSG_WARN([Must specify a directory name for --with-jdk-bindir])
40+
AC_MSG_ERROR([Cannot continue])])
41+
AS_IF([test "$with_jdk_headers" = "yes" || test "$with_jdk_headers" = "no"],
42+
[AC_MSG_WARN([Must specify a directory name for --with-jdk-headers])
43+
AC_MSG_ERROR([Cannot continue])])
44+
45+
# Check for bozo case: either specify --with-jdk-dir or
46+
# (--with-jdk-bindir, --with-jdk-headers) -- not both.
47+
ompi_java_bad=0
48+
AS_IF([test -n "$with_jdk_dir" && \
49+
(test -n "$with_jdk_bindir" || test -n "$with_jdk_headers")],
50+
[ompi_java_bad=1])
51+
AS_IF([(test -z "$with_jdk_bindir" && test -n "$with_jdk_headers") || \
52+
(test -n "$with_jdk_bindir" && test -z "$with_jdk_headers")],
53+
[ompi_java_bad=1])
54+
AS_IF([test $ompi_java_bad -eq 1],
55+
[AC_MSG_WARN([Either specify --with-jdk-dir or both of (--with-jdk_bindir, --with-jdk-headers) -- not both.])
56+
AC_MSG_ERROR([Cannot continue])])
57+
58+
AS_IF([test -n "$with_jdk_dir"],
59+
[with_jdk_bindir=$with_jdk_dir/bin
60+
with_jdk_headers=$with_jdk_dir/include])
61+
62+
##################################################################
63+
# with_jdk_dir can now be ignored; with_jdk_bindir and
64+
# with_jdk_headers will be either empty or have valid values.
65+
##################################################################
66+
67+
# Some java installations are in obscure places. So let's
68+
# hard-code a few of the common ones so that users don't have to
69+
# specify --with-java-<foo>=LONG_ANNOYING_DIRECTORY.
70+
AS_IF([test -z "$with_jdk_bindir"],
71+
[ # OS X/macOS
72+
ompi_java_found=0
73+
# The following logic was deliberately decided upon in
74+
# https://github.com/open-mpi/ompi/pull/5015 specifically
75+
# to prevent this script and the rest of Open MPI's build
76+
# system from getting confused by the somewhat unorthodox
77+
# Java toolchain layout present on OS X/macOS systems,
78+
# described in depth by
79+
# https://github.com/open-mpi/ompi/pull/5015#issuecomment-379324639,
80+
# and mishandling OS X/macOS Java toolchain path detection
81+
# as a result.
82+
AS_IF([test -x /usr/libexec/java_home],
83+
[ompi_java_dir=`/usr/libexec/java_home`],
84+
[ompi_java_dir=/System/Library/Frameworks/JavaVM.framework/Versions/Current])
85+
AC_MSG_CHECKING([for Java in OS X/macOS locations])
86+
AS_IF([test -d $ompi_java_dir],
87+
[AC_MSG_RESULT([found ($ompi_java_dir)])
88+
ompi_java_found=1
89+
if test -d "$ompi_java_dir/Headers" && test -d "$ompi_java_dir/Commands"; then
90+
with_jdk_headers=$ompi_java_dir/Headers
91+
with_jdk_bindir=$ompi_java_dir/Commands
92+
elif test -d "$ompi_java_dir/include" && test -d "$ompi_java_dir/bin"; then
93+
with_jdk_headers=$ompi_java_dir/include
94+
with_jdk_bindir=$ompi_java_dir/bin
95+
else
96+
AC_MSG_WARN([No recognized OS X/macOS JDK directory structure found under $ompi_java_dir])
97+
ompi_java_found=0
98+
fi],
99+
[AC_MSG_RESULT([not found])])
100+
101+
if test "$ompi_java_found" = "0"; then
102+
# Various Linux
103+
if test -z "$JAVA_HOME"; then
104+
ompi_java_dir='/usr/lib/jvm/java-*-openjdk-*/include/'
105+
else
106+
ompi_java_dir=$JAVA_HOME/include
107+
fi
108+
ompi_java_jnih=`ls $ompi_java_dir/jni.h 2>/dev/null | head -n 1`
109+
AC_MSG_CHECKING([for Java in Linux locations])
110+
AS_IF([test -r "$ompi_java_jnih"],
111+
[with_jdk_headers=`dirname $ompi_java_jnih`
112+
OPAL_WHICH([javac], [with_jdk_bindir])
113+
AS_IF([test -n "$with_jdk_bindir"],
114+
[AC_MSG_RESULT([found ($with_jdk_headers)])
115+
ompi_java_found=1
116+
with_jdk_bindir=`dirname $with_jdk_bindir`],
117+
[with_jdk_headers=])],
118+
[ompi_java_dir='/usr/lib/jvm/default-java/include/'
119+
ompi_java_jnih=`ls $ompi_java_dir/jni.h 2>/dev/null | head -n 1`
120+
AS_IF([test -r "$ompi_java_jnih"],
121+
[with_jdk_headers=`dirname $ompi_java_jnih`
122+
OPAL_WHICH([javac], [with_jdk_bindir])
123+
AS_IF([test -n "$with_jdk_bindir"],
124+
[AC_MSG_RESULT([found ($with_jdk_headers)])
125+
ompi_java_found=1
126+
with_jdk_bindir=`dirname $with_jdk_bindir`],
127+
[with_jdk_headers=])],
128+
[AC_MSG_RESULT([not found])])])
129+
fi
130+
131+
if test "$ompi_java_found" = "0"; then
132+
# Solaris
133+
ompi_java_dir=/usr/java
134+
AC_MSG_CHECKING([for Java in Solaris locations])
135+
AS_IF([test -d $ompi_java_dir && test -r "$ompi_java_dir/include/jni.h"],
136+
[AC_MSG_RESULT([found ($ompi_java_dir)])
137+
with_jdk_headers=$ompi_java_dir/include
138+
with_jdk_bindir=$ompi_java_dir/bin
139+
ompi_java_found=1],
140+
[AC_MSG_RESULT([not found])])
141+
fi
142+
],
143+
[ompi_java_found=1])
144+
145+
if test "$ompi_java_found" = "1"; then
146+
OPAL_CHECK_WITHDIR([jdk-bindir], [$with_jdk_bindir], [javac])
147+
OPAL_CHECK_WITHDIR([jdk-headers], [$with_jdk_headers], [jni.h])
148+
149+
# Look for various Java-related programs
150+
ompi_java_happy=no
151+
ompi_java_PATH_save=$PATH
152+
AS_IF([test -n "$with_jdk_bindir" && test "$with_jdk_bindir" != "yes" && test "$with_jdk_bindir" != "no"],
153+
[PATH="$with_jdk_bindir:$PATH"])
154+
AC_PATH_PROG(JAVAC, javac)
155+
AC_PATH_PROG(JAR, jar)
156+
AC_PATH_PROG(JAVADOC, javadoc)
157+
AC_PATH_PROG(JAVAH, javah)
158+
PATH=$ompi_java_PATH_save
159+
160+
# Check to see if we have all 3 programs.
161+
AS_IF([test -z "$JAVAC" || test -z "$JAR" || test -z "$JAVADOC"],
162+
[ompi_java_happy=no],
163+
[ompi_java_happy=yes])
52164

53-
# Only build the Java bindings if requested
54-
if test "$opal_java_happy" = "yes" && test "$enable_mpi_java" = "yes"; then
55-
AC_MSG_RESULT([yes])
56-
WANT_MPI_JAVA_SUPPORT=1
57-
AC_MSG_CHECKING([if shared libraries are enabled])
58-
AS_IF([test "$enable_shared" != "yes"],
59-
[AC_MSG_RESULT([no])
60-
AC_MSG_WARN([Java bindings cannot be built without shared libraries])
61-
AC_MSG_WARN([Please reconfigure with --enable-shared])
62-
AC_MSG_ERROR([Cannot continue])],
63-
[AC_MSG_RESULT([yes])])
64-
# must have Java support
65-
AC_MSG_CHECKING([if Java support was found])
66-
AS_IF([test "$opal_java_happy" = "yes"],
67-
[AC_MSG_RESULT([yes])],
68-
[AC_MSG_WARN([Java MPI bindings requested, but Java support was not found])
69-
AC_MSG_WARN([Please reconfigure the --with-jdk options to where Java])
70-
AC_MSG_WARN([support can be found])
71-
AC_MSG_ERROR([Cannot continue])])
72-
73-
# Mac Java requires this file (i.e., some other Java-related
74-
# header file needs this file, so we need to check for
75-
# it/include it in our sources when compiling on Mac).
76-
AC_CHECK_HEADERS([TargetConditionals.h])
77-
78-
# dladdr and Dl_info are required to build the full path to libmpi on OS X 10.11 aka El Capitan
79-
AC_CHECK_TYPES([Dl_info], [], [], [[#include <dlfcn.h>]])
165+
# Look for jni.h
166+
AS_IF([test "$ompi_java_happy" = "yes"],
167+
[ompi_java_CPPFLAGS_save=$CPPFLAGS
168+
# silence a stupid Mac warning
169+
CPPFLAGS="$CPPFLAGS -DTARGET_RT_MAC_CFM=0"
170+
AC_MSG_CHECKING([javac -h])
171+
cat > Conftest.java << EOF
172+
public final class Conftest {
173+
public native void conftest();
174+
}
175+
EOF
176+
AS_IF([$JAVAC -d . -h . Conftest.java > /dev/null 2>&1],
177+
[AC_MSG_RESULT([yes])],
178+
[AC_MSG_RESULT([no])
179+
AS_IF([test -n "$JAVAH"],
180+
[ompi_javah_happy=yes],
181+
[ompi_java_happy=no])])
182+
rm -f Conftest.java Conftest.class Conftest.h
183+
184+
AS_IF([test -n "$with_jdk_headers" && test "$with_jdk_headers" != "yes" && test "$with_jdk_headers" != "no"],
185+
[OMPI_JDK_CPPFLAGS="-I$with_jdk_headers"
186+
# Some flavors of JDK also require -I<blah>/linux.
187+
# See if that's there, and if so, add a -I for that,
188+
# too. Ugh.
189+
AS_IF([test -d "$with_jdk_headers/linux"],
190+
[OMPI_JDK_CPPFLAGS="$OMPI_JDK_CPPFLAGS -I$with_jdk_headers/linux"])
191+
# Solaris JDK also require -I<blah>/solaris.
192+
# See if that's there, and if so, add a -I for that,
193+
# too. Ugh.
194+
AS_IF([test -d "$with_jdk_headers/solaris"],
195+
[OMPI_JDK_CPPFLAGS="$OMPI_JDK_CPPFLAGS -I$with_jdk_headers/solaris"])
196+
# Darwin JDK also require -I<blah>/darwin.
197+
# See if that's there, and if so, add a -I for that,
198+
# too. Ugh.
199+
AS_IF([test -d "$with_jdk_headers/darwin"],
200+
[OMPI_JDK_CPPFLAGS="$OMPI_JDK_CPPFLAGS -I$with_jdk_headers/darwin"])
201+
202+
CPPFLAGS="$CPPFLAGS $OMPI_JDK_CPPFLAGS"])
203+
AC_CHECK_HEADER([jni.h], [],
204+
[ompi_java_happy=no])
205+
CPPFLAGS=$ompi_java_CPPFLAGS_save
206+
])
80207
else
81-
AC_MSG_RESULT([no])
82-
WANT_MPI_JAVA_SUPPORT=0
208+
ompi_java_happy=no
83209
fi
84-
AC_DEFINE_UNQUOTED([OMPI_WANT_JAVA_BINDINGS], [$WANT_MPI_JAVA_SUPPORT],
85-
[do we want java mpi bindings])
86-
AM_CONDITIONAL(OMPI_WANT_JAVA_BINDINGS, test "$WANT_MPI_JAVA_SUPPORT" = "1")
87-
88-
# Are we happy?
89-
AS_IF([test "$WANT_MPI_JAVA_SUPPORT" = "1"],
90-
[AC_MSG_WARN([******************************************************])
91-
AC_MSG_WARN([*** Java MPI bindings are provided on a provisional])
92-
AC_MSG_WARN([*** basis. They are NOT part of the current or])
93-
AC_MSG_WARN([*** proposed MPI standard. Continued inclusion of])
94-
AC_MSG_WARN([*** the Java MPI bindings in Open MPI is contingent])
95-
AC_MSG_WARN([*** upon user interest and developer support.])
96-
AC_MSG_WARN([******************************************************])
97-
])
98-
99-
AC_CONFIG_FILES([
100-
ompi/mpi/java/Makefile
101-
ompi/mpi/java/java/Makefile
102-
ompi/mpi/java/c/Makefile
103-
])
210+
AC_SUBST(OMPI_JDK_CPPFLAGS)
211+
212+
# Are we happy?
213+
AC_MSG_CHECKING([if Java support available])
214+
AS_IF([test "$ompi_java_happy" = "yes"],
215+
[AC_MSG_RESULT([yes])],
216+
[AC_MSG_RESULT([no])
217+
AC_MSG_WARN([Java support requested but not found.])
218+
AC_MSG_ERROR([Cannot continue])])
219+
220+
OPAL_VAR_SCOPE_POP
221+
])
222+
223+
dnl OMPI_SETUP_JAVA()
224+
dnl ----------------
225+
dnl Do everything required to setup the Java compiler.
226+
AC_DEFUN([OMPI_SETUP_JAVA],[
227+
OPAL_VAR_SCOPE_PUSH([ompi_java_happy ompi_javah_happy])
228+
229+
ompi_java_happy=no
230+
ompi_javah_happy=no
231+
232+
AC_ARG_WITH(jdk-dir,
233+
AC_HELP_STRING([--with-jdk-dir(=DIR)],
234+
[Location of the JDK header directory. If you use this option, do not specify --with-jdk-bindir or --with-jdk-headers.]))
235+
AC_ARG_WITH(jdk-bindir,
236+
AC_HELP_STRING([--with-jdk-bindir(=DIR)],
237+
[Location of the JDK bin directory. If you use this option, you must also use --with-jdk-headers (and you must NOT use --with-jdk-dir)]))
238+
AC_ARG_WITH(jdk-headers,
239+
AC_HELP_STRING([--with-jdk-headers(=DIR)],
240+
[Location of the JDK header directory. If you use this option, you must also use --with-jdk-bindir (and you must NOT use --with-jdk-dir)]))
241+
242+
# Only setup the compiler if we were requested to
243+
AS_IF([test "$1" = "yes"],
244+
[_OMPI_SETUP_JAVA])
245+
246+
AM_CONDITIONAL(OMPI_HAVE_JAVAH_SUPPORT, test "$ompi_javah_happy" = "yes")
247+
248+
OPAL_VAR_SCOPE_POP
104249
])

config/ompi_setup_mpi_java.m4

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
dnl -*- shell-script -*-
2+
dnl
3+
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
4+
dnl University Research and Technology
5+
dnl Corporation. All rights reserved.
6+
dnl Copyright (c) 2004-2006 The University of Tennessee and The University
7+
dnl of Tennessee Research Foundation. All rights
8+
dnl reserved.
9+
dnl Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
10+
dnl University of Stuttgart. All rights reserved.
11+
dnl Copyright (c) 2004-2006 The Regents of the University of California.
12+
dnl All rights reserved.
13+
dnl Copyright (c) 2006-2012 Los Alamos National Security, LLC. All rights
14+
dnl reserved.
15+
dnl Copyright (c) 2007-2012 Oracle and/or its affiliates. All rights reserved.
16+
dnl Copyright (c) 2008-2018 Cisco Systems, Inc. All rights reserved
17+
dnl Copyright (c) 2015 Research Organization for Information Science
18+
dnl and Technology (RIST). All rights reserved.
19+
dnl $COPYRIGHT$
20+
dnl
21+
dnl Additional copyrights may follow
22+
dnl
23+
dnl $HEADER$
24+
dnl
25+
26+
dnl OMPI_SETUP_JAVA_BINDINGS()
27+
dnl ----------------
28+
dnl Do everything required to setup the Java MPI bindings.
29+
AC_DEFUN([OMPI_SETUP_JAVA_BINDINGS],[
30+
opal_show_subtitle "Java MPI bindings"
31+
32+
AC_ARG_ENABLE(mpi-java,
33+
AC_HELP_STRING([--enable-mpi-java],
34+
[enable Java MPI bindings (default: disabled)]))
35+
36+
# Find the Java compiler and whatnot.
37+
# It knows to do very little if $enable_mpi_java!="yes".
38+
OMPI_SETUP_JAVA([$enable_mpi_java])
39+
40+
# Only build the Java bindings if requested
41+
AC_MSG_CHECKING([if want Java bindings])
42+
if test "$enable_mpi_java" = "yes"; then
43+
AC_MSG_RESULT([yes])
44+
WANT_MPI_JAVA_BINDINGS=1
45+
AC_MSG_CHECKING([if shared libraries are enabled])
46+
AS_IF([test "$enable_shared" != "yes"],
47+
[AC_MSG_RESULT([no])
48+
AC_MSG_WARN([Java bindings cannot be built without shared libraries])
49+
AC_MSG_WARN([Please reconfigure with --enable-shared])
50+
AC_MSG_ERROR([Cannot continue])],
51+
[AC_MSG_RESULT([yes])])
52+
53+
# Mac Java requires this file (i.e., some other Java-related
54+
# header file needs this file, so we need to check for
55+
# it/include it in our sources when compiling on Mac).
56+
AC_CHECK_HEADERS([TargetConditionals.h])
57+
58+
# dladdr and Dl_info are required to build the full path to
59+
# libmpi on OS X 10.11 (a.k.a. El Capitan)
60+
AC_CHECK_TYPES([Dl_info], [], [], [[#include <dlfcn.h>]])
61+
else
62+
AC_MSG_RESULT([no])
63+
WANT_MPI_JAVA_BINDINGS=0
64+
fi
65+
AC_DEFINE_UNQUOTED([OMPI_WANT_JAVA_BINDINGS], [$WANT_MPI_JAVA_BINDINGS],
66+
[do we want java mpi bindings])
67+
AM_CONDITIONAL(OMPI_WANT_JAVA_BINDINGS, test "$WANT_MPI_JAVA_BINDINGS" = "1")
68+
69+
# Are we happy?
70+
AS_IF([test $WANT_MPI_JAVA_BINDINGS -eq 1],
71+
[AC_MSG_WARN([******************************************************])
72+
AC_MSG_WARN([*** Java MPI bindings are provided on a provisional])
73+
AC_MSG_WARN([*** basis. They are NOT part of the current or])
74+
AC_MSG_WARN([*** proposed MPI standard. Continued inclusion of])
75+
AC_MSG_WARN([*** the Java MPI bindings in Open MPI is contingent])
76+
AC_MSG_WARN([*** upon user interest and developer support.])
77+
AC_MSG_WARN([******************************************************])
78+
])
79+
80+
AC_CONFIG_FILES([
81+
ompi/mpi/java/Makefile
82+
ompi/mpi/java/java/Makefile
83+
ompi/mpi/java/c/Makefile
84+
])
85+
])

0 commit comments

Comments
 (0)