[CMake] CheckTypeSize and non-standard headers

Aaron Turner synfinatic at gmail.com
Tue Feb 17 00:41:09 EST 2009


On Mon, Feb 16, 2009 at 9:28 PM, Philip Lowman <philip at yhbt.com> wrote:
> On Mon, Feb 16, 2009 at 10:23 PM, Aaron Turner <synfinatic at gmail.com> wrote:
>>
>> On Mon, Feb 16, 2009 at 5:53 PM, Michael Jackson
>> <mike.jackson at bluequartz.net> wrote:
>> > project(Test)
>> > cmake_minimum_required(VERSION 2.7)
>> >
>> > INCLUDE(${CMAKE_ROOT}/Modules/CheckTypeSize.cmake)
>> >
>> > set(CMAKE_REQUIRED_DEFINITIONS_SAVE ${CMAKE_REQUIRED_DEFINITIONS})
>> > set(CMAKE_REQUIRED_DEFINITIONS
>> > ${CMAKE_REQUIRED_DEFINITIONS};-D__need_wint_t=1)
>> >
>> > CHECK_TYPE_SIZE(wint_t WINT_T)
>> > message(STATUS "Size of wint_t: ${WINT_T}")
>> > message(STATUS "HAVE_WINT_T: ${HAVE_WINT_T}")
>> >
>> > set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS_SAVE})
>> >
>> > Although I am not sure under what circumstances you are supposed to
>> > define
>> > __need_wint_t? Or if there is some other encompassing macro to define.
>> > Otherwise the above will find the size in bytes of wint_t.
>>
>> Not sure I follow what you're trying to accomplish with the above.
>> Is this cmake 2.7 specific or some trick with the __need_wint_t (which
>> isn't used in runetype.h)?
>
> Hmm, try it in CMake 2.6, there is a CheckTypeSize.cmake.  Also, you
> shouldn't have to specify the full path to it, just
>
> INCLUDE(CheckTypeSize.cmake)

As I said in my first post, CheckTypeSize doesn't include runetype.h,
hence doesn't work in this case.

>> For now, i'm just hacking around the issue with:
>>
>> check_include_file("runetype.h"     HAVE_RUNETYPE_H)
>> IF(APPLE AND HAVE_RUNETYPE_H)
>>    # OS X has wint_t, but check_type_size won't find it
>>    SET(HAVE_WINT_T 1)
>> ELSE(APPLE AND HAVE_RUNETYPE_H)
>>    check_type_size("wint_t"            HAVE_WINT_T)
>> ENDIF(APPLE AND HAVE_RUNTYPE_H)
>>
>> Long term, I'm going to write my own version of check_symbol_exists
>> which uses a different test which is define/typedef agnostic.
>
> Please consider submitting it via the bugtracker when you're done.

Will do.  Honestly, I'm a bit surprised this isn't already part of the
basic Cmake library.  Having to write try_compile() or try_run() tests
for this sort of thing is just silly- especially since you can't
inline the source code like in Autoconf.

-- 
Aaron Turner
http://synfin.net/
http://tcpreplay.synfin.net/ - Pcap editing and replay tools for Unix & Windows
Those who would give up essential Liberty, to purchase a little
temporary Safety,
deserve neither Liberty nor Safety.
    -- Benjamin Franklin


More information about the CMake mailing list