diff options
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/develop.py | 76 | 
1 files changed, 46 insertions, 30 deletions
| diff --git a/indra/develop.py b/indra/develop.py index 67d1049a8a..d1875c9fb2 100755 --- a/indra/develop.py +++ b/indra/develop.py @@ -129,24 +129,6 @@ class PlatformSetup(object):                  '-DUNATTENDED:BOOL=%(unattended)s '                  '-G %(generator)r %(opts)s %(dir)r' % args) -    def run(self, command, name=None): -        '''Run a program.  If the program fails, raise an exception.''' -        ret = os.system(command) -        if ret: -            if name is None: -                name = command.split(None, 1)[0] -            if os.WIFEXITED(ret): -                event = 'exited' -                status = 'status %d' % os.WEXITSTATUS(ret) -            elif os.WIFSIGNALED(ret): -                event = 'was killed' -                status = 'signal %d' % os.WTERMSIG(ret) -            else: -                event = 'died unexpectedly (!?)' -                status = '16-bit status %d' % ret -            raise CommandError('the command %r %s with %s' % -                               (name, event, status)) -      def run_cmake(self, args=[]):          '''Run cmake.''' @@ -208,10 +190,28 @@ class PlatformSetup(object):          return os.path.isdir(os.path.join(self.script_dir, 'newsim')) +    def find_in_path(self, name, defval=None, basename=False): +        for ext in self.exe_suffixes: +            name_ext = name + ext +            if os.sep in name_ext: +                path = os.path.abspath(name_ext) +                if os.access(path, os.X_OK): +                    return [basename and os.path.basename(path) or path] +            for p in os.getenv('PATH', self.search_path).split(os.pathsep): +                path = os.path.join(p, name_ext) +                if os.access(path, os.X_OK): +                    return [basename and os.path.basename(path) or path] +        if defval: +            return [defval] +        return [] +  class UnixSetup(PlatformSetup):      '''Generic Unixy build instructions.''' +    search_path = '/usr/bin:/usr/local/bin' +    exe_suffixes = ('',) +      def __init__(self):          super(UnixSetup, self).__init__()          self.generator = 'Unix Makefiles' @@ -231,6 +231,25 @@ class UnixSetup(PlatformSetup):              cpu = 'ppc'          return cpu +    def run(self, command, name=None): +        '''Run a program.  If the program fails, raise an exception.''' +        ret = os.system(command) +        if ret: +            if name is None: +                name = command.split(None, 1)[0] +            if os.WIFEXITED(ret): +                st = os.WEXITSTATUS(ret) +                if st == 127: +                    event = 'was not found' +                else: +                    event = 'exited with status %d' % st +            elif os.WIFSIGNALED(ret): +                event = 'was killed by signal %d' % os.WTERMSIG(ret) +            else: +                event = 'died unexpectedly (!?) with 16-bit status %d' % ret +            raise CommandError('the command %r %s' % +                               (name, event)) +  class LinuxSetup(UnixSetup):      def __init__(self): @@ -258,15 +277,6 @@ class LinuxSetup(UnixSetup):          else:              return ['viewer-' + platform_build] -    def find_in_path(self, name, defval=None, basename=False): -        for p in os.getenv('PATH', '/usr/bin').split(':'): -            path = os.path.join(p, name) -            if os.access(path, os.X_OK): -                return [basename and os.path.basename(path) or path] -        if defval: -            return [defval] -        return [] -      def cmake_commandline(self, src_dir, build_dir, opts, simple):          args = dict(              dir=src_dir, @@ -457,6 +467,9 @@ class WindowsSetup(PlatformSetup):      gens['vs2005'] = gens['vc80']      gens['vs2008'] = gens['vc90'] +    search_path = r'C:\windows' +    exe_suffixes = ('.exe', '.bat', '.com') +      def __init__(self):          super(WindowsSetup, self).__init__()          self._generator = None @@ -536,15 +549,18 @@ class WindowsSetup(PlatformSetup):          return ('"%sdevenv.com" %s.sln /build %s' %                   (self.find_visual_studio(), self.project_name, self.build_type)) -    # this override of run exists because the PlatformSetup version -    # uses Unix/Mac only calls. Freakin' os module!      def run(self, command, name=None):          '''Run a program.  If the program fails, raise an exception.'''          ret = os.system(command)          if ret:              if name is None:                  name = command.split(None, 1)[0] -            raise CommandError('the command %r exited with %s' % +            path = self.find_in_path(name) +            if not path: +                ret = 'was not found' +            else: +                ret = 'exited with status %d' % ret +            raise CommandError('the command %r %s' %                                 (name, ret))      def run_cmake(self, args=[]): | 
