annotate Lib/platform.py @ 39042:c02fa187e0f4 legacy-trunk

Part of SF patch #1484695. This removes dead code. The chksum was already verified in .frombuf() on the lines above. If there was a problem an exception is raised, so there was no way this condition could have been true.
author Neal Norwitz <nnorwitz@gmail.com>
date Mon, 10 Jul 2006 00:23:17 +0000
parents 6f35f7be36c3
children 363203d75d69 ed7acf1881a9 63237fcefd99
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1 #!/usr/bin/env python
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
2
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
3 """ This module tries to retrieve as much platform-identifying data as
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
4 possible. It makes this information available via function APIs.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
5
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
6 If called from the command line, it prints the platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
7 information concatenated as single string to stdout. The output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
8 format is useable as part of a filename.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
9
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
10 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
11 # This module is maintained by Marc-Andre Lemburg <mal@egenix.com>.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
12 # If you find problems, please submit bug reports/patches via the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
13 # Python SourceForge Project Page and assign them to "lemburg".
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
14 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
15 # Note: Please keep this module compatible to Python 1.5.2.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
16 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
17 # Still needed:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
18 # * more support for WinCE
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
19 # * support for MS-DOS (PythonDX ?)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
20 # * support for Amiga and other still unsupported platforms running Python
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
21 # * support for additional Linux distributions
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
22 #
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
23 # Many thanks to all those who helped adding platform-specific
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
24 # checks (in no particular order):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
25 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
26 # Charles G Waldman, David Arnold, Gordon McMillan, Ben Darnell,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
27 # Jeff Bauer, Cliff Crawford, Ivan Van Laningham, Josef
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
28 # Betancourt, Randall Hopper, Karl Putland, John Farrell, Greg
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
29 # Andruk, Just van Rossum, Thomas Heller, Mark R. Levinson, Mark
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
30 # Hammond, Bill Tutt, Hans Nowak, Uwe Zessin (OpenVMS support),
32383
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
31 # Colin Kong, Trent Mick, Guido van Rossum
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
32 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
33 # History:
35842
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
34 #
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
35 # <see CVS and SVN checkin messages for history>
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
36 #
32383
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
37 # 1.0.3 - added normalization of Windows system name
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
38 # 1.0.2 - added more Windows support
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
39 # 1.0.1 - reformatted to make doc.py happy
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
40 # 1.0.0 - reformatted a bit and checked into Python CVS
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
41 # 0.8.0 - added sys.version parser and various new access
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
42 # APIs (python_version(), python_compiler(), etc.)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
43 # 0.7.2 - fixed architecture() to use sizeof(pointer) where available
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
44 # 0.7.1 - added support for Caldera OpenLinux
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
45 # 0.7.0 - some fixes for WinCE; untabified the source file
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
46 # 0.6.2 - support for OpenVMS - requires version 1.5.2-V006 or higher and
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
47 # vms_lib.getsyi() configured
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
48 # 0.6.1 - added code to prevent 'uname -p' on platforms which are
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
49 # known not to support it
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
50 # 0.6.0 - fixed win32_ver() to hopefully work on Win95,98,NT and Win2k;
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
51 # did some cleanup of the interfaces - some APIs have changed
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
52 # 0.5.5 - fixed another type in the MacOS code... should have
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
53 # used more coffee today ;-)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
54 # 0.5.4 - fixed a few typos in the MacOS code
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
55 # 0.5.3 - added experimental MacOS support; added better popen()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
56 # workarounds in _syscmd_ver() -- still not 100% elegant
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
57 # though
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
58 # 0.5.2 - fixed uname() to return '' instead of 'unknown' in all
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
59 # return values (the system uname command tends to return
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
60 # 'unknown' instead of just leaving the field emtpy)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
61 # 0.5.1 - included code for slackware dist; added exception handlers
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
62 # to cover up situations where platforms don't have os.popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
63 # (e.g. Mac) or fail on socket.gethostname(); fixed libc
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
64 # detection RE
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
65 # 0.5.0 - changed the API names referring to system commands to *syscmd*;
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
66 # added java_ver(); made syscmd_ver() a private
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
67 # API (was system_ver() in previous versions) -- use uname()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
68 # instead; extended the win32_ver() to also return processor
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
69 # type information
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
70 # 0.4.0 - added win32_ver() and modified the platform() output for WinXX
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
71 # 0.3.4 - fixed a bug in _follow_symlinks()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
72 # 0.3.3 - fixed popen() and "file" command invokation bugs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
73 # 0.3.2 - added architecture() API and support for it in platform()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
74 # 0.3.1 - fixed syscmd_ver() RE to support Windows NT
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
75 # 0.3.0 - added system alias support
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
76 # 0.2.3 - removed 'wince' again... oh well.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
77 # 0.2.2 - added 'wince' to syscmd_ver() supported platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
78 # 0.2.1 - added cache logic and changed the platform string format
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
79 # 0.2.0 - changed the API to use functions instead of module globals
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
80 # since some action take too long to be run on module import
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
81 # 0.1.0 - first release
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
82 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
83 # You can always get the latest version of this module at:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
84 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
85 # http://www.egenix.com/files/python/platform.py
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
86 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
87 # If that URL should fail, try contacting the author.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
88
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
89 __copyright__ = """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
90 Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
91 Copyright (c) 2000-2003, eGenix.com Software GmbH; mailto:info@egenix.com
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
92
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
93 Permission to use, copy, modify, and distribute this software and its
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
94 documentation for any purpose and without fee or royalty is hereby granted,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
95 provided that the above copyright notice appear in all copies and that
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
96 both that copyright notice and this permission notice appear in
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
97 supporting documentation or portions thereof, including modifications,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
98 that you make.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
99
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
100 EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
101 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
102 FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
103 INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
104 FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
105 NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
106 WITH THE USE OR PERFORMANCE OF THIS SOFTWARE !
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
107
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
108 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
109
35842
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
110 __version__ = '1.0.4'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
111
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
112 import sys,string,os,re
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
113
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
114 ### Platform specific APIs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
115
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
116 _libc_search = re.compile(r'(__libc_init)'
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
117 '|'
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
118 '(GLIBC_([0-9.]+))'
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
119 '|'
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
120 '(libc(_\w+)?\.so(?:\.(\d[0-9.]*))?)')
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
121
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
122 def libc_ver(executable=sys.executable,lib='',version='',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
123
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
124 chunksize=2048):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
125
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
126 """ Tries to determine the libc version that the file executable
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
127 (which defaults to the Python interpreter) is linked against.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
128
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
129 Returns a tuple of strings (lib,version) which default to the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
130 given parameters in case the lookup fails.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
131
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
132 Note that the function has intimate knowledge of how different
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
133 libc versions add symbols to the executable and thus is probably
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
134 only useable for executables compiled using gcc.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
135
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
136 The file is read and scanned in chunks of chunksize bytes.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
137
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
138 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
139 f = open(executable,'rb')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
140 binary = f.read(chunksize)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
141 pos = 0
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
142 while 1:
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
143 m = _libc_search.search(binary,pos)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
144 if not m:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
145 binary = f.read(chunksize)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
146 if not binary:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
147 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
148 pos = 0
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
149 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
150 libcinit,glibc,glibcversion,so,threads,soversion = m.groups()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
151 if libcinit and not lib:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
152 lib = 'libc'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
153 elif glibc:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
154 if lib != 'glibc':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
155 lib = 'glibc'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
156 version = glibcversion
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
157 elif glibcversion > version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
158 version = glibcversion
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
159 elif so:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
160 if lib != 'glibc':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
161 lib = 'libc'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
162 if soversion > version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
163 version = soversion
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
164 if threads and version[-len(threads):] != threads:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
165 version = version + threads
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
166 pos = m.end()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
167 f.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
168 return lib,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
169
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
170 def _dist_try_harder(distname,version,id):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
171
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
172 """ Tries some special tricks to get the distribution
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
173 information in case the default method fails.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
174
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
175 Currently supports older SuSE Linux, Caldera OpenLinux and
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
176 Slackware Linux distributions.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
177
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
178 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
179 if os.path.exists('/var/adm/inst-log/info'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
180 # SuSE Linux stores distribution information in that file
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
181 info = open('/var/adm/inst-log/info').readlines()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
182 distname = 'SuSE'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
183 for line in info:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
184 tv = string.split(line)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
185 if len(tv) == 2:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
186 tag,value = tv
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
187 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
188 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
189 if tag == 'MIN_DIST_VERSION':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
190 version = string.strip(value)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
191 elif tag == 'DIST_IDENT':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
192 values = string.split(value,'-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
193 id = values[2]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
194 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
195
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
196 if os.path.exists('/etc/.installed'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
197 # Caldera OpenLinux has some infos in that file (thanks to Colin Kong)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
198 info = open('/etc/.installed').readlines()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
199 for line in info:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
200 pkg = string.split(line,'-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
201 if len(pkg) >= 2 and pkg[0] == 'OpenLinux':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
202 # XXX does Caldera support non Intel platforms ? If yes,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
203 # where can we find the needed id ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
204 return 'OpenLinux',pkg[1],id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
205
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
206 if os.path.isdir('/usr/lib/setup'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
207 # Check for slackware verson tag file (thanks to Greg Andruk)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
208 verfiles = os.listdir('/usr/lib/setup')
31969
0c76a9e5c838 Using reversed() is not compatible with Python 1.5.2.
Guido van Rossum <guido@python.org>
parents: 31819
diff changeset
209 for n in range(len(verfiles)-1, -1, -1):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
210 if verfiles[n][:14] != 'slack-version-':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
211 del verfiles[n]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
212 if verfiles:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
213 verfiles.sort()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
214 distname = 'slackware'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
215 version = verfiles[-1][14:]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
216 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
217
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
218 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
219
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
220 _release_filename = re.compile(r'(\w+)[-_](release|version)')
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
221 _release_version = re.compile(r'([\d.]+)[^(]*(?:\((.+)\))?')
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
222
35842
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
223 # Note:In supported_dists below we need 'fedora' before 'redhat' as in
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
224 # Fedora redhat-release is a link to fedora-release.
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
225
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
226 def dist(distname='',version='',id='',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
227
35842
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
228 supported_dists=('SuSE', 'debian', 'fedora', 'redhat', 'mandrake')):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
229
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
230 """ Tries to determine the name of the Linux OS distribution name.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
231
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
232 The function first looks for a distribution release file in
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
233 /etc and then reverts to _dist_try_harder() in case no
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
234 suitable files are found.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
235
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
236 Returns a tuple (distname,version,id) which default to the
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
237 args given as parameters.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
238
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
239 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
240 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
241 etc = os.listdir('/etc')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
242 except os.error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
243 # Probably not a Unix system
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
244 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
245 for file in etc:
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
246 m = _release_filename.match(file)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
247 if m:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
248 _distname,dummy = m.groups()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
249 if _distname in supported_dists:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
250 distname = _distname
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
251 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
252 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
253 return _dist_try_harder(distname,version,id)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
254 f = open('/etc/'+file,'r')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
255 firstline = f.readline()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
256 f.close()
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
257 m = _release_version.search(firstline)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
258 if m:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
259 _version,_id = m.groups()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
260 if _version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
261 version = _version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
262 if _id:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
263 id = _id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
264 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
265 # Unkown format... take the first two words
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
266 l = string.split(string.strip(firstline))
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
267 if l:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
268 version = l[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
269 if len(l) > 1:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
270 id = l[1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
271 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
272
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
273 class _popen:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
274
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
275 """ Fairly portable (alternative) popen implementation.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
276
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
277 This is mostly needed in case os.popen() is not available, or
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
278 doesn't work as advertised, e.g. in Win9X GUI programs like
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
279 PythonWin or IDLE.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
280
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
281 Writing to the pipe is currently not supported.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
282
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
283 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
284 tmpfile = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
285 pipe = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
286 bufsize = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
287 mode = 'r'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
288
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
289 def __init__(self,cmd,mode='r',bufsize=None):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
290
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
291 if mode != 'r':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
292 raise ValueError,'popen()-emulation only supports read mode'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
293 import tempfile
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
294 self.tmpfile = tmpfile = tempfile.mktemp()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
295 os.system(cmd + ' > %s' % tmpfile)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
296 self.pipe = open(tmpfile,'rb')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
297 self.bufsize = bufsize
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
298 self.mode = mode
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
299
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
300 def read(self):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
301
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
302 return self.pipe.read()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
303
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
304 def readlines(self):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
305
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
306 if self.bufsize is not None:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
307 return self.pipe.readlines()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
308
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
309 def close(self,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
310
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
311 remove=os.unlink,error=os.error):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
312
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
313 if self.pipe:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
314 rc = self.pipe.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
315 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
316 rc = 255
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
317 if self.tmpfile:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
318 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
319 remove(self.tmpfile)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
320 except error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
321 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
322 return rc
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
323
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
324 # Alias
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
325 __del__ = close
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
326
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
327 def popen(cmd, mode='r', bufsize=None):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
328
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
329 """ Portable popen() interface.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
330 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
331 # Find a working popen implementation preferring win32pipe.popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
332 # over os.popen over _popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
333 popen = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
334 if os.environ.get('OS','') == 'Windows_NT':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
335 # On NT win32pipe should work; on Win9x it hangs due to bugs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
336 # in the MS C lib (see MS KnowledgeBase article Q150956)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
337 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
338 import win32pipe
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
339 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
340 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
341 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
342 popen = win32pipe.popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
343 if popen is None:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
344 if hasattr(os,'popen'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
345 popen = os.popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
346 # Check whether it works... it doesn't in GUI programs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
347 # on Windows platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
348 if sys.platform == 'win32': # XXX Others too ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
349 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
350 popen('')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
351 except os.error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
352 popen = _popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
353 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
354 popen = _popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
355 if bufsize is None:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
356 return popen(cmd,mode)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
357 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
358 return popen(cmd,mode,bufsize)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
359
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
360 def _norm_version(version,build=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
361
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
362 """ Normalize the version and build strings and return a single
35898
d72db82a70cd Fix typo.
Walter Dörwald <walter@livinglogic.de>
parents: 35842
diff changeset
363 version string using the format major.minor.build (or patchlevel).
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
364 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
365 l = string.split(version,'.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
366 if build:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
367 l.append(build)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
368 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
369 ints = map(int,l)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
370 except ValueError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
371 strings = l
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
372 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
373 strings = map(str,ints)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
374 version = string.join(strings[:3],'.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
375 return version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
376
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
377 _ver_output = re.compile(r'(?:([\w ]+) ([\w.]+) '
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
378 '.*'
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
379 'Version ([\d.]+))')
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
380
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
381 def _syscmd_ver(system='',release='',version='',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
382
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
383 supported_platforms=('win32','win16','dos','os2')):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
384
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
385 """ Tries to figure out the OS version used and returns
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
386 a tuple (system,release,version).
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
387
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
388 It uses the "ver" shell command for this which is known
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
389 to exists on Windows, DOS and OS/2. XXX Others too ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
390
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
391 In case this fails, the given parameters are used as
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
392 defaults.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
393
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
394 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
395 if sys.platform not in supported_platforms:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
396 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
397
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
398 # Try some common cmd strings
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
399 for cmd in ('ver','command /c ver','cmd /c ver'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
400 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
401 pipe = popen(cmd)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
402 info = pipe.read()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
403 if pipe.close():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
404 raise os.error,'command failed'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
405 # XXX How can I supress shell errors from being written
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
406 # to stderr ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
407 except os.error,why:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
408 #print 'Command %s failed: %s' % (cmd,why)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
409 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
410 except IOError,why:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
411 #print 'Command %s failed: %s' % (cmd,why)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
412 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
413 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
414 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
415 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
416 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
417
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
418 # Parse the output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
419 info = string.strip(info)
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
420 m = _ver_output.match(info)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
421 if m:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
422 system,release,version = m.groups()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
423 # Strip trailing dots from version and release
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
424 if release[-1] == '.':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
425 release = release[:-1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
426 if version[-1] == '.':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
427 version = version[:-1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
428 # Normalize the version and build strings (eliminating additional
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
429 # zeros)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
430 version = _norm_version(version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
431 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
432
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
433 def _win32_getvalue(key,name,default=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
434
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
435 """ Read a value for name from the registry key.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
436
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
437 In case this fails, default is returned.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
438
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
439 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
440 from win32api import RegQueryValueEx
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
441 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
442 return RegQueryValueEx(key,name)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
443 except:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
444 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
445
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
446 def win32_ver(release='',version='',csd='',ptype=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
447
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
448 """ Get additional version information from the Windows Registry
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
449 and return a tuple (version,csd,ptype) referring to version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
450 number, CSD level and OS type (multi/single
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
451 processor).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
452
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
453 As a hint: ptype returns 'Uniprocessor Free' on single
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
454 processor NT machines and 'Multiprocessor Free' on multi
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
455 processor machines. The 'Free' refers to the OS version being
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
456 free of debugging code. It could also state 'Checked' which
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
457 means the OS version uses debugging code, i.e. code that
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
458 checks arguments, ranges, etc. (Thomas Heller).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
459
28779
708aea82ade8 Fix docstring typo
Andrew M. Kuchling <amk@amk.ca>
parents: 28774
diff changeset
460 Note: this function only works if Mark Hammond's win32
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
461 package is installed and obviously only runs on Win32
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
462 compatible platforms.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
463
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
464 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
465 # XXX Is there any way to find out the processor type on WinXX ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
466 # XXX Is win32 available on Windows CE ?
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
467 #
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
468 # Adapted from code posted by Karl Putland to comp.lang.python.
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
469 #
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
470 # The mappings between reg. values and release names can be found
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
471 # here: http://msdn.microsoft.com/library/en-us/sysinfo/base/osversioninfo_str.asp
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
472
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
473 # Import the needed APIs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
474 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
475 import win32api
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
476 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
477 return release,version,csd,ptype
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
478 from win32api import RegQueryValueEx,RegOpenKeyEx,RegCloseKey,GetVersionEx
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
479 from win32con import HKEY_LOCAL_MACHINE,VER_PLATFORM_WIN32_NT,\
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
480 VER_PLATFORM_WIN32_WINDOWS
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
481
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
482 # Find out the registry key and some general version infos
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
483 maj,min,buildno,plat,csd = GetVersionEx()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
484 version = '%i.%i.%i' % (maj,min,buildno & 0xFFFF)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
485 if csd[:13] == 'Service Pack ':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
486 csd = 'SP' + csd[13:]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
487 if plat == VER_PLATFORM_WIN32_WINDOWS:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
488 regkey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
489 # Try to guess the release name
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
490 if maj == 4:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
491 if min == 0:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
492 release = '95'
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
493 elif min == 10:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
494 release = '98'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
495 elif min == 90:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
496 release = 'Me'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
497 else:
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
498 release = 'postMe'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
499 elif maj == 5:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
500 release = '2000'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
501 elif plat == VER_PLATFORM_WIN32_NT:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
502 regkey = 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
503 if maj <= 4:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
504 release = 'NT'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
505 elif maj == 5:
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
506 if min == 0:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
507 release = '2000'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
508 elif min == 1:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
509 release = 'XP'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
510 elif min == 2:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
511 release = '2003Server'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
512 else:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
513 release = 'post2003'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
514 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
515 if not release:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
516 # E.g. Win3.1 with win32s
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
517 release = '%i.%i' % (maj,min)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
518 return release,version,csd,ptype
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
519
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
520 # Open the registry key
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
521 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
522 keyCurVer = RegOpenKeyEx(HKEY_LOCAL_MACHINE,regkey)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
523 # Get a value to make sure the key exists...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
524 RegQueryValueEx(keyCurVer,'SystemRoot')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
525 except:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
526 return release,version,csd,ptype
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
527
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
528 # Parse values
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
529 #subversion = _win32_getvalue(keyCurVer,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
530 # 'SubVersionNumber',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
531 # ('',1))[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
532 #if subversion:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
533 # release = release + subversion # 95a, 95b, etc.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
534 build = _win32_getvalue(keyCurVer,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
535 'CurrentBuildNumber',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
536 ('',1))[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
537 ptype = _win32_getvalue(keyCurVer,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
538 'CurrentType',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
539 (ptype,1))[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
540
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
541 # Normalize version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
542 version = _norm_version(version,build)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
543
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
544 # Close key
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
545 RegCloseKey(keyCurVer)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
546 return release,version,csd,ptype
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
547
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
548 def _mac_ver_lookup(selectors,default=None):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
549
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
550 from gestalt import gestalt
30118
3779eb483e6b Bug fix for #780461: 'sysu' gestalt selector is meaningless on MacOSX,
Jack Jansen <jack.jansen@cwi.nl>
parents: 30049
diff changeset
551 import MacOS
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
552 l = []
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
553 append = l.append
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
554 for selector in selectors:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
555 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
556 append(gestalt(selector))
30118
3779eb483e6b Bug fix for #780461: 'sysu' gestalt selector is meaningless on MacOSX,
Jack Jansen <jack.jansen@cwi.nl>
parents: 30049
diff changeset
557 except (RuntimeError, MacOS.Error):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
558 append(default)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
559 return l
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
560
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
561 def _bcd2str(bcd):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
562
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
563 return hex(bcd)[2:]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
564
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
565 def mac_ver(release='',versioninfo=('','',''),machine=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
566
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
567 """ Get MacOS version information and return it as tuple (release,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
568 versioninfo, machine) with versioninfo being a tuple (version,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
569 dev_stage, non_release_version).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
570
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
571 Entries which cannot be determined are set to the paramter values
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
572 which default to ''. All tuple entries are strings.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
573
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
574 Thanks to Mark R. Levinson for mailing documentation links and
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
575 code examples for this function. Documentation for the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
576 gestalt() API is available online at:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
577
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
578 http://www.rgaros.nl/gestalt/
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
579
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
580 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
581 # Check whether the version info module is available
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
582 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
583 import gestalt
30118
3779eb483e6b Bug fix for #780461: 'sysu' gestalt selector is meaningless on MacOSX,
Jack Jansen <jack.jansen@cwi.nl>
parents: 30049
diff changeset
584 import MacOS
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
585 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
586 return release,versioninfo,machine
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
587 # Get the infos
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
588 sysv,sysu,sysa = _mac_ver_lookup(('sysv','sysu','sysa'))
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
589 # Decode the infos
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
590 if sysv:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
591 major = (sysv & 0xFF00) >> 8
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
592 minor = (sysv & 0x00F0) >> 4
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
593 patch = (sysv & 0x000F)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
594 release = '%s.%i.%i' % (_bcd2str(major),minor,patch)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
595 if sysu:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
596 major = int((sysu & 0xFF000000L) >> 24)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
597 minor = (sysu & 0x00F00000) >> 20
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
598 bugfix = (sysu & 0x000F0000) >> 16
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
599 stage = (sysu & 0x0000FF00) >> 8
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
600 nonrel = (sysu & 0x000000FF)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
601 version = '%s.%i.%i' % (_bcd2str(major),minor,bugfix)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
602 nonrel = _bcd2str(nonrel)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
603 stage = {0x20:'development',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
604 0x40:'alpha',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
605 0x60:'beta',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
606 0x80:'final'}.get(stage,'')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
607 versioninfo = (version,stage,nonrel)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
608 if sysa:
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
609 machine = {0x1: '68k',
37797
6f35f7be36c3 Teach platform about darwin/x86
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 36210
diff changeset
610 0x2: 'PowerPC',
6f35f7be36c3 Teach platform about darwin/x86
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 36210
diff changeset
611 0xa: 'i386'}.get(sysa,'')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
612 return release,versioninfo,machine
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
613
29657
5b105a950334 remove extra parameter from _java_getprop, remove duplicate imports
Neal Norwitz <nnorwitz@gmail.com>
parents: 28779
diff changeset
614 def _java_getprop(name,default):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
615
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
616 from java.lang import System
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
617 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
618 return System.getProperty(name)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
619 except:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
620 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
621
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
622 def java_ver(release='',vendor='',vminfo=('','',''),osinfo=('','','')):
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
623
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
624 """ Version interface for Jython.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
625
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
626 Returns a tuple (release,vendor,vminfo,osinfo) with vminfo being
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
627 a tuple (vm_name,vm_release,vm_vendor) and osinfo being a
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
628 tuple (os_name,os_version,os_arch).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
629
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
630 Values which cannot be determined are set to the defaults
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
631 given as parameters (which all default to '').
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
632
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
633 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
634 # Import the needed APIs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
635 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
636 import java.lang
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
637 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
638 return release,vendor,vminfo,osinfo
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
639
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
640 vendor = _java_getprop('java.vendor',vendor)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
641 release = _java_getprop('java.version',release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
642 vm_name,vm_release,vm_vendor = vminfo
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
643 vm_name = _java_getprop('java.vm.name',vm_name)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
644 vm_vendor = _java_getprop('java.vm.vendor',vm_vendor)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
645 vm_release = _java_getprop('java.vm.version',vm_release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
646 vminfo = vm_name,vm_release,vm_vendor
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
647 os_name,os_version,os_arch = osinfo
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
648 os_arch = _java_getprop('java.os.arch',os_arch)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
649 os_name = _java_getprop('java.os.name',os_name)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
650 os_version = _java_getprop('java.os.version',os_version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
651 osinfo = os_name,os_version,os_arch
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
652
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
653 return release,vendor,vminfo,osinfo
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
654
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
655 ### System name aliasing
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
656
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
657 def system_alias(system,release,version):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
658
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
659 """ Returns (system,release,version) aliased to common
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
660 marketing names used for some systems.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
661
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
662 It also does some reordering of the information in some cases
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
663 where it would otherwise cause confusion.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
664
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
665 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
666 if system == 'Rhapsody':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
667 # Apple's BSD derivative
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
668 # XXX How can we determine the marketing release number ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
669 return 'MacOS X Server',system+release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
670
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
671 elif system == 'SunOS':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
672 # Sun's OS
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
673 if release < '5':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
674 # These releases use the old name SunOS
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
675 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
676 # Modify release (marketing release = SunOS release - 3)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
677 l = string.split(release,'.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
678 if l:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
679 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
680 major = int(l[0])
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
681 except ValueError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
682 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
683 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
684 major = major - 3
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
685 l[0] = str(major)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
686 release = string.join(l,'.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
687 if release < '6':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
688 system = 'Solaris'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
689 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
690 # XXX Whatever the new SunOS marketing name is...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
691 system = 'Solaris'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
692
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
693 elif system == 'IRIX64':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
694 # IRIX reports IRIX64 on platforms with 64-bit support; yet it
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
695 # is really a version and not a different platform, since 32-bit
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
696 # apps are also supported..
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
697 system = 'IRIX'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
698 if version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
699 version = version + ' (64bit)'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
700 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
701 version = '64bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
702
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
703 elif system in ('win32','win16'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
704 # In case one of the other tricks
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
705 system = 'Windows'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
706
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
707 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
708
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
709 ### Various internal helpers
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
710
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
711 def _platform(*args):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
712
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
713 """ Helper to format the platform string in a filename
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
714 compatible format e.g. "system-version-machine".
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
715 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
716 # Format the platform string
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
717 platform = string.join(
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
718 map(string.strip,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
719 filter(len,args)),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
720 '-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
721
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
722 # Cleanup some possible filename obstacles...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
723 replace = string.replace
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
724 platform = replace(platform,' ','_')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
725 platform = replace(platform,'/','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
726 platform = replace(platform,'\\','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
727 platform = replace(platform,':','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
728 platform = replace(platform,';','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
729 platform = replace(platform,'"','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
730 platform = replace(platform,'(','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
731 platform = replace(platform,')','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
732
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
733 # No need to report 'unknown' information...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
734 platform = replace(platform,'unknown','')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
735
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
736 # Fold '--'s and remove trailing '-'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
737 while 1:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
738 cleaned = replace(platform,'--','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
739 if cleaned == platform:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
740 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
741 platform = cleaned
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
742 while platform[-1] == '-':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
743 platform = platform[:-1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
744
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
745 return platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
746
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
747 def _node(default=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
748
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
749 """ Helper to determine the node name of this machine.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
750 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
751 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
752 import socket
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
753 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
754 # No sockets...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
755 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
756 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
757 return socket.gethostname()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
758 except socket.error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
759 # Still not working...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
760 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
762 # os.path.abspath is new in Python 1.5.2:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
763 if not hasattr(os.path,'abspath'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
764
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
765 def _abspath(path,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
766
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
767 isabs=os.path.isabs,join=os.path.join,getcwd=os.getcwd,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
768 normpath=os.path.normpath):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
769
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
770 if not isabs(path):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
771 path = join(getcwd(), path)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
772 return normpath(path)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
773
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
774 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
775
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
776 _abspath = os.path.abspath
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
777
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
778 def _follow_symlinks(filepath):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
779
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
780 """ In case filepath is a symlink, follow it until a
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
781 real file is reached.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
782 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
783 filepath = _abspath(filepath)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
784 while os.path.islink(filepath):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
785 filepath = os.path.normpath(
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
786 os.path.join(filepath,os.readlink(filepath)))
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
787 return filepath
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
788
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
789 def _syscmd_uname(option,default=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
790
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
791 """ Interface to the system's uname command.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
792 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
793 if sys.platform in ('dos','win32','win16','os2'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
794 # XXX Others too ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
795 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
796 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
797 f = os.popen('uname %s 2> /dev/null' % option)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
798 except (AttributeError,os.error):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
799 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
800 output = string.strip(f.read())
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
801 rc = f.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
802 if not output or rc:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
803 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
804 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
805 return output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
806
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
807 def _syscmd_file(target,default=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
808
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
809 """ Interface to the system's file command.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
810
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
811 The function uses the -b option of the file command to have it
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
812 ommit the filename in its output and if possible the -L option
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
813 to have the command follow symlinks. It returns default in
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
814 case the command should fail.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
815
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
816 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
817 target = _follow_symlinks(target)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
818 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
819 f = os.popen('file %s 2> /dev/null' % target)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
820 except (AttributeError,os.error):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
821 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
822 output = string.strip(f.read())
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
823 rc = f.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
824 if not output or rc:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
825 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
826 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
827 return output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
828
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
829 ### Information about the used architecture
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
830
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
831 # Default values for architecture; non-empty strings override the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
832 # defaults given as parameters
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
833 _default_architecture = {
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
834 'win32': ('','WindowsPE'),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
835 'win16': ('','Windows'),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
836 'dos': ('','MSDOS'),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
837 }
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
838
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
839 _architecture_split = re.compile(r'[\s,]').split
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
840
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
841 def architecture(executable=sys.executable,bits='',linkage=''):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
842
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
843 """ Queries the given executable (defaults to the Python interpreter
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
844 binary) for various architecture information.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
845
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
846 Returns a tuple (bits,linkage) which contains information about
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
847 the bit architecture and the linkage format used for the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
848 executable. Both values are returned as strings.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
849
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
850 Values that cannot be determined are returned as given by the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
851 parameter presets. If bits is given as '', the sizeof(pointer)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
852 (or sizeof(long) on Python version < 1.5.2) is used as
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
853 indicator for the supported pointer size.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
854
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
855 The function relies on the system's "file" command to do the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
856 actual work. This is available on most if not all Unix
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
857 platforms. On some non-Unix platforms where the "file" command
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
858 does not exist and the executable is set to the Python interpreter
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
859 binary defaults from _default_architecture are used.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
860
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
861 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
862 # Use the sizeof(pointer) as default number of bits if nothing
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
863 # else is given as default.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
864 if not bits:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
865 import struct
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
866 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
867 size = struct.calcsize('P')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
868 except struct.error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
869 # Older installations can only query longs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
870 size = struct.calcsize('l')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
871 bits = str(size*8) + 'bit'
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
872
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
873 # Get data from the 'file' system command
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
874 output = _syscmd_file(executable,'')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
875
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
876 if not output and \
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
877 executable == sys.executable:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
878 # "file" command did not return anything; we'll try to provide
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
879 # some sensible defaults then...
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
880 if _default_architecture.has_key(sys.platform):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
881 b,l = _default_architecture[sys.platform]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
882 if b:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
883 bits = b
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
884 if l:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
885 linkage = l
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
886 return bits,linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
887
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
888 # Split the output into a list of strings omitting the filename
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
889 fileout = _architecture_split(output)[1:]
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
890
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
891 if 'executable' not in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
892 # Format not supported
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
893 return bits,linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
894
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
895 # Bits
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
896 if '32-bit' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
897 bits = '32bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
898 elif 'N32' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
899 # On Irix only
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
900 bits = 'n32bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
901 elif '64-bit' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
902 bits = '64bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
903
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
904 # Linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
905 if 'ELF' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
906 linkage = 'ELF'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
907 elif 'PE' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
908 # E.g. Windows uses this format
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
909 if 'Windows' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
910 linkage = 'WindowsPE'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
911 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
912 linkage = 'PE'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
913 elif 'COFF' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
914 linkage = 'COFF'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
915 elif 'MS-DOS' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
916 linkage = 'MSDOS'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
917 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
918 # XXX the A.OUT format also falls under this class...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
919 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
920
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
921 return bits,linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
922
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
923 ### Portable uname() interface
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
924
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
925 _uname_cache = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
926
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
927 def uname():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
928
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
929 """ Fairly portable uname interface. Returns a tuple
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
930 of strings (system,node,release,version,machine,processor)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
931 identifying the underlying platform.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
932
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
933 Note that unlike the os.uname function this also returns
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
934 possible processor information as an additional tuple entry.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
935
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
936 Entries which cannot be determined are set to ''.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
937
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
938 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
939 global _uname_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
940
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
941 if _uname_cache is not None:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
942 return _uname_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
943
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
944 # Get some infos from the builtin os.uname API...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
945 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
946 system,node,release,version,machine = os.uname()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
947
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
948 except AttributeError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
949 # Hmm, no uname... we'll have to poke around the system then.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
950 system = sys.platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
951 release = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
952 version = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
953 node = _node()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
954 machine = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
955 processor = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
956 use_syscmd_ver = 1
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
957
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
958 # Try win32_ver() on win32 platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
959 if system == 'win32':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
960 release,version,csd,ptype = win32_ver()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
961 if release and version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
962 use_syscmd_ver = 0
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
963
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
964 # Try the 'ver' system command available on some
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
965 # platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
966 if use_syscmd_ver:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
967 system,release,version = _syscmd_ver(system)
32383
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
968 # Normalize system to what win32_ver() normally returns
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
969 # (_syscmd_ver() tends to return the vendor name as well)
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
970 if system == 'Microsoft Windows':
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
971 system = 'Windows'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
972
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
973 # In case we still don't know anything useful, we'll try to
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
974 # help ourselves
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
975 if system in ('win32','win16'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
976 if not version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
977 if system == 'win32':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
978 version = '32bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
979 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
980 version = '16bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
981 system = 'Windows'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
982
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
983 elif system[:4] == 'java':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
984 release,vendor,vminfo,osinfo = java_ver()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
985 system = 'Java'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
986 version = string.join(vminfo,', ')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
987 if not version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
988 version = vendor
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
989
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
990 elif os.name == 'mac':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
991 release,(version,stage,nonrel),machine = mac_ver()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
992 system = 'MacOS'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
993
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
994 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
995 # System specific extensions
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
996 if system == 'OpenVMS':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
997 # OpenVMS seems to have release and version mixed up
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
998 if not release or release == '0':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
999 release = version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1000 version = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1001 # Get processor information
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1002 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1003 import vms_lib
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1004 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1005 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1006 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1007 csid, cpu_number = vms_lib.getsyi('SYI$_CPU',0)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1008 if (cpu_number >= 128):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1009 processor = 'Alpha'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1010 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1011 processor = 'VAX'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1012 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1013 # Get processor information from the uname system command
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1014 processor = _syscmd_uname('-p','')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1015
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1016 # 'unknown' is not really any useful as information; we'll convert
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1017 # it to '' which is more portable
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1018 if system == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1019 system = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1020 if node == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1021 node = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1022 if release == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1023 release = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1024 if version == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1025 version = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1026 if machine == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1027 machine = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1028 if processor == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1029 processor = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1030 _uname_cache = system,node,release,version,machine,processor
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1031 return _uname_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1032
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1033 ### Direct interfaces to some of the uname() return values
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1034
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1035 def system():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1036
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1037 """ Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1038
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1039 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1040
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1041 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1042 return uname()[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1043
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1044 def node():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1045
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
1046 """ Returns the computer's network name (which may not be fully
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
1047 qualified)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1048
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1049 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1050
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1051 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1052 return uname()[1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1053
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1054 def release():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1055
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1056 """ Returns the system's release, e.g. '2.2.0' or 'NT'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1057
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1058 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1059
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1060 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1061 return uname()[2]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1062
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1063 def version():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1064
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1065 """ Returns the system's release version, e.g. '#3 on degas'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1066
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1067 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1068
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1069 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1070 return uname()[3]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1071
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1072 def machine():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1073
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1074 """ Returns the machine type, e.g. 'i386'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1075
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1076 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1077
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1078 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1079 return uname()[4]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1080
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1081 def processor():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1082
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1083 """ Returns the (true) processor name, e.g. 'amdk6'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1084
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1085 An empty string is returned if the value cannot be
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1086 determined. Note that many platforms do not provide this
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1087 information or simply return the same value as for machine(),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1088 e.g. NetBSD does this.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1089
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1090 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1091 return uname()[5]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1092
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1093 ### Various APIs for extracting information from sys.version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1094
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1095 _sys_version_parser = re.compile(r'([\w.+]+)\s*'
36210
83364763c7b2 Generalize buildno to be a sequence of non-comma
Martin v. Löwis <martin@v.loewis.de>
parents: 36074
diff changeset
1096 '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1097 '\[([^\]]+)\]?')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1098 _sys_version_cache = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1099
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1100 def _sys_version():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1101
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1102 """ Returns a parsed version of Python's sys.version as tuple
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1103 (version, buildno, builddate, compiler) referring to the Python
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1104 version, build number, build date/time as string and the compiler
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1105 identification string.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1106
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1107 Note that unlike the Python sys.version, the returned value
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1108 for the Python version will always include the patchlevel (it
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1109 defaults to '.0').
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1110
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1111 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1112 global _sys_version_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1113
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1114 if _sys_version_cache is not None:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1115 return _sys_version_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1116 version, buildno, builddate, buildtime, compiler = \
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1117 _sys_version_parser.match(sys.version).groups()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1118 builddate = builddate + ' ' + buildtime
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1119 l = string.split(version, '.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1120 if len(l) == 2:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1121 l.append('0')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1122 version = string.join(l, '.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1123 _sys_version_cache = (version, buildno, builddate, compiler)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1124 return _sys_version_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1125
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1126 def python_version():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1127
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1128 """ Returns the Python version as string 'major.minor.patchlevel'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1129
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1130 Note that unlike the Python sys.version, the returned value
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1131 will always include the patchlevel (it defaults to 0).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1132
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1133 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1134 return _sys_version()[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1135
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1136 def python_version_tuple():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1137
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1138 """ Returns the Python version as tuple (major, minor, patchlevel)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1139 of strings.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1140
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1141 Note that unlike the Python sys.version, the returned value
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1142 will always include the patchlevel (it defaults to 0).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1143
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1144 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1145 return string.split(_sys_version()[0], '.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1146
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1147 def python_build():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1148
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1149 """ Returns a tuple (buildno, builddate) stating the Python
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1150 build number and date as strings.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1151
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1152 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1153 return _sys_version()[1:3]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1154
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1155 def python_compiler():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1156
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1157 """ Returns a string identifying the compiler used for compiling
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1158 Python.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1159
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1160 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1161 return _sys_version()[3]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1162
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1163 ### The Opus Magnum of platform strings :-)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1164
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1165 _platform_cache = {}
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1166
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1167 def platform(aliased=0, terse=0):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1168
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1169 """ Returns a single string identifying the underlying platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1170 with as much useful information as possible (but no more :).
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1171
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1172 The output is intended to be human readable rather than
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1173 machine parseable. It may look different on different
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1174 platforms and this is intended.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1175
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1176 If "aliased" is true, the function will use aliases for
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1177 various platforms that report system names which differ from
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1178 their common names, e.g. SunOS will be reported as
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1179 Solaris. The system_alias() function is used to implement
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1180 this.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1181
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1182 Setting terse to true causes the function to return only the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1183 absolute minimum information needed to identify the platform.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1184
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1185 """
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1186 result = _platform_cache.get((aliased, terse), None)
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1187 if result is not None:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1188 return result
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1189
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1190 # Get uname information and then apply platform specific cosmetics
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1191 # to it...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1192 system,node,release,version,machine,processor = uname()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1193 if machine == processor:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1194 processor = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1195 if aliased:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1196 system,release,version = system_alias(system,release,version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1197
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1198 if system == 'Windows':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1199 # MS platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1200 rel,vers,csd,ptype = win32_ver(version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1201 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1202 platform = _platform(system,release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1203 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1204 platform = _platform(system,release,version,csd)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1205
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1206 elif system in ('Linux',):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1207 # Linux based systems
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1208 distname,distversion,distid = dist('')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1209 if distname and not terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1210 platform = _platform(system,release,machine,processor,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1211 'with',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1212 distname,distversion,distid)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1213 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1214 # If the distribution name is unknown check for libc vs. glibc
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1215 libcname,libcversion = libc_ver(sys.executable)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1216 platform = _platform(system,release,machine,processor,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1217 'with',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1218 libcname+libcversion)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1219 elif system == 'Java':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1220 # Java platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1221 r,v,vminfo,(os_name,os_version,os_arch) = java_ver()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1222 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1223 platform = _platform(system,release,version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1224 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1225 platform = _platform(system,release,version,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1226 'on',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1227 os_name,os_version,os_arch)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1228
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1229 elif system == 'MacOS':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1230 # MacOS platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1231 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1232 platform = _platform(system,release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1233 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1234 platform = _platform(system,release,machine)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1235
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1236 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1237 # Generic handler
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1238 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1239 platform = _platform(system,release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1240 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1241 bits,linkage = architecture(sys.executable)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1242 platform = _platform(system,release,machine,processor,bits,linkage)
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1243
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1244 _platform_cache[(aliased, terse)] = platform
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1245 return platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1246
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1247 ### Command line interface
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1248
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1249 if __name__ == '__main__':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1250 # Default is to print the aliased verbose platform string
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1251 terse = ('terse' in sys.argv or '--terse' in sys.argv)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1252 aliased = (not 'nonaliased' in sys.argv and not '--nonaliased' in sys.argv)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1253 print platform(aliased,terse)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1254 sys.exit(0)