()
return "%s-%s-%s" % (osname, release, machine)
Return a string that identifies the current platform.

    This is used mainly to distinguish platform-specific build directories and
    platform-specific built distributions.  Typically includes the OS name
    and version and the architecture (as supplied by 'os.uname()'),
    although the exact information included depends on the OS; eg. for IRIX
    the architecture isn't particularly important (IRIX only runs on SGI
    hardware), but for Linux the kernel version isn't particularly
    important.

    Examples of returned values:
       linux-i586
       linux-alpha (?)
       solaris-2.6-sun4u
       irix-5.3
       irix64-6.2

    Windows will return one of:
       win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc)
       win-ia64 (64bit Windows on Itanium)
       win32 (all others - specifically, sys.platform is returned)

    For other non-POSIX platforms, currently just returns 'sys.platform'.
Return a string that identifies the current platform.
Return a string that identifies the current platform .
def get_platform():
    """Return a string that identifies the current platform.

    This is used mainly to distinguish platform-specific build directories and
    platform-specific built distributions.  Typically includes the OS name
    and version and the architecture (as supplied by 'os.uname()'),
    although the exact information included depends on the OS; eg. for IRIX
    the architecture isn't particularly important (IRIX only runs on SGI
    hardware), but for Linux the kernel version isn't particularly
    important.

    Examples of returned values:
       linux-i586
       linux-alpha (?)
       solaris-2.6-sun4u
       irix-5.3
       irix64-6.2

    Windows will return one of:
       win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc)
       win-ia64 (64bit Windows on Itanium)
       win32 (all others - specifically, sys.platform is returned)

    For other non-POSIX platforms, currently just returns 'sys.platform'.
    """
    if os.name == 'nt':
        # sniff sys.version for architecture.
        prefix = " bit ("
        i = sys.version.find(prefix)
        if i == -1:
            return sys.platform
        j = sys.version.find(")", i)
        look = sys.version[i+len(prefix):j].lower()
        if look == 'amd64':
            return 'win-amd64'
        if look == 'itanium':
            return 'win-ia64'
        return sys.platform

    if os.name != "posix" or not hasattr(os, 'uname'):
        # XXX what about the architecture? NT is Intel or Alpha,
        # Mac OS is M68k or PPC, etc.
        return sys.platform

    # Try to distinguish various flavours of Unix
    osname, host, release, version, machine = os.uname()

    # Convert the OS name to lowercase, remove '/' characters
    # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh")
    osname = osname.lower().replace('/', '')
    machine = machine.replace(' ', '_')
    machine = machine.replace('/', '-')

    if osname[:5] == "linux":
        # At least on Linux/Intel, 'machine' is the processor --
        # i386, etc.
        # XXX what about Alpha, SPARC, etc?
        return  "%s-%s" % (osname, machine)
    elif osname[:5] == "sunos":
        if release[0] >= "5":           # SunOS 5 == Solaris 2
            osname = "solaris"
            release = "%d.%s" % (int(release[0]) - 3, release[2:])
        # fall through to standard osname-release-machine representation
    elif osname[:4] == "irix":              # could be "irix64"!
        return "%s-%s" % (osname, release)
    elif osname[:3] == "aix":
        return "%s-%s.%s" % (osname, version, release)
    elif osname[:6] == "cygwin":
        osname = "cygwin"
        rel_re = re.compile(r'[\d.]+')
        m = rel_re.match(release)
        if m:
            release = m.group()
    elif osname[:6] == "darwin":
        #
        # For our purposes, we'll assume that the system version from
        # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set
        # to. This makes the compatibility story a bit more sane because the
        # machine is going to compile and link as if it were
        # MACOSX_DEPLOYMENT_TARGET.
        cfgvars = get_config_vars()
        macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET')

        if True:
            # Always calculate the release of the running machine,
            # needed to determine if we can build fat binaries or not.

            macrelease = macver
            # Get the system version. Reading this plist is a documented
            # way to get the system version (see the documentation for
            # the Gestalt Manager)
            try:
                f = open('/System/Library/CoreServices/SystemVersion.plist')
            except IOError:
                # We're on a plain darwin box, fall back to the default
                # behaviour.
                pass
            else:
                try:
                    m = re.search(r'<key>ProductUserVisibleVersion</key>\s*'
                                  r'<string>(.*?)</string>', f.read())
                finally:
                    f.close()
                if m is not None:
                    macrelease = '.'.join(m.group(1).split('.')[:2])
                # else: fall back to the default behaviour

        if not macver:
            macver = macrelease

        if macver:
            release = macver
            osname = "macosx"

            if ((macrelease + '.') >= '10.4.' and
                '-arch' in get_config_vars().get('CFLAGS', '').strip()):
                # The universal build will build fat binaries, but not on
                # systems before 10.4
                #
                # Try to detect 4-way universal builds, those have machine-type
                # 'universal' instead of 'fat'.

                machine = 'fat'
                cflags = get_config_vars().get('CFLAGS')

                archs = re.findall(r'-arch\s+(\S+)', cflags)
                archs = tuple(sorted(set(archs)))

                if len(archs) == 1:
                    machine = archs[0]
                elif archs == ('i386', 'ppc'):
                    machine = 'fat'
                elif archs == ('i386', 'x86_64'):
                    machine = 'intel'
                elif archs == ('i386', 'ppc', 'x86_64'):
                    machine = 'fat3'
                elif archs == ('ppc64', 'x86_64'):
                    machine = 'fat64'
                elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'):
                    machine = 'universal'
                else:
                    raise ValueError(
                       "Don't know machine value for archs=%r" % (archs,))

            elif machine == 'i386':
                # On OSX the machine type returned by uname is always the
                # 32-bit variant, even if the executable architecture is
                # the 64-bit variant
                if sys.maxsize >= 2**32:
                    machine = 'x86_64'

            elif machine in ('PowerPC', 'Power_Macintosh'):
                # Pick a sane name for the PPC architecture.
                # See 'i386' case
                if sys.maxsize >= 2**32:
                    machine = 'ppc64'
                else:
                    machine = 'ppc'

    return "%s-%s-%s" % (osname, release, machine)
def get_platform ( ) : if os . name == 'nt' : # sniff sys.version for architecture. prefix = " bit (" i = sys . version . find ( prefix ) if i == - 1 : return sys . platform j = sys . version . find ( ")" , i ) look = sys . version [ i + len ( prefix ) : j ] . lower ( ) if look == 'amd64' : return 'win-amd64' if look == 'itanium' : return 'win-ia64' return sys . platform if os . name != "posix" or not hasattr ( os , 'uname' ) : # XXX what about the architecture? NT is Intel or Alpha, # Mac OS is M68k or PPC, etc. return sys . platform # Try to distinguish various flavours of Unix osname , host , release , version , machine = os . uname ( ) # Convert the OS name to lowercase, remove '/' characters # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") osname = osname . lower ( ) . replace ( '/' , '' ) machine = machine . replace ( ' ' , '_' ) machine = machine . replace ( '/' , '-' ) if osname [ : 5 ] == "linux" : # At least on Linux/Intel, 'machine' is the processor -- # i386, etc. # XXX what about Alpha, SPARC, etc? return "%s-%s" % ( osname , machine ) elif osname [ : 5 ] == "sunos" : if release [ 0 ] >= "5" : # SunOS 5 == Solaris 2 osname = "solaris" release = "%d.%s" % ( int ( release [ 0 ] ) - 3 , release [ 2 : ] ) # fall through to standard osname-release-machine representation elif osname [ : 4 ] == "irix" : # could be "irix64"! return "%s-%s" % ( osname , release ) elif osname [ : 3 ] == "aix" : return "%s-%s.%s" % ( osname , version , release ) elif osname [ : 6 ] == "cygwin" : osname = "cygwin" rel_re = re . compile ( r'[\d.]+' ) m = rel_re . match ( release ) if m : release = m . group ( ) elif osname [ : 6 ] == "darwin" : # # For our purposes, we'll assume that the system version from # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set # to. This makes the compatibility story a bit more sane because the # machine is going to compile and link as if it were # MACOSX_DEPLOYMENT_TARGET. cfgvars = get_config_vars ( ) macver = cfgvars . get ( 'MACOSX_DEPLOYMENT_TARGET' ) if True : # Always calculate the release of the running machine, # needed to determine if we can build fat binaries or not. macrelease = macver # Get the system version. Reading this plist is a documented # way to get the system version (see the documentation for # the Gestalt Manager) try : f = open ( '/System/Library/CoreServices/SystemVersion.plist' ) except IOError : # We're on a plain darwin box, fall back to the default # behaviour. pass else : try : m = re . search ( r'<key>ProductUserVisibleVersion</key>\s*' r'<string>(.*?)</string>' , f . read ( ) ) finally : f . close ( ) if m is not None : macrelease = '.' . join ( m . group ( 1 ) . split ( '.' ) [ : 2 ] ) # else: fall back to the default behaviour if not macver : macver = macrelease if macver : release = macver osname = "macosx" if ( ( macrelease + '.' ) >= '10.4.' and '-arch' in get_config_vars ( ) . get ( 'CFLAGS' , '' ) . strip ( ) ) : # The universal build will build fat binaries, but not on # systems before 10.4 # # Try to detect 4-way universal builds, those have machine-type # 'universal' instead of 'fat'. machine = 'fat' cflags = get_config_vars ( ) . get ( 'CFLAGS' ) archs = re . findall ( r'-arch\s+(\S+)' , cflags ) archs = tuple ( sorted ( set ( archs ) ) ) if len ( archs ) == 1 : machine = archs [ 0 ] elif archs == ( 'i386' , 'ppc' ) : machine = 'fat' elif archs == ( 'i386' , 'x86_64' ) : machine = 'intel' elif archs == ( 'i386' , 'ppc' , 'x86_64' ) : machine = 'fat3' elif archs == ( 'ppc64' , 'x86_64' ) : machine = 'fat64' elif archs == ( 'i386' , 'ppc' , 'ppc64' , 'x86_64' ) : machine = 'universal' else : raise ValueError ( "Don't know machine value for archs=%r" % ( archs , ) ) elif machine == 'i386' : # On OSX the machine type returned by uname is always the # 32-bit variant, even if the executable architecture is # the 64-bit variant if sys . maxsize >= 2 ** 32 : machine = 'x86_64' elif machine in ( 'PowerPC' , 'Power_Macintosh' ) : # Pick a sane name for the PPC architecture. # See 'i386' case if sys . maxsize >= 2 ** 32 : machine = 'ppc64' else : machine = 'ppc' return "%s-%s-%s" % ( osname , release , machine )