<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 28, 2016, at 11:54 AM, Ryan Schmidt &lt;<a href="mailto:ryandesign@macports.org" class="">ryandesign@macports.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><br class=""><blockquote type="cite" class="">On Mar 27, 2016, at 7:14 PM, Abdulrahman Alshammari &lt;<a href="mailto:a.turqi@hotmail.com" class="">a.turqi@hotmail.com</a>&gt; wrote:<br class=""><br class="">Hey,<br class=""><br class="">I am building a porfile of my software. Originally, the software requires at least &nbsp;1.8 Java version. I have found some portfiles in available ports section, they use pre-fetch to check if the operation system is at least earlier than a certain version. Can I do that for to check for Java version? if yes, How can I perform that ?<br class=""></blockquote><br class="">You can run commands to determine the java version and compare it against the one you need. You would have to code it in such a way that you also account for the situation where the user does not have any java version installed. I do have java installed, so I'm not completely certain this handles the no-java case correctly, but here's some code I came up with:<br class=""><br class=""><br class=""> &nbsp;&nbsp;&nbsp;proc javac_version_ok {min_javac_version} {<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if {![catch {set javac_long_version [exec javac -version 2&gt;@1]}]} {<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if {[regexp {^javac (.*)$} $javac_long_version -&gt; javac_version]} {<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [expr [vercmp $javac_version $min_javac_version] &gt;= 0]<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NO;<br class=""> &nbsp;&nbsp;&nbsp;}<br class=""><br class=""> &nbsp;&nbsp;&nbsp;proc check_javac_version {} {<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set min_javac_version 1.8<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if {![javac_version_ok ${min_javac_version}]} {<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;global name version<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui_error "${name} @${version} requires java ${min_javac_version} or later"<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -code error "incompatible java version"<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br class=""> &nbsp;&nbsp;&nbsp;}<br class=""><br class=""> &nbsp;&nbsp;&nbsp;pre-archivefetch {<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_javac_version<br class=""> &nbsp;&nbsp;&nbsp;}<br class=""><br class=""> &nbsp;&nbsp;&nbsp;pre-configure {<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_javac_version<br class=""> &nbsp;&nbsp;&nbsp;}<br class=""><br class=""><br class="">Here I'm assuming java is required both at build time and at runtime. If it's only needed at build time, then you should not use the pre-archivefetch block above.<br class=""><br class=""></div></div></blockquote>I really appreciate your support. This is helpful. I found a situation similar to this and he add a simple pre-fetch in his portfile. This is what he did:</div><div><br class=""></div><div><table class="code"><tbody class=""><tr class=""><td class=""><span style="font-size: 12px;" class="">re-fetch {</span></td></tr><tr class=""><th id="L39" class=""><span style="font-size: 12px;" class=""><br class=""></span></th><td class=""><span style="font-size: 12px;" class="">if {${os.platform} eq "darwin" &amp;&amp; ${os.major} &gt; 10} {</span></td></tr><tr class=""><th id="L40" class=""><span style="font-size: 12px;" class=""><br class=""></span></th><td class=""><span style="font-size: 12px;" class="">&nbsp; ui_error "${name} uses deprecated API which has been removed as of Mac OS X 10.7."</span></td></tr><tr class=""><th id="L41" class=""><span style="font-size: 12px;" class=""><br class=""></span></th><td class=""><span style="font-size: 12px;" class="">&nbsp; &nbsp; &nbsp; &nbsp; return -code error "incompatible Mac OS X version"</span></td></tr><tr class=""><th id="L42" class=""><span style="font-size: 12px;" class=""><br class=""></span></th><td class=""><span style="font-size: 12px;" class="">&nbsp; &nbsp; }</span></td></tr><tr class=""><th id="L43" class=""><span style="font-size: 12px;" class=""><br class=""></span></th><td class=""><span style="font-size: 12px;" class="">}</span></td></tr></tbody></table><div class="">Can I did that to check just the java version? Instead of OS.version?</div><div class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div class=""><br class=""><blockquote type="cite" class="">Other question is about file dependencies, Z3 is a theorem prover like CVC4. Unfortunately, Z3 is not available as a port. How can I deal with this as file dependency? Please let me know if there is an similar example to my situation? <br class=""></blockquote><br class="">I don't know what Z3 is, but can you add a port for it?<br class=""><br class=""><br class=""></div></div></blockquote></div><br class=""><div class="">I can do a port of this tool but I am wondering about the copyright issue. I will search on this situation.</div><div class=""><br class=""></div><div class="">Thanks Ryan</div></body></html>