[rtems-source-builder commit] Windows native build fixes.
Chris Johns
chrisj at rtems.org
Sat Feb 7 07:00:11 UTC 2015
Module: rtems-source-builder
Branch: master
Commit: d4eb08f55a7e868ea0e61dee03c216cdf7a3502b
Changeset: http://git.rtems.org/rtems-source-builder/commit/?id=d4eb08f55a7e868ea0e61dee03c216cdf7a3502b
Author: Chris Johns <chrisj at rtems.org>
Date: Sat Feb 7 17:58:17 2015 +1100
Windows native build fixes.
The testing of building on Windows is done using MSYS2.
---
source-builder/config/gcc-common-1.cfg | 9 +++++----
source-builder/sb/build.py | 1 -
source-builder/sb/check.py | 2 +-
source-builder/sb/download.py | 9 +++++++--
source-builder/sb/ereport.py | 5 ++++-
source-builder/sb/log.py | 1 +
source-builder/sb/path.py | 9 ++++++++-
source-builder/sb/windows.py | 17 +++++++++++------
8 files changed, 37 insertions(+), 16 deletions(-)
diff --git a/source-builder/config/gcc-common-1.cfg b/source-builder/config/gcc-common-1.cfg
index 35e7efa..dd0cf4c 100644
--- a/source-builder/config/gcc-common-1.cfg
+++ b/source-builder/config/gcc-common-1.cfg
@@ -190,10 +190,11 @@ BuildRoot: %{_tmppath}/%{name}-root-%(%{__id_u} -n)
%{__rmfile} $SB_BUILD_ROOT%{_mandir}/man3/*ffi*
# Clean the symlinks away incase the source is a repo
- %{__rmfile} ${source_dir_gcc}/newlib
- %{__rmfile} ${source_dir_gcc}/mpfr
- %{__rmfile} ${source_dir_gcc}/mpc
- %{__rmfile} ${source_dir_gcc}/gmp
+ # Note, delete as a directory because of MSYS2 support on Windows.
+ %{__rmdir} ${source_dir_gcc}/newlib
+ %{__rmdir} ${source_dir_gcc}/mpfr
+ %{__rmdir} ${source_dir_gcc}/mpc
+ %{__rmdir} ${source_dir_gcc}/gmp
%testing
# Add testing here.
diff --git a/source-builder/sb/build.py b/source-builder/sb/build.py
index 22e0f6a..630a1a0 100644
--- a/source-builder/sb/build.py
+++ b/source-builder/sb/build.py
@@ -227,7 +227,6 @@ class build:
raise error.general('setup source tag not found: %d' % (source_tag))
else:
name = opt_name
- name = self._name_(name)
self.script.append(self.config.expand('cd %{_builddir}'))
if not deleted_dir and delete_before_unpack:
self.script.append(self.config.expand('%{__rm} -rf ' + name))
diff --git a/source-builder/sb/check.py b/source-builder/sb/check.py
index f5d38a5..d2eba4f 100644
--- a/source-builder/sb/check.py
+++ b/source-builder/sb/check.py
@@ -104,7 +104,7 @@ def path_check(opts, silent = False):
if not silent:
log.notice('error: environment PATH contains an empty path')
return False
- elif p.strip() == '.' or p.strip() == '..':
+ elif not options.host_windows and (p.strip() == '.' or p.strip() == '..'):
if not silent:
log.notice('error: environment PATH invalid path: %s' % (p))
return False
diff --git a/source-builder/sb/download.py b/source-builder/sb/download.py
index dc1def6..9490aa0 100644
--- a/source-builder/sb/download.py
+++ b/source-builder/sb/download.py
@@ -69,7 +69,7 @@ def _hash_check(file_, absfile, macros, remove = True):
_in = None
try:
hasher = hashlib.new(hash[0])
- _in = open(absfile, 'rb')
+ _in = open(path.host(absfile), 'rb')
hasher.update(_in.read())
except IOError, err:
log.notice('hash: %s: read error: %s' % (file_, str(err)))
@@ -90,7 +90,12 @@ def _hash_check(file_, absfile, macros, remove = True):
if failed and remove:
log.warning('removing: %s' % (file_))
if path.exists(absfile):
- os.remove(path.host(absfile))
+ try:
+ os.remove(path.host(absfile))
+ except IOError, err:
+ raise error.general('hash: %s: remove: %s' % (absfile, str(err)))
+ except:
+ raise error.general('hash: %s: remove error' % (file_))
if hasher is not None:
del hasher
else:
diff --git a/source-builder/sb/ereport.py b/source-builder/sb/ereport.py
index 897b353..88aaa16 100755
--- a/source-builder/sb/ereport.py
+++ b/source-builder/sb/ereport.py
@@ -36,7 +36,10 @@ def generate(name, opts, header = None, footer = None):
opts.defaults.get_value('%{_sbgit_id}'))]
else:
r += [' RSB: not a valid repo']
- r += [' %s' % (' '.join(os.uname()))]
+ if os.name == 'nt':
+ r += [' Windows']
+ else:
+ r += [' %s' % (' '.join(os.uname()))]
r += []
r += ['Tail of the build log:']
r += log.tail()
diff --git a/source-builder/sb/log.py b/source-builder/sb/log.py
index 8e46023..410987c 100755
--- a/source-builder/sb/log.py
+++ b/source-builder/sb/log.py
@@ -74,6 +74,7 @@ def notice(text = os.linesep, log = None):
if not quiet and default is not None and not default.has_stdout():
for l in text.replace(chr(13), '').splitlines():
print l
+ sys.stdout.flush()
_output(text, log)
def trace(text = os.linesep, log = None):
diff --git a/source-builder/sb/path.py b/source-builder/sb/path.py
index 20ab73c..67aeacd 100644
--- a/source-builder/sb/path.py
+++ b/source-builder/sb/path.py
@@ -127,7 +127,14 @@ def mkdir(path):
def removeall(path):
def _onerror(function, path, excinfo):
- print 'removeall error: (%s) %s' % (excinfo, path)
+ import stat
+ if not os.access(path, os.W_OK):
+ # Is the error an access error ?
+ os.chmod(path, stat.S_IWUSR)
+ function(path)
+ else:
+ print 'removeall error: %s' % (path)
+ raise
path = host(path)
shutil.rmtree(path, onerror = _onerror)
diff --git a/source-builder/sb/windows.py b/source-builder/sb/windows.py
index 222876d..938abfc 100644
--- a/source-builder/sb/windows.py
+++ b/source-builder/sb/windows.py
@@ -30,13 +30,18 @@ import execute
def load():
# Default to the native Windows Python.
uname = 'win32'
- system = 'mingw32'
- if os.environ.has_key('HOSTTYPE'):
- hosttype = os.environ['HOSTTYPE']
+ if os.environ.has_key('PROCESSOR_ARCHITECTURE'):
+ if os.environ['PROCESSOR_ARCHITECTURE'] == 'AMD64':
+ hosttype = 'x86_64'
+ machsize = '64'
+ else:
+ hosttype = 'i686'
+ machsize = '32'
else:
- hosttype = 'i686'
- host_triple = hosttype + '-pc-' + system
- build_triple = hosttype + '-pc-' + system
+ hosttype = 'x86_64'
+ machsize = '32'
+ host_triple = '%s-w%s-mingw32' % (hosttype, machsize)
+ build_triple = '%s-w%s-mingw32' % (hosttype, machsize)
# See if this is actually Cygwin Python
if os.name == 'posix':
More information about the vc
mailing list