How do you use jextract for two or more header files?

Paul Sandoz paul.sandoz at oracle.com
Mon Aug 23 18:13:36 UTC 2021


Hi Carl,

Generating separately will overwrite common generated artifacts (in this case the constants classes).

Create your own header file with the following content:

#include <stdio.h>
#include <time.h>

Then run jextract using that header file as input.

Paul.

> On Aug 22, 2021, at 9:25 PM, carl dea <carl.dea at gmail.com> wrote:
> 
> Panama Dev team,
> 
> I'm trying to use jextract for stdio.h and time.h, but getting compile
> issues when the target (-t) name space is the same such as *-t org.unix*
> *jextract stdio.h*
> 
> # jextract stdio.h
> jextract --source -d generated/src -t org.unix \
>  -I /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
> \
>  /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdio.h
> 
> *jextract time.h*
> 
> # jextract time.h
> jextract --source -d generated/src -t org.unix \
>  -I /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
> \
>   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/time.h
> 
> *Compile source*
> 
> javac -d classes generated/src/org/unix/*.java
> 
> 
> *Compile Error*
> The following compile errors (87 errors)
> generated/src/org/unix/stdio_h.java:732: error: cannot find symbol
>        return
> RuntimeHelper.requireNonNull(constants$0.renameat$MH,"renameat");
>                                                       ^
>  symbol:   variable renameat$MH
>  location: class constants$0
> generated/src/org/unix/stdio_h.java:735: error: cannot find symbol
> ...
> 
> *Workaround (change namespace)*
> My workaround is making time.h 's target namespace to *-t org.unix.time*.
> When I'm in the IDE and using Panama the source code looks like the
> following
> 
> import static org.unix.stdio_h.*;
> import static org.unix.time.time_h.*;
> 
> import org.unix.time.tm;
> ...
> // more code
> localtime_r(now2, pTmStruct);
> 
> Is there a better way to perform a jextract on two more headers?
> 
> This example uses both stdio.h and time.h
> https://github.com/carldea/panama4newbies/blob/main/part03/src/PanamaTime.java
> 
> 
> Thank you,
> Carl
> 
> -- 
> *Carl Dea*
>  Email: carldea at gmail.com
> Website: https://carlfx.wordpress.com
> Twitter: @carldea <https://twitter.com/carldea>



More information about the panama-dev mailing list