parameters: ()
return_statement: return XCODE_VERSION_CACHE
docstring: Returns a tuple of version and build version of installed Xcode.
docstring_summary: Returns a tuple of version and build version of installed Xcode.
docstring_tokens: Returns a tuple of version and build version of installed Xcode .
function: def XcodeVersion():
      """Returns a tuple of version and build version of installed Xcode."""
      # `xcodebuild -version` output looks like
      #    Xcode 4.6.3
      #    Build version 4H1503
      # or like
      #    Xcode 3.2.6
      #    Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0
      #    BuildVersion: 10M2518
      # Convert that to ('0463', '4H1503') or ('0326', '10M2518').
      global XCODE_VERSION_CACHE
      if XCODE_VERSION_CACHE:
          return XCODE_VERSION_CACHE
      version = ""
      build = ""
      try:
          version_list = GetStdoutQuiet(["xcodebuild", "-version"]).splitlines()
          # In some circumstances xcodebuild exits 0 but doesn't return
          # the right results; for example, a user on 10.7 or 10.8 with
          # a bogus path set via xcode-select
          # In that case this may be a CLT-only install so fall back to
          # checking that version.
          if len(version_list) < 2:
              raise GypError("xcodebuild returned unexpected results")
          version = version_list[0].split()[-1]  # Last word on first line
          build = version_list[-1].split()[-1]  # Last word on last line
      except GypError:  # Xcode not installed so look for XCode Command Line Tools
          version = CLTVersion()  # macOS Catalina returns 11.0.0.0.1.1567737322
          if not version:
              raise GypError("No Xcode or CLT version detected!")
      # Be careful to convert "4.2.3" to "0423" and "11.0.0" to "1100":
      version = version.split(".")[:3]  # Just major, minor, micro
      version[0] = version[0].zfill(2)  # Add a leading zero if major is one digit
      version = ("".join(version) + "00")[:4]  # Limit to exactly four characters
      XCODE_VERSION_CACHE = (version, build)
      return XCODE_VERSION_CACHE
function_tokens: def XcodeVersion ( ) : # `xcodebuild -version` output looks like #    Xcode 4.6.3 #    Build version 4H1503 # or like #    Xcode 3.2.6 #    Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0 #    BuildVersion: 10M2518 # Convert that to ('0463', '4H1503') or ('0326', '10M2518'). global XCODE_VERSION_CACHE if XCODE_VERSION_CACHE : return XCODE_VERSION_CACHE version = "" build = "" try : version_list = GetStdoutQuiet ( [ "xcodebuild" , "-version" ] ) . splitlines ( ) # In some circumstances xcodebuild exits 0 but doesn't return # the right results; for example, a user on 10.7 or 10.8 with # a bogus path set via xcode-select # In that case this may be a CLT-only install so fall back to # checking that version. if len ( version_list ) < 2 : raise GypError ( "xcodebuild returned unexpected results" ) version = version_list [ 0 ] . split ( ) [ - 1 ] # Last word on first line build = version_list [ - 1 ] . split ( ) [ - 1 ] # Last word on last line except GypError : # Xcode not installed so look for XCode Command Line Tools version = CLTVersion ( ) # macOS Catalina returns 11.0.0.0.1.1567737322 if not version : raise GypError ( "No Xcode or CLT version detected!" ) # Be careful to convert "4.2.3" to "0423" and "11.0.0" to "1100": version = version . split ( "." ) [ : 3 ] # Just major, minor, micro version [ 0 ] = version [ 0 ] . zfill ( 2 ) # Add a leading zero if major is one digit version = ( "" . join ( version ) + "00" ) [ : 4 ] # Limit to exactly four characters XCODE_VERSION_CACHE = ( version , build ) return XCODE_VERSION_CACHE