Hi,

I volunteer on a project called Tux4Kids, which creates free & open-source 
educational software for children. I'm trying to develop a CMake build for 
TuxMath, our arithmetic arcade game, so that we can better-support MacOSX.

I'm definitely a CMake newbie---this is my first experience with it. Thanks to 
CMake's nice design and good documentation, I was able to quickly and quite 
painlessly develop a build for most of our source tree. Thanks!

Then I got to the internationalization bit. We currently have an 
automake-based build that, on platforms like MacOSX and Win32, builds the 
getttext-runtime library libintl as a static library (because we can't 
guarantee that this library is available on anything but Linux). I'm having a 
lot of trouble getting that working with CMake, and I think it's because I 
just don't understand it well enough. (I don't understand automake well 
enough, either---other people did that.) However, I have also based a lot of 
what I'm doing on LyX, which has a well-developed (over the course of several 
years) CMake infrastructure, and I see weird things happening there, too.

libintl has a number of flags that need to be probed for. Here's 
a "ConfigureChecksIntl.cmake" file that I'm working on, along with comments 
about how things work out:

check_include_files(inttypes.h HAVE_INTTYPES_H) # works fine

check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF) # agrees with automake
check_symbol_exists(asprintf "stdio.h" HAVE_ASPRINTF) # disagrees with AM
check_symbol_exists(wprintf "stdio.h" HAVE_WPRINTF) # disagrees with AM
check_symbol_exists(printf "stdio.h" HAVE_POSIX_PRINTF) # agrees with AM

# Alternate for HAVE_POSIX_PRINTF: which is right?
# This is stolen from the m4 file, but it doesn't yield the same answer as
# automake. Maybe I have character escape sequence problems?
check_c_source_compiles("
#include <stdio.h>
#include <string.h>
static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
static char buf[100];
int main ()
{
  sprintf (buf, format, 33, 55);
}" HAVE_POSIX_PRINTF)

# Neither of the following 2 work properly, strangely
#check_symbol_exists(intmax_t "inttypes.h" HAVE_INTTYPES_H_WITH_UINTMAX)
check_symbol_exists(intmax_t "stdint.h" HAVE_INTTYPES_H_WITH_UINTMAX)
# This next one also disagrees with AM, and it causes compilation to fail
check_symbol_exists(uintmax_t "stdint.h" HAVE_STDINT_H_WITH_UINTMAX)
check_symbol_exists(LC_MESSAGES "locale.h" HAVE_LC_MESSAGES) # agrees with AM
check_type_size(intmax_t HAVE_INTMAX_T) # disagrees with AM
# This last macro was stolen from LyX
macro_bool_to_01(HAVE_UINTMAX_T HAVE_STDINT_H_WITH_UINTMAX)





The really weird thing is that those symbols "intmax_t" and "uintmax_t" fail 
to be found. I've snipped out the part of stdint.h that seems relevant:
/* Largest integral types.  */
#if __WORDSIZE == 64
typedef long int                intmax_t;
typedef unsigned long int       uintmax_t;
#else
__extension__
typedef long long int           intmax_t;
__extension__
typedef unsigned long long int  uintmax_t;
#endif

So, I don't understand why this isn't discovering that these types have been 
declared. Can anyone offer some insight?

Best,
--Tim
_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to