Revision: 41171
http://brlcad.svn.sourceforge.net/brlcad/?rev=41171&view=rev
Author: starseeker
Date: 2010-10-29 15:39:26 +0000 (Fri, 29 Oct 2010)
Log Message:
-----------
Keep evolving this CMake tcl organization - debugging will be simpler if things
look as similar as possible, so organize it that way.
Modified Paths:
--------------
brlcad/branches/cmake/src/other/tcl/CMake/CheckSystemFunctionality.cmake
brlcad/branches/cmake/src/other/tcl/CMakeLists.txt
Added Paths:
-----------
brlcad/branches/cmake/src/other/tcl/CMake/ac_std_funcs.cmake
brlcad/branches/cmake/src/other/tcl/CMake/tcl.cmake
Modified:
brlcad/branches/cmake/src/other/tcl/CMake/CheckSystemFunctionality.cmake
===================================================================
--- brlcad/branches/cmake/src/other/tcl/CMake/CheckSystemFunctionality.cmake
2010-10-29 14:06:50 UTC (rev 41170)
+++ brlcad/branches/cmake/src/other/tcl/CMake/CheckSystemFunctionality.cmake
2010-10-29 15:39:26 UTC (rev 41171)
@@ -31,23 +31,8 @@
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
-# variables, and the second being the running of various custom tests to
establish
-# whether features actually work on a given platform. The first step is
handled
-# by creating wrapper macros for the standard CMake functions that also write
-# to a CONFIG_H_FILE if it is defined, with a couple extra conveniences. The
second
-# and more labor intensive step is to create tests using the CMake functions
-# that reproduce the functionality tests expected by source code using
variables
-# defined by Autotools tests. This file does not have all such tests, for
each project
-# has its own requirements and many thousands of these tests can be devised.
The macro
-# collection below covers the requirements of the projects that have thus far
been
-# converted to use this particular compilation mechanism, and will be added to
as
-# needed.
-
-# Automate putting variables from tests into a config.h.in file,
+# Automate putting variables from tests into CFLAGS,
# and otherwise wrap check macros in extra logic as needed
INCLUDE(CheckFunctionExists)
@@ -125,258 +110,3 @@
ENDIF(NOT ${targetname}_LIBRARY)
ENDMACRO(CHECK_LIBRARY lname func)
-# Functionality testing macros - these also assume a CONFIG_H file. In some
-# cases the minimal test code can be included in-line, but in others the
problem
-# of quoting it correctly becomes rather involved. In those cases, rather than
-# complicate the maintainance of the test, the code itself is stored in a file.
-# These files need to be present in a directory called test_sources, in one of
-# the directories in the CMAKE_MODULE_PATH variable. The first step is to
-# locate such a directory.
-
-SET(CMAKE_TEST_SRCS_DIR "NOTFOUND")
-FOREACH($candidate_dir ${CMAKE_MODULE_PATH})
- IF(NOT CMAKE_TEST_SRCS_DIR)
- IF(EXISTS "${candidate_dir}/test_sources" AND IS_DIRECTORY
"${candidate_dir}/test_sources")
- SET(CMAKE_TEST_SRCS_DIR ${candidate_dir}/test_sources)
- ENDIF(EXISTS "${candidate_dir}/test_sources" AND IS_DIRECTORY
"${candidate_dir}/test_sources")
- ENDIF(NOT CMAKE_TEST_SRCS_DIR)
-ENDFOREACH($candidate_dir ${CMAKE_MODULE_PATH})
-
-INCLUDE(CheckPrototypeExists)
-INCLUDE(CheckCSourceRuns)
-INCLUDE(CheckCFileRuns)
-
-MACRO(CHECK_BASENAME_D)
- SET(BASENAME_SRC "
- #include <libgen.h>
- int main(int argc, char *argv[]) {
- (void)basename(argv[0]);
- return 0;
- }")
- CHECK_C_SOURCE_RUNS("${BASENAME_SRC}" HAVE_BASENAME)
- IF(HAVE_BASENAME)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_BASENAME=1" CACHE STRING "TCL CFLAGS" FORCE)
- ENDIF(HAVE_BASENAME)
-ENDMACRO(CHECK_BASENAME_D)
-
-MACRO(CHECK_DIRNAME_D)
- SET(DIRNAME_SRC "
- #include <libgen.h>
- int main(int argc, char *argv[]) {
- (void)dirname(argv[0]);
- return 0;
- }")
- CHECK_C_SOURCE_RUNS("${DIRNAME_SRC}" HAVE_DIRNAME)
- IF(HAVE_DIRNAME)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_DIRNAME=1" CACHE STRING "TCL CFLAGS" FORCE)
- ENDIF(HAVE_DIRNAME)
-ENDMACRO(CHECK_DIRNAME_D)
-
-# Based on AC_HEADER_STDC - using the source code for ctype
-# checking found in the generated configure file
-MACRO(CMAKE_HEADER_STDC_D)
- CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
- IF(HAVE_STDLIB_H)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS} -DHAVE_STDLIB_H=1" CACHE
STRING "TCL CFLAGS" FORCE)
- ENDIF(HAVE_STDLIB_H)
- CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
- CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
- IF(HAVE_STRING_H)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS} -DHAVE_STRING_H=1" CACHE
STRING "TCL CFLAGS" FORCE)
- ENDIF(HAVE_STRING_H)
- CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
- IF(HAVE_STRINGS_H)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS} -DHAVE_STRINGS_H=1"
CACHE STRING "TCL CFLAGS" FORCE)
- ENDIF(HAVE_STRINGS_H)
- CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
- CHECK_PROTOTYPE_EXISTS(memchr string.h HAVE_STRING_H_MEMCHR)
- CHECK_PROTOTYPE_EXISTS(free stdlib.h HAVE_STDLIB_H_FREE)
- CHECK_C_FILE_RUNS(${CMAKE_TEST_SRCS_DIR}/ctypes_test.c WORKING_CTYPE_MACROS)
- IF(HAVE_STDLIB_H AND HAVE_STDARG_H AND HAVE_STRING_H AND HAVE_FLOAT_H AND
WORKING_CTYPE_MACROS)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS} -DSTDC_HEADERS=1"
CACHE STRING "TCL CFLAGS" FORCE)
- ENDIF(HAVE_STDLIB_H AND HAVE_STDARG_H AND HAVE_STRING_H AND HAVE_FLOAT_H AND
WORKING_CTYPE_MACROS)
-ENDMACRO(CMAKE_HEADER_STDC_D)
-
-# Based on AC_HEADER_SYS_WAIT
-MACRO(CMAKE_HEADER_SYS_WAIT_D)
- CHECK_C_FILE_RUNS(${CMAKE_TEST_SRCS_DIR}/sys_wait_test.c WORKING_SYS_WAIT)
- IF(WORKING_SYS_WAIT)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_SYS_WAIT_H=1" CACHE STRING "TCL CFLAGS" FORCE)
- ENDIF(WORKING_SYS_WAIT)
-ENDMACRO(CMAKE_HEADER_SYS_WAIT_D)
-
-# Based on AC_FUNC_ALLOCA
-MACRO(CMAKE_ALLOCA_D)
- CHECK_C_FILE_RUNS(${CMAKE_TEST_SRCS_DIR}/alloca_header_test.c
WORKING_ALLOCA_H)
- IF(WORKING_ALLOCA_H)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_ALLOCA_H=1" CACHE STRING "TCL CFLAGS" FORCE)
- ENDIF(WORKING_ALLOCA_H)
- CHECK_C_FILE_RUNS(${CMAKE_TEST_SRCS_DIR}/alloca_test.c WORKING_ALLOCA)
- IF(WORKING_ALLOCA)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_ALLOCA=1" CACHE STRING "TCL CFLAGS" FORCE)
- ENDIF(WORKING_ALLOCA)
-ENDMACRO(CMAKE_ALLOCA_D)
-
-MACRO(CHECK_COMPILER_SUPPORTS_HIDDEN_D)
- SET(TEST_SRC"
- #define MODULE_SCOPE extern __attribute__((__visibility__("hidden")))
- main(){};
- ")
- CHECK_C_SOURCE_COMPILES("${TEST_SRC}" COMPILER_SUPPORTS_HIDDEN)
-ENDMACRO(CHECK_COMPILER_SUPPORTS_HIDDEN_D)
-
-MACRO(CHECK_GETADDERINFO_WORKING_D)
- SET(GETADDERINFO_SRC "
- #include <netdb.h>
- int main () {
- const char *name, *port;
- struct addrinfo *aiPtr, hints;
- (void)getaddrinfo(name,port, &hints, &aiPtr);
- (void)freeaddrinfo(aiPtr);
- return 0;
- }")
- CHECK_C_SOURCE_COMPILES("${GETADDERINFO_SRC}" WORKING_GETADDERINFO)
- IF(WORKING_GETADDERINFO)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_GETADDERINFO=1" CACHE STRING "TCL CFLAGS" FORCE)
- ENDIF(WORKING_GETADDERINFO)
-ENDMACRO(CHECK_GETADDERINFO_WORKING_D)
-
-
-MACRO(TERMIOS_TERMIO_SGTTY)
- SET(TERMIOS_SRC_1 "
-#include <termios.h>
-int main() {
-struct termios t;
-if (tcgetattr(0, &t) == 0) {
- cfsetospeed(&t, 0);
- t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
-}
- return 1;
-}
- ")
- SET(TERMIOS_SRC_2 "
-#include <termios.h>
-#include <errno.h>
-
-int main() {
-struct termios t;
-if (tcgetattr(0, &t) == 0
- || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
- cfsetospeed(&t, 0);
- t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
-}
- ")
- SET(TERMIO_SRC_1 "
-#include <termio.h>
-int main() {
-struct termio t;
-if (ioctl(0, TCGETA, &t) == 0) {
- t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
-}
- return 1;
-}
- ")
- SET(TERMIO_SRC_2 "
-#include <termio.h>
-#include <errno.h>
-
-int main() {
-struct termio t;
-if (ioctl(0, TCGETA, &t) == 0
- || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
- t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
- return 0;
- }
- return 1;
-}
- ")
- SET(SGTTY_SRC_1 "
-#include <sgtty.h>
-int main() {
-struct sgttyb t;
-if (ioctl(0, TIOCGETP, &t) == 0) {
- t.sg_ospeed = 0;
- t.sg_flags |= ODDP | EVENP | RAW;
- return 0;
-}
- return 1;
-}
- ")
- SET(SGTTY_SRC_2 "
-#include <sgtty.h>
-#include <errno.h>
-
-int main() {
-struct sgttyb t;
-if (ioctl(0, TIOCGETP, &t) == 0
- || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
- t.sg_ospeed = 0;
- t.sg_flags |= ODDP | EVENP | RAW;
- return 0;
- }
- return 1;
-}
- ")
- CHECK_C_SOURCE_RUNS("${TERMIOS_SRC_1}" HAVE_TERMIOS)
- IF(NOT HAVE_TERMIOS)
- CHECK_C_SOURCE_RUNS("${TERMIO_SRC_1}" HAVE_TERMIO)
- ENDIF(NOT HAVE_TERMIOS)
- IF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS)
- CHECK_C_SOURCE_RUNS("${SGTTY_SRC_1}" HAVE_SGTTY)
- ENDIF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS)
- IF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS AND NOT HAVE_SGTTY)
- CHECK_C_SOURCE_RUNS("${TERMIOS_SRC_2}" HAVE_TERMIOS)
- IF(NOT HAVE_TERMIOS)
- CHECK_C_SOURCE_RUNS("${TERMIO_SRC_2}" HAVE_TERMIO)
- ENDIF(NOT HAVE_TERMIOS)
- IF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS)
- CHECK_C_SOURCE_RUNS("${SGTTY_SRC_2}" HAVE_SGTTY)
- ENDIF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS)
- ENDIF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS AND NOT HAVE_SGTTY)
-
- IF(HAVE_TERMIOS)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DUSE_TERMIOS=1" CACHE STRING "TCL CFLAGS" FORCE)
- ELSE(HAVE_TERMIOS)
- IF(HAVE_TERMIO)
- SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DUSE_TERMIO=1" CACHE STRING "TCL CFLAGS" FORCE)
- ELSE(HAVE_TERMIO)
- IF(HAVE_SGTTY)
- SET(${CFLAGS_NAME}_CFLAGS
"${${CFLAGS_NAME}_CFLAGS} -DUSE_SGTTY=1" CACHE STRING "TCL CFLAGS" FORCE)
- ENDIF(HAVE_SGTTY)
- ENDIF(HAVE_TERMIO)
- ENDIF(HAVE_TERMIOS)
-
-
-ENDMACRO(TERMIOS_TERMIO_SGTTY)
-
-MACRO(CHECK_FD_SET_IN_TYPES_D)
- SET(TEST_SRC "
- #include <sys/types.h>
- int main ()
- {
- fd_set readMask, writeMask;
- return 0;
- }
- ")
- CHECK_C_SOURCE_COMPILES("${TEST_SRC}" FD_SET_IN_TYPES_H)
-ENDMACRO(CHECK_FD_SET_IN_TYPES_D)
-
-MACRO(CHECK_TIME_AND_SYS_TIME)
- SET(TEST_SRC "
- #include <sys/types.h>
- #include <sys/time.h>
- #include <time.h>
- int main() {
- if ((struct tm *) 0)
- return 0;
- return 0;
- }
- ")
- CHECK_C_SOURCE_COMPILES("${TEST_SRC}" TIME_AND_SYS_TIME)
-ENDMACRO(CHECK_TIME_AND_SYS_TIME)
-
Added: brlcad/branches/cmake/src/other/tcl/CMake/ac_std_funcs.cmake
===================================================================
--- brlcad/branches/cmake/src/other/tcl/CMake/ac_std_funcs.cmake
(rev 0)
+++ brlcad/branches/cmake/src/other/tcl/CMake/ac_std_funcs.cmake
2010-10-29 15:39:26 UTC (rev 41171)
@@ -0,0 +1,97 @@
+# Standard tests and wrappers for CMake functions
+
+INCLUDE(CheckCCompilerFlag)
+INCLUDE(CheckFunctionExists)
+INCLUDE(CheckIncludeFile)
+INCLUDE(CheckIncludeFiles)
+INCLUDE(CheckIncludeFileCXX)
+INCLUDE(CheckTypeSize)
+INCLUDE(CheckLibraryExists)
+INCLUDE(CheckStructHasMember)
+INCLUDE(CheckCSourceCompiles)
+INCLUDE(ResolveCompilerPaths)
+
+SET(CMAKE_TEST_SRCS_DIR "NOTFOUND")
+FOREACH($candidate_dir ${CMAKE_MODULE_PATH})
+ IF(NOT CMAKE_TEST_SRCS_DIR)
+ IF(EXISTS "${candidate_dir}/test_sources" AND IS_DIRECTORY
"${candidate_dir}/test_sources")
+ SET(CMAKE_TEST_SRCS_DIR ${candidate_dir}/test_sources)
+ ENDIF(EXISTS "${candidate_dir}/test_sources" AND IS_DIRECTORY
"${candidate_dir}/test_sources")
+ ENDIF(NOT CMAKE_TEST_SRCS_DIR)
+ENDFOREACH($candidate_dir ${CMAKE_MODULE_PATH})
+
+INCLUDE(CheckPrototypeExists)
+INCLUDE(CheckCSourceRuns)
+INCLUDE(CheckCFileRuns)
+
+MACRO(CHECK_BASENAME_D)
+ SET(BASENAME_SRC "
+ #include <libgen.h>
+ int main(int argc, char *argv[]) {
+ (void)basename(argv[0]);
+ return 0;
+ }")
+ CHECK_C_SOURCE_RUNS("${BASENAME_SRC}" HAVE_BASENAME)
+ IF(HAVE_BASENAME)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_BASENAME=1" CACHE STRING "TCL CFLAGS" FORCE)
+ ENDIF(HAVE_BASENAME)
+ENDMACRO(CHECK_BASENAME_D)
+
+MACRO(CHECK_DIRNAME_D)
+ SET(DIRNAME_SRC "
+ #include <libgen.h>
+ int main(int argc, char *argv[]) {
+ (void)dirname(argv[0]);
+ return 0;
+ }")
+ CHECK_C_SOURCE_RUNS("${DIRNAME_SRC}" HAVE_DIRNAME)
+ IF(HAVE_DIRNAME)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_DIRNAME=1" CACHE STRING "TCL CFLAGS" FORCE)
+ ENDIF(HAVE_DIRNAME)
+ENDMACRO(CHECK_DIRNAME_D)
+
+# Based on AC_HEADER_STDC - using the source code for ctype
+# checking found in the generated configure file
+MACRO(CMAKE_HEADER_STDC_D)
+ CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
+ IF(HAVE_STDLIB_H)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS} -DHAVE_STDLIB_H=1" CACHE
STRING "TCL CFLAGS" FORCE)
+ ENDIF(HAVE_STDLIB_H)
+ CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
+ CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
+ IF(HAVE_STRING_H)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS} -DHAVE_STRING_H=1" CACHE
STRING "TCL CFLAGS" FORCE)
+ ENDIF(HAVE_STRING_H)
+ CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
+ IF(HAVE_STRINGS_H)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS} -DHAVE_STRINGS_H=1"
CACHE STRING "TCL CFLAGS" FORCE)
+ ENDIF(HAVE_STRINGS_H)
+ CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
+ CHECK_PROTOTYPE_EXISTS(memchr string.h HAVE_STRING_H_MEMCHR)
+ CHECK_PROTOTYPE_EXISTS(free stdlib.h HAVE_STDLIB_H_FREE)
+ CHECK_C_FILE_RUNS(${CMAKE_TEST_SRCS_DIR}/ctypes_test.c WORKING_CTYPE_MACROS)
+ IF(HAVE_STDLIB_H AND HAVE_STDARG_H AND HAVE_STRING_H AND HAVE_FLOAT_H AND
WORKING_CTYPE_MACROS)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS} -DSTDC_HEADERS=1"
CACHE STRING "TCL CFLAGS" FORCE)
+ ENDIF(HAVE_STDLIB_H AND HAVE_STDARG_H AND HAVE_STRING_H AND HAVE_FLOAT_H AND
WORKING_CTYPE_MACROS)
+ENDMACRO(CMAKE_HEADER_STDC_D)
+
+# Based on AC_HEADER_SYS_WAIT
+MACRO(CMAKE_HEADER_SYS_WAIT_D)
+ CHECK_C_FILE_RUNS(${CMAKE_TEST_SRCS_DIR}/sys_wait_test.c WORKING_SYS_WAIT)
+ IF(WORKING_SYS_WAIT)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_SYS_WAIT_H=1" CACHE STRING "TCL CFLAGS" FORCE)
+ ENDIF(WORKING_SYS_WAIT)
+ENDMACRO(CMAKE_HEADER_SYS_WAIT_D)
+
+# Based on AC_FUNC_ALLOCA
+MACRO(CMAKE_ALLOCA_D)
+ CHECK_C_FILE_RUNS(${CMAKE_TEST_SRCS_DIR}/alloca_header_test.c
WORKING_ALLOCA_H)
+ IF(WORKING_ALLOCA_H)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_ALLOCA_H=1" CACHE STRING "TCL CFLAGS" FORCE)
+ ENDIF(WORKING_ALLOCA_H)
+ CHECK_C_FILE_RUNS(${CMAKE_TEST_SRCS_DIR}/alloca_test.c WORKING_ALLOCA)
+ IF(WORKING_ALLOCA)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_ALLOCA=1" CACHE STRING "TCL CFLAGS" FORCE)
+ ENDIF(WORKING_ALLOCA)
+ENDMACRO(CMAKE_ALLOCA_D)
+
Property changes on:
brlcad/branches/cmake/src/other/tcl/CMake/ac_std_funcs.cmake
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: brlcad/branches/cmake/src/other/tcl/CMake/tcl.cmake
===================================================================
--- brlcad/branches/cmake/src/other/tcl/CMake/tcl.cmake
(rev 0)
+++ brlcad/branches/cmake/src/other/tcl/CMake/tcl.cmake 2010-10-29 15:39:26 UTC
(rev 41171)
@@ -0,0 +1,384 @@
+# CMake version of the tcl.m4 logic, insofar as it maps to CMake and has been
+# needed.
+
+INCLUDE(CheckCCompilerFlag)
+INCLUDE(CheckFunctionExists)
+INCLUDE(CheckIncludeFile)
+INCLUDE(CheckIncludeFiles)
+INCLUDE(CheckIncludeFileCXX)
+INCLUDE(CheckTypeSize)
+INCLUDE(CheckLibraryExists)
+INCLUDE(CheckStructHasMember)
+INCLUDE(CheckCSourceCompiles)
+INCLUDE(ResolveCompilerPaths)
+INCLUDE(CheckPrototypeExists)
+INCLUDE(CheckCSourceRuns)
+INCLUDE(CheckCFileRuns)
+
+INCLUDE(ac_std_funcs)
+
+MACRO(ADD_TCL_CFLAG TCL_CFLAG)
+ SET(TCL_CFLAGS "${TCL_CFLAGS} -D${TCL_CFLAG}=1" CACHE STRING "TCL
CFLAGS" FORCE)
+ENDMACRO(ADD_TCL_CFLAG)
+
+# Note - for these path and load functions, should move the FindTCL.cmake
+# logic that applies to here
+
+#------------------------------------------------------------------------
+# SC_PATH_TCLCONFIG
+#------------------------------------------------------------------------
+
+# TODO
+
+#------------------------------------------------------------------------
+# SC_PATH_TKCONFIG
+#------------------------------------------------------------------------
+
+# TODO
+
+#------------------------------------------------------------------------
+# SC_LOAD_TCLCONFIG
+#------------------------------------------------------------------------
+
+# TODO
+
+#------------------------------------------------------------------------
+# SC_LOAD_TKCONFIG
+#------------------------------------------------------------------------
+
+# TODO
+
+#------------------------------------------------------------------------
+# SC_PROG_TCLSH
+#------------------------------------------------------------------------
+
+# TODO
+
+#------------------------------------------------------------------------
+# SC_BUILD_TCLSH
+#------------------------------------------------------------------------
+
+# TODO
+
+#------------------------------------------------------------------------
+# SC_ENABLE_SHARED
+#------------------------------------------------------------------------
+
+# This will probably be handled by CMake variables rather than a
+# specific SC command
+
+#------------------------------------------------------------------------
+# SC_ENABLE_FRAMEWORK
+#------------------------------------------------------------------------
+
+# Not immediately clear how this will work in CMake
+
+
+#------------------------------------------------------------------------
+# SC_ENABLE_THREADS
+#------------------------------------------------------------------------
+MACRO(SC_ENABLE_THREADS)
+ OPTION(TCL_THREADS "Enable Tcl Thread support" ON)
+ IF(TCL_THREADS)
+ ADD_TCL_CFLAG(TCL_THREADS)
+ ADD_TCL_CFLAG(USE_THREAD_ALLOC)
+ ADD_TCL_CFLAG(_REENTRANT)
+ ADD_TCL_CFLAG(_THREAD_SAFE)
+ IF(${CMAKE_SYSTEM_NAME} MATCHES "^SunOS$")
+ ADD_TCL_CFLAG(_POSIX_PTHREAD_SEMANTICS)
+ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "^SunOS$")
+ FIND_PACKAGE(Threads)
+ CHECK_FUNCTION_EXISTS(pthread_attr_setstacksize
HAVE_PTHREAD_ATTR_SETSTACKSIZE)
+ IF(HAVE_PTHREAD_ATTR_SETSTACKSIZE)
+ ADD_TCL_CFLAG(HAVE_PTHREAD_ATTR_SETSTACKSIZE)
+ ENDIF(HAVE_PTHREAD_ATTR_SETSTACKSIZE)
+ CHECK_FUNCTION_EXISTS(pthread_attr_get_np
HAVE_PTHREAD_ATTR_GET_NP)
+ CHECK_FUNCTION_EXISTS(pthread_getattr_np
HAVE_PTHREAD_GETATTR_NP)
+ IF(HAVE_PTHREAD_ATTR_GET_NP)
+ ADD_TCL_CFLAG(HAVE_PTHREAD_ATTR_GET_NP)
+ ELSEIF(HAVE_PTHREAD_GETATTR_NP)
+ ADD_TCL_CFLAG(HAVE_PTHREAD_GETATTR_NP)
+ ENDIF(HAVE_PTHREAD_ATTR_GET_NP)
+ IF(NOT HAVE_PTHREAD_ATTR_GET_NP AND NOT HAVE_PTHREAD_GETATTR_NP)
+ CHECK_FUNCTION_EXISTS(pthread_get_stacksize_np
HAVE_PTHREAD_GET_STACKSIZE_NP)
+ IF(HAVE_PTHREAD_GET_STACKSIZE_NP)
+ ADD_TCL_CFLAG(HAVE_PTHREAD_GET_STACKSIZE_NP)
+ ENDIF(HAVE_PTHREAD_GET_STACKSIZE_NP)
+ ENDIF(NOT HAVE_PTHREAD_ATTR_GET_NP AND NOT
HAVE_PTHREAD_GETATTR_NP)
+ ENDIF(TCL_THREADS)
+ENDMACRO(SC_ENABLE_THREADS)
+
+#------------------------------------------------------------------------
+# SC_ENABLE_SYMBOLS
+#------------------------------------------------------------------------
+
+# TODO - this may be replaced by other CMake mechanisms
+
+#------------------------------------------------------------------------
+# SC_ENABLE_LANGINFO
+#------------------------------------------------------------------------
+MACRO(SC_ENABLE_LANGINFO)
+ OPTION(ENABLE_LANGINFO "Trigger use of nl_langinfo if available." ON)
+ IF(ENABLE_LANGINFO)
+ CHECK_INCLUDE_FILE(langinfo.h HAVE_LANGINFO)
+ IF(HAVE_LANGINFO)
+ SET(LANGINFO_SRC "
+ #include <langinfo.h>
+ int main() {
+ nl_langinfo(CODESET);
+ }
+ ")
+ CHECK_C_SOURCE_COMPILES("${LANGINFO_SRC}"
LANGINFO_COMPILES)
+ IF(LANGINFO_COMPILES)
+ ADD_TCL_FLAG(HAVE_LANGINFO)
+ ELSE(LANGINFO_COMPILES)
+ SET(ENABLE_LANGINFO OFF CACHE STRING "Langinfo
off" FORCE)
+ ENDIF(LANGINFO_COMPILES)
+ ELSE(LANGINFO)
+ SET(ENABLE_LANGINFO OFF CACHE STRING "Langinfo off"
FORCE)
+ ENDIF(LANGINFO)
+ ENDIF(ENABLE_LANGINFO)
+ENDMACRO(SC_ENABLE_LANGINFO)
+
+#--------------------------------------------------------------------
+# SC_CONFIG_MANPAGES
+#--------------------------------------------------------------------
+
+# TODO
+
+#--------------------------------------------------------------------
+# SC_CONFIG_SYSTEM
+#--------------------------------------------------------------------
+
+# Replaced by CMake functionality
+
+
+#--------------------------------------------------------------------
+# SC_CONFIG_CFLAGS
+#--------------------------------------------------------------------
+
+# TODO - many of these are either automatically handled or handled
+# elsewhere, but should still handle what we need to
+
+#--------------------------------------------------------------------
+# SC_SERIAL_PORT
+#--------------------------------------------------------------------
+MACRO(SC_SERIAL_PORT)
+ SET(TERMIOS_SRC_1 "
+#include <termios.h>
+int main() {
+struct termios t;
+if (tcgetattr(0, &t) == 0) {
+ cfsetospeed(&t, 0);
+ t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
+ return 0;
+}
+ return 1;
+}
+ ")
+ SET(TERMIOS_SRC_2 "
+#include <termios.h>
+#include <errno.h>
+
+int main() {
+struct termios t;
+if (tcgetattr(0, &t) == 0
+ || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+ cfsetospeed(&t, 0);
+ t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
+ return 0;
+ }
+ return 1;
+}
+ ")
+ SET(TERMIO_SRC_1 "
+#include <termio.h>
+int main() {
+struct termio t;
+if (ioctl(0, TCGETA, &t) == 0) {
+ t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
+ return 0;
+}
+ return 1;
+}
+ ")
+ SET(TERMIO_SRC_2 "
+#include <termio.h>
+#include <errno.h>
+
+int main() {
+struct termio t;
+if (ioctl(0, TCGETA, &t) == 0
+ || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+ t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
+ return 0;
+ }
+ return 1;
+}
+ ")
+ SET(SGTTY_SRC_1 "
+#include <sgtty.h>
+int main() {
+struct sgttyb t;
+if (ioctl(0, TIOCGETP, &t) == 0) {
+ t.sg_ospeed = 0;
+ t.sg_flags |= ODDP | EVENP | RAW;
+ return 0;
+}
+ return 1;
+}
+ ")
+ SET(SGTTY_SRC_2 "
+#include <sgtty.h>
+#include <errno.h>
+
+int main() {
+struct sgttyb t;
+if (ioctl(0, TIOCGETP, &t) == 0
+ || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+ t.sg_ospeed = 0;
+ t.sg_flags |= ODDP | EVENP | RAW;
+ return 0;
+ }
+ return 1;
+}
+ ")
+ CHECK_C_SOURCE_RUNS("${TERMIOS_SRC_1}" HAVE_TERMIOS)
+ IF(NOT HAVE_TERMIOS)
+ CHECK_C_SOURCE_RUNS("${TERMIO_SRC_1}" HAVE_TERMIO)
+ ENDIF(NOT HAVE_TERMIOS)
+ IF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS)
+ CHECK_C_SOURCE_RUNS("${SGTTY_SRC_1}" HAVE_SGTTY)
+ ENDIF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS)
+ IF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS AND NOT HAVE_SGTTY)
+ CHECK_C_SOURCE_RUNS("${TERMIOS_SRC_2}" HAVE_TERMIOS)
+ IF(NOT HAVE_TERMIOS)
+ CHECK_C_SOURCE_RUNS("${TERMIO_SRC_2}" HAVE_TERMIO)
+ ENDIF(NOT HAVE_TERMIOS)
+ IF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS)
+ CHECK_C_SOURCE_RUNS("${SGTTY_SRC_2}" HAVE_SGTTY)
+ ENDIF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS)
+ ENDIF(NOT HAVE_TERMIO AND NOT HAVE_TERMIOS AND NOT HAVE_SGTTY)
+
+ IF(HAVE_TERMIOS)
+ ADD_TCL_CFLAG(USE_TERMIOS)
+ ELSE(HAVE_TERMIOS)
+ IF(HAVE_TERMIO)
+ ADD_TCL_CFLAG(USE_TERMIO)
+ ELSE(HAVE_TERMIO)
+ IF(HAVE_SGTTY)
+ ADD_TCL_CFLAG(USE_SGTTY)
+ ENDIF(HAVE_SGTTY)
+ ENDIF(HAVE_TERMIO)
+ ENDIF(HAVE_TERMIOS)
+ENDMACRO(SC_SERIAL_PORT)
+
+
+#--------------------------------------------------------------------
+# SC_MISSING_POSIX_HEADERS
+#--------------------------------------------------------------------
+MACRO(SC_MISSING_POSIX_HEADERS)
+ CHECK_INCLUDE_FILE_D(dirent.h HAVE_DIRENT_H)
+ IF(NOT HAVE_DIRENT_H)
+ SET(TCL_CFLAGS "${TCL_CFLAGS} -DNO_DIRENT_H=1")
+ ENDIF(NOT HAVE_DIRENT_H)
+ CHECK_INCLUDE_FILE_USABILITY_D(float.h FLOAT_H)
+ CHECK_INCLUDE_FILE_USABILITY_D(values.h VALUES_H)
+ CHECK_INCLUDE_FILE_USABILITY_D(limits.h LIMITS_H)
+ CHECK_INCLUDE_FILE_D(stdlib.h HAVE_STDLIB_H)
+ CHECK_INCLUDE_FILE_D(string.h HAVE_STRING_H)
+ IF(NOT HAVE_STRING_H)
+ SET(TCL_CFLAGS "${TCL_CFLAGS} -DNO_STRING_H=1")
+ ENDIF(NOT HAVE_STRING_H)
+ CHECK_INCLUDE_FILE_USABILITY_D(sys/wait.h SYS_WAIT_H)
+ CHECK_INCLUDE_FILE_USABILITY_D(dlfcn.h DLFCN_H)
+ CHECK_INCLUDE_FILE_USABILITY_D(sys/param.h SYS_PARAM_H)
+ENDMACRO(SC_MISSING_POSIX_HEADERS)
+
+
+#--------------------------------------------------------------------
+# SC_PATH_X
+#--------------------------------------------------------------------
+
+# Replaced by CMake's FindX11
+
+#--------------------------------------------------------------------
+# SC_BLOCKING_STYLE
+#--------------------------------------------------------------------
+
+# TODO
+
+#--------------------------------------------------------------------
+# SC_TIME_HANLDER
+#
+# The TEA version of this macro calls AC_HEADER_TIME, but Autotools
+# docs list it as obsolete.
+#
+# TODO - tzname testing is incomplete
+#
+#--------------------------------------------------------------------
+MACRO(SC_TIME_HANDLER)
+ CHECK_INCLUDE_FILE_USABILITY_D(sys/time.h HAVE_SYS_TIME_H)
+ CHECK_STRUCT_HAS_MEMBER_D("struct tm" tm_zone time.h
HAVE_STRUCT_TM_TM_ZONE)
+ IF(HAVE_STRUCT_TM_TM_ZONE)
+ ADD_TCL_CFLAG(HAVE_TM_ZONE)
+ ELSE(HAVE_STRUCT_TM_TM_ZONE)
+ SET(TZNAME_SRC "
+#include <time.h>
+int main () {
+#ifndef tzname
+ (void) tzname;
+#endif
+return 0;
+}")
+ CHECK_C_SOURCE_COMPILES("${TZNAME_SRC}" HAVE_TZNAME)
+ IF(HAVE_TZNAME)
+ ADD_TCL_CFLAG(HAVE_DECL_TZNAME)
+ ENDIF(HAVE_TZNAME)
+ ENDIF(HAVE_STRUCT_TM_TM_ZONE)
+ CHECK_FUNCTION_EXISTS_D(gmtime_r HAVE_GMTIME_R)
+ CHECK_FUNCTION_EXISTS_D(localtime_r HAVE_LOCALTIME_R)
+ CHECK_FUNCTION_EXISTS_D(mktime HAVE_MKTIME)
+ CHECK_STRUCT_HAS_MEMBER_D("struct tm" tm_tzadj time.h HAVE_TM_TZADJ)
+ CHECK_STRUCT_HAS_MEMBER_D("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
+ENDMACRO(SC_TIME_HANDLER)
+
+
+
+MACRO(CHECK_FD_SET_IN_TYPES_D)
+ SET(TEST_SRC "
+ #include <sys/types.h>
+ int main ()
+ {
+ fd_set readMask, writeMask;
+ return 0;
+ }
+ ")
+ CHECK_C_SOURCE_COMPILES("${TEST_SRC}" FD_SET_IN_TYPES_H)
+ENDMACRO(CHECK_FD_SET_IN_TYPES_D)
+
+MACRO(CHECK_COMPILER_SUPPORTS_HIDDEN_D)
+ SET(TEST_SRC"
+ #define MODULE_SCOPE extern __attribute__((__visibility__("hidden")))
+ main(){};
+ ")
+ CHECK_C_SOURCE_COMPILES("${TEST_SRC}" COMPILER_SUPPORTS_HIDDEN)
+ENDMACRO(CHECK_COMPILER_SUPPORTS_HIDDEN_D)
+
+MACRO(CHECK_GETADDERINFO_WORKING_D)
+ SET(GETADDERINFO_SRC "
+ #include <netdb.h>
+ int main () {
+ const char *name, *port;
+ struct addrinfo *aiPtr, hints;
+ (void)getaddrinfo(name,port, &hints, &aiPtr);
+ (void)freeaddrinfo(aiPtr);
+ return 0;
+ }")
+ CHECK_C_SOURCE_COMPILES("${GETADDERINFO_SRC}" WORKING_GETADDERINFO)
+ IF(WORKING_GETADDERINFO)
+ SET(${CFLAGS_NAME}_CFLAGS "${${CFLAGS_NAME}_CFLAGS}
-DHAVE_GETADDERINFO=1" CACHE STRING "TCL CFLAGS" FORCE)
+ ENDIF(WORKING_GETADDERINFO)
+ENDMACRO(CHECK_GETADDERINFO_WORKING_D)
+
+
Property changes on: brlcad/branches/cmake/src/other/tcl/CMake/tcl.cmake
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Modified: brlcad/branches/cmake/src/other/tcl/CMakeLists.txt
===================================================================
--- brlcad/branches/cmake/src/other/tcl/CMakeLists.txt 2010-10-29 14:06:50 UTC
(rev 41170)
+++ brlcad/branches/cmake/src/other/tcl/CMakeLists.txt 2010-10-29 15:39:26 UTC
(rev 41171)
@@ -103,13 +103,12 @@
SET(CMAKE_MODULE_PATH "${TCL_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
#-----------------------------------------------------------------------------
-# The header structure of Tcl/Tk ends up requiring compile-line definitions of
-# many variables to ensure the various headers get the correct values. Due
-# to the number of these flags, we build up a TCL_CFLAGS list to be passed
-# to the final build. Unlike Tk, Tcl also has a pre-defined tclConfig.h.in
-# file that needs to be configured - handle both.
-
+# Tcl/Tk's normal build system uses autotools macros, referred to as the
+# TEA system. An attempt to duplicate the required functionality from
+# TEA is found in tcl.cmake
INCLUDE(${TCL_SOURCE_DIR}/CMake/CheckSystemFunctionality.cmake)
+INCLUDE(${TCL_SOURCE_DIR}/CMake/ac_std_funcs.cmake)
+INCLUDE(${TCL_SOURCE_DIR}/CMake/tcl.cmake)
#----------------------------------------------------------------------------
# First, get some standard options out of the way - things that are constant
@@ -143,9 +142,6 @@
ENDIF(COREFOUNDATION_FRAMEWORK)
ENDIF(APPLE)
#----------------------------------------------------------------------------
-# Define a number of variables to be controlled by options
-OPTION(TCL_THREADS "Enable Tcl Thread support" ON)
-
# Tom's math library - should MP_PREC be an option?
OPTION(TCL_TOMMATH "Enable Tcl Tom's Math Library" ON)
IF(TCL_TOMMMATH)
@@ -153,48 +149,11 @@
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
+SC_MISSING_POSIX_HEADERS()
-CHECK_INCLUDE_FILE_D(dirent.h HAVE_DIRENT_H)
-IF(NOT HAVE_DIRENT_H)
- SET(TCL_CFLAGS "${TCL_CFLAGS} -DNO_DIRENT_H=1")
-ENDIF(NOT HAVE_DIRENT_H)
-CHECK_INCLUDE_FILE_USABILITY_D(float.h FLOAT_H)
-CHECK_INCLUDE_FILE_USABILITY_D(values.h VALUES_H)
-CHECK_INCLUDE_FILE_USABILITY_D(limits.h LIMITS_H)
-CHECK_INCLUDE_FILE_D(stdlib.h HAVE_STDLIB_H)
-CHECK_INCLUDE_FILE_D(string.h HAVE_STRING_H)
-IF(NOT HAVE_STRING_H)
- SET(TCL_CFLAGS "${TCL_CFLAGS} -DNO_STRING_H=1")
-ENDIF(NOT HAVE_STRING_H)
-CHECK_INCLUDE_FILE_USABILITY_D(sys/wait.h SYS_WAIT_H)
-CHECK_INCLUDE_FILE_USABILITY_D(dlfcn.h DLFCN_H)
-CHECK_INCLUDE_FILE_USABILITY_D(sys/param.h SYS_PARAM_H)
+SC_ENABLE_THREADS()
-# Next comes the thread check
-IF(TCL_THREADS)
- SET(TCL_CFLAGS "${TCL_CFLAGS} -DTCL_THREADS=1")
- SET(TCL_CFLAGS "${TCL_CFLAGS} -DUSE_THREAD_ALLOC=1")
- SET(TCL_CFLAGS "${TCL_CFLAGS} -D_REENTRANT=1")
- SET(TCL_CFLAGS "${TCL_CFLAGS} -D_THREAD_SAFE=1")
- IF(${CMAKE_SYSTEM_NAME} MATCHES "^SunOS$")
- SET(TCL_CFLAGS "${TCL_CFLAGS} -D_POSIX_PTHREAD_SEMANTICS=1")
- ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "^SunOS$")
- FIND_PACKAGE(Threads)
- CHECK_FUNCTION_EXISTS_D(pthread_attr_setstacksize
HAVE_PTHREAD_ATTR_SETSTACKSIZE)
- CHECK_FUNCTION_EXISTS(pthread_attr_get_np HAVE_PTHREAD_ATTR_GET_NP)
- CHECK_FUNCTION_EXISTS(pthread_getattr_np HAVE_PTHREAD_GETATTR_NP)
- IF(HAVE_PTHREAD_ATTR_GET_NP)
- SET(TCL_CFLAGS "${TCL_CFLAGS} -DHAVE_PTHREAD_ATTR_GET_NP=1")
- ELSEIF(HAVE_PTHREAD_GETATTR_NP)
- SET(TCL_CFLAGS "${TCL_CFLAGS} -DHAVE_PTHREAD_GETATTR_NP=1")
- ENDIF(HAVE_PTHREAD_ATTR_GET_NP)
- CHECK_FUNCTION_EXISTS(pthread_get_stacksize_np
HAVE_PTHREAD_GET_STACKSIZE_NP)
-ENDIF(TCL_THREADS)
# SC_TCL_CFG_ENCODING
IF(NOT TCL_CFGVAL_ENCODING)
@@ -598,8 +557,14 @@
ENDIF(TCL_THREADS)
# Determine which interface to use to talk to the serial port.
-TERMIOS_TERMIO_SGTTY()
+SC_SERIAL_PORT()
+# Do we need the sys/select.h check these days?
+
+
+# Handle time
+SC_TIME_HANDLER()
+
CHECK_INCLUDE_FILE_D(sys/types.h HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILE_D(sys/stat.h HAVE_SYS_STAT_H)
CHECK_INCLUDE_FILE_D(sys/fstatfs.h HAVE_SYS_FSTATFS_H)
@@ -627,16 +592,6 @@
CHECK_FD_SET_IN_TYPES_D()
-CHECK_INCLUDE_FILE_USABILITY_D(sys/time.h HAVE_SYS_TIME_H)
-CHECK_TIME_AND_SYS_TIME()
-
-CHECK_FUNCTION_EXISTS_D(gmtime_r HAVE_GMTIME_R)
-CHECK_FUNCTION_EXISTS_D(localtime_r HAVE_LOCALTIME_R)
-CHECK_FUNCTION_EXISTS_D(mktime HAVE_MKTIME)
-
-CHECK_STRUCT_HAS_MEMBER_D("struct tm" tm_tzadj time.h HAVE_TM_TZADJ)
-CHECK_STRUCT_HAS_MEMBER_D("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
-
CHECK_INCLUDE_FILE_D(copyfile.h HAVE_COPYFILE_H)
CHECK_FUNCTION_EXISTS_D(copyfile HAVE_COPYFILE)
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