Another round of gcc/g++ fixes.


git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@20819 e7fa87d3-cd2b-0410-9028-fcbf551c1848
diff --git a/OGLCompilersDLL/Makefile b/OGLCompilersDLL/Makefile
index f45495b..f788547 100644
--- a/OGLCompilersDLL/Makefile
+++ b/OGLCompilersDLL/Makefile
@@ -1,12 +1,11 @@
 INCLUDE = -I. -I../glslang -I../glslang/Include -I../glslang/OSDependent/Linux -I../glslang/MachineIndependent
 WARNINGS = -Wall -Wwrite-strings -Wpointer-arith -Wcast-align -Wstrict-prototypes \
 	-Wnested-externs
-DEFINE = -Dlinux -D__i386__
-  
+
 CPP = g++
-CPPOPTIONS = -O3 -Wno-deprecated -D_ALT_NS=1
-CPPOPTIONS = -g -Wno-deprecated -D_ALT_NS=1 
-CPPFLAGS = $(CPPOPTIONS) $(DEFINE) $(INCLUDE)
+CPPOPTIONS = -O3 -Wno-deprecated -D_ALT_NS=1 -fPIC
+CPPOPTIONS = -g -Wno-deprecated -D_ALT_NS=1 -fPIC
+CPPFLAGS = $(CPPOPTIONS) $(INCLUDE)
 
 #
 # Linking related
diff --git a/StandAlone/Makefile b/StandAlone/Makefile
index 80023b1..4337237 100644
--- a/StandAlone/Makefile
+++ b/StandAlone/Makefile
@@ -17,7 +17,7 @@
 	cd $(OBJECTPATH); make all
 
 %.o : %.cpp
-	$(CC) -c $<
+	$(CC) -g -c $<
 
 #
 # Cleanup
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 4544664..576c6d7 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -36,6 +36,7 @@
 #include "./../glslang/Include/ShHandle.h"
 #include "./../glslang/Public/ShaderLang.h"
 #include <string.h>
+#include <stdlib.h>
 #include <math.h>
 
 #ifdef _WIN32
@@ -283,17 +284,46 @@
 }
 
 
+#ifndef _WIN32
+
+#include <errno.h>
+
+int fopen_s(
+   FILE** pFile,
+   const char *filename,
+   const char *mode
+)
+{
+   if (!pFile || !filename || !mode) {
+      return EINVAL;
+   }
+
+   FILE* f = fopen(filename, mode);
+   if (! f) {
+      if (errno != 0) {
+         return errno;
+      } else {
+         return ENOENT;
+      }
+   }
+   *pFile = f;
+
+   return 0;
+}
+
+#endif
+
 //
 //   Malloc a string of sufficient size and read a string into it.
 //
-# define MAX_SOURCE_STRINGS 5
 char** ReadFileData(const char *fileName) 
 {
     FILE *in;
 	int errorCode = fopen_s(&in, fileName, "r");
     char *fdata;
     int count = 0;
-    char**return_data=(char**)malloc(MAX_SOURCE_STRINGS+1);
+    const int maxSourceStrings = 5;
+    char** return_data = (char**)malloc(maxSourceStrings+1);
 
     //return_data[MAX_SOURCE_STRINGS]=NULL;
 	if (errorCode) {
diff --git a/glslang/GenericCodeGen/Makefile b/glslang/GenericCodeGen/Makefile
index 2a2f62a..44b0fd2 100644
--- a/glslang/GenericCodeGen/Makefile
+++ b/glslang/GenericCodeGen/Makefile
@@ -5,6 +5,8 @@
 
 SRCS=CodeGen.cpp Link.cpp
 
+CPPFLAGS = -fPIC
+
 default : all
 all : libCodeGen.a
 
@@ -13,7 +15,7 @@
 	ranlib $@
 
 %.o : %.cpp
-	$(CC) -c $<
+	$(CC) -c $(CPPFLAGS) $<
 
 #
 # Cleanup
diff --git a/glslang/Include/ConstantUnion.h b/glslang/Include/ConstantUnion.h
index a4fd466..cd6a88c 100644
--- a/glslang/Include/ConstantUnion.h
+++ b/glslang/Include/ConstantUnion.h
@@ -108,6 +108,11 @@
                 return true;
 
             break;
+        case EbtUint:
+            if (constant.uConst == uConst)
+                return true;
+
+            break;
         case EbtFloat:
             if (constant.fConst == fConst)
                 return true;
@@ -123,6 +128,8 @@
                 return true;
 
             break;
+        default:
+            assert(false && "Default missing");
         }
 
         return false;
diff --git a/glslang/Include/PoolAlloc.h b/glslang/Include/PoolAlloc.h
index 3cacba3..b62bd23 100644
--- a/glslang/Include/PoolAlloc.h
+++ b/glslang/Include/PoolAlloc.h
@@ -62,6 +62,7 @@
 //
 
 #include <stddef.h>
+#include <string.h>
 #include <vector>
 
 // If we are using guard blocks, we must track each indivual
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index 22c88cb..644e6b8 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -110,6 +110,7 @@
         case EbtFloat:               break;
         case EbtInt:  s.append("i"); break;
         case EbtUint: s.append("u"); break;
+        default:  break;  // some compilers want this
         }
         if (image)
             s.append("image");
@@ -122,6 +123,7 @@
         case EsdCube:    s.append("Cube");   break;
         case EsdRect:    s.append("2DRect"); break;
         case EsdBuffer:  s.append("Buffer"); break;
+        default:  break;  // some compilers want this
         }
         if (ms)
             s.append("MS");
@@ -453,7 +455,7 @@
         }
     }
 
-    TString TType::getCompleteString() const
+    TString getCompleteString() const
     {
 	    const int maxSize = 200;
         char buf[maxSize];
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 0cc4e4f..dad01c9 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -1318,6 +1318,9 @@
     case EShLangTessEvaluation:
     case EShLangGeometry:
         // TODO: support these stages
+    
+    default:
+        assert(false && "Language not supported");
         break;
     }
 
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 7b50ee1..09bb958 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -93,6 +93,7 @@
     case EOpMul:
         if (left->getType().getBasicType() == EbtStruct || left->getType().getBasicType() == EbtBool || left->getType().isArray())
             return 0;
+    default: break; // some compilers want this
     }
 
     // 
@@ -218,6 +219,7 @@
     case EOpNegative:
         if (child->getType().getBasicType() == EbtStruct || child->getType().isArray())
             return 0;
+    default: break; // some compilers want this
     }
 
     //
@@ -229,6 +231,7 @@
     case EOpConstructBool:   newType = EbtBool;  break;
     case EOpConstructFloat:  newType = EbtFloat; break;
     case EOpConstructDouble: newType = EbtDouble; break;
+    default: break; // some compilers want this
     }
 
     if (newType != EbtVoid) {
@@ -249,6 +252,7 @@
     case EOpConstructFloat:
     case EOpConstructDouble:
         return child;
+    default: break; // some compilers want this
     }
     
     TIntermConstantUnion *childTempConstant = 0;
diff --git a/glslang/MachineIndependent/Makefile b/glslang/MachineIndependent/Makefile
index 3f1137a..4a84f67 100644
--- a/glslang/MachineIndependent/Makefile
+++ b/glslang/MachineIndependent/Makefile
@@ -11,13 +11,13 @@
 OBJECTS= Initialize.o IntermTraverse.o \
 	Intermediate.o ParseHelper.o PoolAlloc.o QualifierAlive.o \
 	RemoveTree.o ShaderLang.o intermOut.o parseConst.o SymbolTable.o \
-	InfoSink.o
+	InfoSink.o Versions.o Constant.o
 
 SRCS= gen_glslang.cpp gen_glslang_tab.cpp Initialize.cpp IntermTraverse.cpp \
 	Intermediate.cpp ParseHelper.cpp PoolAlloc.cp QualifierAlive.cpp \
 	RemoveTree.cpp ShaderLang.cpp SymbolTable.cpp intermOut.cpp \
-	parseConst.cpp InfoSink.cpp
-CPPFLAGS=$(DEFINE) $(INCLUDE)
+	parseConst.cpp InfoSink.cpp Versions.cpp Constant.cpp
+CPPFLAGS=$(DEFINE) $(INCLUDE) -fPIC
 SHAREDOBJECT=./lib/libglslang.so
 
 default: all
@@ -26,13 +26,13 @@
 
 $(SHAREDOBJECT): gen_glslang.o gen_glslang_tab.o $(OBJECTS) \
 	$(LIBPREPROCESSOR) $(LIBCODEGEN) $(LIBOSDEPENDENT) $(LIBINITIALISATION)
-	$(CC) -fPIC -shared -lc -o $@ $(OBJECTS) $(LIBPREPROCESSOR) $(LIBCODEGEN) $(LIBOSDEPENDENT) $(LIBINITIALISATION) gen_glslang.o gen_glslang_tab.o
+	$(CC) -fPIC -shared -o $@ -rdynamic -Wl,-whole-archive $(OBJECTS) $(LIBPREPROCESSOR) $(LIBCODEGEN) $(LIBOSDEPENDENT) $(LIBINITIALISATION) gen_glslang.o gen_glslang_tab.o -Wl,-no-whole-archive
 
 gen_glslang.o : gen_glslang.cpp glslang_tab.h
-	$(CC) -c $(INCLUDE) gen_glslang.cpp -o $@
+	$(CC) -fPIC -c $(INCLUDE) gen_glslang.cpp -o $@
 
 gen_glslang_tab.o : gen_glslang_tab.cpp 
-	$(CC) -c $(INCLUDE) gen_glslang_tab.cpp -o $@
+	$(CC) -fPIC -c $(INCLUDE) gen_glslang_tab.cpp -o $@
 
 gen_glslang.cpp: glslang.l
 	@echo Generating gen_glslang.cpp
@@ -159,3 +159,5 @@
 parseConst.o: localintermediate.h ../Include/intermediate.h
 parseConst.o: ../Public/ShaderLang.h
 InfoSink.o: ../Include/InfoSink.h
+Versions.o: ParseHelper.h  Versions.h ../Include/ShHandle.h SymbolTable.h localintermediate.h
+Constant.o: localintermediate.h ../Include/intermediate.h ../Public/ShaderLang.h SymbolTable.h Versions.h
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 001755f..93c23c2 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -264,6 +264,7 @@
         case EvqPointCoord:
             profileRequires(symbol->getLine(), ENoProfile, 120, 0, "gl_PointCoord");
             break;
+        default: break; // some compilers want this
         }
     }
 }
@@ -647,6 +648,7 @@
         error(line, "cannot use 'inout' at global scope", "", "");
 
         return true;
+    default: break; // some compilers want this
     }
 
     return false;
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 9a27d0e..93fcc06 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -40,7 +40,7 @@
 // This is the platform independent interface between an OGL driver
 // and the shading language compiler/linker.
 //
-
+#include <string.h>
 #include "SymbolTable.h"
 #include "ParseHelper.h"
 
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 9fe5dc1..1a958eb 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -64,6 +64,7 @@
         switch (sampler.type) {
         case EbtInt:   mangledName += "i"; break;
         case EbtUint:  mangledName += "u"; break;
+        default: break; // some compilers want this
         }
         if (sampler.image)
             mangledName += "I";
@@ -80,6 +81,7 @@
         case EsdCube:     mangledName += "C";  break;
         case EsdRect:     mangledName += "R2"; break;
         case EsdBuffer:   mangledName += "B";  break;
+        default: break; // some compilers want this
         }
         break;
     case EbtStruct:
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 3aff363..118a3f1 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -108,6 +108,7 @@
             case EBhEnable:
                 okay = true;
                 break;
+            default: break; // some compilers want this
             }
         }
 
diff --git a/glslang/MachineIndependent/glslang.l b/glslang/MachineIndependent/glslang.l
index 48a7a96..4671352 100644
--- a/glslang/MachineIndependent/glslang.l
+++ b/glslang/MachineIndependent/glslang.l
@@ -920,6 +920,8 @@
                 msg = TString("extension '") + extName + "' is not supported";

                 pc.infoSink.info.message(EPrefixWarning, msg.c_str(), yylineno);

                 break;

+            default:

+                assert(0 && "unexpected behaviorVal");

             }

 

             return;

diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 93dff17..477fa0f 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -669,6 +669,7 @@
                         case 2: op = EOpConstructMat2x2; break;

                         case 3: op = EOpConstructMat2x3; break;

                         case 4: op = EOpConstructMat2x4; break;

+                        default: break; // some compilers want this

                         }

                         break;

                     case 3:

@@ -676,6 +677,7 @@
                         case 2: op = EOpConstructMat3x2; break;

                         case 3: op = EOpConstructMat3x3; break;

                         case 4: op = EOpConstructMat3x4; break;

+                        default: break; // some compilers want this

                         }

                         break;

                     case 4:

@@ -683,8 +685,10 @@
                         case 2: op = EOpConstructMat4x2; break;

                         case 3: op = EOpConstructMat4x3; break;

                         case 4: op = EOpConstructMat4x4; break;

+                        default: break; // some compilers want this

                         }

                         break;

+                    default: break; // some compilers want this

                     }

                 } else {

                     switch($1.vectorSize) {

@@ -692,6 +696,7 @@
                     case 2: op = EOpConstructVec2;  break;

                     case 3: op = EOpConstructVec3;  break;

                     case 4: op = EOpConstructVec4;  break;

+                    default: break; // some compilers want this

                     }

                 }

                 break;

@@ -703,6 +708,7 @@
                         case 2: op = EOpConstructDMat2x2; break;

                         case 3: op = EOpConstructDMat2x3; break;

                         case 4: op = EOpConstructDMat2x4; break;

+                        default: break; // some compilers want this

                         }

                         break;

                     case 3:

@@ -710,6 +716,7 @@
                         case 2: op = EOpConstructDMat3x2; break;

                         case 3: op = EOpConstructDMat3x3; break;

                         case 4: op = EOpConstructDMat3x4; break;

+                        default: break; // some compilers want this

                         }

                         break;

                     case 4:

@@ -717,6 +724,7 @@
                         case 2: op = EOpConstructDMat4x2; break;

                         case 3: op = EOpConstructDMat4x3; break;

                         case 4: op = EOpConstructDMat4x4; break;

+                        default: break; // some compilers want this

                         }

                         break;

                     }

@@ -726,6 +734,7 @@
                     case 2: op = EOpConstructDVec2;  break;

                     case 3: op = EOpConstructDVec3;  break;

                     case 4: op = EOpConstructDVec4;  break;

+                    default: break; // some compilers want this

                     }

                 }

                 break;

@@ -735,6 +744,7 @@
                 case 2: op = EOpConstructIVec2; break;

                 case 3: op = EOpConstructIVec3; break;

                 case 4: op = EOpConstructIVec4; break;

+                default: break; // some compilers want this

                 }

                 break;

             case EbtBool:

@@ -743,8 +753,10 @@
                 case 2:  op = EOpConstructBVec2; break;

                 case 3:  op = EOpConstructBVec3; break;

                 case 4:  op = EOpConstructBVec4; break;

+                default: break; // some compilers want this

                 }

                 break;

+            default: break; // some compilers want this

             }

             if (op == EOpNull) {

                 parseContext.error($1.line, "cannot construct this type", TType::getBasicString($1.type), "");

@@ -829,7 +841,7 @@
                 case EOpNegative:   errorOp[0] = '-'; break;

                 case EOpLogicalNot: errorOp[0] = '!'; break;

                 case EOpBitwiseNot: errorOp[0] = '~'; break;

-                default: break;

+                default: break; // some compilers want this

                 }

                 parseContext.unaryOpError($1.line, errorOp, $2->getCompleteString());

                 parseContext.recover();

diff --git a/glslang/MachineIndependent/preprocessor/Makefile b/glslang/MachineIndependent/preprocessor/Makefile
index 1219cc0..73af8ab 100644
--- a/glslang/MachineIndependent/preprocessor/Makefile
+++ b/glslang/MachineIndependent/preprocessor/Makefile
@@ -1,7 +1,7 @@
 INCLUDE = -I../
-CC = g++
+CC = gcc
 
-CPPFLAGS=$(DEFINE) $(INCLUDE)
+CPPFLAGS=$(DEFINE) $(INCLUDE) -fPIC
 
 OBJECTS = atom.o cpp.o cppstruct.o memory.o scanner.o symbols.o tokens.o
 AR=ar
@@ -14,7 +14,7 @@
 	ranlib $@
 
 %.o : %.c
-	$(CC) $(CPPFLAGS) -c $<
+	$(CC) -c $(CPPFLAGS) $<
 
 #
 # Cleanup
diff --git a/glslang/MachineIndependent/preprocessor/cpp.c b/glslang/MachineIndependent/preprocessor/cpp.c
index b8fa1cb..577bfbb 100644
--- a/glslang/MachineIndependent/preprocessor/cpp.c
+++ b/glslang/MachineIndependent/preprocessor/cpp.c
@@ -128,6 +128,10 @@
 
 static SourceLoc ifloc; /* outermost #if */
 
+int ChkCorrectElseNesting(void);
+int PredefineMacro(char *);
+void FreeMacro(MacroSymbol *);
+
 int InitCPP(void)
 {
     char        buffer[64], *t;
diff --git a/glslang/MachineIndependent/preprocessor/cpp.h b/glslang/MachineIndependent/preprocessor/cpp.h
index 2995892..91d31dc 100644
--- a/glslang/MachineIndependent/preprocessor/cpp.h
+++ b/glslang/MachineIndependent/preprocessor/cpp.h
@@ -85,12 +85,6 @@
 #include "tokens.h"
 #include "Versions.h"
 
-int InitCPP(void);
-int FinalCPP(void);
-int  readCPPline(yystypepp * yylvalpp);
-int MacroExpand(int atom, yystypepp * yylvalpp);
-int ChkCorrectElseNesting(void);
-
 typedef struct MacroSymbol {
     int argc;
     int *args;
@@ -99,8 +93,14 @@
     unsigned undef:1;
 } MacroSymbol;
 
-void FreeMacro(MacroSymbol *);
-int PredefineMacro(char *);
+int InitCPP(void);
+int FinalCPP(void);
+int readCPPline(yystypepp * yylvalpp);
+int MacroExpand(int atom, yystypepp * yylvalpp);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 void  CPPDebugLogMsg(const char *msg);      // Prints information into debug log
 void  CPPShInfoLogMsg(const char*);         // Store cpp Err Msg into Sh.Info.Log
@@ -118,4 +118,9 @@
 void  updateExtensionBehavior(const char* extName, const char* behavior);
 int   FreeCPP(void);
 
+#ifdef __cplusplus
+}
+#endif
+
+
 #endif // !(defined(__CPP_H)
diff --git a/glslang/MachineIndependent/preprocessor/memory.c b/glslang/MachineIndependent/preprocessor/memory.c
index 36022bd..7024671 100644
--- a/glslang/MachineIndependent/preprocessor/memory.c
+++ b/glslang/MachineIndependent/preprocessor/memory.c
@@ -79,7 +79,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#ifdef __STDC99__
+#ifdef _WIN32
 #include <stdint.h>
 #elif defined (_WIN64)
 typedef unsigned __int64 uintptr_t;
diff --git a/glslang/MachineIndependent/preprocessor/scanner.c b/glslang/MachineIndependent/preprocessor/scanner.c
index 1f6f925..13459f1 100644
--- a/glslang/MachineIndependent/preprocessor/scanner.c
+++ b/glslang/MachineIndependent/preprocessor/scanner.c
@@ -208,7 +208,7 @@
 int ScanFromString(char *s)
 {
     
-	StringInputSrc *in = malloc(sizeof(StringInputSrc));
+	StringInputSrc *in = (StringInputSrc *)malloc(sizeof(StringInputSrc));
     memset(in, 0, sizeof(StringInputSrc));
 	in->p = s;
     in->base.line = 1;
diff --git a/glslang/MachineIndependent/preprocessor/scanner.h b/glslang/MachineIndependent/preprocessor/scanner.h
index c45c4d7..1bcb024 100644
--- a/glslang/MachineIndependent/preprocessor/scanner.h
+++ b/glslang/MachineIndependent/preprocessor/scanner.h
@@ -87,6 +87,9 @@
 #include "parser.h"
 
 // Not really atom table stuff but needed first...
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 typedef struct SourceLoc_Rec {
     unsigned short file, line;
@@ -114,5 +117,10 @@
 void IncLineNumber(void);
 void DecLineNumber(void);
 int FreeScanner(void);                  // Free the cpp scanner
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif // !(defined(__SCANNER_H)
 
diff --git a/glslang/MachineIndependent/preprocessor/symbols.c b/glslang/MachineIndependent/preprocessor/symbols.c
index 2929ef1..579779e 100644
--- a/glslang/MachineIndependent/preprocessor/symbols.c
+++ b/glslang/MachineIndependent/preprocessor/symbols.c
@@ -94,7 +94,7 @@
 Scope *GlobalScope = NULL;
 
 static void unlinkScope(void *_scope) {
-    Scope *scope = _scope;
+    Scope *scope = (Scope*)_scope;
 
     if (scope->next)
         scope->next->prev = scope->prev;
@@ -112,7 +112,7 @@
 {
     Scope *lScope;
 
-    lScope = mem_Alloc(pool, sizeof(Scope));
+    lScope = (Scope*)mem_Alloc(pool, sizeof(Scope));
     lScope->pool = pool;
     lScope->parent = NULL;
     lScope->funScope = NULL;
diff --git a/glslang/MachineIndependent/preprocessor/tokens.c b/glslang/MachineIndependent/preprocessor/tokens.c
index 4a2d393..af18d74 100644
--- a/glslang/MachineIndependent/preprocessor/tokens.c
+++ b/glslang/MachineIndependent/preprocessor/tokens.c
@@ -242,7 +242,7 @@
 void RecordToken(TokenStream *pTok, int token, yystypepp * yylvalpp)
 {
     const char *s;
-    unsigned char *str=NULL;
+    char *str = NULL;
 
     if (token > 256)
         lAddByte(pTok, (unsigned char)((token & 0x7f) + 0x80));
@@ -259,10 +259,10 @@
         break;
     case CPP_FLOATCONSTANT:
     case CPP_INTCONSTANT:
-         str=yylvalpp->symbol_name;
+         str = yylvalpp->symbol_name;
          while (*str){
-            lAddByte(pTok,(unsigned char) *str);
-            *str++;
+            lAddByte(pTok, (unsigned char) *str);
+            str++;
          }
          lAddByte(pTok, 0);
          break;
@@ -398,7 +398,7 @@
 
 int ReadFromTokenStream(TokenStream *ts, int name, int (*final)(CPPStruct *))
 {
-    TokenInputSrc *in = malloc(sizeof(TokenInputSrc));
+    TokenInputSrc *in = (TokenInputSrc *) malloc(sizeof(TokenInputSrc));
     memset(in, 0, sizeof(TokenInputSrc));
     in->base.name = name;
     in->base.prev = cpp->currentInput;
@@ -426,12 +426,14 @@
     return token;
 }
 
+typedef int (*scanFnPtr_t)(struct InputSrc *, yystypepp *);
+
 void UngetToken(int token, yystypepp * yylvalpp) {
-    UngotToken *t = malloc(sizeof(UngotToken));
+    UngotToken *t = (UngotToken *) malloc(sizeof(UngotToken));
     memset(t, 0, sizeof(UngotToken));
     t->token = token;
     t->lval = *yylvalpp;
-    t->base.scan = (void *)reget_token;
+    t->base.scan = (scanFnPtr_t)reget_token;
     t->base.prev = cpp->currentInput;
     t->base.name = cpp->currentInput->name;
     t->base.line = cpp->currentInput->line;
diff --git a/glslang/OSDependent/Linux/Makefile b/glslang/OSDependent/Linux/Makefile
index dc8d074..e09ad49 100644
--- a/glslang/OSDependent/Linux/Makefile
+++ b/glslang/OSDependent/Linux/Makefile
@@ -9,12 +9,11 @@
 INCLUDE = -I. -I../.. -I../../Include -I../../../OGLCompilersDLL 
 WARNINGS = -Wall -Wwrite-strings -Wpointer-arith -Wcast-align -Wstrict-prototypes \
 	-Wnested-externs
-DEFINE = -Dlinux -D__i386__
   
 CPP = g++
-CPPOPTIONS = -O3 -Wno-deprecated -D_ALT_NS=1
-CPPOPTIONS = -g -Wno-deprecated -D_ALT_NS=1 
-CPPFLAGS = $(CPPOPTIONS) $(DEFINE) $(INCLUDE)
+CPPOPTIONS = -O3 -Wno-deprecated -D_ALT_NS=1 -fPIC
+CPPOPTIONS = -g -Wno-deprecated -D_ALT_NS=1 -fPIC
+CPPFLAGS = $(CPPOPTIONS) $(INCLUDE)
 
 #
 # Linking related