[CMake] CheckTypeSize and non-standard headers

Aaron Turner synfinatic at gmail.com
Tue Feb 17 01:02:31 EST 2009


On Mon, Feb 16, 2009 at 9:53 PM, Philip Lowman <philip at yhbt.com> wrote:
> On Tue, Feb 17, 2009 at 12:41 AM, Aaron Turner <synfinatic at gmail.com> wrote:
>>
>> 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:
>> >> 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.
>
> Not sure on the check_symbol_exists issue.
>
> You should be able to inline source code in your CMakeLists.txt.  Here's an
> example I wrote for OpenSceneGraph:
>
>         INCLUDE(CheckCXXSourceCompiles)
>         SET(CMAKE_REQUIRED_DEFINITIONS -DGLU_TESS_CALLBACK_TRIPLEDOT)
>         SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include
> ${GLUT_INCLUDE_DIR} ${GL_INCLUDE_DIR})
>         SET(CMAKE_REQUIRED_LIBRARIES ${GLUT_LIBRARY} ${GL_LIBRARY})
>         CHECK_CXX_SOURCE_COMPILES(
>             "#include <osg/GL>
>             #include <osg/GLU>
>             static void testcb(GLvoid *, void*) { }
>             int main() {
>                GLUtesselator *t = gluNewTess();
>                gluTessCallback(t, GLU_TESS_VERTEX_DATA, (GLU_TESS_CALLBACK)
> testcb);
>                return 0;
>             }"
>
> GLU_Tesselator_Needs_Variable_Parameter_Callback_Convention_Failure_Means_No)
>         SET(DEFAULT_GLU_TESS_CALLBACK_TRIPLEDOT
>
> ${GLU_Tesselator_Needs_Variable_Parameter_Callback_Convention_Failure_Means_No})
>


Ah!  I hadn't noticed CheckCSourceCompiles/Runs... that makes things
easier!  thanks.


-- 
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