[Mesa-dev] [PATCH 09/15] scons: Prefer winflexbison, and use --wincompat when available.
Brian Paul
brianp at vmware.com
Fri Mar 20 07:36:08 PDT 2015
On 03/20/2015 07:59 AM, Jose Fonseca wrote:
> This avoids MSVC the warning
>
> warning C4013: 'isatty' undefined; assuming extern returning int
>
> with certain versions of flex.
> ---
> scons/gallium.py | 39 ++++++++++++++++++++++++++++++++-------
> 1 file changed, 32 insertions(+), 7 deletions(-)
>
> diff --git a/scons/gallium.py b/scons/gallium.py
> index 9924f1e..9fe2dbd 100755
> --- a/scons/gallium.py
> +++ b/scons/gallium.py
> @@ -35,7 +35,7 @@ import os
> import os.path
> import re
> import subprocess
> -import platform as _platform
> +import platform as host_platform
> import sys
> import tempfile
>
> @@ -147,6 +147,15 @@ def check_cc(env, cc, expr, cpp_opt = '-E'):
> return result
>
>
> +def check_prog(env, prog):
Maybe put a """comment""" here to explain what this function does.
> + sys.stdout.write('Checking for %s ... ' % prog)
> +
> + result = env.Detect(prog)
> +
> + sys.stdout.write(' %s\n' % ['no', 'yes'][int(bool(result))])
> + return result
> +
> +
> def generate(env):
> """Common environment generation code"""
>
> @@ -186,7 +195,7 @@ def generate(env):
> env['gcc'] = 0
> env['clang'] = 0
> env['msvc'] = 0
> - if _platform.system() == 'Windows':
> + if host_platform.system() == 'Windows':
> env['msvc'] = check_cc(env, 'MSVC', 'defined(_MSC_VER)', '/E')
> if not env['msvc']:
> env['gcc'] = check_cc(env, 'GCC', 'defined(__GNUC__) && !defined(__clang__)')
> @@ -210,10 +219,10 @@ def generate(env):
>
> # Determine whether we are cross compiling; in particular, whether we need
> # to compile code generators with a different compiler as the target code.
> - host_platform = _platform.system().lower()
> - if host_platform.startswith('cygwin'):
> - host_platform = 'cygwin'
> - host_machine = os.environ.get('PROCESSOR_ARCHITEW6432', os.environ.get('PROCESSOR_ARCHITECTURE', _platform.machine()))
> + hosthost_platform = host_platform.system().lower()
> + if hosthost_platform.startswith('cygwin'):
> + hosthost_platform = 'cygwin'
> + host_machine = os.environ.get('PROCESSOR_ARCHITEW6432', os.environ.get('PROCESSOR_ARCHITECTURE', host_platform.machine()))
> host_machine = {
> 'x86': 'x86',
> 'i386': 'x86',
> @@ -224,7 +233,7 @@ def generate(env):
> 'AMD64': 'x86_64',
> 'x86_64': 'x86_64',
> }.get(host_machine, 'generic')
> - env['crosscompile'] = platform != host_platform
> + env['crosscompile'] = platform != hosthost_platform
> if machine == 'x86_64' and host_machine != 'x86_64':
> env['crosscompile'] = True
> env['hostonly'] = False
> @@ -630,7 +639,23 @@ def generate(env):
> # disable all MSVC extensions.
> '-DYY_USE_CONST=',
> ])
> + if host_platform.system() == 'Windows':
> + # Prefer winflexbison binaries -- http://winflexbison.sourceforge.net/
> + # --, as not only they are easier to install (no additional
> + # dependencies), but also better Windows support.
> + if check_prog(env, 'win_flex'):
> + env["LEX"] = 'win_flex'
> + env.Append(LEXFLAGS = [
> + # windows compatibility (uses <io.h> instead of <unistd.h> and
> + # _isatty, _fileno functions)
> + '--wincompat'
> + ])
> +
> env.Tool('yacc')
> + if host_platform.system() == 'Windows':
> + if check_prog(env, 'win_bison'):
> + env["YACC"] = 'win_bison'
> +
> if env['llvm']:
> env.Tool('llvm')
>
>
I wasn't aware of winflexbison. We should probably put a link to it on
the http://www.mesa3d.org/install.html#prereq-general page.
-Brian
More information about the mesa-dev
mailing list