1diff -rupN Mesa-7.8.2/bin/mklib Mesa-7.8.2-haiku/bin/mklib
2--- Mesa-7.8.2/bin/mklib	2010-06-15 17:43:41.034340864 +0000
3+++ Mesa-7.8.2-haiku/bin/mklib	2012-01-17 09:57:07.461373440 +0000
4@@ -260,7 +260,7 @@ if [ $STATIC = 1 ]; then
5     NEWOBJECTS=""
6     for OBJ in $OBJECTS ; do
7 	case $OBJ in
8-	    -Wl,*)
9+	    -Wl,*|-L*|-l*)
10 		echo "mklib: warning: ignoring $OBJ for static library"
11 		;;
12 	    *)
13@@ -307,7 +307,7 @@ fi
14 #
15 case $ARCH in
16 
17-    'Linux' | 'OpenBSD' | 'DragonFly' | 'GNU' | GNU/*)
18+    'Linux' | 'OpenBSD' | 'DragonFly' | 'GNU' | GNU/* | 'NetBSD')
19 	# we assume gcc
20 
21 	if [ "x$LINK" = "x" ] ; then
22@@ -494,13 +494,16 @@ case $ARCH in
23 		OPTS="${OPTS} -Wl,-Mmapfile.scope"
24 	    fi
25 
26-	    # Check if objects are SPARC v9
27+	    # Check if objects are 64-bit
28 	    # file says: ELF 64-bit MSB relocatable SPARCV9 Version 1
29 	    set ${OBJECTS}
30 	    if [ ${LINK} = "cc" -o ${LINK} = "CC" ] ; then
31-		SPARCV9=`file $1 | grep SPARCV9`
32-		if [ "${SPARCV9}" ] ; then
33-		    OPTS="${OPTS} -xarch=v9"
34+		ABI64=`file $1 | grep "ELF 64-bit"`
35+		if [ "${ABI64}" ] ; then
36+		    case `uname -p` in
37+			sparc)	    OPTS="${OPTS} -xarch=v9" ;;
38+			i386)	    OPTS="${OPTS} -xarch=amd64" ;;
39+		    esac
40 		fi
41 	    fi
42             if [ "${ALTOPTS}" ] ; then
43@@ -571,20 +574,6 @@ case $ARCH in
44 	fi
45 	;;
46 
47-    'NetBSD')
48-        if [ $STATIC = 1 ] ; then
49-	    LIBNAME="lib${LIBNAME}_pic.a"
50-	    echo "mklib: Making NetBSD PIC static library: " ${LIBNAME}
51-	    FINAL_LIBS=`make_ar_static_lib cq 1 ${LIBNAME} ${OBJECTS}`
52-	else
53-	    LIBNAME="lib${LIBNAME}.so.${MAJOR}.${MINOR}"
54-	    echo "mklib: Making NetBSD PIC shared library: " ${LIBNAME}
55-	    rm -f ${LIBNAME}
56-	    ld -x -Bshareable -Bforcearchive -o ${LIBNAME} ${OBJECTS}
57-	    FINAL_LIBS=${LIBNAME}
58-	fi
59-	;;
60-
61     'IRIX' | 'IRIX64')
62         if [ $STATIC = 1 ] ; then
63 	    LIBNAME="lib${LIBNAME}.a"
64@@ -778,9 +767,8 @@ case $ARCH in
65                 OPTS="${OPTS} -exported_symbols_list ${EXPORTS}"
66             fi
67 
68-            LINKNAME="lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}"
69-            LINKNAME2="lib${LIBNAME}.${LIBSUFFIX}"
70-            LIBNAME="lib${LIBNAME}.${MAJOR}.${MINOR}.${LIBSUFFIX}"
71+            LINKNAME="lib${LIBNAME}.${LIBSUFFIX}"
72+            LIBNAME="lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}"
73 
74 	    # examine first object to determine ABI
75     	    set ${OBJECTS}
76@@ -793,9 +781,6 @@ case $ARCH in
77                 OPTS=${ALTOPTS}
78             fi
79 
80-	    # XXX can we always add -isysroot /Developer/SDKs/MacOSX10.4u.sdk
81-	    # to OPTS here?
82-
83 	    # determine linker
84 	    if [ $CPLUSPLUS = 1 ] ; then
85 		LINK="g++"
86@@ -807,8 +792,7 @@ case $ARCH in
87 
88             ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS}
89             ln -s ${LIBNAME} ${LINKNAME}
90-            ln -s ${LIBNAME} ${LINKNAME2}
91-            FINAL_LIBS="${LIBNAME} ${LINKNAME} ${LINKNAME2}"
92+            FINAL_LIBS="${LIBNAME} ${LINKNAME}"
93         fi
94         ;;
95 
96@@ -818,22 +802,6 @@ case $ARCH in
97         FINAL_LIBS=`make_ar_static_lib -ru 0 ${LIBNAME} ${OBJECTS}`
98 	;;
99 
100-    'BeOS')
101-        if [ $STATIC = 1 ] ; then
102-            LIBNAME="lib${LIBNAME}.a"
103-            echo "mklib: Making BeOS static library: " ${LIBNAME}
104-            FINAL_LIBS=`make_ar_static_lib -cru 0 ${LIBNAME} ${OBJECTS}`
105-        else
106-	    LIBNAME="lib${LIBNAME}.so"
107-	    echo "mklib: Making BeOS shared library: " ${LIBNAME}
108-	    gcc -nostart -Xlinker "-soname=${LIBNAME}" -L/Be/develop/lib/x86 -lbe ${DEPS} ${OBJECTS} -o "${LIBNAME}"
109-	    mimeset -f "${LIBNAME}"
110-	    # XXX remove the Mesa3D stuff here since mklib isn't mesa-specific.
111-	    setversion "${LIBNAME}" -app ${MAJOR} ${MINOR} ${PATCH} -short "Powered by Mesa3D!" -long "Powered by Mesa3D!"
112-	fi
113-	FINAL_LIBS=${LIBNAME}
114-	;;
115-
116     'QNX')
117 	LIBNAME="lib${LIBNAME}.a"
118 	echo "mklib: Making QNX library: " ${LIBNAME}
119@@ -927,6 +895,16 @@ case $ARCH in
120 
121      CYGWIN*)
122 	# GCC-based environment
123+
124+	if [ "x$LINK" = "x" ] ; then
125+	    # -linker was not specified so set default link command now
126+            if [ $CPLUSPLUS = 1 ] ; then
127+                LINK=g++
128+            else
129+                LINK=gcc
130+            fi
131+	fi
132+
133 	if [ $NOPREFIX = 1 ] ; then
134 	    # No "lib" or ".so" part
135 	    echo "mklib: Making CYGWIN shared library: " ${LIBNAME}
136@@ -935,7 +913,7 @@ case $ARCH in
137                 OPTS=${ALTOPTS}
138             fi
139 	    rm -f ${LIBNAME}
140-	    ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS}
141+	    ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} || exit $?
142 	    FINAL_LIBS=${LIBNAME}
143         else
144 	CYGNAME="cyg${LIBNAME}"     # prefix with "cyg"
145@@ -943,7 +921,7 @@ case $ARCH in
146 
147         if [ $STATIC = 1 ] ; then
148 	    LIBNAME=${LIBNAME}.a
149-            echo "mklib: Making" $ARCH "static library: " ${LIBNAME}
150+            echo "mklib: Making CYGWIN static library: " ${LIBNAME}
151             OPTS="-ru"
152             if [ "${ALTOPTS}" ] ; then
153                 OPTS=${ALTOPTS}
154@@ -961,13 +939,7 @@ case $ARCH in
155             if [ "${ALTOPTS}" ] ; then
156                 OPTS=${ALTOPTS}
157             fi
158-            echo "mklib: Making" $ARCH "shared library: " ${CYGNAME}-${MAJOR}.dll
159-
160-            if [ $CPLUSPLUS = 1 ] ; then
161-                LINK="g++"
162-            else
163-                LINK="gcc"
164-            fi
165+            echo "mklib: Making CYGWIN shared library: " ${CYGNAME}-${MAJOR}.dll
166 
167             # rm any old libs
168             rm -f ${CYGNAME}-${MAJOR}.dll
169@@ -976,12 +948,7 @@ case $ARCH in
170             rm -f ${LIBNAME}.a
171 
172             # make lib
173-            ${LINK} ${OPTS} ${LDFLAGS} -o ${CYGNAME}-${MAJOR}.dll ${OBJECTS} ${DEPS}
174-            # make build fail if link failed
175-            es=$?
176-            if [ "$es" -ne "0" ]; then
177-                exit $es
178-            fi
179+            ${LINK} ${OPTS} ${LDFLAGS} -o ${CYGNAME}-${MAJOR}.dll ${OBJECTS} ${DEPS} || exit $?
180             # make usual symlinks
181             ln -s ${LIBNAME}-${MAJOR}.dll.a ${LIBNAME}.dll.a
182             # finish up
183@@ -992,6 +959,43 @@ case $ARCH in
184         fi
185 	;;
186 
187+	'Haiku')
188+		if [ $STATIC = 1 ] ; then
189+			LIBNAME="lib${LIBNAME}.a"
190+			if [ "x$LINK" = "x" ] ; then
191+				# -linker was not specified so set default link command now
192+				if [ $CPLUSPLUS = 1 ] ; then
193+					LINK=g++
194+				else
195+					LINK=gcc
196+				fi
197+			fi
198+
199+			OPTS="-ru"
200+			if [ "${ALTOPTS}" ] ; then
201+				OPTS=${ALTOPTS}
202+			fi
203+
204+			echo "mklib: Making static library for Haiku: " ${LIBNAME}
205+
206+			# expand .a into .o files
207+			NEW_OBJECTS=`expand_archives ${LIBNAME}.obj $OBJECTS`
208+
209+			# make static lib
210+			FINAL_LIBS=`make_ar_static_lib ${OPTS} 1 ${LIBNAME} ${NEW_OBJECTS}`
211+
212+			# remove temporary extracted .o files
213+			rm -rf ${LIBNAME}.obj
214+		else
215+			LIBNAME="lib${LIBNAME}.so"  # prefix with "lib", suffix with ".so"
216+			OPTS="-shared"
217+
218+			echo "mklib: Making shared library for Haiku: " ${LIBNAME}
219+			${LINK} ${OPTS} ${LDFLAGS} ${OBJECTS} ${DEPS} -o ${LIBNAME}
220+			FINAL_LIBS="${LIBNAME}"
221+		fi
222+	;;
223+
224     'example')
225 	# If you're adding support for a new architecture, you can
226 	# start with this:
227@@ -1021,4 +1025,9 @@ if [ ${INSTALLDIR} != "." ] ; then
228     echo "mklib: Installing" ${FINAL_LIBS} "in" ${INSTALLDIR}
229     test -d ${INSTALLDIR} || mkdir -p ${INSTALLDIR}
230     mv ${FINAL_LIBS} ${INSTALLDIR}/
231+
232+    if [ "x${FINAL_BINS}" != "x" ] ; then
233+        echo "mklib: Installing" ${FINAL_BINS} "in" ${INSTALLDIR}
234+        mv ${FINAL_BINS} ${INSTALLDIR}/
235+    fi
236 fi
237diff -rupN Mesa-7.8.2/configs/current Mesa-7.8.2-haiku/configs/current
238--- Mesa-7.8.2/configs/current	1970-01-01 00:00:00.000000000 +0000
239+++ Mesa-7.8.2-haiku/configs/current	2012-01-17 11:03:50.553910272 +0000
240@@ -0,0 +1,63 @@
241+# Configuration for Haiku
242+# Written by Alexander von Gluck IV
243+#
244+# Based on the BeOS config 
245+# written by Philippe Houdoin
246+
247+include $(TOP)/configs/default
248+
249+CONFIG_NAME = haiku
250+
251+# Haiku settings
252+
253+DEFINES = \
254+	-DBEOS_THREADS \
255+	-DGNU_ASSEMBLER \
256+	-DUSE_X86_ASM \
257+	-DUSE_MMX_ASM \
258+	-DUSE_3DNOW_ASM \
259+	-DUSE_SSE_ASM
260+ 
261+MESA_ASM_SOURCES = $(X86_SOURCES)
262+GLAPI_ASM_SOURCES = $(X86_API)
263+
264+CC = gcc
265+CXX = g++
266+LD = gcc
267+ 
268+CFLAGS = -Wall -Wno-multichar $(DEFINES)
269+CXXFLAGS = $(CFLAGS)
270+LDFLAGS +=
271+
272+# Work around aliasing bugs - developers should comment this out
273+CFLAGS += -fno-strict-aliasing
274+#CFLAGS += -std=c99
275+CXXFLAGS += -fno-strict-aliasing
276+
277+# No makedepend on Haiku, this will solve it
278+MKDEP = true
279+
280+# Debug defines
281+ifdef DEBUG
282+	CFLAGS  += -g -O0
283+	LDFLAGS += -g
284+	DEFINES += -DDEBUG
285+else
286+	CFLAGS   += -O3
287+endif
288+
289+# GLU settings
290+GLU_LIB_NAME = libglu.a
291+GLU_LIB = glu
292+
293+# Directories
294+SRC_DIRS = glsl mesa/x86 mapi/glapi mesa glu
295+GLU_DIRS = sgi
296+DRIVER_DIRS =
297+PROGRAM_DIRS =
298+
299+# Library/program dependencies
300+GL_LIB_DEPS = 
301+OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB)
302+GLU_LIB_DEPS =  
303+APP_LIB_DEPS = -lbe -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -l$(GLUT_LIB)
304diff -rupN Mesa-7.8.2/configs/haiku Mesa-7.8.2-haiku/configs/haiku
305--- Mesa-7.8.2/configs/haiku	1970-01-01 00:00:00.000000000 +0000
306+++ Mesa-7.8.2-haiku/configs/haiku	2012-01-17 11:03:50.553910272 +0000
307@@ -0,0 +1,63 @@
308+# Configuration for Haiku
309+# Written by Alexander von Gluck IV
310+#
311+# Based on the BeOS config 
312+# written by Philippe Houdoin
313+
314+include $(TOP)/configs/default
315+
316+CONFIG_NAME = haiku
317+
318+# Haiku settings
319+
320+DEFINES = \
321+	-DBEOS_THREADS \
322+	-DGNU_ASSEMBLER \
323+	-DUSE_X86_ASM \
324+	-DUSE_MMX_ASM \
325+	-DUSE_3DNOW_ASM \
326+	-DUSE_SSE_ASM
327+ 
328+MESA_ASM_SOURCES = $(X86_SOURCES)
329+GLAPI_ASM_SOURCES = $(X86_API)
330+
331+CC = gcc
332+CXX = g++
333+LD = gcc
334+ 
335+CFLAGS = -Wall -Wno-multichar $(DEFINES)
336+CXXFLAGS = $(CFLAGS)
337+LDFLAGS +=
338+
339+# Work around aliasing bugs - developers should comment this out
340+CFLAGS += -fno-strict-aliasing
341+#CFLAGS += -std=c99
342+CXXFLAGS += -fno-strict-aliasing
343+
344+# No makedepend on Haiku, this will solve it
345+MKDEP = true
346+
347+# Debug defines
348+ifdef DEBUG
349+	CFLAGS  += -g -O0
350+	LDFLAGS += -g
351+	DEFINES += -DDEBUG
352+else
353+	CFLAGS   += -O3
354+endif
355+
356+# GLU settings
357+GLU_LIB_NAME = libglu.a
358+GLU_LIB = glu
359+
360+# Directories
361+SRC_DIRS = glsl mesa/x86 mapi/glapi mesa glu
362+GLU_DIRS = sgi
363+DRIVER_DIRS =
364+PROGRAM_DIRS =
365+
366+# Library/program dependencies
367+GL_LIB_DEPS = 
368+OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB)
369+GLU_LIB_DEPS =  
370+APP_LIB_DEPS = -lbe -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -l$(GLUT_LIB)
371Binary files Mesa-7.8.2/lib/libglu.a and Mesa-7.8.2-haiku/lib/libglu.a differ
372diff -rupN Mesa-7.8.2/Makefile Mesa-7.8.2-haiku/Makefile
373--- Mesa-7.8.2/Makefile	2010-06-16 21:22:57.033030144 +0000
374+++ Mesa-7.8.2-haiku/Makefile	2012-01-17 09:56:45.423886848 +0000
375@@ -84,6 +84,7 @@ freebsd \
376 freebsd-dri \
377 freebsd-dri-amd64 \
378 freebsd-dri-x86 \
379+haiku \
380 hpux10 \
381 hpux10-gcc \
382 hpux10-static \
383diff -rupN Mesa-7.8.2/src/gallium/auxiliary/draw/draw_private.h Mesa-7.8.2-haiku/src/gallium/auxiliary/draw/draw_private.h
384--- Mesa-7.8.2/src/gallium/auxiliary/draw/draw_private.h	2010-06-15 17:43:42.046137344 +0000
385+++ Mesa-7.8.2-haiku/src/gallium/auxiliary/draw/draw_private.h	2012-01-17 09:59:43.815005696 +0000
386@@ -70,7 +70,7 @@ struct vertex_header {
387 
388    /* This will probably become float (*data)[4] soon:
389     */
390-   float data[][4];
391+   float (*data)[4];
392 };
393 
394 /* NOTE: It should match vertex_id size above */
395diff -rupN Mesa-7.8.2/src/gallium/auxiliary/os/os_thread.h Mesa-7.8.2-haiku/src/gallium/auxiliary/os/os_thread.h
396--- Mesa-7.8.2/src/gallium/auxiliary/os/os_thread.h	2010-06-15 17:43:42.056098816 +0000
397+++ Mesa-7.8.2-haiku/src/gallium/auxiliary/os/os_thread.h	2012-01-17 10:00:38.613154816 +0000
398@@ -257,7 +257,7 @@ typedef unsigned pipe_condvar;
399  * pipe_barrier
400  */
401 
402-#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_OS_SOLARIS) || defined(PIPE_OS_HAIKU)
403+#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_OS_SOLARIS)
404 
405 typedef pthread_barrier_t pipe_barrier;
406 
407diff -rupN Mesa-7.8.2/src/gallium/auxiliary/util/u_debug.h Mesa-7.8.2-haiku/src/gallium/auxiliary/util/u_debug.h
408--- Mesa-7.8.2/src/gallium/auxiliary/util/u_debug.h	2010-06-15 17:43:42.066584576 +0000
409+++ Mesa-7.8.2-haiku/src/gallium/auxiliary/util/u_debug.h	2012-01-17 10:02:01.553385984 +0000
410@@ -91,8 +91,10 @@ debug_printf(const char *format, ...)
411    (void) format; /* silence warning */
412 #endif
413 }
414-
415-#endif /* !PIPE_OS_HAIKU */
416+#else /* is Haiku */
417+/* Haiku provides debug_printf in libroot with OS.h */
418+#include <OS.h>
419+#endif
420 
421 /*
422  * ... isn't portable so we need to pass arguments in parentheses.
423diff -rupN Mesa-7.8.2/src/glu/sgi/Makefile Mesa-7.8.2-haiku/src/glu/sgi/Makefile
424--- Mesa-7.8.2/src/glu/sgi/Makefile	2010-02-05 00:10:40.063963136 +0000
425+++ Mesa-7.8.2-haiku/src/glu/sgi/Makefile	2012-01-17 10:02:42.222822400 +0000
426@@ -135,13 +135,19 @@ $(TOP)/$(LIB_DIR):
427 	-mkdir $(TOP)/$(LIB_DIR)
428 
429 # Make the library:
430-$(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME): $(OBJECTS)
431+$(TOP)/$(LIB_DIR)/lib$(GLU_LIB).so: $(OBJECTS)
432 	$(MKLIB) -o $(GLU_LIB) -linker '$(CXX)' -ldflags '$(LDFLAGS)' \
433 		-major $(GLU_MAJOR) -minor $(GLU_MINOR) -patch $(GLU_TINY) \
434 		-cplusplus $(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
435 		-exports glu.exports -id $(INSTALL_LIB_DIR)/lib$(GLU_LIB).$(GLU_MAJOR).dylib \
436 		$(GLU_LIB_DEPS) $(OBJECTS)
437 
438+$(TOP)/$(LIB_DIR)/lib$(GLU_LIB).a: $(OBJECTS)
439+	$(MKLIB) -o $(GLU_LIB) -static -linker '$(CXX)' -ldflags '$(LDFLAGS)' \
440+		-major $(GLU_MAJOR) -minor $(GLU_MINOR) -patch $(GLU_TINY) \
441+		-cplusplus $(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
442+		-exports glu.exports -id $(INSTALL_LIB_DIR)/lib$(GLU_LIB).$(GLU_MAJOR).dylib \
443+		$(GLU_LIB_DEPS) $(OBJECTS)
444 
445 clean:
446 	-rm -f *.o */*.o */*/*.o
447diff -rupN Mesa-7.8.2/src/mesa/glapi/glapi.h Mesa-7.8.2-haiku/src/mesa/glapi/glapi.h
448--- Mesa-7.8.2/src/mesa/glapi/glapi.h	2010-06-15 17:43:43.026214400 +0000
449+++ Mesa-7.8.2-haiku/src/mesa/glapi/glapi.h	2012-01-17 10:51:04.699662336 +0000
450@@ -62,7 +62,7 @@ typedef void (*_glapi_proc)(void); /* ge
451 #endif
452 
453 
454-#if defined(__GNUC__)
455+#if defined(__GNUC__) && __GNUC__ > 2
456 #  define likely(x)   __builtin_expect(!!(x), 1)
457 #  define unlikely(x) __builtin_expect(!!(x), 0)
458 #else
459