Java Version required to be checked.

Ryan Schmidt ryandesign at macports.org
Mon Mar 28 18:08:10 PDT 2016


> On Mar 28, 2016, at 6:22 PM, Abdulrahman Alshammari <a.turqi at hotmail.com> wrote:
> 
>> 
>> On Mar 28, 2016, at 11:54 AM, Ryan Schmidt <ryandesign at macports.org> wrote:
>> 
>> 
>>> On Mar 27, 2016, at 7:14 PM, Abdulrahman Alshammari <a.turqi at hotmail.com> wrote:
>>> 
>>> Hey,
>>> 
>>> I am building a porfile of my software. Originally, the software requires at least  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 ?
>> 
>> 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:
>> 
>> 
>>    proc javac_version_ok {min_javac_version} {
>>        if {![catch {set javac_long_version [exec javac -version 2>@1]}]} {
>>            if {[regexp {^javac (.*)$} $javac_long_version -> javac_version]} {
>>                return [expr [vercmp $javac_version $min_javac_version] >= 0]
>>            }
>>        }
>>        return NO;
>>    }
>> 
>>    proc check_javac_version {} {
>>        set min_javac_version 1.8
>>        if {![javac_version_ok ${min_javac_version}]} {
>>            global name version
>>            ui_error "${name} @${version} requires java ${min_javac_version} or later"
>>            return -code error "incompatible java version"
>>        }
>>    }
>> 
>>    pre-archivefetch {
>>        check_javac_version
>>    }
>> 
>>    pre-configure {
>>        check_javac_version
>>    }
>> 
>> 
>> 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.
>> 
> 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:
> 
> re-fetch {
> 
> if {${os.platform} eq "darwin" && ${os.major} > 10} {
> 
>   ui_error "${name} uses deprecated API which has been removed as of Mac OS X 10.7."
> 
>         return -code error "incompatible Mac OS X version"
> 
>     }
> 
> }
> Can I did that to check just the java version? Instead of OS.version?

There isn't a variable built in to MacPorts that represents the Java version, as there is for the OS version. That's why you have to compute the Java version yourself, for example using the code I provided.

OS version checks are typically done in pre-fetch, because if a port won't work on your OS version, you don't want to waste time downloading a file before finding that out, since upgrading the OS is something you may not want or be able to do. On the other hand, upgrading Java is simple enough to do, so I suggest doing that check in pre-configure (for source builds) and pre-archivefetch (for binary installations).



>>> 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? 
>> 
>> I don't know what Z3 is, but can you add a port for it?
> 
> I can do a port of this tool but I am wondering about the copyright issue. I will search on this situation.






More information about the macports-dev mailing list