Port Mesa to build on a P64 platform (e.g., Win64).  P64 platforms
use 64-bit pointers and 32-bit longs.  So, operations like casting pointers
to unsigned long and back to pointer won't work.  glheader.h now
includes files to define uintptr_t, which should instead be used for
this sort of operation.  It is an integer type that is the same size
as a pointer.
diff --git a/src/mesa/main/api_arrayelt.c b/src/mesa/main/api_arrayelt.c
index cb827c2..6a531aa 100644
--- a/src/mesa/main/api_arrayelt.c
+++ b/src/mesa/main/api_arrayelt.c
@@ -989,7 +989,7 @@
    /* generic attributes */
    for (at = actx->attribs; at->func; at++) {
       const GLubyte *src = at->array->BufferObj->Data
-                         + (unsigned long) at->array->Ptr
+                         + (uintptr_t) at->array->Ptr
                          + elt * at->array->StrideB;
       at->func( at->index, src );
    }
@@ -997,7 +997,7 @@
    /* conventional arrays */
    for (aa = actx->arrays; aa->func ; aa++) {
       const GLubyte *src = aa->array->BufferObj->Data
-                         + (unsigned long) aa->array->Ptr
+                         + (uintptr_t) aa->array->Ptr
                          + elt * aa->array->StrideB;
       aa->func( src );
    }