Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 1 | # Copyright 2012 the V8 project authors. All rights reserved. |
| 2 | # Redistribution and use in source and binary forms, with or without |
| 3 | # modification, are permitted provided that the following conditions are |
| 4 | # met: |
| 5 | # |
| 6 | # * Redistributions of source code must retain the above copyright |
| 7 | # notice, this list of conditions and the following disclaimer. |
| 8 | # * Redistributions in binary form must reproduce the above |
| 9 | # copyright notice, this list of conditions and the following |
| 10 | # disclaimer in the documentation and/or other materials provided |
| 11 | # with the distribution. |
| 12 | # * Neither the name of Google Inc. nor the names of its |
| 13 | # contributors may be used to endorse or promote products derived |
| 14 | # from this software without specific prior written permission. |
| 15 | # |
| 16 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 17 | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 18 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 19 | # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 20 | # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 21 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 22 | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 23 | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 24 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 26 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | |
| 28 | |
| 29 | import os |
| 30 | from os.path import exists |
| 31 | from os.path import isdir |
| 32 | from os.path import join |
| 33 | import platform |
| 34 | import re |
Ben Murdoch | 4a90d5f | 2016-03-22 12:00:34 +0000 | [diff] [blame] | 35 | import subprocess |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 36 | import urllib2 |
| 37 | |
| 38 | |
| 39 | def GetSuitePaths(test_root): |
| 40 | return [ f for f in os.listdir(test_root) if isdir(join(test_root, f)) ] |
| 41 | |
| 42 | |
| 43 | # Reads a file into an array of strings |
| 44 | def ReadLinesFrom(name): |
| 45 | lines = [] |
| 46 | with open(name) as f: |
| 47 | for line in f: |
| 48 | if line.startswith('#'): continue |
| 49 | if '#' in line: |
| 50 | line = line[:line.find('#')] |
| 51 | line = line.strip() |
| 52 | if not line: continue |
| 53 | lines.append(line) |
| 54 | return lines |
| 55 | |
| 56 | |
| 57 | def GuessOS(): |
| 58 | system = platform.system() |
| 59 | if system == 'Linux': |
| 60 | return 'linux' |
| 61 | elif system == 'Darwin': |
| 62 | return 'macos' |
| 63 | elif system.find('CYGWIN') >= 0: |
| 64 | return 'cygwin' |
| 65 | elif system == 'Windows' or system == 'Microsoft': |
| 66 | # On Windows Vista platform.system() can return 'Microsoft' with some |
| 67 | # versions of Python, see http://bugs.python.org/issue1082 |
| 68 | return 'windows' |
| 69 | elif system == 'FreeBSD': |
| 70 | return 'freebsd' |
| 71 | elif system == 'OpenBSD': |
| 72 | return 'openbsd' |
| 73 | elif system == 'SunOS': |
| 74 | return 'solaris' |
| 75 | elif system == 'NetBSD': |
| 76 | return 'netbsd' |
Ben Murdoch | 4a90d5f | 2016-03-22 12:00:34 +0000 | [diff] [blame] | 77 | elif system == 'AIX': |
| 78 | return 'aix' |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 79 | else: |
| 80 | return None |
| 81 | |
| 82 | |
| 83 | def UseSimulator(arch): |
| 84 | machine = platform.machine() |
| 85 | return (machine and |
| 86 | (arch == "mipsel" or arch == "arm" or arch == "arm64") and |
| 87 | not arch.startswith(machine)) |
| 88 | |
| 89 | |
| 90 | # This will default to building the 32 bit VM even on machines that are |
| 91 | # capable of running the 64 bit VM. |
| 92 | def DefaultArch(): |
| 93 | machine = platform.machine() |
| 94 | machine = machine.lower() # Windows 7 capitalizes 'AMD64'. |
| 95 | if machine.startswith('arm'): |
| 96 | return 'arm' |
| 97 | elif (not machine) or (not re.match('(x|i[3-6])86$', machine) is None): |
| 98 | return 'ia32' |
| 99 | elif machine == 'i86pc': |
| 100 | return 'ia32' |
| 101 | elif machine == 'x86_64': |
| 102 | return 'ia32' |
| 103 | elif machine == 'amd64': |
| 104 | return 'ia32' |
Ben Murdoch | da12d29 | 2016-06-02 14:46:10 +0100 | [diff] [blame^] | 105 | elif machine == 's390x': |
| 106 | return 's390' |
Ben Murdoch | 4a90d5f | 2016-03-22 12:00:34 +0000 | [diff] [blame] | 107 | elif machine == 'ppc64': |
| 108 | return 'ppc' |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 109 | else: |
| 110 | return None |
| 111 | |
| 112 | |
| 113 | def GuessWordsize(): |
| 114 | if '64' in platform.machine(): |
| 115 | return '64' |
| 116 | else: |
| 117 | return '32' |
| 118 | |
| 119 | |
| 120 | def IsWindows(): |
| 121 | return GuessOS() == 'windows' |
| 122 | |
| 123 | |
| 124 | def URLRetrieve(source, destination): |
| 125 | """urllib is broken for SSL connections via a proxy therefore we |
| 126 | can't use urllib.urlretrieve().""" |
Ben Murdoch | 4a90d5f | 2016-03-22 12:00:34 +0000 | [diff] [blame] | 127 | if IsWindows(): |
| 128 | try: |
| 129 | # In python 2.7.6 on windows, urlopen has a problem with redirects. |
| 130 | # Try using curl instead. Note, this is fixed in 2.7.8. |
| 131 | subprocess.check_call(["curl", source, '-k', '-L', '-o', destination]) |
| 132 | return |
| 133 | except: |
| 134 | # If there's no curl, fall back to urlopen. |
| 135 | print "Curl is currently not installed. Falling back to python." |
| 136 | pass |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 137 | with open(destination, 'w') as f: |
| 138 | f.write(urllib2.urlopen(source).read()) |