Jonathan Gray <j...@jsg.id.au> writes:

> On Mon, Dec 28, 2015 at 01:27:50AM +0100, Jrmie Courrges-Anglas wrote:
>> Stuart Henderson <st...@openbsd.org> writes:
>> 
>> > On 2015/12/21 17:21, Jonathan Gray wrote:
>> >> Waffle is another library along the lines of GLUT that provides a way to
>> >> select a windowing system and api for OpenGL.
>> >> 
>> >> This is primarily of interest for using the piglit OpenGL tests as
>> >> Waffle is required for testing OpenGL ES.
>> >
>> > This fails on i386 (and presumably other 32-bit arch), ports/devel/cmocka
>> > already has a patch for this situation, but the file in the version of
>> > cmocka that is bundled with waffle is a bit different, I don't really
>> > have time to unpick it at the moment.
>> 
>> Here's a backport of the cmocka fix (modulo sys/stdin.h -> stdint.h).
>> Builds fine on i386.
>> 
>> (That cmocka header is damn ugly...)
>> 
>> $OpenBSD$
>> 
>> Avoid a conflicting typedef on 32-bit arch.
>> 
>> --- third_party/cmocka/include/cmocka.h.orig Mon Dec 28 01:20:04 2015
>> +++ third_party/cmocka/include/cmocka.h      Mon Dec 28 01:23:28 2015
>> @@ -81,6 +81,9 @@ int __stdcall IsDebuggerPresent();
>>  #define cast_to_largest_integral_type(value) \
>>      ((LargestIntegralType)((size_t)(value)))
>>  
>> +#if defined(__OpenBSD__)
>> +#include <stdint.h>
>> +#else
>>  /* Smallest integral type capable of holding a pointer. */
>>  #if !defined(_UINTPTR_T) && !defined(_UINTPTR_T_DEFINED)
>>  # if defined(_WIN32)
>> @@ -109,6 +112,7 @@ int __stdcall IsDebuggerPresent();
>>  # define _UINTPTR_T
>>  # define _UINTPTR_T_DEFINED
>>  #endif /* !defined(_UINTPTR_T) || !defined(_UINTPTR_T_DEFINED) */
>> +#endif /* !defined(__OpenBSD__) */
>>  
>>  /* Perform an unsigned cast to uintptr_t. */
>>  #define cast_to_pointer_integral_type(value) \
>
> I wonder if we should instead have a uintptr_t define in stdint.h
> and add !defined(_UINTPTR_T_DEFINED_) ?

Well, that may "solve" the cmocka problem and would be consistent with
its signed counterpart.  But "_UINTPTR_T_DEFINED_" doesn't seem to exist
anywhere outside of that cmocka.h header.

cmocka builds on glibc/solaris rely on implementation details.  IMHO an
ugly ifdef __OpenBSD__ in the ports tree is better than hiding problems
by relying on implementation details.  Maybe we can propose a better diff
upstream (eg rely on stdint.h); I'm volunteering.

In the meantime, I'd rather use the same patch as in devel/cmocka.


> Index: stdint.h
> ===================================================================
> RCS file: /cvs/src/sys/sys/stdint.h,v
> retrieving revision 1.10
> diff -u -p -U7 -r1.10 stdint.h
> --- stdint.h  30 Apr 2015 18:19:25 -0000      1.10
> +++ stdint.h  28 Dec 2015 02:26:09 -0000
> @@ -89,15 +89,18 @@ typedef   __uint_fast64_t         uint_fast64_t;
>  
>  /* 7.18.1.4 Integer types capable of holding object pointers */
>  #ifndef      _INTPTR_T_DEFINED_
>  #define      _INTPTR_T_DEFINED_
>  typedef      __intptr_t              intptr_t;
>  #endif
>  
> +#ifndef      _UINTPTR_T_DEFINED_
> +#define      _UINTPTR_T_DEFINED_
>  typedef      __uintptr_t             uintptr_t;
> +#endif
>  
>  /* 7.18.1.5 Greatest-width integer types */
>  typedef      __intmax_t              intmax_t;
>  typedef      __uintmax_t             uintmax_t;
>  
>  /*
>   * 7.18.2 Limits of specified-width integer types.
>

-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to