Revision: 41153
http://brlcad.svn.sourceforge.net/brlcad/?rev=41153&view=rev
Author: starseeker
Date: 2010-10-28 19:12:29 +0000 (Thu, 28 Oct 2010)
Log Message:
-----------
Add tests for thread-safe variants of some library functions, other tweaks
Modified Paths:
--------------
brlcad/branches/cmake/src/other/tcl/CMake/CheckSystemFunctionality.cmake
brlcad/branches/cmake/src/other/tcl/CMakeLists.txt
Modified:
brlcad/branches/cmake/src/other/tcl/CMake/CheckSystemFunctionality.cmake
===================================================================
--- brlcad/branches/cmake/src/other/tcl/CMake/CheckSystemFunctionality.cmake
2010-10-28 17:10:27 UTC (rev 41152)
+++ brlcad/branches/cmake/src/other/tcl/CMake/CheckSystemFunctionality.cmake
2010-10-28 19:12:29 UTC (rev 41153)
@@ -1,3 +1,36 @@
+# Checking compiler flags benefits from some macro logic
+
+INCLUDE(CheckCCompilerFlag)
+
+MACRO(CHECK_C_FLAG flag)
+ STRING(TOUPPER ${flag} UPPER_FLAG)
+ STRING(REGEX REPLACE " " "_" UPPER_FLAG ${UPPER_FLAG})
+ STRING(REGEX REPLACE "=" "_" UPPER_FLAG ${UPPER_FLAG})
+ IF(${ARGC} LESS 2)
+ CHECK_C_COMPILER_FLAG(-${flag} ${UPPER_FLAG}_COMPILER_FLAG)
+ ELSE(${ARGC} LESS 2)
+ IF(NOT ${ARGV1})
+ CHECK_C_COMPILER_FLAG(-${flag}
${UPPER_FLAG}_COMPILER_FLAG)
+ IF(${UPPER_FLAG}_COMPILER_FLAG)
+ MESSAGE("Found ${ARGV1} - setting to -${flag}")
+ SET(${ARGV1} "-${flag}" CACHE STRING "${ARGV1}"
FORCE)
+ ENDIF(${UPPER_FLAG}_COMPILER_FLAG)
+ ENDIF(NOT ${ARGV1})
+ ENDIF(${ARGC} LESS 2)
+ IF(${UPPER_FLAG}_COMPILER_FLAG)
+ SET(${UPPER_FLAG}_COMPILER_FLAG "-${flag}")
+ ENDIF(${UPPER_FLAG}_COMPILER_FLAG)
+ENDMACRO()
+
+MACRO(CHECK_C_FLAG_GATHER flag FLAGS)
+ STRING(TOUPPER ${flag} UPPER_FLAG)
+ STRING(REGEX REPLACE " " "_" UPPER_FLAG ${UPPER_FLAG})
+ CHECK_C_COMPILER_FLAG(-${flag} ${UPPER_FLAG}_COMPILER_FLAG)
+ IF(${UPPER_FLAG}_COMPILER_FLAG)
+ SET(${FLAGS} "${${FLAGS}} -${flag}")
+ ENDIF(${UPPER_FLAG}_COMPILER_FLAG)
+ENDMACRO()
+
# CMake does not by default include functionality similar to autoheader in
# GNU Autotools, but is it not difficult to reproduce. There are two aspects
# to these tests - the first being the generation of a header file defining
Modified: brlcad/branches/cmake/src/other/tcl/CMakeLists.txt
===================================================================
--- brlcad/branches/cmake/src/other/tcl/CMakeLists.txt 2010-10-28 17:10:27 UTC
(rev 41152)
+++ brlcad/branches/cmake/src/other/tcl/CMakeLists.txt 2010-10-28 19:12:29 UTC
(rev 41153)
@@ -153,6 +153,8 @@
SET(TCL_CFLAGS "${TCL_CFLAGS} -DMP_PREC=4")
ENDIF(TCL_TOMMMATH)
+# Will need to replace SC_CONFIG_MANPAGES with appropriate custom commands
+
#----------------------------------------------------------------------------
# Run tests for system headers and functionality. Start with the tests
# corresponding to SC_MISSING_POSIX_HEADERS
@@ -220,12 +222,37 @@
SET(TCL_LINK_LIBS ${TCL_LINK_LIBS} ${NLS_LIBRARY})
ENDIF(NOT HAVE_GETHOSTBYNAME)
-# Need to detect and set up 64 bit here
+# TODO - look over SC_ENABLE_SHARED, SC_CONFIG_CFLAGS and SC_ENABLE_SYMBOLS
+# need to decide how much of that logic is needed
+# Detect and set up 64 bit compiling here. This is not as
+# comprehensive as tcl.m4 yet - lots of linker flags and
+# other specialized platform-specific stuff there.
+OPTION(ENABLE_64_BIT "64 bit void pointer" ON)
+IF(${CMAKE_SIZEOF_VOID_P} MATCHES "^8$" AND ENABLE_64_BIT)
+ IF(ENABLE_64_BIT)
+ IF(NOT 64BIT_FLAG)
+ MESSAGE("Checking for 64-bit support:")
+ CHECK_C_FLAG("arch x86_64" 64BIT_FLAG)
+ CHECK_C_FLAG(64 64BIT_FLAG)
+ CHECK_C_FLAG("mabi=64" 64BIT_FLAG)
+ CHECK_C_FLAG(m64 64BIT_FLAG)
+ CHECK_C_FLAG(q64 64BIT_FLAG)
+ ENDIF(NOT 64BIT_FLAG)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${64BIT_FLAG}")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${64BIT_FLAG}")
+ ENDIF(ENABLE_64_BIT)
+ELSE(${CMAKE_SIZEOF_VOID_P} MATCHES "^8$" AND ENABLE_64_BIT)
+ SET(ENABLE_64_BIT OFF)
+ENDIF(${CMAKE_SIZEOF_VOID_P} MATCHES "^8$" AND ENABLE_64_BIT)
+
# Test endianness
INCLUDE(TestBigEndian)
-TEST_BIG_ENDIAN(IS_BIGENDIAN)
+TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
+IF(WORDS_BIGENDIAN)
+ SET(TCL_CFLAGS "${TCL_CFLAGS} -DWORDS_BIGENDIAN=1")
+ENDIF(WORDS_BIGENDIAN)
# POSIX substitutes
CHECK_FUNCTION_EXISTS(getcwd HAVE_GETCWD)
@@ -283,17 +310,246 @@
# Thread safe tests - need to go over macros and
# get the right logic going here
IF(TCL_THREADS)
-CHECK_FUNCTION_EXISTS_D(getpwuid HAVE_GETPWUID_R)
-CHECK_FUNCTION_EXISTS_D(getpwnam HAVE_GETPWNAM_R)
-CHECK_FUNCTION_EXISTS_D(getgrgid HAVE_GETGRGID_R)
-CHECK_FUNCTION_EXISTS_D(getgrnam HAVE_GETGRNAM_R)
-IF(NOT HAVE_GETHOSTBYNAME)
- CHECK_LIBRARY(GHBN lnsl gethostbyname)
- SET(HAVE_GETHOSTBYNAME ${GHBN})
-ENDIF(NOT HAVE_GETHOSTBYNAME)
-#CHECK_FUNCTION_EXISTS_D( HAVE_MTSAFE_GETHOSTBYNAME)
-#CHECK_FUNCTION_EXISTS_D( HAVE_MTSAFE_GETHOSTBYADDR)
+ CHECK_FUNCTION_EXISTS_D(getpwuid HAVE_GETPWUID_R)
+ IF(HAVE_GETPWUID_R)
+ SET(HAVE_GETPWUID_R_5_SRC "
+ #include <sys/types.h>
+ #include <pwd.h>
+ uid_t uid;
+ struct passwd pw, *pwp;
+ char buf[512];
+ int buflen = 512;
+ (void) getpwuid_r(uid, &pw, buf, buflen, &pwp);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETPWUID_R_5_SRC}"
HAVE_GETPWUID_R_5)
+ IF(HAVE_GETPWUID_R_5)
+ SET(TCL_CFLAGS "${TCL_CFLAGS} -DHAVE_GETPWUID_R_5=1")
+ ELSE(HAVE_GETPWUID_R_5)
+ SET(HAVE_GETPWUID_R_4_SRC "
+ #include <sys/types.h>
+ #include <pwd.h>
+ uid_t uid;
+ struct passwd pw;
+ char buf[512];
+ int buflen = 512;
+
+ (void) getpwuid_r(uid, &pw, buf, buflen);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETPWUID_R_4_SRC}"
HAVE_GETPWUID_R_4)
+ IF(HAVE_GETPWUID_R_4)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_GETPWUID_R_4=1")
+ ENDIF(HAVE_GETPWUID_R_4)
+ ENDIF(HAVE_GETPWUID_R_5)
+ ENDIF(HAVE_GETPWUID_R)
+
+ CHECK_FUNCTION_EXISTS_D(getpwnam HAVE_GETPWNAM_R)
+ IF(HAVE_GETPWNAM_R)
+ SET(HAVE_GETPWNAM_R_5_SRC "
+ #include <sys/types.h>
+ #include <pwd.h>
+ char *name;
+ struct passwd pw, *pwp;
+ char buf[512];
+ int buflen = 512;
+
+ (void) getpwnam_r(name, &pw, buf, buflen, &pwp);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETPWNAM_R_5_SRC}"
HAVE_GETPWNAM_R_5)
+ IF(HAVE_GETPWNAM_R_5)
+ SET(TCL_CFLAGS "${TCL_CFLAGS} -DHAVE_GETPWNAM_R_5=1")
+ ELSE(HAVE_GETPWNAM_R_5)
+ SET(HAVE_GETPWNAM_R_4_SRC "
+ #include <sys/types.h>
+ #include <pwd.h>
+ char *name;
+ struct passwd pw;
+ char buf[512];
+ int buflen = 512;
+
+ (void)getpwnam_r(name, &pw, buf, buflen);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETPWNAM_R_4_SRC}"
HAVE_GETPWNAM_R_4)
+ IF(HAVE_GETPWNAM_R_4)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_GETPWNAM_R_4=1")
+ ENDIF(HAVE_GETPWNAM_R_4)
+ ENDIF(HAVE_GETPWNAM_R_5)
+ ENDIF(HAVE_GETPWNAM_R)
+
+ CHECK_FUNCTION_EXISTS_D(getgrgid HAVE_GETGRGID_R)
+ IF(HAVE_GETGRGID_R)
+ SET(HAVE_GETGRGID_R_5_SRC "
+ #include <sys/types.h>
+ #include <grp.h>
+ gid_t gid;
+ struct group gr, *grp;
+ char buf[512];
+ int buflen = 512;
+
+ (void) getgrgid_r(gid, &gr, buf, buflen, &grp);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETGRGID_R_5_SRC}"
HAVE_GETGRGID_R_5)
+ IF(HAVE_GETGRGID_R_5)
+ SET(TCL_CFLAGS "${TCL_CFLAGS} -DHAVE_GETGRGID_R_5=1")
+ ELSE(HAVE_GETGRGID_R_5)
+ SET(HAVE_GETGRGID_R_4_SRC "
+ #include <sys/types.h>
+ #include <grp.h>
+ gid_t gid;
+ struct group gr;
+ char buf[512];
+ int buflen = 512;
+
+ (void)getgrgid_r(gid, &gr, buf, buflen);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETGRGID_R_4_SRC}"
HAVE_GETGRGID_R_4)
+ IF(HAVE_GETGRGID_R_4)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_GETGRGID_R_4=1")
+ ENDIF(HAVE_GETGRGID_R_4)
+ ENDIF(HAVE_GETGRGID_R_5)
+ ENDIF(HAVE_GETGRGID_R)
+
+
+ CHECK_FUNCTION_EXISTS_D(getgrnam HAVE_GETGRNAM_R)
+ IF(HAVE_GETGRNAMM_R)
+ SET(HAVE_GETGRNAMM_R_5_SRC "
+ #include <sys/types.h>
+ #include <grp.h>
+ char *name;
+ struct group gr, *grp;
+ char buf[512];
+ int buflen = 512;
+
+ (void) getgrnam_r(name, &gr, buf, buflen, &grp);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETGRNAMM_R_5_SRC}"
HAVE_GETGRNAMM_R_5)
+ IF(HAVE_GETGRNAMM_R_5)
+ SET(TCL_CFLAGS "${TCL_CFLAGS} -DHAVE_GETGRNAMM_R_5=1")
+ ELSE(HAVE_GETGRNAMM_R_5)
+ SET(HAVE_GETGRNAMM_R_4_SRC "
+ #include <sys/types.h>
+ #include <grp.h>
+ char *name;
+ struct group gr;
+ char buf[512];
+ int buflen = 512;
+
+ (void)getgrnam_r(name, &gr, buf, buflen);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETGRNAMM_R_4_SRC}"
HAVE_GETGRNAMM_R_4)
+ IF(HAVE_GETGRNAMM_R_4)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_GETGRNAMM_R_4=1")
+ ENDIF(HAVE_GETGRNAMM_R_4)
+ ENDIF(HAVE_GETGRNAMM_R_5)
+ ENDIF(HAVE_GETGRNAMM_R)
+
+ IF(NOT HAVE_GETHOSTBYNAME)
+ CHECK_LIBRARY(GHBN lnsl gethostbyname)
+ SET(HAVE_GETHOSTBYNAME ${GHBN})
+ ENDIF(NOT HAVE_GETHOSTBYNAME)
+
+ CHECK_FUNCTION_EXISTS_D(gethostbyname HAVE_GETHOSTBYNAME_R)
+ IF(HAVE_GETHOSTBYNAME_R)
+ SET(HAVE_GETHOSTBYNAME_R_6_SRC "
+ #include <netdb.h>
+ char *name;
+ struct hostent *he, *res;
+ char buffer[2048];
+ int buflen = 2048;
+ int h_errnop;
+
+ (void) gethostbyname_r(name, he, buffer, buflen, &res,
&h_errnop);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETHOSTBYNAME_R_6_SRC}"
HAVE_GETHOSTBYNAME_R_5)
+ IF(HAVE_GETHOSTBYNAME_R_6)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_GETHOSTBYNAME_R_6=1")
+ ELSE(HAVE_GETHOSTBYNAME_R_6)
+ SET(HAVE_GETHOSTBYNAME_R_5_SRC "
+ #include <netdb.h>
+ char *name;
+ struct hostent *he;
+ char buffer[2048];
+ int buflen = 2048;
+ int h_errnop;
+
+ (void) gethostbyname_r(name, he, buffer, buflen,
&h_errnop);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETHOSTBYNAME_R_5_SRC}"
HAVE_GETHOSTBYNAME_R_5)
+
+ IF(HAVE_GETHOSTBYNAME_R_5)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_GETHOSTBYNAME_R_5=1")
+ ELSE(HAVE_GETHOSTBYNAME_R_5)
+ SET(HAVE_GETHOSTBYNAME_R_3_SRC "
+ #include <netdb.h>
+ char *name;
+ struct hostent *he;
+ struct hostent_data data;
+
+ (void) gethostbyname_r(name, he, &data);
+ ")
+
CHECK_C_SOURCE_COMPILES("${HAVE_GETHOSTBYNAME_R_3_SRC}" HAVE_GETHOSTBYNAME_R_3)
+ IF(HAVE_GETHOSTBYNAME_R_3)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_GETHOSTBYNAME_R_3=1")
+ ENDIF(HAVE_GETHOSTBYNAME_R_3)
+ ENDIF(HAVE_GETHOSTBYNAME_R_5)
+ ENDIF(HAVE_GETHOSTBYNAME_R_6)
+ ENDIF(HAVE_GETHOSTBYNAME_R)
+
+
+ CHECK_FUNCTION_EXISTS_D(gethostbyaddr HAVE_GETHOSTBYADDR_R)
+ IF(HAVE_GETHOSTBYADDR_R)
+ SET(HAVE_GETHOSTBYADDR_R_7_SRC "
+ #include <netdb.h>
+ char *addr;
+ int length;
+ int type;
+ struct hostent *result;
+ char buffer[2048];
+ int buflen = 2048;
+ int h_errnop;
+
+ (void) gethostbyaddr_r(addr, length, type, result, buffer,
buflen, &h_errnop);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETHOSTBYADDR_R_7_SRC}"
HAVE_GETHOSTBYADDR_R_7)
+ IF(HAVE_GETHOSTBYADDR_R_7)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_GETHOSTBYADDR_R_7=1")
+ ELSE(HAVE_GETHOSTBYADDR_R_7)
+ SET(HAVE_GETHOSTBYADDR_R_8_SRC "
+ #include <netdb.h>
+ char *addr;
+ int length;
+ int type;
+ struct hostent *result, *resultp;
+ char buffer[2048];
+ int buflen = 2048;
+ int h_errnop;
+
+ (void) gethostbyaddr_r(addr, length, type, result,
buffer, buflen, &resultp, &h_errnop);
+ ")
+ CHECK_C_SOURCE_COMPILES("${HAVE_GETHOSTBYADDR_R_8_SRC}"
HAVE_GETHOSTBYADDR_R_8)
+ IF(HAVE_GETHOSTBYADDR_R_8)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_GETHOSTBYADDR_R_8=1")
+ ENDIF(HAVE_GETHOSTBYADDR_R_8)
+ ENDIF(HAVE_GETHOSTBYADDR_R_7)
+ ENDIF(HAVE_GETHOSTBYADDR_R)
+
+
+ IF(${CMAKE_SYSTEM_NAME} MATCHES "^Darwin$")
+ STRING(REGEX REPLACE "\\..*" "" CMAKE_SYSTEM_MAJOR_VERSION
${CMAKE_SYSTEM_VERSION})
+ IF (${CMAKE_SYSTEM_MAJOR_VERSION} GREATER 5)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_MTSAFE_GETHOSTBYNAME=1")
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_MTSAFE_GETHOSTBYADDR=1")
+ ENDIF (${CMAKE_SYSTEM_MAJOR_VERSION} GREATER 5)
+ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "^Darwin$")
+
+ IF(${CMAKE_SYSTEM_NAME} MATCHES "^HP-UX$")
+ STRING(REGEX REPLACE "\\..*" "" CMAKE_SYSTEM_MAJOR_VERSION
${CMAKE_SYSTEM_VERSION})
+ IF (${CMAKE_SYSTEM_MAJOR_VERSION} GREATER 10)
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_MTSAFE_GETHOSTBYNAME=1")
+ SET(TCL_CFLAGS "${TCL_CFLAGS}
-DHAVE_MTSAFE_GETHOSTBYADDR=1")
+ ENDIF (${CMAKE_SYSTEM_MAJOR_VERSION} GREATER 10)
+ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "^HP-UX$")
+
ENDIF(TCL_THREADS)
CHECK_INCLUDE_FILE_D(sys/types.h HAVE_SYS_TYPES_H)
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits