[Mesa-dev] [PATCH 09/15] scons: Prefer winflexbison, and use --wincompat when available.
Brian Paul
brianp at vmware.com
Fri Mar 20 08:39:58 PDT 2015
On 03/20/2015 09:30 AM, Jose Fonseca wrote:
> On 20/03/15 14:36, Brian Paul wrote:
>> 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.
>
> Yeah, I only came across it recently. I remember searching for a native
> Win32 version of flex/bison that didn't depend on cygwin/msys just 1-2
> years ago and not finding it.
>
> > We should probably put a link to it on
>> the http://www.mesa3d.org/install.html#prereq-general page.
>
> Sure. I'll move the link to there.
>
>
> BTW, it would be to have the Windows build instructions that are spread
> between README.WIN32, install.html, and to some extent llvmpipe.htm, in
> a single place. I presume that that single place should be install.html?
Maybe there should be a windows.html page which captures all the Windows
build instructions. Feel free to do whatever's easiest.
-Brian
More information about the mesa-dev
mailing list