[PATCH] sb: Use shebang env python
Gedare Bloom
gedare at rtems.org
Wed Aug 26 20:01:51 UTC 2020
On Wed, Aug 26, 2020 at 9:10 AM Gedare Bloom <gedare at rtems.org> wrote:
>
> thanks, some of this is rewriting shell script to python, and fixing
> up imports. I'd prefer to have these separated, but it's probably fine
> I took a quick skim over all of it.
>
It seems this commit broke the RSB.
> On Tue, Aug 25, 2020 at 5:24 AM <chrisj at rtems.org> wrote:
> >
> > From: Chris Johns <chrisj at rtems.org>
> >
> > Closes #4037
> > ---
> > source-builder/pkg-config | 236 +++++++++++++++++++++++---
> > source-builder/sb-check | 24 +--
> > source-builder/sb-defaults | 23 +--
> > source-builder/sb-get-sources | 23 +--
> > source-builder/sb-reports | 23 +--
> > source-builder/sb-rtems-config | 23 +--
> > source-builder/sb-set-builder | 22 +--
> > source-builder/sb-track | 22 +--
> > source-builder/sb/build.py | 22 +--
> > source-builder/sb/check.py | 16 +-
> > source-builder/sb/cmd-check.py | 29 ----
> > source-builder/sb/cmd-defaults.py | 29 ----
> > source-builder/sb/cmd-get-sources.py | 29 ----
> > source-builder/sb/cmd-pkg-config.py | 220 ------------------------
> > source-builder/sb/cmd-reports.py | 29 ----
> > source-builder/sb/cmd-rtems-config.py | 29 ----
> > source-builder/sb/cmd-set-builder.py | 29 ----
> > source-builder/sb/cmd-track.py | 29 ----
> > source-builder/sb/config.py | 16 +-
> > source-builder/sb/cvs.py | 10 +-
> > source-builder/sb/darwin.py | 2 +-
> > source-builder/sb/download.py | 14 +-
> > source-builder/sb/ereport.py | 4 +-
> > source-builder/sb/execute.py | 4 +-
> > source-builder/sb/freebsd.py | 6 +-
> > source-builder/sb/getsources.py | 12 +-
> > source-builder/sb/git.py | 13 +-
> > source-builder/sb/linux.py | 4 +-
> > source-builder/sb/log.py | 2 +-
> > source-builder/sb/macros.py | 4 +-
> > source-builder/sb/mailer.py | 6 +-
> > source-builder/sb/netbsd.py | 4 +-
> > source-builder/sb/options.py | 44 +++--
> > source-builder/sb/path.py | 4 +-
> > source-builder/sb/pkgconfig.py | 9 +-
> > source-builder/sb/python-wrapper.sh | 39 -----
> > source-builder/sb/reports.py | 22 +--
> > source-builder/sb/rtemsconfig.py | 10 +-
> > source-builder/sb/setbuilder.py | 22 +--
> > source-builder/sb/shell.py | 8 +-
> > source-builder/sb/simhost.py | 36 ++--
> > source-builder/sb/solaris.py | 6 +-
> > source-builder/sb/sources.py | 2 +-
> > source-builder/sb/track.py | 14 +-
> > source-builder/sb/version.py | 6 +-
> > source-builder/sb/windows.py | 6 +-
> > 46 files changed, 471 insertions(+), 715 deletions(-)
> > delete mode 100755 source-builder/sb/cmd-check.py
> > delete mode 100755 source-builder/sb/cmd-defaults.py
> > delete mode 100755 source-builder/sb/cmd-get-sources.py
> > delete mode 100755 source-builder/sb/cmd-pkg-config.py
> > delete mode 100755 source-builder/sb/cmd-reports.py
> > delete mode 100755 source-builder/sb/cmd-rtems-config.py
> > delete mode 100755 source-builder/sb/cmd-set-builder.py
> > delete mode 100755 source-builder/sb/cmd-track.py
> > delete mode 100644 source-builder/sb/python-wrapper.sh
> >
> > diff --git a/source-builder/pkg-config b/source-builder/pkg-config
> > index 65ee307..10db546 100755
> > --- a/source-builder/pkg-config
> > +++ b/source-builder/pkg-config
> > @@ -1,27 +1,221 @@
> > -#! /bin/sh
> > +#! /usr/bin/env python
> > #
> > # RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2018 Chris Johns (chrisj at rtems.org)
> > +# Copyright 2014-2016 Chris Johns (chrisj at rtems.org)
> > # All rights reserved.
> > #
> > # This file is part of the RTEMS Tools package in 'rtems-tools'.
> > #
> > -# Permission to use, copy, modify, and/or distribute this software for any
> > -# purpose with or without fee is hereby granted, provided that the above
> > -# copyright notice and this permission notice appear in all copies.
> > -#
> > -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> > -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> > -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> > -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> > -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -#
> > -set -e
> > -base=$(dirname $0)
> > -PYTHON_CMD=${base}/sb/cmd-pkg-config.py
> > -if test -f ${base}/sb/python-wrapper.sh; then
> > - . ${base}/sb/python-wrapper.sh
> > -fi
> > -echo "error: python wrapper not found"
> > +# Redistribution and use in source and binary forms, with or without
> > +# modification, are permitted provided that the following conditions are met:
> > +#
> > +# 1. Redistributions of source code must retain the above copyright notice,
> > +# this list of conditions and the following disclaimer.
> > +#
> > +# 2. Redistributions in binary form must reproduce the above copyright notice,
> > +# this list of conditions and the following disclaimer in the documentation
> > +# and/or other materials provided with the distribution.
> > +#
> > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
> > +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> > +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> > +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
> > +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> > +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
> > +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> > +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> > +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> > +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> > +# POSSIBILITY OF SUCH DAMAGE.
> > +#
> > +
> > +from __future__ import print_function
> > +
> > +import os
> > +import sys
> > +
> > +base = os.path.dirname(sys.argv[0])
> > +
> > +try:
> > + import argparse
> > +except:
> > + sys.path.insert(0, base + '/sb/imports')
> > + try:
> > + import argparse
> > + except:
> > + print("Incorrect Source Builder installation", file = sys.stderr)
> > + sys.exit(1)
> > +
> > +import sb.pkgconfig
> > +
> > +#
> > +# Make trace true to get a file of what happens and what is being asked.
> > +#
> > +trace = False
> > +trace_stdout = False
> > +logfile = 'pkg-config.log'
> > +out = None
> > +srcfd = None
> > +
> > +#
> > +# Write all the package source parsed to a single file.
> > +#
> > +trace_src = False
> > +if trace_src:
> > + srcfd = open('pkg-src.txt', 'w')
> > +
> > +def src(text):
> > + if srcfd:
> > + srcfd.writelines(text)
> > +
> > +def log(s, lf = True):
> > + global trace, logfile, out
> > + if trace:
> > + if out is None:
> > + if logfile:
> > + out = open(logfile, 'a')
> > + else:
> > + out = sys.stdout
> > + if lf:
> > + if out != sys.stdout and trace_stdout:
> > + print(s)
> > + print(s, file = out)
> > + else:
> > + if out != sys.stdout and trace_stdout:
> > + print(s, end = '')
> > + sys.stdout.flush()
> > + print(s, end = '', file = out)
> > +
> > +def run(argv):
> > +
> > + class version_action(argparse.Action):
> > + def __call__(self, parser, namespace, values, option_string = None):
> > + parts = values[0].strip().split('.')
> > + for p in parts:
> > + if not p.isdigit():
> > + raise error('invalid version value: %s' % (values))
> > + setattr(namespace, self.dest, '.'.join(parts))
> > +
> > + ec = 0
> > +
> > + opts = argparse.ArgumentParser(prog = 'pkg-config', description = 'Package Configuration.')
> > + opts.add_argument('libraries', metavar='lib', type = str, help = 'a library', nargs = '*')
> > + opts.add_argument('--modversion', dest = 'modversion', action = 'store', default = None,
> > + help = 'Requests that the version information of the libraries.')
> > + opts.add_argument('--print-errors', dest = 'print_errors', action = 'store_true',
> > + default = False,
> > + help = 'Print any errors.')
> > + opts.add_argument('--short-errors', dest = 'short_errors', action = 'store_true',
> > + default = False,
> > + help = 'Make error messages short.')
> > + opts.add_argument('--silence-errors', dest = 'silence_errors', action = 'store_true',
> > + default = False,
> > + help = 'Do not print any errors.')
> > + opts.add_argument('--errors-to-stdout', dest = 'errors_to_stdout', action = 'store_true',
> > + default = False,
> > + help = 'Print errors to stdout rather than stderr.')
> > + opts.add_argument('--cflags', dest = 'cflags', action = 'store_true',
> > + default = False,
> > + help = 'This prints pre-processor and compile flags required to' \
> > + ' compile the package(s)')
> > + opts.add_argument('--libs', dest = 'libs', action = 'store_true',
> > + default = False,
> > + help = 'This option is identical to "--cflags", only it prints the' \
> > + ' link flags.')
> > + opts.add_argument('--libs-only-L', dest = 'libs_only_L', action = 'store_true',
> > + default = False,
> > + help = 'This prints the -L/-R part of "--libs".')
> > + opts.add_argument('--libs-only-l', dest = 'libs_only_l', action = 'store_true',
> > + default = False,
> > + help = 'This prints the -l part of "--libs".')
> > + opts.add_argument('--variable', dest = 'variable', action = 'store',
> > + nargs = 1, default = None,
> > + help = 'This returns the value of a variable.')
> > + opts.add_argument('--define-variable', dest = 'define_variable', action = 'store',
> > + nargs = 1, default = None,
> > + help = 'This sets a global value for a variable')
> > + opts.add_argument('--uninstalled', dest = 'uninstalled', action = 'store_true',
> > + default = False,
> > + help = 'Ignored')
> > + opts.add_argument('--atleast-pkgconfig-version', dest = 'atleast_pkgconfig_version',
> > + action = 'store', nargs = 1, default = None,
> > + help = 'Check the version of package config. Always ok.')
> > + opts.add_argument('--exists', dest = 'exists', action = 'store_true',
> > + default = False,
> > + help = 'Test if a library is present')
> > + opts.add_argument('--atleast-version', dest = 'atleast_version',
> > + action = version_action, nargs = 1, default = None,
> > + help = 'The package is at least this version.')
> > + opts.add_argument('--exact-version', dest = 'exact_version', action = version_action,
> > + nargs = 1, default = None,
> > + help = 'The package is the exact version.')
> > + opts.add_argument('--max-version', dest = 'max_version', action = version_action,
> > + nargs = 1, default = None,
> > + help = 'The package is no later than this version.')
> > + opts.add_argument('--msvc-syntax', dest = 'msvc_syntax', action = 'store_true',
> > + default = False,
> > + help = 'Ignored')
> > + opts.add_argument('--dont-define-prefix', dest = 'dont_define_prefix', action = 'store_true',
> > + default = False,
> > + help = 'Ignored')
> > + opts.add_argument('--prefix-variable', dest = 'prefix', action = 'store',
> > + nargs = 1, default = sb.pkgconfig.default_prefix(),
> > + help = 'Define the prefix.')
> > + opts.add_argument('--static', dest = 'static', action = 'store_true',
> > + default = False,
> > + help = 'Output libraries suitable for static linking')
> > + opts.add_argument('--dump', dest = 'dump', action = 'store_true',
> > + default = False,
> > + help = 'Dump the package if one is found.')
> > +
> > + args = opts.parse_args(argv)
> > +
> > + if (args.exists and (args.exact_version or args.max_version)) or \
> > + (args.exact_version and (args.exists or args.max_version)) or \
> > + (args.max_version and (args.exists or args.exact_version)):
> > + raise error('only one of --exists, --exact-version, or --max-version')
> > +
> > + if args.dont_define_prefix:
> > + args.prefix = sb.pkgconfig.default_prefix(False)
> > +
> > + exists = False
> > +
> > + ec = 1
> > +
> > + if args.atleast_pkgconfig_version:
> > + ec = 0
> > + else:
> > + ec, pkg, flags = sb.pkgconfig.check_package(args.libraries, args, log, src)
> > + if ec == 0:
> > + if args.cflags:
> > + if len(flags['cflags']):
> > + print(flags['cflags'])
> > + log('cflags: %s' % (flags['cflags']))
> > + else:
> > + log('cflags: empty')
> > + if args.libs:
> > + if len(flags['libs']):
> > + print(flags['libs'])
> > + log('libs: %s' % (flags['libs']))
> > + else:
> > + log('libs: empty')
> > +
> > + #pkgconfig.package.dump_loaded()
> > +
> > + return ec
> > +
> > +try:
> > + log('-' * 40)
> > + log('pkg-config', lf = False)
> > + for a in sys.argv[2:]:
> > + log(' "%s"' % (a), lf = False)
> > + log('')
> > + ec = run(sys.argv[1:])
> > + log('ec = %d' % (ec))
> > +except ImportError:
> > + print("incorrect package config installation", file = sys.stderr)
> > + sys.exit(1)
> > +except sb.pkgconfig.error as e:
> > + print('error: %s' % (e), file = sys.stderr)
> > + sys.exit(1)
> > +sys.exit(ec)
> > diff --git a/source-builder/sb-check b/source-builder/sb-check
> > index b092697..b75767e 100755
> > --- a/source-builder/sb-check
> > +++ b/source-builder/sb-check
> > @@ -1,7 +1,7 @@
> > -#! /bin/sh
> > +#! /usr/bin/env python
> > #
> > # RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2018 Chris Johns (chrisj at rtems.org)
> > +# Copyright 2010-2012 Chris Johns (chrisj at rtems.org)
> > # All rights reserved.
> > #
> > # This file is part of the RTEMS Tools package in 'rtems-tools'.
> > @@ -17,11 +17,15 @@
> > # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -#
> > -set -e
> > -base=$(dirname $0)
> > -PYTHON_CMD=${base}/sb/cmd-check.py
> > -if test -f ${base}/sb/python-wrapper.sh; then
> > - . ${base}/sb/python-wrapper.sh
> > -fi
> > -echo "error: python wrapper not found"
> > +
> > +from __future__ import print_function
> > +
> > +import sb.check
> > +
> > +try:
> > + import sb.check
> > + sb.check.run()
> > +except ImportError:
> > + import sys
> > + print("Incorrect Source Builder installation", file = sys.stderr)
> > + sys.exit(1)
> > diff --git a/source-builder/sb-defaults b/source-builder/sb-defaults
> > index 25437ba..2fd2121 100755
> > --- a/source-builder/sb-defaults
> > +++ b/source-builder/sb-defaults
> > @@ -1,7 +1,7 @@
> > -#! /bin/sh
> > +#! /usr/bin/env python
> > #
> > # RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2018 Chris Johns (chrisj at rtems.org)
> > +# Copyright 2010-2013 Chris Johns (chrisj at rtems.org)
> > # All rights reserved.
> > #
> > # This file is part of the RTEMS Tools package in 'rtems-tools'.
> > @@ -17,11 +17,14 @@
> > # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -#
> > -set -e
> > -base=$(dirname $0)
> > -PYTHON_CMD=${base}/sb/cmd-defaults.py
> > -if test -f ${base}/sb/python-wrapper.sh; then
> > - . ${base}/sb/python-wrapper.sh
> > -fi
> > -echo "error: python wrapper not found"
> > +
> > +from __future__ import print_function
> > +
> > +import sys
> > +
> > +try:
> > + import sb.options
> > + sb.options.run(sys.argv)
> > +except ImportError:
> > + print("Incorrect Source Builder installation", file = sys.stderr)
> > + sys.exit(1)
> > diff --git a/source-builder/sb-get-sources b/source-builder/sb-get-sources
> > index d9f03b7..97ee419 100755
> > --- a/source-builder/sb-get-sources
> > +++ b/source-builder/sb-get-sources
> > @@ -1,7 +1,7 @@
> > -#! /bin/sh
> > +#! /usr/bin/env python
> > #
> > # RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2019 Chris Johns (chrisj at rtems.org)
> > +# Copyright 2010-2019 Chris Johns (chrisj at rtems.org)
> > # All rights reserved.
> > #
> > # This file is part of the RTEMS Tools package in 'rtems-tools'.
> > @@ -17,11 +17,14 @@
> > # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -#
> > -set -e
> > -base=$(dirname $0)
> > -PYTHON_CMD=${base}/sb/cmd-get-sources.py
> > -if test -f ${base}/sb/python-wrapper.sh; then
> > - . ${base}/sb/python-wrapper.sh
> > -fi
> > -echo "error: python wrapper not found"
> > +
> > +from __future__ import print_function
> > +
> > +
> > +try:
> > + import sb.getsources
> > + sb.getsources.run()
> > +except ImportError:
> > + import sys
> > + print("Incorrect Source Builder installation", file = sys.stderr)
> > + sys.exit(1)
> > diff --git a/source-builder/sb-reports b/source-builder/sb-reports
> > index 5fb02d1..194c4ab 100755
> > --- a/source-builder/sb-reports
> > +++ b/source-builder/sb-reports
> > @@ -1,7 +1,7 @@
> > -#! /bin/sh
> > +#! /usr/bin/env python
> > #
> > # RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2018 Chris Johns (chrisj at rtems.org)
> > +# Copyright 2010-2013 Chris Johns (chrisj at rtems.org)
> > # All rights reserved.
> > #
> > # This file is part of the RTEMS Tools package in 'rtems-tools'.
> > @@ -17,11 +17,14 @@
> > # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -#
> > -set -e
> > -base=$(dirname $0)
> > -PYTHON_CMD=${base}/sb/cmd-reports.py
> > -if test -f ${base}/sb/python-wrapper.sh; then
> > - . ${base}/sb/python-wrapper.sh
> > -fi
> > -echo "error: python wrapper not found"
> > +
> > +from __future__ import print_function
> > +
> > +import sys
> > +
> > +try:
> > + import sb.reports
> > + sb.reports.run(sys.argv)
> > +except ImportError:
> > + print("Incorrect Source Builder installation", file = sys.stderr)
> > + sys.exit(1)
> > diff --git a/source-builder/sb-rtems-config b/source-builder/sb-rtems-config
> > index 66a95f7..a84b9c8 100755
> > --- a/source-builder/sb-rtems-config
> > +++ b/source-builder/sb-rtems-config
> > @@ -1,7 +1,7 @@
> > -#! /bin/sh
> > +#! /usr/bin/env python
> > #
> > # RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2018 Chris Johns (chrisj at rtems.org)
> > +# Copyright 2010-2012 Chris Johns (chrisj at rtems.org)
> > # All rights reserved.
> > #
> > # This file is part of the RTEMS Tools package in 'rtems-tools'.
> > @@ -17,11 +17,14 @@
> > # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -#
> > -set -e
> > -base=$(dirname $0)
> > -PYTHON_CMD=${base}/sb/cmd-rtems-config.py
> > -if test -f ${base}/sb/python-wrapper.sh; then
> > - . ${base}/sb/python-wrapper.sh
> > -fi
> > -echo "error: python wrapper not found"
> > +
> > +from __future__ import print_function
> > +
> > +import sys
> > +
> > +try:
> > + import sb.rtemsconfig
> > + sb.rtemsconfig.run(sys.argv)
> > +except ImportError:
> > + print("Incorrect Source Builder installation", file = sys.stderr)
> > + sys.exit(1)
> > diff --git a/source-builder/sb-set-builder b/source-builder/sb-set-builder
> > index 6a196fe..96dd919 100755
> > --- a/source-builder/sb-set-builder
> > +++ b/source-builder/sb-set-builder
> > @@ -1,7 +1,7 @@
> > -#! /bin/sh
> > +#! /usr/bin/env python
> > #
> > # RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2018 Chris Johns (chrisj at rtems.org)
> > +# Copyright 2010-2012 Chris Johns (chrisj at rtems.org)
> > # All rights reserved.
> > #
> > # This file is part of the RTEMS Tools package in 'rtems-tools'.
> > @@ -17,11 +17,13 @@
> > # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -#
> > -set -e
> > -base=$(dirname $0)
> > -PYTHON_CMD=${base}/sb/cmd-set-builder.py
> > -if test -f ${base}/sb/python-wrapper.sh; then
> > - . ${base}/sb/python-wrapper.sh
> > -fi
> > -echo "error: python wrapper not found"
> > +
> > +from __future__ import print_function
> > +
> > +try:
> > + import sb.setbuilder
> > + sb.setbuilder.run()
> > +except ImportError:
> > + import sys
> > + print("Incorrect Source Builder installation", file = sys.stderr)
> > + sys.exit(1)
> > diff --git a/source-builder/sb-track b/source-builder/sb-track
> > index a739978..64daeb8 100755
> > --- a/source-builder/sb-track
> > +++ b/source-builder/sb-track
> > @@ -1,7 +1,7 @@
> > -#! /bin/sh
> > +#! /usr/bin/env python
> > #
> > # RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2019 Chris Johns (chrisj at rtems.org)
> > +# Copyright 2010-2019 Chris Johns (chrisj at rtems.org)
> > # All rights reserved.
> > #
> > # This file is part of the RTEMS Tools package in 'rtems-tools'.
> > @@ -17,11 +17,13 @@
> > # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -#
> > -set -e
> > -base=$(dirname $0)
> > -PYTHON_CMD=${base}/sb/cmd-track.py
> > -if test -f ${base}/sb/python-wrapper.sh; then
> > - . ${base}/sb/python-wrapper.sh
> > -fi
> > -echo "error: python wrapper not found"
> > +
> > +from __future__ import print_function
> > +
> > +try:
> > + import sb.track
> > + sb.track.run()
> > +except ImportError:
> > + import sys
> > + print("Incorrect Source Builder installation", file = sys.stderr)
> > + sys.exit(1)
> > diff --git a/source-builder/sb/build.py b/source-builder/sb/build.py
> > index cfb7d8c..f3253dd 100644
> > --- a/source-builder/sb/build.py
> > +++ b/source-builder/sb/build.py
> > @@ -33,17 +33,17 @@ import stat
> > import sys
> >
> > try:
> > - import check
> > - import config
> > - import download
> > - import error
> > - import ereport
> > - import execute
> > - import log
> > - import options
> > - import path
> > - import sources
> > - import version
> > + from . import check
> > + from . import config
> > + from . import download
> > + from . import error
> > + from . import ereport
> > + from . import execute
> > + from . import log
> > + from . import options
> > + from . import path
> > + from . import sources
> > + from . import version
> > except KeyboardInterrupt:
> > print('abort: user terminated')
> > sys.exit(1)
> > diff --git a/source-builder/sb/check.py b/source-builder/sb/check.py
> > index be808ea..7e23223 100644
> > --- a/source-builder/sb/check.py
> > +++ b/source-builder/sb/check.py
> > @@ -23,16 +23,16 @@
> >
> > from __future__ import print_function
> >
> > -import os
> > -
> > -import error
> > -import execute
> > import fnmatch
> > -import log
> > -import options
> > -import path
> > +import os
> > import re
> > -import version
> > +
> > +from . import error
> > +from . import execute
> > +from . import log
> > +from . import options
> > +from . import path
> > +from . import version
> >
> > def _check_none(_opts, macro, value, constraint):
> > return True
> > diff --git a/source-builder/sb/cmd-check.py b/source-builder/sb/cmd-check.py
> > deleted file mode 100755
> > index 4525dbb..0000000
> > --- a/source-builder/sb/cmd-check.py
> > +++ /dev/null
> > @@ -1,29 +0,0 @@
> > -#
> > -# RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2010-2012 Chris Johns (chrisj at rtems.org)
> > -# All rights reserved.
> > -#
> > -# This file is part of the RTEMS Tools package in 'rtems-tools'.
> > -#
> > -# Permission to use, copy, modify, and/or distribute this software for any
> > -# purpose with or without fee is hereby granted, provided that the above
> > -# copyright notice and this permission notice appear in all copies.
> > -#
> > -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> > -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> > -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> > -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> > -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -
> > -from __future__ import print_function
> > -
> > -import sys, os
> > -
> > -try:
> > - import check
> > - check.run()
> > -except ImportError:
> > - print("Incorrect Source Builder installation", file = sys.stderr)
> > - sys.exit(1)
> > diff --git a/source-builder/sb/cmd-defaults.py b/source-builder/sb/cmd-defaults.py
> > deleted file mode 100755
> > index 0b2b357..0000000
> > --- a/source-builder/sb/cmd-defaults.py
> > +++ /dev/null
> > @@ -1,29 +0,0 @@
> > -#
> > -# RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2010-2013 Chris Johns (chrisj at rtems.org)
> > -# All rights reserved.
> > -#
> > -# This file is part of the RTEMS Tools package in 'rtems-tools'.
> > -#
> > -# Permission to use, copy, modify, and/or distribute this software for any
> > -# purpose with or without fee is hereby granted, provided that the above
> > -# copyright notice and this permission notice appear in all copies.
> > -#
> > -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> > -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> > -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> > -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> > -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -
> > -from __future__ import print_function
> > -
> > -import sys, os
> > -
> > -try:
> > - import options
> > - options.run(sys.argv)
> > -except ImportError:
> > - print("Incorrect Source Builder installation", file = sys.stderr)
> > - sys.exit(1)
> > diff --git a/source-builder/sb/cmd-get-sources.py b/source-builder/sb/cmd-get-sources.py
> > deleted file mode 100755
> > index 480e81d..0000000
> > --- a/source-builder/sb/cmd-get-sources.py
> > +++ /dev/null
> > @@ -1,29 +0,0 @@
> > -#
> > -# RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2010-2019 Chris Johns (chrisj at rtems.org)
> > -# All rights reserved.
> > -#
> > -# This file is part of the RTEMS Tools package in 'rtems-tools'.
> > -#
> > -# Permission to use, copy, modify, and/or distribute this software for any
> > -# purpose with or without fee is hereby granted, provided that the above
> > -# copyright notice and this permission notice appear in all copies.
> > -#
> > -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> > -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> > -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> > -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> > -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -
> > -from __future__ import print_function
> > -
> > -import sys, os
> > -
> > -try:
> > - import getsources
> > - getsources.run()
> > -except ImportError:
> > - print("Incorrect Source Builder installation", file = sys.stderr)
> > - sys.exit(1)
> > diff --git a/source-builder/sb/cmd-pkg-config.py b/source-builder/sb/cmd-pkg-config.py
> > deleted file mode 100755
> > index 68c67cf..0000000
> > --- a/source-builder/sb/cmd-pkg-config.py
> > +++ /dev/null
> > @@ -1,220 +0,0 @@
> > -#
> > -# RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2014-2016 Chris Johns (chrisj at rtems.org)
> > -# All rights reserved.
> > -#
> > -# This file is part of the RTEMS Tools package in 'rtems-tools'.
> > -#
> > -# Redistribution and use in source and binary forms, with or without
> > -# modification, are permitted provided that the following conditions are met:
> > -#
> > -# 1. Redistributions of source code must retain the above copyright notice,
> > -# this list of conditions and the following disclaimer.
> > -#
> > -# 2. Redistributions in binary form must reproduce the above copyright notice,
> > -# this list of conditions and the following disclaimer in the documentation
> > -# and/or other materials provided with the distribution.
> > -#
> > -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
> > -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> > -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> > -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
> > -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> > -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
> > -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> > -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> > -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> > -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> > -# POSSIBILITY OF SUCH DAMAGE.
> > -#
> > -
> > -from __future__ import print_function
> > -
> > -import os
> > -import sys
> > -
> > -base = os.path.dirname(sys.argv[1])
> > -
> > -try:
> > - import argparse
> > -except:
> > - sys.path.insert(0, base + '/sb/imports')
> > - try:
> > - import argparse
> > - except:
> > - print("Incorrect Source Builder installation", file = sys.stderr)
> > - sys.exit(1)
> > -
> > -import pkgconfig
> > -
> > -#
> > -# Make trace true to get a file of what happens and what is being asked.
> > -#
> > -trace = False
> > -trace_stdout = False
> > -logfile = 'pkg-config.log'
> > -out = None
> > -srcfd = None
> > -
> > -#
> > -# Write all the package source parsed to a single file.
> > -#
> > -trace_src = False
> > -if trace_src:
> > - srcfd = open('pkg-src.txt', 'w')
> > -
> > -def src(text):
> > - if srcfd:
> > - srcfd.writelines(text)
> > -
> > -def log(s, lf = True):
> > - global trace, logfile, out
> > - if trace:
> > - if out is None:
> > - if logfile:
> > - out = open(logfile, 'a')
> > - else:
> > - out = sys.stdout
> > - if lf:
> > - if out != sys.stdout and trace_stdout:
> > - print(s)
> > - print(s, file = out)
> > - else:
> > - if out != sys.stdout and trace_stdout:
> > - print(s, end = '')
> > - sys.stdout.flush()
> > - print(s, end = '', file = out)
> > -
> > -def run(argv):
> > -
> > - class version_action(argparse.Action):
> > - def __call__(self, parser, namespace, values, option_string = None):
> > - parts = values[0].strip().split('.')
> > - for p in parts:
> > - if not p.isdigit():
> > - raise error('invalid version value: %s' % (values))
> > - setattr(namespace, self.dest, '.'.join(parts))
> > -
> > - ec = 0
> > -
> > - opts = argparse.ArgumentParser(prog = 'pkg-config', description = 'Package Configuration.')
> > - opts.add_argument('libraries', metavar='lib', type = str, help = 'a library', nargs = '*')
> > - opts.add_argument('--modversion', dest = 'modversion', action = 'store', default = None,
> > - help = 'Requests that the version information of the libraries.')
> > - opts.add_argument('--print-errors', dest = 'print_errors', action = 'store_true',
> > - default = False,
> > - help = 'Print any errors.')
> > - opts.add_argument('--short-errors', dest = 'short_errors', action = 'store_true',
> > - default = False,
> > - help = 'Make error messages short.')
> > - opts.add_argument('--silence-errors', dest = 'silence_errors', action = 'store_true',
> > - default = False,
> > - help = 'Do not print any errors.')
> > - opts.add_argument('--errors-to-stdout', dest = 'errors_to_stdout', action = 'store_true',
> > - default = False,
> > - help = 'Print errors to stdout rather than stderr.')
> > - opts.add_argument('--cflags', dest = 'cflags', action = 'store_true',
> > - default = False,
> > - help = 'This prints pre-processor and compile flags required to' \
> > - ' compile the package(s)')
> > - opts.add_argument('--libs', dest = 'libs', action = 'store_true',
> > - default = False,
> > - help = 'This option is identical to "--cflags", only it prints the' \
> > - ' link flags.')
> > - opts.add_argument('--libs-only-L', dest = 'libs_only_L', action = 'store_true',
> > - default = False,
> > - help = 'This prints the -L/-R part of "--libs".')
> > - opts.add_argument('--libs-only-l', dest = 'libs_only_l', action = 'store_true',
> > - default = False,
> > - help = 'This prints the -l part of "--libs".')
> > - opts.add_argument('--variable', dest = 'variable', action = 'store',
> > - nargs = 1, default = None,
> > - help = 'This returns the value of a variable.')
> > - opts.add_argument('--define-variable', dest = 'define_variable', action = 'store',
> > - nargs = 1, default = None,
> > - help = 'This sets a global value for a variable')
> > - opts.add_argument('--uninstalled', dest = 'uninstalled', action = 'store_true',
> > - default = False,
> > - help = 'Ignored')
> > - opts.add_argument('--atleast-pkgconfig-version', dest = 'atleast_pkgconfig_version',
> > - action = 'store', nargs = 1, default = None,
> > - help = 'Check the version of package config. Always ok.')
> > - opts.add_argument('--exists', dest = 'exists', action = 'store_true',
> > - default = False,
> > - help = 'Test if a library is present')
> > - opts.add_argument('--atleast-version', dest = 'atleast_version',
> > - action = version_action, nargs = 1, default = None,
> > - help = 'The package is at least this version.')
> > - opts.add_argument('--exact-version', dest = 'exact_version', action = version_action,
> > - nargs = 1, default = None,
> > - help = 'The package is the exact version.')
> > - opts.add_argument('--max-version', dest = 'max_version', action = version_action,
> > - nargs = 1, default = None,
> > - help = 'The package is no later than this version.')
> > - opts.add_argument('--msvc-syntax', dest = 'msvc_syntax', action = 'store_true',
> > - default = False,
> > - help = 'Ignored')
> > - opts.add_argument('--dont-define-prefix', dest = 'dont_define_prefix', action = 'store_true',
> > - default = False,
> > - help = 'Ignored')
> > - opts.add_argument('--prefix-variable', dest = 'prefix', action = 'store',
> > - nargs = 1, default = pkgconfig.default_prefix(),
> > - help = 'Define the prefix.')
> > - opts.add_argument('--static', dest = 'static', action = 'store_true',
> > - default = False,
> > - help = 'Output libraries suitable for static linking')
> > - opts.add_argument('--dump', dest = 'dump', action = 'store_true',
> > - default = False,
> > - help = 'Dump the package if one is found.')
> > -
> > - args = opts.parse_args(argv[1:])
> > -
> > - if (args.exists and (args.exact_version or args.max_version)) or \
> > - (args.exact_version and (args.exists or args.max_version)) or \
> > - (args.max_version and (args.exists or args.exact_version)):
> > - raise error('only one of --exists, --exact-version, or --max-version')
> > -
> > - if args.dont_define_prefix:
> > - args.prefix = pkgconfig.default_prefix(False)
> > -
> > - exists = False
> > -
> > - ec = 1
> > -
> > - if args.atleast_pkgconfig_version:
> > - ec = 0
> > - else:
> > - ec, pkg, flags = pkgconfig.check_package(args.libraries, args, log, src)
> > - if ec == 0:
> > - if args.cflags:
> > - if len(flags['cflags']):
> > - print(flags['cflags'])
> > - log('cflags: %s' % (flags['cflags']))
> > - else:
> > - log('cflags: empty')
> > - if args.libs:
> > - if len(flags['libs']):
> > - print(flags['libs'])
> > - log('libs: %s' % (flags['libs']))
> > - else:
> > - log('libs: empty')
> > -
> > - #pkgconfig.package.dump_loaded()
> > -
> > - return ec
> > -
> > -try:
> > - log('-' * 40)
> > - log('pkg-config', lf = False)
> > - for a in sys.argv[2:]:
> > - log(' "%s"' % (a), lf = False)
> > - log('')
> > - ec = run(sys.argv[1:])
> > - log('ec = %d' % (ec))
> > -except ImportError:
> > - print("incorrect package config installation", file = sys.stderr)
> > - sys.exit(1)
> > -except pkgconfig.error as e:
> > - print('error: %s' % (e), file = sys.stderr)
> > - sys.exit(1)
> > -sys.exit(ec)
> > diff --git a/source-builder/sb/cmd-reports.py b/source-builder/sb/cmd-reports.py
> > deleted file mode 100755
> > index 4c41e33..0000000
> > --- a/source-builder/sb/cmd-reports.py
> > +++ /dev/null
> > @@ -1,29 +0,0 @@
> > -#
> > -# RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2010-2013 Chris Johns (chrisj at rtems.org)
> > -# All rights reserved.
> > -#
> > -# This file is part of the RTEMS Tools package in 'rtems-tools'.
> > -#
> > -# Permission to use, copy, modify, and/or distribute this software for any
> > -# purpose with or without fee is hereby granted, provided that the above
> > -# copyright notice and this permission notice appear in all copies.
> > -#
> > -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> > -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> > -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> > -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> > -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -
> > -from __future__ import print_function
> > -
> > -import sys, os
> > -
> > -try:
> > - import reports
> > - reports.run(sys.argv)
> > -except ImportError:
> > - print("Incorrect Source Builder installation", file = sys.stderr)
> > - sys.exit(1)
> > diff --git a/source-builder/sb/cmd-rtems-config.py b/source-builder/sb/cmd-rtems-config.py
> > deleted file mode 100755
> > index f29ef04..0000000
> > --- a/source-builder/sb/cmd-rtems-config.py
> > +++ /dev/null
> > @@ -1,29 +0,0 @@
> > -#
> > -# RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2010-2012 Chris Johns (chrisj at rtems.org)
> > -# All rights reserved.
> > -#
> > -# This file is part of the RTEMS Tools package in 'rtems-tools'.
> > -#
> > -# Permission to use, copy, modify, and/or distribute this software for any
> > -# purpose with or without fee is hereby granted, provided that the above
> > -# copyright notice and this permission notice appear in all copies.
> > -#
> > -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> > -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> > -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> > -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> > -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -
> > -from __future__ import print_function
> > -
> > -import sys, os
> > -
> > -try:
> > - import rtemsconfig
> > - rtemsconfig.run(sys.argv)
> > -except ImportError:
> > - print("Incorrect Source Builder installation", file = sys.stderr)
> > - sys.exit(1)
> > diff --git a/source-builder/sb/cmd-set-builder.py b/source-builder/sb/cmd-set-builder.py
> > deleted file mode 100755
> > index 56114cd..0000000
> > --- a/source-builder/sb/cmd-set-builder.py
> > +++ /dev/null
> > @@ -1,29 +0,0 @@
> > -#
> > -# RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2010-2012 Chris Johns (chrisj at rtems.org)
> > -# All rights reserved.
> > -#
> > -# This file is part of the RTEMS Tools package in 'rtems-tools'.
> > -#
> > -# Permission to use, copy, modify, and/or distribute this software for any
> > -# purpose with or without fee is hereby granted, provided that the above
> > -# copyright notice and this permission notice appear in all copies.
> > -#
> > -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> > -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> > -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> > -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> > -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -
> > -from __future__ import print_function
> > -
> > -import sys, os
> > -
> > -try:
> > - import setbuilder
> > - setbuilder.run()
> > -except ImportError:
> > - print("Incorrect Source Builder installation", file = sys.stderr)
> > - sys.exit(1)
> > diff --git a/source-builder/sb/cmd-track.py b/source-builder/sb/cmd-track.py
> > deleted file mode 100755
> > index 82615a5..0000000
> > --- a/source-builder/sb/cmd-track.py
> > +++ /dev/null
> > @@ -1,29 +0,0 @@
> > -#
> > -# RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2010-2019 Chris Johns (chrisj at rtems.org)
> > -# All rights reserved.
> > -#
> > -# This file is part of the RTEMS Tools package in 'rtems-tools'.
> > -#
> > -# Permission to use, copy, modify, and/or distribute this software for any
> > -# purpose with or without fee is hereby granted, provided that the above
> > -# copyright notice and this permission notice appear in all copies.
> > -#
> > -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> > -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> > -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> > -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> > -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -
> > -from __future__ import print_function
> > -
> > -import sys, os
> > -
> > -try:
> > - import track
> > - track.run()
> > -except ImportError:
> > - print("Incorrect Source Builder installation", file = sys.stderr)
> > - sys.exit(1)
> > diff --git a/source-builder/sb/config.py b/source-builder/sb/config.py
> > index f8854a5..db795b3 100644
> > --- a/source-builder/sb/config.py
> > +++ b/source-builder/sb/config.py
> > @@ -34,13 +34,13 @@ import re
> > import sys
> >
> > try:
> > - import error
> > - import execute
> > - import log
> > - import options
> > - import path
> > - import pkgconfig
> > - import sources
> > + from . import error
> > + from . import execute
> > + from . import log
> > + from . import options
> > + from . import path
> > + from . import pkgconfig
> > + from . import sources
> > except KeyboardInterrupt:
> > print('user terminated', file = sys.stderr)
> > sys.exit(1)
> > @@ -500,6 +500,7 @@ class file:
> > except pkgconfig.error as pe:
> > self._error('pkgconfig: check: %s' % (pe))
> > except:
> > + raise
> > raise error.internal('pkgconfig failure')
> > if ok:
> > return '1'
> > @@ -524,6 +525,7 @@ class file:
> > except pkgconfig.error as pe:
> > self._error('pkgconfig: %s: %s' % (flags, pe))
> > except:
> > + raise
> > raise error.internal('pkgconfig failure')
> > if pkg_flags is None:
> > pkg_flags = ''
> > diff --git a/source-builder/sb/cvs.py b/source-builder/sb/cvs.py
> > index 2ff7417..673488e 100644
> > --- a/source-builder/sb/cvs.py
> > +++ b/source-builder/sb/cvs.py
> > @@ -25,11 +25,10 @@ from __future__ import print_function
> >
> > import os
> >
> > -import error
> > -import execute
> > -import log
> > -import options
> > -import path
> > +from . import error
> > +from . import execute
> > +from . import log
> > +from . import path
> >
> > class repo:
> > """An object to manage a cvs repo."""
> > @@ -147,6 +146,7 @@ class repo:
> >
> > if __name__ == '__main__':
> > import sys
> > + from . import options
> > opts = options.load(sys.argv, defaults = 'defaults.mc')
> > ldir = 'cvs-test-rm-me'
> > c = repo(ldir, opts)
> > diff --git a/source-builder/sb/darwin.py b/source-builder/sb/darwin.py
> > index a21a6bc..95a2a4e 100644
> > --- a/source-builder/sb/darwin.py
> > +++ b/source-builder/sb/darwin.py
> > @@ -24,7 +24,7 @@
> >
> > import os
> >
> > -import execute
> > +from . import execute
> >
> > def load():
> > uname = os.uname()
> > diff --git a/source-builder/sb/download.py b/source-builder/sb/download.py
> > index 3aaa701..410edeb 100644
> > --- a/source-builder/sb/download.py
> > +++ b/source-builder/sb/download.py
> > @@ -37,13 +37,13 @@ except ImportError:
> > import urllib2 as urllib_request
> > import urlparse as urllib_parse
> >
> > -import cvs
> > -import error
> > -import git
> > -import log
> > -import path
> > -import sources
> > -import version
> > +from . import cvs
> > +from . import error
> > +from . import git
> > +from . import log
> > +from . import path
> > +from . import sources
> > +from . import version
> >
> > def _do_download(opts):
> > download = True
> > diff --git a/source-builder/sb/ereport.py b/source-builder/sb/ereport.py
> > index 475eff7..d8fb5f6 100755
> > --- a/source-builder/sb/ereport.py
> > +++ b/source-builder/sb/ereport.py
> > @@ -25,8 +25,8 @@ from __future__ import print_function
> >
> > import os
> >
> > -import error
> > -import log
> > +from . import error
> > +from . import log
> >
> > def generate(name, opts, header = None, footer = None):
> > label, result = opts.with_arg('error-report')
> > diff --git a/source-builder/sb/execute.py b/source-builder/sb/execute.py
> > index 06f9b7d..3db9abc 100755
> > --- a/source-builder/sb/execute.py
> > +++ b/source-builder/sb/execute.py
> > @@ -36,8 +36,8 @@ import threading
> > import time
> > import traceback
> >
> > -import error
> > -import log
> > +from . import error
> > +from . import log
> >
> > # Trace exceptions
> > trace_threads = False
> > diff --git a/source-builder/sb/freebsd.py b/source-builder/sb/freebsd.py
> > index 5497e75..472f670 100644
> > --- a/source-builder/sb/freebsd.py
> > +++ b/source-builder/sb/freebsd.py
> > @@ -27,9 +27,9 @@
> > import pprint
> > import os
> >
> > -import check
> > -import error
> > -import execute
> > +from . import check
> > +from . import error
> > +from . import execute
> >
> > def load():
> > uname = os.uname()
> > diff --git a/source-builder/sb/getsources.py b/source-builder/sb/getsources.py
> > index 7d76038..0ccf257 100644
> > --- a/source-builder/sb/getsources.py
> > +++ b/source-builder/sb/getsources.py
> > @@ -31,11 +31,11 @@ import os
> > import sys
> >
> > try:
> > - import build
> > - import error
> > - import log
> > - import simhost
> > - import version
> > + from . import build
> > + from . import error
> > + from . import log
> > + from . import simhost
> > + from . import version
> > except KeyboardInterrupt:
> > print('abort: user terminated', file = sys.stderr)
> > sys.exit(1)
> > @@ -76,7 +76,7 @@ def run(args = sys.argv):
> > action = 'store_true')
> > argsp.add_argument('bsets', nargs='*', help = 'Build sets.')
> >
> > - argopts = argsp.parse_args(args[2:])
> > + argopts = argsp.parse_args(args[1:])
> >
> > simhost.load_log(argopts.log)
> > log.notice('RTEMS Source Builder - Get Sources, %s' % (version.string()))
> > diff --git a/source-builder/sb/git.py b/source-builder/sb/git.py
> > index 52bcb83..237e690 100644
> > --- a/source-builder/sb/git.py
> > +++ b/source-builder/sb/git.py
> > @@ -25,11 +25,10 @@ from __future__ import print_function
> >
> > import os
> >
> > -import error
> > -import execute
> > -import log
> > -import options
> > -import path
> > +from . import error
> > +from . import execute
> > +from . import log
> > +from . import path
> >
> > class repo:
> > """An object to manage a git repo."""
> > @@ -230,7 +229,9 @@ class repo:
> > if __name__ == '__main__':
> > import os.path
> > import sys
> > - defaults = path.join(path.dirname(path.dirname(path.shell(sys.argv[0]))), 'defaults.mc')
> > + from . import options
> > + defaults = path.join(path.dirname(path.dirname(path.shell(sys.argv[0]))),
> > + 'defaults.mc')
> > opts = options.load(sys.argv, defaults = defaults)
> > g = repo('.', opts)
> > print('g.git_version():', g.git_version())
> > diff --git a/source-builder/sb/linux.py b/source-builder/sb/linux.py
> > index 791bbd6..d773818 100644
> > --- a/source-builder/sb/linux.py
> > +++ b/source-builder/sb/linux.py
> > @@ -26,8 +26,8 @@ import multiprocessing
> > import pprint
> > import os
> >
> > -import platform
> > -import path
> > +from . import platform
> > +from . import path
> >
> > def load():
> > uname = os.uname()
> > diff --git a/source-builder/sb/log.py b/source-builder/sb/log.py
> > index 788160e..7ad4763 100755
> > --- a/source-builder/sb/log.py
> > +++ b/source-builder/sb/log.py
> > @@ -26,7 +26,7 @@ from __future__ import print_function
> > import os
> > import sys
> >
> > -import error
> > +from . import error
> >
> > #
> > # A global log.
> > diff --git a/source-builder/sb/macros.py b/source-builder/sb/macros.py
> > index 5a639b8..6ca87ed 100644
> > --- a/source-builder/sb/macros.py
> > +++ b/source-builder/sb/macros.py
> > @@ -27,8 +27,8 @@ import re
> > import os
> > import string
> >
> > -import error
> > -import path
> > +from . import error
> > +from . import path
> >
> > #
> > # Macro tables
> > diff --git a/source-builder/sb/mailer.py b/source-builder/sb/mailer.py
> > index 42b4fa6..ff25df5 100644
> > --- a/source-builder/sb/mailer.py
> > +++ b/source-builder/sb/mailer.py
> > @@ -27,9 +27,9 @@ import os
> > import smtplib
> > import socket
> >
> > -import error
> > -import options
> > -import path
> > +from . import error
> > +from . import options
> > +from . import path
> >
> > def append_options(opts):
> > opts['--mail'] = 'Send email report or results.'
> > diff --git a/source-builder/sb/netbsd.py b/source-builder/sb/netbsd.py
> > index c7420c3..3398290 100644
> > --- a/source-builder/sb/netbsd.py
> > +++ b/source-builder/sb/netbsd.py
> > @@ -27,8 +27,8 @@
> > import pprint
> > import os
> >
> > -import check
> > -import execute
> > +from . import check
> > +from . import execute
> >
> > def load():
> > uname = os.uname()
> > diff --git a/source-builder/sb/options.py b/source-builder/sb/options.py
> > index fe4182d..d6bffd0 100644
> > --- a/source-builder/sb/options.py
> > +++ b/source-builder/sb/options.py
> > @@ -29,18 +29,17 @@ import pprint
> > import re
> > import os
> > import string
> > -
> > -import download
> > -import error
> > -import execute
> > -import git
> > -import log
> > -import macros
> > -import path
> > -import sources
> > import sys
> >
> > -import version
> > +from . import download
> > +from . import error
> > +from . import execute
> > +from . import git
> > +from . import log
> > +from . import macros
> > +from . import path
> > +from . import sources
> > +from . import version
> >
> > basepath = 'sb'
> >
> > @@ -624,11 +623,6 @@ def load(args, optargs = None, defaults = '%{_sbdir}/defaults.mc', logfile = Tru
> > global host_windows
> > global host_posix
> >
> > - #
> > - # Adjust the args to remove the wrapper.
> > - #
> > - args = args[1:]
> > -
> > #
> > # The path to this command.
> > #
> > @@ -649,7 +643,7 @@ def load(args, optargs = None, defaults = '%{_sbdir}/defaults.mc', logfile = Tru
> > overrides = None
> > if os.name == 'nt':
> > try:
> > - import windows
> > + from . import windows
> > overrides = windows.load()
> > host_windows = True
> > host_posix = False
> > @@ -659,26 +653,26 @@ def load(args, optargs = None, defaults = '%{_sbdir}/defaults.mc', logfile = Tru
> > uname = os.uname()
> > try:
> > if uname[0].startswith('MINGW64_NT'):
> > - import windows
> > + from . import windows
> > overrides = windows.load()
> > host_windows = True
> > elif uname[0].startswith('CYGWIN_NT'):
> > - import windows
> > + from . import windows
> > overrides = windows.load()
> > elif uname[0] == 'Darwin':
> > - import darwin
> > + from . import darwin
> > overrides = darwin.load()
> > elif uname[0] == 'FreeBSD':
> > - import freebsd
> > + from . import freebsd
> > overrides = freebsd.load()
> > elif uname[0] == 'NetBSD':
> > - import netbsd
> > + from . import netbsd
> > overrides = netbsd.load()
> > elif uname[0] == 'Linux':
> > - import linux
> > + from . import linux
> > overrides = linux.load()
> > elif uname[0] == 'SunOS':
> > - import solaris
> > + from . import solaris
> > overrides = solaris.load()
> > except error.general as ge:
> > raise error.general('failed to load %s host support: %s' % (uname[0], ge))
> > @@ -721,7 +715,9 @@ def load(args, optargs = None, defaults = '%{_sbdir}/defaults.mc', logfile = Tru
> >
> > def run(args):
> > try:
> > - _opts = load(args = args, defaults = 'defaults.mc')
> > + dpath = path.dirname(args[0])
> > + _opts = load(args = args,
> > + defaults = path.join(dpath, 'defaults.mc'))
> > log.notice('RTEMS Source Builder - Defaults, %s' % (version.string()))
> > _opts.log_info()
> > log.notice('Options:')
> > diff --git a/source-builder/sb/path.py b/source-builder/sb/path.py
> > index 93852c8..b27cf14 100644
> > --- a/source-builder/sb/path.py
> > +++ b/source-builder/sb/path.py
> > @@ -25,14 +25,14 @@
> >
> > from __future__ import print_function
> >
> > -import log
> > import os
> > import shutil
> > import stat
> > import string
> > import sys
> >
> > -import error
> > +from . import error
> > +from . import log
> >
> > windows_posix = sys.platform == 'msys'
> > windows = os.name == 'nt'
> > diff --git a/source-builder/sb/pkgconfig.py b/source-builder/sb/pkgconfig.py
> > index 99646f7..89b4d5c 100755
> > --- a/source-builder/sb/pkgconfig.py
> > +++ b/source-builder/sb/pkgconfig.py
> > @@ -43,7 +43,7 @@ import re
> > import shlex
> > import sys
> >
> > -import path
> > +from . import path
> >
> > def default_prefix(common = True):
> > paths = []
> > @@ -214,7 +214,12 @@ class package(object):
> > prefix = default_prefix()
> > if prefix:
> > self._log('prefix: %s' % (prefix))
> > - if type(prefix) is str or type(prefix) is unicode:
> > + try:
> > + if type(prefix) is unicode:
> > + prefix = prefix.decode("utf-8", "ignore")
> > + except:
> > + pass
> > + if type(prefix) is str:
> > prefix = str(prefix)
> > self.prefix = []
> > for p in prefix.split(os.pathsep):
> > diff --git a/source-builder/sb/python-wrapper.sh b/source-builder/sb/python-wrapper.sh
> > deleted file mode 100644
> > index c736a66..0000000
> > --- a/source-builder/sb/python-wrapper.sh
> > +++ /dev/null
> > @@ -1,39 +0,0 @@
> > -#
> > -# RTEMS Tools Project (http://www.rtems.org/)
> > -# Copyright 2018 Chris Johns (chrisj at rtems.org)
> > -# All rights reserved.
> > -#
> > -# This file is part of the RTEMS Tools package in 'rtems-tools'.
> > -#
> > -# Permission to use, copy, modify, and/or distribute this software for any
> > -# purpose with or without fee is hereby granted, provided that the above
> > -# copyright notice and this permission notice appear in all copies.
> > -#
> > -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> > -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> > -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> > -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> > -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> > -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> > -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> > -set -e
> > -if test ! -f $PYTHON_CMD; then
> > - echo "error: python command not found: $PYTHON_CMD"
> > - exit 5
> > -fi
> > -for py in python2 python2.7 python3 python
> > -do
> > - set +e
> > - py_cmd=$(command -v $py)
> > - set -e
> > - if test -n "$RTEMS_PYTHON_OVERRIDE"; then
> > - if test "$RTEMS_PYTHON_OVERRIDE" != "$py"; then
> > - py_cmd=""
> > - fi
> > - fi
> > - if test -n "$py_cmd"; then
> > - exec $py_cmd $PYTHON_CMD $0 $*
> > - fi
> > -done
> > -echo "error: no valid python found"
> > -exit 5
> > diff --git a/source-builder/sb/reports.py b/source-builder/sb/reports.py
> > index e7870c4..34474f3 100644
> > --- a/source-builder/sb/reports.py
> > +++ b/source-builder/sb/reports.py
> > @@ -34,17 +34,17 @@ import pprint
> > pp = pprint.PrettyPrinter(indent = 2)
> >
> > try:
> > - import build
> > - import check
> > - import config
> > - import error
> > - import git
> > - import log
> > - import options
> > - import path
> > - import setbuilder
> > - import sources
> > - import version
> > + from . import build
> > + from . import check
> > + from . import config
> > + from . import error
> > + from . import git
> > + from . import log
> > + from . import options
> > + from . import path
> > + from . import setbuilder
> > + from . import sources
> > + from . import version
> > except KeyboardInterrupt:
> > print('user terminated', file = sys.stderr)
> > sys.exit(1)
> > diff --git a/source-builder/sb/rtemsconfig.py b/source-builder/sb/rtemsconfig.py
> > index 97ede7f..0ad6c5c 100644
> > --- a/source-builder/sb/rtemsconfig.py
> > +++ b/source-builder/sb/rtemsconfig.py
> > @@ -28,11 +28,11 @@ import sys
> > import threading
> > import time
> >
> > -import error
> > -import log
> > -import options
> > -import path
> > -import version
> > +from . import error
> > +from . import log
> > +from . import options
> > +from . import path
> > +from . import version
> >
> > def _collect(path_, file):
> > confs = []
> > diff --git a/source-builder/sb/setbuilder.py b/source-builder/sb/setbuilder.py
> > index a6efd75..02901d4 100644
> > --- a/source-builder/sb/setbuilder.py
> > +++ b/source-builder/sb/setbuilder.py
> > @@ -33,17 +33,17 @@ import sys
> > import textwrap
> >
> > try:
> > - import build
> > - import check
> > - import error
> > - import log
> > - import mailer
> > - import options
> > - import path
> > - import reports
> > - import shell
> > - import sources
> > - import version
> > + from . import build
> > + from . import check
> > + from . import error
> > + from . import log
> > + from . import mailer
> > + from . import options
> > + from . import path
> > + from . import reports
> > + from . import shell
> > + from . import sources
> > + from . import version
> > except KeyboardInterrupt:
> > print('abort: user terminated', file = sys.stderr)
> > sys.exit(1)
> > diff --git a/source-builder/sb/shell.py b/source-builder/sb/shell.py
> > index bebbe8a..f1e669a 100644
> > --- a/source-builder/sb/shell.py
> > +++ b/source-builder/sb/shell.py
> > @@ -25,10 +25,10 @@
> > from __future__ import print_function
> >
> > try:
> > - import error
> > - import execute
> > - import log
> > - import options
> > + from . import error
> > + from . import execute
> > + from . import log
> > + from . import options
> > except KeyboardInterrupt:
> > print('abort: user terminated', file = sys.stderr)
> > sys.exit(1)
> > diff --git a/source-builder/sb/simhost.py b/source-builder/sb/simhost.py
> > index 13ab157..e3f759b 100644
> > --- a/source-builder/sb/simhost.py
> > +++ b/source-builder/sb/simhost.py
> > @@ -29,15 +29,15 @@ import datetime
> > import os
> >
> > try:
> > - import build
> > - import check
> > - import error
> > - import git
> > - import log
> > - import macros
> > - import path
> > - import sources
> > - import version
> > + from . import build
> > + from . import check
> > + from . import error
> > + from . import git
> > + from . import log
> > + from . import macros
> > + from . import path
> > + from . import sources
> > + from . import version
> > except KeyboardInterrupt:
> > print('abort: user terminated', file = sys.stderr)
> > sys.exit(1)
> > @@ -160,7 +160,7 @@ def find_bset_config(bset_config, macros):
> > #
> > class options(object):
> > def __init__(self, argv, argopts, defaults, extras):
> > - command_path = path.dirname(path.abspath(argv[1]))
> > + command_path = path.dirname(path.abspath(argv[0]))
> > if len(command_path) == 0:
> > command_path = '.'
> > self.command_path = command_path
> > @@ -190,7 +190,7 @@ class options(object):
> > overrides = None
> > if os.name == 'nt':
> > try:
> > - import windows
> > + from . import windows
> > overrides = windows.load()
> > host_windows = True
> > host_posix = False
> > @@ -200,26 +200,26 @@ class options(object):
> > uname = os.uname()
> > try:
> > if uname[0].startswith('MINGW64_NT'):
> > - import windows
> > + from . import windows
> > overrides = windows.load()
> > host_windows = True
> > elif uname[0].startswith('CYGWIN_NT'):
> > - import windows
> > + from . import windows
> > overrides = windows.load()
> > elif uname[0] == 'Darwin':
> > - import darwin
> > + from . import darwin
> > overrides = darwin.load()
> > elif uname[0] == 'FreeBSD':
> > - import freebsd
> > + from . import freebsd
> > overrides = freebsd.load()
> > elif uname[0] == 'NetBSD':
> > - import netbsd
> > + from . import netbsd
> > overrides = netbsd.load()
> > elif uname[0] == 'Linux':
> > - import linux
> > + from . import linux
> > overrides = linux.load()
> > elif uname[0] == 'SunOS':
> > - import solaris
> > + from . import solaris
> > overrides = solaris.load()
> > except error.general as ge:
> > raise error.general('failed to load %s host support: %s' % (uname[0], ge))
> > diff --git a/source-builder/sb/solaris.py b/source-builder/sb/solaris.py
> > index 8d9498a..231fd34 100644
> > --- a/source-builder/sb/solaris.py
> > +++ b/source-builder/sb/solaris.py
> > @@ -25,9 +25,9 @@
> > import pprint
> > import os
> >
> > -import check
> > -import error
> > -import execute
> > +from . import check
> > +from . import error
> > +from . import execute
> >
> > def load():
> > uname = os.uname()
> > diff --git a/source-builder/sb/sources.py b/source-builder/sb/sources.py
> > index a619778..1d62cb7 100644
> > --- a/source-builder/sb/sources.py
> > +++ b/source-builder/sb/sources.py
> > @@ -21,7 +21,7 @@
> > # Manage sources and patches
> > #
> >
> > -import log
> > +from . import log
> >
> > def _args(args):
> > return [i for s in [ii.split() for ii in args] for i in s]
> > diff --git a/source-builder/sb/track.py b/source-builder/sb/track.py
> > index aef25b9..49344fe 100644
> > --- a/source-builder/sb/track.py
> > +++ b/source-builder/sb/track.py
> > @@ -31,12 +31,12 @@ import os
> > import sys
> >
> > try:
> > - import build
> > - import error
> > - import git
> > - import log
> > - import simhost
> > - import version
> > + from . import build
> > + from . import error
> > + from . import git
> > + from . import log
> > + from . import simhost
> > + from . import version
> > except KeyboardInterrupt:
> > print('abort: user terminated', file = sys.stderr)
> > sys.exit(1)
> > @@ -138,7 +138,7 @@ def run(args = sys.argv):
> > action = 'store_true')
> > argsp.add_argument('bsets', nargs='*', help = 'Build sets.')
> >
> > - argopts = argsp.parse_args(args[2:])
> > + argopts = argsp.parse_args(args[1:])
> >
> > simhost.load_log(argopts.log)
> > log.notice('RTEMS Source Builder - Track Dependencies, %s' % (version.string()))
> > diff --git a/source-builder/sb/version.py b/source-builder/sb/version.py
> > index 721c459..29d2dc5 100644
> > --- a/source-builder/sb/version.py
> > +++ b/source-builder/sb/version.py
> > @@ -76,9 +76,9 @@ from __future__ import print_function
> > import os
> > import sys
> >
> > -import error
> > -import git
> > -import path
> > +from . import error
> > +from . import git
> > +from . import path
> >
> > #
> > # Default to an internal string.
> > diff --git a/source-builder/sb/windows.py b/source-builder/sb/windows.py
> > index 1eb51a0..ceca24f 100644
> > --- a/source-builder/sb/windows.py
> > +++ b/source-builder/sb/windows.py
> > @@ -24,9 +24,9 @@
> > import os
> > import sys
> >
> > -import error
> > -import execute
> > -import path
> > +from . import error
> > +from . import execute
> > +from . import path
> >
> > def load():
> > # Default to the native Windows Python.
> > --
> > 2.24.1
> >
> > _______________________________________________
> > devel mailing list
> > devel at rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list