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?


Jose
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to