--- old/src/jdk.jextract/share/classes/com/sun/tools/jextract/Context.java 2018-10-11 18:38:35.000000000 +0530 +++ new/src/jdk.jextract/share/classes/com/sun/tools/jextract/Context.java 2018-10-11 18:38:32.000000000 +0530 @@ -385,6 +385,7 @@ // check for function symbols in libraries & warn missing symbols if (tree instanceof FunctionTree && !isSymbolFound(name)) { err.println(Main.format("warn.symbol.not.found", name)); + return false; // do not generate functions for missing symbols } return true; --- old/test/jdk/com/sun/tools/jextract/JtregJextract.java 2018-10-11 18:38:38.000000000 +0530 +++ new/test/jdk/com/sun/tools/jextract/JtregJextract.java 2018-10-11 18:38:37.000000000 +0530 @@ -24,6 +24,8 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.spi.ToolProvider; public class JtregJextract { @@ -48,13 +50,15 @@ } protected String[] processArgs(String... args) { + Pattern sysPropPattern = Pattern.compile("'?\\$\\((.*)\\)'?"); ArrayList jextrOpts = new ArrayList<>(); jextrOpts.clear(); jextrOpts.add("-I"); jextrOpts.add(inputDir.toAbsolutePath().toString()); jextrOpts.add("-d"); - jextrOpts.add( outputDir.toAbsolutePath().toString()); + jextrOpts.add(outputDir.toAbsolutePath().toString()); + int i = 0; while (i < args.length) { @@ -69,7 +73,14 @@ continue; } - jextrOpts.add(opt); + // Pattern $(system.property.name) is replaced with the + // value of the System property of that name. + Matcher m = sysPropPattern.matcher(opt); + if (m.matches()) { + jextrOpts.add(System.getProperty(m.group(1))); + } else { + jextrOpts.add(opt); + } } while (i < args.length) { --- /dev/null 2018-10-11 18:38:42.000000000 +0530 +++ new/test/jdk/com/sun/tools/jextract/missing/MissingSymbolTest.java 2018-10-11 18:38:40.000000000 +0530 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.foreign.Libraries; +import java.foreign.Library; +import java.lang.invoke.MethodHandles; +import java.lang.reflect.Method; +import org.testng.annotations.Test; +import test.jextract.missing.missing; + +import static org.testng.Assert.assertTrue; +import static test.jextract.missing.missing.*; + +/* + * @test + * @library .. + * @run driver JtregJextract -l Missing -L $(test.nativepath) -t test.jextract.missing -- missing.h + * @run testng MissingSymbolTest + */ +public class MissingSymbolTest { + @Test + public void testBind() { + // make sure that we can bind even though "cube" method is missing! + Library lib = Libraries.loadLibrary(MethodHandles.lookup(), "Missing"); + missing libMissing = Libraries.bind(missing.class, lib); + + // make sure cube method is not present + boolean noCubeMethod = false; + try { + Method cube = missing.class.getMethod("cube", int.class); + } catch (NoSuchMethodException nsme) { + System.err.println(nsme); + noCubeMethod = true; + } + assertTrue(noCubeMethod); + } +} --- /dev/null 2018-10-11 18:38:46.000000000 +0530 +++ new/test/jdk/com/sun/tools/jextract/missing/libMissing.c 2018-10-11 18:38:44.000000000 +0530 @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +int square(int x) { + return x*x; +} --- /dev/null 2018-10-11 18:38:49.000000000 +0530 +++ new/test/jdk/com/sun/tools/jextract/missing/missing.h 2018-10-11 18:38:47.000000000 +0530 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +int square(int x); +int cube(int x);