<div dir="ltr">Another point that I missed is: when specifying a directory path for -include-dir, the docs don't say if the search is recursive (searches also within folders with the directory).</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Oct 9, 2022 at 1:50 AM Nir Lisker <<a href="mailto:nlisker@gmail.com">nlisker@gmail.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 dir="ltr">Hi Maurizio,<div><br></div><div>Yes, this is much clearer! I didn't see the PR or I would have noted a few points there. I'll do it here now:</div><div><br></div><div>1. For macro, the Option column is great, but the Meaning column is cryptic: "define to (or 1 if omitted)", to what? 1 what?</div><div>2. For --library, I would write in the Meaning column what file types are accepted. I believe they are only .dll, .so, and .dylib. If this is obvious then you can ignore this point.</div><div>3. Since --include-dir in its Option column specifically specifies <dir> (which is great!), I would think about being specific like that in the other options too. --library uses <path> that actually means <file> (although you show this in the example under Meaning); --output uses <path> that means <dir>, although this one is rather obvious because there's no other option; --dump-includes specifies <String>, but is it just a name or a can it be a whole path? (The example below shows how to use it with a name.)</div><div><br></div><div>On the interfacing side, I'm still stuck with the issue of dependencies. While I can compile with jextract's javac and pointing to the jmods of the JDK, I can't do it during runtime (execution of 'java'). I'm still using a Process with streams in the meantime.</div><div><br></div><div>Thanks,</div><div>Nir</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Oct 9, 2022 at 12:02 AM Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" target="_blank">maurizio.cimadamore@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>
    <p>Hi Nir,<br>
      we have made some tweaks to the command line option description:</p>
    <p><a href="https://github.com/openjdk/jextract/tree/panama" target="_blank">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>On 06/10/2022 20:43, Nir Lisker wrote:<br>
    </div>
    <blockquote type="cite">
      
      <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">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_7573790647145401329m_-7986351450041717693m_-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">jextract-dev-retn@openjdk.org</a>>
                    on behalf of Nir Lisker <<a href="mailto:nlisker@gmail.com" target="_blank">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">maurizio.cimadamore@oracle.com</a>><br>
                    <b>Cc:</b> <a href="mailto:jextract-dev@openjdk.org" target="_blank">jextract-dev@openjdk.org</a>
                    <<a href="mailto:jextract-dev@openjdk.org" target="_blank">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">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>
  </div>

</blockquote></div>
</blockquote></div>