Browse Source

Split automated compiler settings into LocalSetup.cmake. Rename Version.cmake into PandaVersion.cmake.

rdb 12 years ago
parent
commit
39bea67211
5 changed files with 191 additions and 92 deletions
  1. 2 2
      CMakeLists.txt
  2. 1 1
      dtool/CMakeLists.txt
  3. 8 88
      dtool/Config.cmake
  4. 179 0
      dtool/LocalSetup.cmake
  5. 1 1
      dtool/PandaVersion.cmake

+ 2 - 2
CMakeLists.txt

@@ -5,10 +5,10 @@ project(Panda3D)
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
 
 ## This is where dtool_config.h gets generated ##
-include_directories("${CMAKE_BINARY_DIR}/include")
+include_directories("${CMAKE_BINARY_DIR}")
 
 ## Configure Panda3D ##(
-include(dtool/Version.cmake)
+include(dtool/PandaVersion.cmake)
 include(dtool/Packages.cmake)
 include(dtool/Config.cmake)
 

+ 1 - 1
dtool/CMakeLists.txt

@@ -1,5 +1,5 @@
 ## Configure dtool ##
-configure_file(dtool_config.h.cmake ${CMAKE_BINARY_DIR}/include/dtool_config.h)
+include(LocalSetup.cmake)
 
 ## Include dtool subpackages ##
 add_subdirectory(src/dtoolbase)

+ 8 - 88
dtool/Config.cmake

@@ -167,12 +167,12 @@ if(CMAKE_BUILD_TYPE MATCHES "MinSizeRel")
   option(BUILD_WITH_DEFAULT_FONT
     "If on, compiles in a default font, so that every TextNode will always
 have a font available without requiring the user to specify one.
-When turned off, the generated libary will save a few kilobytes." OFF)
+When turned off, the generated library will save a few kilobytes." OFF)
 else()
   option(BUILD_WITH_DEFAULT_FONT
     "If on, compiles in a default font, so that every TextNode will always
 have a font available without requiring the user to specify one.
-When turned off, the generated libary will save a few kilobytes." ON)
+When turned off, the generated library will save a few kilobytes." ON)
 endif()
 if(BUILD_WITH_DEFAULT_FONT)
   set(COMPILE_IN_DEFAULT_FONT TRUE)
@@ -189,95 +189,15 @@ if(BUILD_PREFER_STDFLOAT)
   set(STDFLOAT_DOUBLE TRUE)
 endif()
 
-### Check for system support of various values ###
-# Do we have all these header files?
-include(CheckIncludeFileCXX)
-check_include_file_cxx(io.h PHAVE_IO_H)
-check_include_file_cxx(iostream PHAVE_IOSTREAM)
-check_include_file_cxx(malloc.h PHAVE_MALLOC_H)
-check_include_file_cxx(sys/malloc.h PHAVE_SYS_MALLOC_H)
-check_include_file_cxx(alloca.h PHAVE_ALLOCA_H)
-check_include_file_cxx(locale.h PHAVE_LOCALE_H)
-check_include_file_cxx(string.h PHAVE_STRING_H)
-check_include_file_cxx(stdlib.h PHAVE_STDLIB_H)
-check_include_file_cxx(limits.h PHAVE_LIMITS_H)
-check_include_file_cxx(minmax.h PHAVE_MINMAX_H)
-check_include_file_cxx(sstream PHAVE_SSTREAM)
-check_include_file_cxx(new PHAVE_NEW)
-check_include_file_cxx(sys/types.h PHAVE_SYS_TYPES_H)
-check_include_file_cxx(sys/time.h PHAVE_SYS_TIME_H)
-check_include_file_cxx(unistd.h PHAVE_UNISTD_H)
-check_include_file_cxx(utime.h PHAVE_UTIME_H)
-check_include_file_cxx(glob.h PHAVE_GLOB_H)
-check_include_file_cxx(dirent.h PHAVE_DIRENT_H)
-check_include_file_cxx(drfftw.h PHAVE_DRFFTW_H)
-check_include_file_cxx(sys/soundcard.h PHAVE_SYS_SOUNDCARD_H)
-check_include_file_cxx(ucontext.h PHAVE_UCONTEXT_H)
-check_include_file_cxx(linux/input.h PHAVE_LINUX_INPUT_H)
-check_include_file_cxx(stdint.h PHAVE_STDINT_H)
-check_include_file_cxx(typeinfo HAVE_RTTI)
-check_include_file_cxx(getopt.h PHAVE_GETOPT_H)
-
-# Do we have these sized type definitions
-include(CheckTypeSize)
-check_type_size(wchar_t WCHAR_T)
-
-# Does the compiler accept these declarations
-include(CheckCXXSourceCompiles)
-check_cxx_source_compiles(
-  "#include <string>
-   std::wstring str;
-   int main(int argc, char *argv[]) { return 0; }"
-  HAVE_WSTRING)
-
-# Do we have these standard functions
-include(CheckFunctionExists)
-check_function_exists(getopt HAVE_GETOPT)
-check_function_exists(getopt_long_only HAVE_GETOPT_LONG_ONLY)
-
-# Are we on a big endian system?
-include(TestBigEndian)
-test_big_endian(WORDS_BIGENDIAN)
-
-# Do we support std namespaces?
-include(TestForSTDNamespace)
-set(HAVE_NAMESPACE CMAKE_STD_NAMESPACE)
-
-# Can we read the file /proc/self/[*] to determine our
-# environment variables at static init time?
-if(EXISTS "/proc/self/exe")
-  set(HAVE_PROC_SELF_EXE TRUE)
-endif()
-if(EXISTS "/proc/self/maps")
-  set(HAVE_PROC_SELF_MAPS TRUE)
-endif()
-if(EXISTS "/proc/self/environ")
-  set(HAVE_PROC_SELF_ENVIRON TRUE)
-endif()
-if(EXISTS "/proc/self/cmdline")
-  set(HAVE_PROC_SELF_CMDLINE TRUE)
-endif()
-if(EXISTS "/proc/curproc/file")
-  set(HAVE_PROC_CURPROC_FILE TRUE)
-endif()
-if(EXISTS "/proc/curproc/map")
-  set(HAVE_PROC_CURPROC_MAP TRUE)
-endif()
-if(EXISTS "/proc/curproc/cmdline")
-  set(HAVE_PROC_CURPROC_CMDLINE TRUE)
-endif()
-
-# TODO: Actually check for these, instead of assuming
-set(HAVE_LOCKF TRUE)
-set(HAVE_TYPENAME TRUE)
-set(SIMPLE_STRUCT_POINTERS TRUE)
-set(HAVE_STREAMSIZE TRUE)
-set(HAVE_IOS_TYPEDEFS TRUE)
+#XXX note from rdb: I've moved the automatically-configured
+# compiler settings to LocalSetup.cmake, which is also where
+# dtool_config.h.cmake is now being invoked.
+# LocalSetup.cmake is included in dtool/CMakeLists.txt, which
+# is OK since the variables in there don't have to be used
+# outside of dtool_config.h.cmake.
 
 if(WIN32)
   set(DEFAULT_PATHSEP ";")
 else()
   set(DEFAULT_PATHSEP ":")
 endif()
-
-configure_file(dtool/dtool_config.h.cmake ${CMAKE_BINARY_DIR}/include/dtool_config.h)

+ 179 - 0
dtool/LocalSetup.cmake

@@ -0,0 +1,179 @@
+#
+# LocalSetup.cmake
+#
+# This file contains further instructions to set up the DTOOL package
+# when using CMake. In particular, it creates the dtool_config.h
+# file based on the user's selected configure variables.
+#
+
+include(CheckCXXSourceCompiles)
+include(CheckCSourceRuns)
+include(CheckIncludeFileCXX)
+include(CheckFunctionExists)
+include(CheckTypeSize)
+include(TestBigEndian)
+include(TestForSTDNamespace)
+
+# Define if we have libjpeg installed.
+check_include_file_cxx(jpegint.h PHAVE_JPEGINT_H)
+
+# Define to build video-for-linux.
+check_include_file_cxx(linux/videodev2.h HAVE_VIDEO4LINUX)
+
+# Check if this is a big-endian system.
+test_big_endian(WORDS_BIGENDIAN)
+
+# Check if the compiler supports namespaces.
+set(HAVE_NAMESPACE ${CMAKE_STD_NAMESPACE})
+
+# Define if fstream::open() accepts a third parameter for umask.
+#TODO make test case
+#$[cdefine HAVE_OPEN_MASK]
+
+# Define if we have lockf().
+#TODO make test case
+set(HAVE_LOCKF 1)
+
+# Check if we have a wchar_t type.
+check_type_size(wchar_t HAVE_WCHAR_T)
+
+# Check if we have a wstring type.
+check_cxx_source_compiles("
+#include <string>
+std::wstring str;
+int main(int argc, char *argv[]) { return 0; }
+" HAVE_WSTRING)
+
+# Define if the C++ compiler supports the typename keyword.
+#TODO make test case (I had one but it broke)
+set(HAVE_TYPENAME 1)
+
+# Define if we can trust the compiler not to insert extra bytes in
+# structs between base structs and derived structs.
+check_c_source_runs("
+struct A { int a; };
+struct B : public A { int b; };
+int main(int argc, char *argv[]) {
+  struct B i;
+  if ((size_t) &(i.b) == ((size_t) &(i.a)) + sizeof(struct A)) {
+    return 0;
+  } else {
+    return 1;
+  }
+}" SIMPLE_STRUCT_POINTERS)
+
+# Define if we have STL hash_map etc. available
+#TODO make test case
+#//$[cdefine HAVE_STL_HASH]
+
+# Check if we have a gettimeofday() function.
+check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
+
+# Define if gettimeofday() takes only one parameter.
+check_cxx_source_compiles("
+#include <sys/time.h>
+int main(int argc, char *argv[]) {
+  struct timeval tv;
+  int result;
+  result = gettimeofday(&tv);
+  return 0;
+}" GETTIMEOFDAY_ONE_PARAM)
+
+# Check if we have getopt.
+check_function_exists(getopt HAVE_GETOPT)
+check_function_exists(getopt_long_only HAVE_GETOPT_LONG_ONLY)
+check_include_file_cxx(getopt.h PHAVE_GETOPT_H)
+
+# Define if you have ioctl(TIOCGWINSZ) to determine terminal width.
+#XXX can we make a test case for this that isn't dependent on
+# the current terminal?  It might also be useful for Cygwin users.
+if(UNIX)
+  set(IOCTL_TERMINAL_WIDTH 1)
+endif()
+
+# Do the system headers define a "streamsize" typedef?
+check_cxx_source_compiles("
+#include <ios>
+std::streamsize ss;
+int main(int argc, char *argv[]) { return 0; }
+" HAVE_STREAMSIZE)
+
+# Do the system headers define key ios typedefs like ios::openmode
+# and ios::fmtflags?
+#TODO make test case
+set(HAVE_IOS_TYPEDEFS 1)
+
+# Define if the C++ iostream library defines ios::binary.
+#TODO make test case
+#$[cdefine HAVE_IOS_BINARY]
+
+# Can we safely call getenv() at static init time?
+#TODO make test case? can we make a reliable one?
+#$[cdefine STATIC_INIT_GETENV]
+
+# Can we read the file /proc/self/[*] to determine our
+# environment variables at static init time?
+if(EXISTS "/proc/self/exe")
+  set(HAVE_PROC_SELF_EXE 1)
+endif()
+if(EXISTS "/proc/self/maps")
+  set(HAVE_PROC_SELF_MAPS 1)
+endif()
+if(EXISTS "/proc/self/environ")
+  set(HAVE_PROC_SELF_ENVIRON 1)
+endif()
+if(EXISTS "/proc/self/cmdline")
+  set(HAVE_PROC_SELF_CMDLINE 1)
+endif()
+if(EXISTS "/proc/curproc/file")
+  set(HAVE_PROC_CURPROC_FILE 1)
+endif()
+if(EXISTS "/proc/curproc/map")
+  set(HAVE_PROC_CURPROC_MAP 1)
+endif()
+if(EXISTS "/proc/curproc/cmdline")
+  set(HAVE_PROC_CURPROC_CMDLINE 1)
+endif()
+
+# Do we have a global pair of argc/argv variables that we can read at
+# static init time? Should we prototype them? What are they called?
+#TODO make test case
+#$[cdefine HAVE_GLOBAL_ARGV]
+#$[cdefine PROTOTYPE_GLOBAL_ARGV]
+#$[cdefine GLOBAL_ARGV]
+#$[cdefine GLOBAL_ARGC]
+
+# Do we have all these header files?
+check_include_file_cxx(io.h PHAVE_IO_H)
+check_include_file_cxx(iostream PHAVE_IOSTREAM)
+check_include_file_cxx(malloc.h PHAVE_MALLOC_H)
+check_include_file_cxx(sys/malloc.h PHAVE_SYS_MALLOC_H)
+check_include_file_cxx(alloca.h PHAVE_ALLOCA_H)
+check_include_file_cxx(locale.h PHAVE_LOCALE_H)
+check_include_file_cxx(string.h PHAVE_STRING_H)
+check_include_file_cxx(stdlib.h PHAVE_STDLIB_H)
+check_include_file_cxx(limits.h PHAVE_LIMITS_H)
+check_include_file_cxx(minmax.h PHAVE_MINMAX_H)
+check_include_file_cxx(sstream PHAVE_SSTREAM)
+check_include_file_cxx(new PHAVE_NEW)
+check_include_file_cxx(sys/types.h PHAVE_SYS_TYPES_H)
+check_include_file_cxx(sys/time.h PHAVE_SYS_TIME_H)
+check_include_file_cxx(unistd.h PHAVE_UNISTD_H)
+check_include_file_cxx(utime.h PHAVE_UTIME_H)
+check_include_file_cxx(glob.h PHAVE_GLOB_H)
+check_include_file_cxx(dirent.h PHAVE_DIRENT_H)
+check_include_file_cxx(drfftw.h PHAVE_DRFFTW_H)
+check_include_file_cxx(sys/soundcard.h PHAVE_SYS_SOUNDCARD_H)
+check_include_file_cxx(ucontext.h PHAVE_UCONTEXT_H) #TODO doesn't work on OSX, use sys/ucontext.h
+check_include_file_cxx(linux/input.h PHAVE_LINUX_INPUT_H)
+check_include_file_cxx(stdint.h PHAVE_STDINT_H)
+check_include_file_cxx(typeinfo HAVE_RTTI)
+
+# Do we have Posix threads?
+#set(HAVE_POSIX_THREADS ${CMAKE_USE_PTHREADS_INIT})
+
+#/* Define if needed to have 64-bit file i/o */
+#$[cdefine __USE_LARGEFILE64]
+
+configure_file(dtool_config.h.cmake "${PROJECT_BINARY_DIR}/dtool_config.h")
+#install(FILES "${PROJECT_BINARY_DIR}/dtool_config.h" DESTINATION include/panda3d)

+ 1 - 1
dtool/Version.cmake → dtool/PandaVersion.cmake

@@ -61,7 +61,7 @@ else()
   set(VERSION_SUFFIX "c")
 endif()
 
-set(PANDA_VERSION_STR "${PANDA_VERSION}c")
+set(PANDA_VERSION_STR "${PANDA_VERSION}${VERSION_SUFFIX}")
 
 # This symbol is used to enforce ABI incompatibility between
 # major versions of Panda3D.