; docformat = 'rst'
;+
; Returns the IDL version number as a string or a boolean indicating whether
; a required version is met. 
;
; :Examples:
;    For example, try::
;
;       IDL> print, mg_idlversion()
;       8.0.1
;       IDL> print, mg_idlversion(require='8.0.1')
;          1
;
;    Also, try the main-level program at the end of this file::
;
;       IDL> .run mg_idlversion
;       Version: 8.0.1
;       Can require 6.4: yes
;       Can require 7.1: yes
;       Can require 7.2: yes
;
; :Returns:
;    string version number or boolean
;
; :Keywords:
;    require : in, optional, type=string
;       IDL version required; if set, `MG_IDLVERSION` returns a boolean of 
;       whether the version requirement is met
;-
function mg_idlversion, require=require
  compile_opt strictarr
  version = (strsplit(!version.release, /extract))[0]
  
  if (n_elements(require) gt 0L) then begin  
    return, mg_cmp_version(version, require) ge 0B
  endif else begin
    return, version
  endelse
end
; main-level example
print, mg_idlversion(), format='(%"Version: %s")'
print, mg_idlversion(require='6.4') ? 'yes' : 'no', $
       format='(%"Can require 6.4: %s")'
print, mg_idlversion(require='7.1') ? 'yes' : 'no', $
       format='(%"Can require 7.1: %s")'
print, mg_idlversion(require='7.2') ? 'yes' : 'no', $
       format='(%"Can require 7.2: %s")'
end