armvixl | db64434 | 2015-07-21 11:37:10 +0100 | [diff] [blame] | 1 | # Copyright 2015, ARM Limited |
armvixl | ad96eda | 2013-06-14 11:42:37 +0100 | [diff] [blame] | 2 | # All rights reserved. |
| 3 | # |
| 4 | # Redistribution and use in source and binary forms, with or without |
| 5 | # modification, are permitted provided that the following conditions are met: |
| 6 | # |
| 7 | # * Redistributions of source code must retain the above copyright notice, |
| 8 | # this list of conditions and the following disclaimer. |
| 9 | # * Redistributions in binary form must reproduce the above copyright notice, |
| 10 | # this list of conditions and the following disclaimer in the documentation |
| 11 | # and/or other materials provided with the distribution. |
| 12 | # * Neither the name of ARM Limited nor the names of its contributors may be |
| 13 | # used to endorse or promote products derived from this software without |
| 14 | # specific prior written permission. |
| 15 | # |
| 16 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND |
| 17 | # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| 18 | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 19 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE |
| 20 | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 21 | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 22 | # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| 23 | # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| 24 | # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 25 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 26 | |
armvixl | db64434 | 2015-07-21 11:37:10 +0100 | [diff] [blame] | 27 | import glob |
armvixl | 6e2c827 | 2015-03-31 11:04:14 +0100 | [diff] [blame] | 28 | import os |
armvixl | ad96eda | 2013-06-14 11:42:37 +0100 | [diff] [blame] | 29 | import re |
armvixl | db64434 | 2015-07-21 11:37:10 +0100 | [diff] [blame] | 30 | import shlex |
| 31 | import subprocess |
| 32 | import sys |
| 33 | |
| 34 | |
| 35 | def ListCCFilesWithoutExt(path): |
| 36 | return map(lambda x : os.path.splitext(os.path.basename(x))[0], |
| 37 | glob.glob(os.path.join(path, '*.cc'))) |
armvixl | ad96eda | 2013-06-14 11:42:37 +0100 | [diff] [blame] | 38 | |
| 39 | |
| 40 | def abort(message): |
| 41 | print('ABORTING: ' + message) |
| 42 | sys.exit(1) |
| 43 | |
| 44 | |
| 45 | # Emulate python3 subprocess.getstatusoutput. |
armvixl | db64434 | 2015-07-21 11:37:10 +0100 | [diff] [blame] | 46 | def getstatusoutput(command, shell=False): |
armvixl | ad96eda | 2013-06-14 11:42:37 +0100 | [diff] [blame] | 47 | try: |
| 48 | args = shlex.split(command) |
armvixl | db64434 | 2015-07-21 11:37:10 +0100 | [diff] [blame] | 49 | output = subprocess.check_output(args, stderr=subprocess.STDOUT, shell=shell) |
armvixl | ad96eda | 2013-06-14 11:42:37 +0100 | [diff] [blame] | 50 | return 0, output.rstrip('\n') |
| 51 | except subprocess.CalledProcessError as e: |
| 52 | return e.returncode, e.output.rstrip('\n') |
| 53 | |
| 54 | |
armvixl | 0f35e36 | 2016-05-10 13:57:58 +0100 | [diff] [blame^] | 55 | def IsCommandAvailable(command): |
| 56 | retcode, unused_output = getstatusoutput('which %s' % command) |
| 57 | return retcode == 0 |
| 58 | |
| 59 | |
armvixl | db64434 | 2015-07-21 11:37:10 +0100 | [diff] [blame] | 60 | def ensure_dir(path_name): |
| 61 | if not os.path.exists(path_name): |
| 62 | os.makedirs(path_name) |
armvixl | 6e2c827 | 2015-03-31 11:04:14 +0100 | [diff] [blame] | 63 | |
| 64 | |
armvixl | db64434 | 2015-07-21 11:37:10 +0100 | [diff] [blame] | 65 | # Check that the specified program is available. |
| 66 | def require_program(program_name): |
| 67 | rc, out = getstatusoutput('which %s' % program_name) |
| 68 | if rc != 0: |
| 69 | print('ERROR: The required program %s was not found.' % program_name) |
| 70 | sys.exit(rc) |