[Openmcl-devel] Determining OSX version at runtime

Paul Krueger plkrueger at comcast.net
Thu Aug 26 17:37:00 UTC 2010


Actually I just realized my own was pretty bad, here is a better version:

(defun osx-version ()
  (let ((str (with-output-to-string (str)
               (run-program "sw_vers" '("-productVersion") :output str))))
    (subseq str 0 (1- (length str)))))


On Aug 26, 2010, at 12:27 PM, Paul Krueger wrote:

> As long as we're all contributing our personal hacks to do this, mine is:
> 
> (defun osx-version ()
>   (let* ((info-str (with-output-to-string (str)
>                      (run-program "sw_vers" nil :output str)))
>          (search-str "ProductVersion:")
>          (str-len (length search-str))
>          (version-pos (search search-str info-str :test #'char=))
>          (eol-pos (and version-pos 
>                        (position #\linefeed info-str
>                                  :test #'char=
>                                  :start (+ version-pos str-len)))))
>     (and version-pos (string-trim (list #\tab #\space)
>                                   (subseq info-str (+ version-pos str-len) eol-pos)))))
> 
> 
> ? (osx-version)
> "10.6.4"
> 
> but Gary's solution looks to be the most efficient to me. I wasn't previously aware of that version number correspondence.
> 
> Paul
> 
> On Aug 26, 2010, at 12:06 PM, Neil Baylis wrote:
> 
>> The Apple release notes for Snow Leopard suggest using NSAppKitVersionNumber.
>> On my Snow Leopard system, I see
>> 
>> CL-USER> (apropos "NSAppKit")
>> X86-DARWIN64::|NSAppKitVersionNumber|
>> 
>> But on my 32 bit ppc Leopard system, apropos doesn't know anything about it.
>> 
>> (Both systems using ccl 1.5)
>> 
>> Neil 
>> 
>> On Thu, Aug 26, 2010 at 9:39 AM, Raffael Cavallaro <raffaelcavallaro at mac.com> wrote:
>> 
>> On Aug 26, 2010, at 12:17 PM, Gary Palter wrote:
>> 
>> > Yes, you can use (software-version).  On Mac OS X, the first number is the major release + 4, the second number is the minor release, and the third number is usually zero.
>> >
>> > So, 9.8.0 is OS X 10.5.8 and 10.4.0  is OS X 10.6.4.
>> 
>> you can also cheat and get the product version directly (though this is not considered the correct method by apple):
>> 
>> ? (defun mac-os-x-version ()
>>   (ccl::with-autorelease-pool
>>       (let* ((plist
>>               (#/dictionaryWithContentsOfFile: ns:ns-dictionary #@"/System/Library/CoreServices/SystemVersion.plist")))
>>         (ccl::lisp-string-from-nsstring (#/valueForKey: plist #@"ProductVersion")))))
>> 
>> ? (mac-os-x-version)
>> "10.6.4"
>> 
>> warmest regards,
>> 
>> Ralph
>> 
>> 
>> Raffael Cavallaro
>> raffaelcavallaro at me.com
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Openmcl-devel mailing list
>> Openmcl-devel at clozure.com
>> http://clozure.com/mailman/listinfo/openmcl-devel
>> 
>> 
>> 
>> -- 
>> http://www.pixpopuli.com
>> _______________________________________________
>> Openmcl-devel mailing list
>> Openmcl-devel at clozure.com
>> http://clozure.com/mailman/listinfo/openmcl-devel
> 
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.clozure.com/pipermail/openmcl-devel/attachments/20100826/8fc7784f/attachment.html>


More information about the Openmcl-devel mailing list