Thank you so much for your support. I get the idea now. 
> On Mar 28, 2016, at 9:08 PM, Ryan Schmidt <[email protected]> wrote:
> 
>> 
>> On Mar 28, 2016, at 6:22 PM, Abdulrahman Alshammari <[email protected]> 
>> wrote:
>> 
>>> 
>>> On Mar 28, 2016, at 11:54 AM, Ryan Schmidt <[email protected]> wrote:
>>> 
>>> 
>>>> On Mar 27, 2016, at 7:14 PM, Abdulrahman Alshammari <[email protected]> 
>>>> 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.

_______________________________________________
macports-dev mailing list
[email protected]
https://lists.macosforge.org/mailman/listinfo/macports-dev

Reply via email to