<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <p>Hi Nir,<br>
      we have made some tweaks to the command line option description:</p>
    <p><a class="moz-txt-link-freetext" href="https://github.com/openjdk/jextract/tree/panama">https://github.com/openjdk/jextract/tree/panama</a></p>
    <p>Hopefully that should reflect some of the discussion in this
      thread.</p>
    <p>Thanks<br>
      Maurizio<br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 06/10/2022 20:43, Nir Lisker wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:CA+0ynh8ArisSxxdo1ugTVq70KFU9eqbNUYBeCnAkTB63SqB6Nw@mail.gmail.com">
      
      <div dir="ltr">
        <div>I tried the workaround. Compilation is fine, but
          during runtime I get:</div>
        <div><br>
        </div>
        <div>Error occurred during initialization of boot layer<br>
          java.lang.module.FindException: Module java.desktop not found<br>
        </div>
        <div><br>
        </div>
        <div>What is the run command that adds all the jdk modules?</div>
        <br>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Thu, Oct 6, 2022 at 8:35
            AM Sundararajan Athijegannathan <<a href="mailto:sundararajan.athijegannathan@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">sundararajan.athijegannathan@oracle.com</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div>
              <div dir="ltr">
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">Binary
                  download of jextract does not include
                  org.openjdk.jextract.jmod file (although that is part
                  of jextract build folder).</div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
                </div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">For
                  now, you can workaround using the following:</div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
                </div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
                </div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">$
                      cat Main.java<span> </span></span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">import
                      org.openjdk.jextract.*;</span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">import
                      java.awt.*;</span></p>
                  <p style="margin:0px;font:14px
                    Menlo;color:rgb(0,0,0);min-height:16px">
                    <span style="font-variant-ligatures:no-common-ligatures"></span><br>
                  </p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">class
                      Main {</span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><span> 
                      </span>public static void main(String[] a) {</span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><span> 
                         
                      </span>System.out.println(Frame.class);</span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><span> 
                         
                      </span>System.out.println(JextractTool.class);</span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><span> 
                      </span>}</span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">}</span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><br>
                    </span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">#
                      assume that the current directory is "bin" dir of </span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">#
                      jextract tool. </span>It has a javac executable in
                    it.</p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)">#
                    We use jextract's javac but pass module-path for
                    the </p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)">#
                    other jdk modules not included in jextract jdk
                    image.</p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><br>
                    </span></p>
                  <p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">$
                      ./javac --module-path
                      /Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/jmods
                      --add-modules java.desktop --enable-preview
                      --source 19<span> 
                      </span>Main.java</span></p>
                  <br>
                </div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
                </div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">If
                  you're okay with building jextract from the sources,
                  then you use JDK 19's javac with the following option:</div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
                </div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">--module-path
                  $JEXTRACT_REPO/build/jmods</div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
                </div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
                </div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">[That
                  directory <span style="background-color:rgb(255,255,255);display:inline">$JEXTRACT_REPO/build/jmods
                    contains org.openjdk.jextract.jmod module file]</span></div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><span style="background-color:rgb(255,255,255);display:inline"><br>
                  </span></div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><span style="background-color:rgb(255,255,255);display:inline"><br>
                  </span></div>
                <div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><span style="background-color:rgb(255,255,255);display:inline">-Sundar</span></div>
                <hr style="display:inline-block;width:98%">
                <div id="m_-8229116754328253435m_491107031550747698divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri,
                    sans-serif" color="#000000"><b>From:</b>
                    jextract-dev <<a href="mailto:jextract-dev-retn@openjdk.org" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">jextract-dev-retn@openjdk.org</a>>
                    on behalf of Nir Lisker <<a href="mailto:nlisker@gmail.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">nlisker@gmail.com</a>><br>
                    <b>Sent:</b> 06 October 2022 07:51<br>
                    <b>To:</b> Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</a>><br>
                    <b>Cc:</b> <a href="mailto:jextract-dev@openjdk.org" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">jextract-dev@openjdk.org</a>
                    <<a href="mailto:jextract-dev@openjdk.org" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">jextract-dev@openjdk.org</a>><br>
                    <b>Subject:</b> Re: GUI wrapper for jextract</font>
                  <div> </div>
                </div>
                <div>
                  <div dir="ltr">Yes, if I can interface with the tool
                    directly it would be ideal.
                    <div><br>
                    </div>
                    <div>How can I add jextract as an external
                      dependency for this? The jextract build is not a
                      full jdk, and I'm running on jdk-19.</div>
                  </div>
                  <br>
                  <div>
                    <div dir="ltr">On Tue, Oct 4, 2022 at 12:19 PM
                      Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</a>>
                      wrote:<br>
                    </div>
                    <blockquote style="margin:0px 0px 0px
                      0.8ex;border-left:1px solid
                      rgb(204,204,204);padding-left:1ex">
                      <div>
                        <p>Hi Nir,<br>
                        </p>
                        <div>On 02/10/2022 22:31, Nir Lisker wrote:<br>
                        </div>
                        <blockquote type="cite">
                          <div>5. When analyzing the symbols of a header
                            using the dump option, I need to read the
                            file that jextract creates from disk and
                            then delete it. Is there a way to read the
                            jextract output directly? Either through the
                            output stream, or writing to a file in
                            memory? Dealing with disk I/O is cumbersome,
                            comes with permission restrictions, and
                            might be slow if done for many files in a
                            batch.</div>
                        </blockquote>
                        <p>I think ultimately, working with files might
                          be not ideal for your use case.</p>
                        <p>There is a pseudo-stable API to parse
                          jextract files, in the JextractTool class (in
                          the org.openjdk.jextract package, which should
                          be exported by the jextract module):</p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">`public
                            static Declaration.Scoped
                            parse(List<Path> headers, String...
                            parserOptions) {`</span></p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">We
                            do not make any promise (at this stage at
                            least) on the stability of the API. That
                            said, it has not changed much (at all?) in
                            the last couple of years.</span></p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">What
                            you get back is a "Declaration", which is
                            used to model vars, structs, unions,
                            typedefs, functions<br>
                          </span></p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Then,
                            attached to declarations, there are "Type"s,
                            which are used... well, to model types.
                            Since some type can be structured (e.g. a
                            struct type), they can point back to their
                            declaration (e.g. Type.Declared).</span></p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Jextract
                            does all it does by defining visitors on
                            this basic declaration tree, which is
                            obtained by wrapping the results of parsing
                            a C header using the clang API (e.g. clang
                            Cursors).<br>
                          </span></p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">We
                            did this to "sanitize" the output of clang,
                            as well as to make our implementation more
                            robust and less dependent from clang
                            internals.</span></p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">One
                            option for you would be to invoke the
                            parsing process this way, then get the tree
                            and look at the results (e.g. with a
                            visitor), which sounds better than parsing
                            an option file.</span></p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br>
                            Cheers<br>
                            Maurizio<br>
                          </span></p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br>
                          </span></p>
                        <p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br>
                          </span></p>
                      </div>
                    </blockquote>
                  </div>
                </div>
              </div>
            </div>
          </blockquote>
        </div>
      </div>
    </blockquote>
  </body>
</html>