Browse Source

Add interrogate macros, add p3express/p3downloader/p3dtoolconfig, fixes for pre-2.8.11

rdb 12 years ago
parent
commit
d71923b36e

+ 1 - 1
CMakeLists.txt

@@ -14,7 +14,7 @@ include(dtool/PandaMacros.cmake)
 include(dtool/PandaVersion.cmake)
 include(dtool/PandaVersion.cmake)
 include(dtool/Packages.cmake)
 include(dtool/Packages.cmake)
 include(dtool/Config.cmake)
 include(dtool/Config.cmake)
-#include(dtool/Interrogate.cmake)
+include(dtool/Interrogate.cmake)
 
 
 # Determine which trees to build.
 # Determine which trees to build.
 option(BUILD_DTOOL "Build the dtool source tree." ON)
 option(BUILD_DTOOL "Build the dtool source tree." ON)

+ 1 - 0
dtool/CMakeLists.txt

@@ -13,3 +13,4 @@ add_subdirectory(src/interrogate)
 
 
 # Include dtool metalibs
 # Include dtool metalibs
 add_subdirectory(metalibs/dtool)
 add_subdirectory(metalibs/dtool)
+add_subdirectory(metalibs/dtoolconfig)

+ 14 - 1
dtool/Config.cmake

@@ -213,6 +213,19 @@ FFI step.  This loads and runs much more quickly than the original
 mechanism.  Define this false (that is, empty) to use the original
 mechanism.  Define this false (that is, empty) to use the original
 interfaces." ON)
 interfaces." ON)
 
 
+set(INTERROGATE_C_INTERFACE
+  "Do you want to generate a C-callable interrogate interface?  This
+generates an interface similar to the Python interface above, with
+a C calling convention.  It should be useful for most other kinds
+of scripting language; the VR Studio used to use this to make calls
+into Panda from Squeak." OFF)
+
+option(HAVE_INTERROGATE
+  "Do you even want to build interrogate at all?  This is the program
+that reads our C++ source files and generates one of the above
+interfaces.  If you won't be building the interfaces, you don't
+need the program." ON)
+
 set(INTERROGATE_OPTIONS "-fnames;-string;-refcount;-assert" CACHE STRING
 set(INTERROGATE_OPTIONS "-fnames;-string;-refcount;-assert" CACHE STRING
   "What additional options should be passed to interrogate when
   "What additional options should be passed to interrogate when
 generating either of the above two interfaces?  Generally, you
 generating either of the above two interfaces?  Generally, you
@@ -264,7 +277,7 @@ endif()
 
 
 option(USE_PYTHON
 option(USE_PYTHON
   "Enables support for Python.  If INTERROGATE_PYTHON_INTERFACE
   "Enables support for Python.  If INTERROGATE_PYTHON_INTERFACE
-is also enabled, Python bindings will be generated.")
+is also enabled, Python bindings will be generated." ON)
 
 
 if(USE_PYTHON)
 if(USE_PYTHON)
   find_package(PythonLibs)
   find_package(PythonLibs)

+ 130 - 0
dtool/Interrogate.cmake

@@ -0,0 +1,130 @@
+#
+# dtool/Interrogate.cmake
+#
+# This file contains macros and functions that are used to invoke
+# interrogate, in order to generate wrappers for Python and/or other
+# languages.
+#
+
+set(IGATE_FLAGS ${INTERROGATE_OPTIONS} -DCPPPARSER -D__cplusplus -Dvolatile -Dmutable)
+
+if(WIN32)
+  list(APPEND IGATE_FLAGS -longlong __int64 -D_X86_ -D__STDC__=1 -DWIN32_VC -D "_declspec(param)=" -D "__declspec(param)=" -D_near -D_far -D__near -D__far -D_WIN32 -D__stdcall -DWIN32)
+endif()
+if(INTERROGATE_VERBOSE)
+  list(APPEND IGATE_FLAGS "-v")
+endif()
+
+set(IMOD_FLAGS ${INTERROGATE_MODULE_OPTIONS})
+
+#
+# Function: target_interrogate(target [ALL] [source1 [source2 ...]])
+# NB. This doesn't actually invoke interrogate, but merely adds the
+# sources to the list of scan sources associated with the target.
+# Interrogate will be invoked when add_python_module is called.
+# If ALL is specified, all of the sources from the associated
+# target are added.
+#
+function(target_interrogate target)
+  if(HAVE_PYTHON AND HAVE_INTERROGATE)
+    set(sources)
+    set(want_all OFF)
+
+    # Find any .N files that would normally be picked up by interrogate.
+    # We let CMake add these as dependencies too, to allow rebuilding
+    # the wrappers when the .N files have been modified.
+    set(deps)
+    foreach(arg ${ARGV})
+      if(arg STREQUAL "ALL")
+        set(want_all ON)
+      else()
+        list(APPEND sources "${source}")
+      endif()
+    endforeach()
+
+    # If ALL was specified, pull in all sources from the target.
+    if(want_all)
+      get_target_property(target_sources "${target}" SOURCES)
+      list(APPEND sources ${target_sources})
+    endif()
+
+    list(REMOVE_DUPLICATES sources)
+
+    # Go through the sources to determine the full name,
+    # and also find out if there are any .N files to pick up.
+    foreach(source ${sources})
+      get_source_file_property(exclude "${source}" WRAP_EXCLUDE)
+
+      if(NOT exclude)
+        get_filename_component(basename "${source}" NAME_WE)
+        if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${basename}.N")
+          list(APPEND deps "${CMAKE_CURRENT_SOURCE_DIR}/${basename}.N")
+        endif()
+
+        # Add the full path to the source file itself.
+        get_source_file_property(location "${source}" LOCATION)
+        list(APPEND deps "${location}")
+      endif()
+    endforeach(source)
+
+    set_target_properties("${target}" PROPERTIES IGATE_SOURCES "${sources}")
+    set_target_properties("${target}" PROPERTIES IGATE_SRCDIR "${CMAKE_CURRENT_SOURCE_DIR}")
+    set_target_properties("${target}" PROPERTIES IGATE_DEPS "${deps}")
+  endif()
+endfunction(target_interrogate)
+
+#
+# Function: add_python_module(module [lib1 [lib2 ...]])
+# Uses interrogate to create a Python module.
+#
+function(add_python_module module)
+  if(HAVE_PYTHON AND HAVE_INTERROGATE)
+    set(targets ${ARGN})
+    set(infiles)
+    set(sources)
+
+    foreach(target ${targets})
+      get_target_property(scansrc "${target}" IGATE_SOURCES)
+      get_target_property(srcdir "${target}" IGATE_SRCDIR)
+      get_target_property(deps "${target}" IGATE_DEPS)
+
+      add_custom_command(
+        OUTPUT "${target}_igate.cxx" "${target}.in"
+        COMMAND interrogate
+          -od "${target}.in"
+          -oc "${target}_igate.cxx"
+          -module ${module} -library ${target} ${IGATE_FLAGS}
+          -srcdir "${srcdir}"
+          -I "${PROJECT_BINARY_DIR}/include"
+          -S "${PROJECT_SOURCE_DIR}/dtool/src/parser-inc"
+          -S "${PROJECT_BINARY_DIR}/include/parser-inc"
+          ${scansrc}
+        DEPENDS interrogate ${deps}
+      )
+
+      list(APPEND infiles "${target}.in")
+      list(APPEND sources "${target}_igate.cxx")
+    endforeach(target)
+
+    add_custom_command(
+      OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${module}_module.cxx"
+      COMMAND interrogate_module
+        -oc "${CMAKE_CURRENT_BINARY_DIR}/${module}_module.cxx"
+        -module ${module} -library ${module}
+        ${IMOD_FLAGS} ${infiles}
+      DEPENDS interrogate_module ${infiles}
+    )
+
+    add_library(${module} MODULE "${module}_module.cxx" ${sources})
+    target_link_libraries(${module} ${PYTHON_LIBRARIES})
+    target_link_libraries(${module} p3interrogatedb)
+
+    set_target_properties(${module} PROPERTIES
+      LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/panda3d"
+      PREFIX ""
+    )
+    if(WIN32 AND NOT CYGWIN)
+      set_target_properties(${module} PROPERTIES SUFFIX ".pyd")
+    endif()
+  endif()
+endfunction(add_python_module)

+ 12 - 8
dtool/PandaMacros.cmake

@@ -1,7 +1,8 @@
 # Settings for composite builds.  Should be moved to Config.cmake?
 # Settings for composite builds.  Should be moved to Config.cmake?
-set(COMPOSITE_SOURCE_LIMIT "10" CACHE STRING
-  "Setting this to a value higher than 1 will enable unity builds.
-A high value will speed up the build dramatically but use more RAM.")
+set(COMPOSITE_SOURCE_LIMIT "30" CACHE STRING
+  "Setting this to a value higher than 1 will enable unity builds, also
+known as SCU (single compilation unit).  A high value will speed up the
+build dramatically but will be more memory intensive than a low value.")
 
 
 set(COMPOSITE_SOURCE_EXTENSIONS "cxx;c;mm" CACHE STRING
 set(COMPOSITE_SOURCE_EXTENSIONS "cxx;c;mm" CACHE STRING
   "Only files of these extensions will be added to composite files.")
   "Only files of these extensions will be added to composite files.")
@@ -172,25 +173,28 @@ if(CMAKE_VERSION VERSION_LESS 2.8.11)
   endfunction()
   endfunction()
 
 
   function(target_link_libraries target)
   function(target_link_libraries target)
-    set(interface_dirs "")
+    set(interface_dirs)
     get_target_property(target_interface_dirs "${target}" INTERFACE_INCLUDE_DIRECTORIES)
     get_target_property(target_interface_dirs "${target}" INTERFACE_INCLUDE_DIRECTORIES)
 
 
     foreach(lib ${ARGN})
     foreach(lib ${ARGN})
       get_target_property(lib_interface_dirs "${lib}" INTERFACE_INCLUDE_DIRECTORIES)
       get_target_property(lib_interface_dirs "${lib}" INTERFACE_INCLUDE_DIRECTORIES)
 
 
-      set(interface_dirs ${interface_dirs} ${lib_interface_dirs})
+      if(lib_interface_dirs)
+        list(APPEND interface_dirs ${lib_interface_dirs})
+      endif()
     endforeach()
     endforeach()
 
 
+    list(REMOVE_DUPLICATES interface_dirs)
+
     #NB. target_include_directories is new in 2.8.8.
     #NB. target_include_directories is new in 2.8.8.
-    #target_include_directories("${target}" ${interace_dirs})
+    #target_include_directories("${target}" ${interface_dirs})
     include_directories(${interface_dirs})
     include_directories(${interface_dirs})
-    message(STATUS "adding extra ${interface_dirs}")
 
 
     # Update this target's interface inc dirs.
     # Update this target's interface inc dirs.
     set_target_properties("${target}" PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${target_interface_dirs};${interface_dirs}")
     set_target_properties("${target}" PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${target_interface_dirs};${interface_dirs}")
 
 
     # Call to the built-in function we are overriding.
     # Call to the built-in function we are overriding.
-    _target_link_libraries(${name} ${ARGN})
+    _target_link_libraries(${target} ${ARGN})
   endfunction()
   endfunction()
 
 
 else()
 else()

+ 8 - 0
dtool/metalibs/dtoolconfig/CMakeLists.txt

@@ -0,0 +1,8 @@
+if(HAVE_PYTHON)
+  add_library(p3dtoolconfig dtoolconfig.cxx pydtool.cxx)
+  target_link_libraries(p3dtoolconfig ${PYTHON_LIBRARIES})
+else()
+  add_library(p3dtoolconfig dtoolconfig.cxx)
+endif()
+
+target_link_libraries(p3dtoolconfig p3prc p3dconfig p3interrogatedb)

+ 2 - 0
panda/CMakeLists.txt

@@ -4,3 +4,5 @@ endif()
 
 
 # Include panda source directories
 # Include panda source directories
 add_subdirectory(src/pandabase)
 add_subdirectory(src/pandabase)
+add_subdirectory(src/express)
+add_subdirectory(src/downloader)

+ 67 - 0
panda/src/downloader/CMakeLists.txt

@@ -0,0 +1,67 @@
+set(P3DOWNLOADER_HEADERS
+  bioPtr.I bioPtr.h
+  bioStreamPtr.I bioStreamPtr.h
+  bioStream.I bioStream.h bioStreamBuf.h
+  chunkedStream.I chunkedStream.h
+  chunkedStreamBuf.h chunkedStreamBuf.I
+  config_downloader.h
+  decompressor.h decompressor.I
+  documentSpec.h documentSpec.I
+  download_utils.h downloadDb.h downloadDb.I
+  extractor.h
+  httpAuthorization.I httpAuthorization.h
+  httpBasicAuthorization.I httpBasicAuthorization.h
+  httpChannel.I httpChannel.h
+  httpClient.I httpClient.h
+  httpCookie.I httpCookie.h
+  httpDate.I httpDate.h
+  httpDigestAuthorization.I httpDigestAuthorization.h
+  httpEntityTag.I httpEntityTag.h
+  httpEnum.h
+  identityStream.I identityStream.h
+  identityStreamBuf.h identityStreamBuf.I
+  multiplexStream.I multiplexStream.h
+  multiplexStreamBuf.I multiplexStreamBuf.h
+  patcher.h patcher.I
+  socketStream.h socketStream.I
+  stringStreamBuf.I stringStreamBuf.h
+  stringStream.I stringStream.h
+  urlSpec.h urlSpec.I
+  virtualFileHTTP.I virtualFileHTTP.h
+  virtualFileMountHTTP.I virtualFileMountHTTP.h)
+
+set(P3DOWNLOADER_SOURCES
+  config_downloader.cxx
+  bioPtr.cxx
+  bioStreamPtr.cxx
+  bioStream.cxx bioStreamBuf.cxx
+  chunkedStream.cxx chunkedStreamBuf.cxx
+  decompressor.cxx
+  documentSpec.cxx
+  downloadDb.cxx
+  download_utils.cxx
+  extractor.cxx
+  httpAuthorization.cxx
+  httpBasicAuthorization.cxx
+  httpChannel.cxx
+  httpClient.cxx
+  httpCookie.cxx
+  httpDate.cxx
+  httpDigestAuthorization.cxx
+  httpEntityTag.cxx
+  httpEnum.cxx
+  identityStream.cxx identityStreamBuf.cxx
+  multiplexStream.cxx multiplexStreamBuf.cxx
+  patcher.cxx
+  socketStream.cxx
+  stringStreamBuf.cxx
+  stringStream.cxx
+  urlSpec.cxx
+  virtualFileHTTP.cxx
+  virtualFileMountHTTP.cxx)
+
+composite_sources(p3downloader P3DOWNLOADER_SOURCES)
+
+add_library(p3downloader ${P3DOWNLOADER_SOURCES} ${P3DOWNLOADER_HEADERS})
+target_link_libraries(p3downloader p3express p3pandabase)
+target_interrogate(p3downloader ALL)

+ 128 - 0
panda/src/express/CMakeLists.txt

@@ -0,0 +1,128 @@
+set(P3EXPRESS_HEADERS
+  buffer.I buffer.h
+  ca_bundle_data_src.c
+  checksumHashGenerator.I checksumHashGenerator.h circBuffer.I
+  circBuffer.h
+  compress_string.h
+  config_express.h
+  copy_stream.h
+  datagram.I datagram.h datagramGenerator.I
+  datagramGenerator.h
+  datagramIterator.I datagramIterator.h datagramSink.I datagramSink.h
+  dcast.T dcast.h
+  encrypt_string.h
+  error_utils.h
+  fileReference.h fileReference.I
+  hashGeneratorBase.I hashGeneratorBase.h
+  hashVal.I hashVal.h
+  indirectLess.I indirectLess.h
+  memoryInfo.I memoryInfo.h
+  memoryUsage.I memoryUsage.h
+  memoryUsagePointerCounts.I memoryUsagePointerCounts.h
+  memoryUsagePointers.I memoryUsagePointers.h
+  multifile.I multifile.h
+  namable.I
+  namable.h
+  nodePointerTo.h nodePointerTo.I
+  nodePointerToBase.h nodePointerToBase.I
+  nodeReferenceCount.h nodeReferenceCount.I
+  openSSLWrapper.h openSSLWrapper.I
+  ordered_vector.h ordered_vector.I ordered_vector.T
+  pStatCollectorForwardBase.h
+  password_hash.h
+  patchfile.I patchfile.h
+  pointerTo.I pointerTo.h
+  pointerToArray.I pointerToArray.h
+  pointerToArrayBase.I pointerToArrayBase.h
+  pointerToBase.I pointerToBase.h
+  pointerToVoid.I pointerToVoid.h
+  profileTimer.I profileTimer.h
+  pta_int.h
+  pta_uchar.h pta_double.h pta_float.h
+  pta_stdfloat.h
+  ramfile.I ramfile.h
+  referenceCount.I referenceCount.h
+  subStream.I subStream.h subStreamBuf.h
+  subfileInfo.h subfileInfo.I
+  temporaryFile.h temporaryFile.I
+  threadSafePointerTo.I threadSafePointerTo.h
+  threadSafePointerToBase.I threadSafePointerToBase.h
+  trueClock.I trueClock.h
+  typedReferenceCount.I typedReferenceCount.h typedef.h
+  vector_uchar.h vector_double.h vector_float.h
+  vector_stdfloat.h
+  virtualFile.I virtualFileList.I virtualFileList.h virtualFileMount.h
+  virtualFileComposite.h virtualFileComposite.I virtualFile.h
+  virtualFileMount.I virtualFileMountMultifile.h
+  virtualFileMountMultifile.I
+  virtualFileMountRamdisk.h virtualFileMountRamdisk.I
+  virtualFileMountSystem.h virtualFileMountSystem.I
+  virtualFileSimple.h virtualFileSimple.I
+  virtualFileSystem.h virtualFileSystem.I
+  weakPointerCallback.I weakPointerCallback.h
+  weakPointerTo.I weakPointerTo.h
+  weakPointerToBase.I weakPointerToBase.h
+  weakPointerToVoid.I weakPointerToVoid.h
+  weakReferenceList.I weakReferenceList.h
+  windowsRegistry.h
+  zStream.I zStream.h zStreamBuf.h)
+
+set(P3EXPRESS_SOURCES
+  buffer.cxx checksumHashGenerator.cxx
+  compress_string.cxx
+  config_express.cxx
+  copy_stream.cxx
+  datagram.cxx datagramGenerator.cxx
+  datagramIterator.cxx
+  datagramSink.cxx dcast.cxx
+  encrypt_string.cxx
+  error_utils.cxx
+  fileReference.cxx
+  hashGeneratorBase.cxx hashVal.cxx
+  memoryInfo.cxx memoryUsage.cxx memoryUsagePointerCounts.cxx
+  memoryUsagePointers.cxx multifile.cxx
+  namable.cxx
+  nodePointerTo.cxx
+  nodePointerToBase.cxx
+  nodeReferenceCount.cxx
+  openSSLWrapper.cxx
+  ordered_vector.cxx
+  pStatCollectorForwardBase.cxx
+  password_hash.cxx
+  patchfile.cxx
+  pointerTo.cxx
+  pointerToArray.cxx
+  pointerToBase.cxx
+  pointerToVoid.cxx
+  profileTimer.cxx
+  pta_int.cxx
+  pta_uchar.cxx pta_double.cxx pta_float.cxx
+  ramfile.cxx
+  referenceCount.cxx
+  subStream.cxx subStreamBuf.cxx
+  subfileInfo.cxx
+  temporaryFile.cxx
+  threadSafePointerTo.cxx
+  threadSafePointerToBase.cxx
+  trueClock.cxx
+  typedReferenceCount.cxx
+  vector_uchar.cxx vector_double.cxx vector_float.cxx
+  virtualFileComposite.cxx virtualFile.cxx virtualFileList.cxx
+  virtualFileMount.cxx
+  virtualFileMountMultifile.cxx
+  virtualFileMountRamdisk.cxx
+  virtualFileMountSystem.cxx
+  virtualFileSimple.cxx virtualFileSystem.cxx
+  weakPointerCallback.cxx
+  weakPointerTo.cxx
+  weakPointerToBase.cxx
+  weakPointerToVoid.cxx
+  weakReferenceList.cxx
+  windowsRegistry.cxx
+  zStream.cxx zStreamBuf.cxx)
+
+composite_sources(p3express P3EXPRESS_SOURCES)
+
+add_library(p3express ${P3EXPRESS_SOURCES} ${P3EXPRESS_HEADERS})
+target_link_libraries(p3express p3pandabase p3dtool p3dtoolconfig)
+target_interrogate(p3express ALL)