[Insight-developers] gdcm and stdint.h
Mathieu Malaterre
mathieu.malaterre at gmail.com
Thu Feb 3 04:54:43 EST 2011
Hi bill,
There is no explicit question in your mail. But I am guessing you
want to change:
#include "stdint.h" (the one with quote ", not angle brackets)
into
#include "C99/stdint.h"
I am fine with this change. This should reduce the list of include paths.
thanks.
On Wed, Feb 2, 2011 at 7:33 PM, Bill Hoffman <bill.hoffman at kitware.com> wrote:
> In the building of modular ITK, we are running into trouble with gdcm and
> stdint.h.
>
>
> The trouble comes from gdcmTypes.h here:
>
>
> #if defined(__BORLANDC__) && (__BORLANDC__ < 0x0560) || defined(__MINGW32__)
> typedef signed char int8_t;
> typedef signed short int16_t;
> typedef signed int int32_t;
> typedef unsigned char uint8_t;
> typedef unsigned short uint16_t;
> typedef unsigned int uint32_t;
> typedef unsigned __int64 uint64_t;
> #elif defined(_MSC_VER)
> #include "stdint.h"
> #else
> #error "Sorry your plateform is not supported"
> #endif // defined(_MSC_VER) || defined(__BORLANDC__) && (__BORLANDC__ <
> 0x0560) || defined(__MINGW32__)
> #endif // GDCM_HAVE_INTTYPES_H
> #endif // GDCM_HAVE_STDINT_H
>
>
> Basically the above code does this:
>
> #ifdef HAS_STDINT
> #include "stdint.h"
> #else
> ... lots of confusing stuff
> # if MSVC
> # include "stdint.h" !!!
> # endif
> #endif
>
> So, if a cmake try compile figures out the system does not have stdint.h,
> and you are using the microsoft compiler, then you include stdint.h! Sounds
> crazy... This works because there is a stdint.h in gdcm Utilities/C99 there
> is a copy of stdint.h. This is activated by cmake in
> itkIncludeDirectories.cmake
>
> if(MSVC)
> set(ITK_INCLUDE_DIRS_BUILD_TREE ${ITK_INCLUDE_DIRS_BUILD_TREE}
> ${ITK_SOURCE_DIR}/Utilities/gdcm/Utilities/C99
> )
> endif(MSVC)
>
>
> Why was the C99 introduced in gdcm? Seems like this code:
>
> #if defined(__BORLANDC__) && (__BORLANDC__ < 0x0560) || defined(__MINGW32__)
> typedef signed char int8_t;
> typedef signed short int16_t;
> ...
>
> Would work much better. Or if you really want the header you could do
> something like this:
> #ifdef HAVE_STDINT_H
> # include <stdint.h>
> #else
> # include <gdcmC99/stdint.h>
> #endif
>
> Then put gdcmC99 as a sub-directory of a -I that all gdcm builds need.
>
>
> That would be:
>
> #ifdef HAS_STDINT_H
> #include "stdint.h"
> #else
> # // define what we need from stdint.h
> #endif
>
> No extra -I needed for compiling against gdcm with one compiler...
>
> -Bill
>
--
Mathieu
More information about the Insight-developers
mailing list