glapi: work-around MSVC 65K string length limitation for enums.c
authorBrian Paul <brianp@vmware.com>
Tue, 1 Dec 2015 20:02:05 +0000 (13:02 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 1 Dec 2015 21:28:45 +0000 (14:28 -0700)
String literals cannot exceed 65535 characters for MSVC.  Instead of
emiting a string, emit an array of characters.

v2: fix indentation and add comment in the gl_enums.py file about this
ugliness.

Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mapi/glapi/gen/gl_enums.py

index 6e18f156f38f274db2cd4bef9c4fd417077195f5..62cc1b363008c49ec7cdd9a2ae5531ae84f0b249 100644 (file)
@@ -156,14 +156,21 @@ _mesa_lookup_prim_by_nr(GLuint nr)
         print '# define LONGSTRING'
         print '#endif'
         print ''
-        print 'LONGSTRING static const char enum_string_table[] = '
+        print 'LONGSTRING static const char enum_string_table[] = {'
+        # We express the very long concatenation of enum strings as an array
+        # of characters rather than as a string literal to work-around MSVC's
+        # 65535 character limit.
         for enum in sorted_enum_values:
             (name, pri) = self.enum_table[enum]
-            print '   "%s\\0"' % (name)
+            print "  ",
+            for ch in name:
+                print "'%c'," % ch,
+            print "'\\0',"
+
             string_offsets[ enum ] = i
             i += len(name) + 1
 
-        print '   ;'
+        print '};'
         print ''