Browse Source

Merge branch 'cmake-proper-interrogate' into cmake

Sam Edwards 11 years ago
parent
commit
3bd9750439

+ 0 - 6
cmake/macros/CompositeSources.cmake

@@ -93,12 +93,6 @@ function(composite_sources target sources_var)
     endif()
     endif()
   endwhile()
   endwhile()
 
 
-  # This exists for Interrogate's benefit, which needs the composite files to
-  # exist before it can run. Unfortunately, CMake does not expose the
-  # add_custom_command outputs as targets outside of the directory, so we have
-  # to create our own pseudotarget that gets exposed.
-  add_custom_target(${target}_composite DEPENDS ${composite_files})
-
   #set_source_files_properties(${composite_files} PROPERTIES GENERATED YES)
   #set_source_files_properties(${composite_files} PROPERTIES GENERATED YES)
 
 
   # The new files are added to the existing files, which means the old files
   # The new files are added to the existing files, which means the old files

+ 22 - 30
cmake/macros/Interrogate.cmake

@@ -50,10 +50,16 @@ set(ALL_INTERROGATE_MODULES CACHE INTERNAL "Internal variable")
 function(target_interrogate target)
 function(target_interrogate target)
   if(HAVE_PYTHON AND HAVE_INTERROGATE)
   if(HAVE_PYTHON AND HAVE_INTERROGATE)
     set(sources)
     set(sources)
+    set(extensions)
     set(want_all OFF)
     set(want_all OFF)
+    set(extensions_keyword OFF)
     foreach(arg ${ARGN})
     foreach(arg ${ARGN})
       if(arg STREQUAL "ALL")
       if(arg STREQUAL "ALL")
         set(want_all ON)
         set(want_all ON)
+      elseif(arg STREQUAL "EXTENSIONS")
+        set(extensions_keyword ON)
+      elseif(extensions_keyword)
+        list(APPEND extensions "${arg}")
       else()
       else()
         list(APPEND sources "${arg}")
         list(APPEND sources "${arg}")
       endif()
       endif()
@@ -70,6 +76,7 @@ function(target_interrogate target)
     # Now let's get everything's absolute path, so that it can be passed
     # Now let's get everything's absolute path, so that it can be passed
     # through a property while still preserving the reference.
     # through a property while still preserving the reference.
     set(absolute_sources)
     set(absolute_sources)
+    set(absolute_extensions)
     foreach(source ${sources})
     foreach(source ${sources})
       get_source_file_property(exclude "${source}" WRAP_EXCLUDE)
       get_source_file_property(exclude "${source}" WRAP_EXCLUDE)
       if(NOT exclude)
       if(NOT exclude)
@@ -77,9 +84,15 @@ function(target_interrogate target)
         list(APPEND absolute_sources ${location})
         list(APPEND absolute_sources ${location})
       endif()
       endif()
     endforeach(source)
     endforeach(source)
+    foreach(extension ${extensions})
+      get_source_file_property(location "${extension}" LOCATION)
+      list(APPEND absolute_extensions ${location})
+    endforeach(extension)
 
 
     set_target_properties("${target}" PROPERTIES IGATE_SOURCES
     set_target_properties("${target}" PROPERTIES IGATE_SOURCES
       "${absolute_sources}")
       "${absolute_sources}")
+    set_target_properties("${target}" PROPERTIES IGATE_EXTENSIONS
+      "${absolute_extensions}")
 
 
     # CMake has no property for determining the source directory where the
     # CMake has no property for determining the source directory where the
     # target was originally added. interrogate_sources makes use of this
     # target was originally added. interrogate_sources makes use of this
@@ -89,9 +102,6 @@ function(target_interrogate target)
     # an IGATE_ prefix.
     # an IGATE_ prefix.
     set_target_properties("${target}" PROPERTIES TARGET_SRCDIR
     set_target_properties("${target}" PROPERTIES TARGET_SRCDIR
       "${CMAKE_CURRENT_SOURCE_DIR}")
       "${CMAKE_CURRENT_SOURCE_DIR}")
-
-    # HACK HACK HACK -- this is part of the below hack.
-    target_link_libraries(${target} ${target}_igate)
   endif()
   endif()
 endfunction(target_interrogate)
 endfunction(target_interrogate)
 
 
@@ -109,6 +119,7 @@ endfunction(target_interrogate)
 function(interrogate_sources target output database module)
 function(interrogate_sources target output database module)
   if(HAVE_PYTHON AND HAVE_INTERROGATE)
   if(HAVE_PYTHON AND HAVE_INTERROGATE)
     get_target_property(sources "${target}" IGATE_SOURCES)
     get_target_property(sources "${target}" IGATE_SOURCES)
+    get_target_property(extensions "${target}" IGATE_EXTENSIONS)
 
 
     if(NOT sources)
     if(NOT sources)
       message(FATAL_ERROR
       message(FATAL_ERROR
@@ -187,14 +198,6 @@ function(interrogate_sources target output database module)
       list(APPEND define_flags "-DNDEBUG")
       list(APPEND define_flags "-DNDEBUG")
     endif()
     endif()
 
 
-    # CMake offers no way to directly depend on the composite files from here,
-    # because the composite files are created in a different directory from
-    # where CMake itself is run. Therefore, we need to depend on the
-    # TARGET_composite target, if it exists.
-    if(TARGET ${target}_composite)
-      set(sources ${target}_composite ${sources})
-    endif()
-
     add_custom_command(
     add_custom_command(
       OUTPUT "${output}" "${database}"
       OUTPUT "${output}" "${database}"
       COMMAND interrogate
       COMMAND interrogate
@@ -210,7 +213,8 @@ function(interrogate_sources target output database module)
         -S "${PROJECT_BINARY_DIR}/include/parser-inc"
         -S "${PROJECT_BINARY_DIR}/include/parser-inc"
         ${include_flags}
         ${include_flags}
         ${scan_sources}
         ${scan_sources}
-      DEPENDS interrogate ${sources} ${nfiles}
+        ${extensions}
+      DEPENDS interrogate ${sources} ${extensions} ${nfiles}
       COMMENT "Interrogating ${target}"
       COMMENT "Interrogating ${target}"
     )
     )
   endif()
   endif()
@@ -228,7 +232,6 @@ function(add_python_module module)
     set(link_targets)
     set(link_targets)
     set(infiles)
     set(infiles)
     set(sources)
     set(sources)
-    set(HACKlinklibs)
 
 
     set(link_keyword OFF)
     set(link_keyword OFF)
     foreach(arg ${ARGN})
     foreach(arg ${ARGN})
@@ -247,22 +250,12 @@ function(add_python_module module)
 
 
     foreach(target ${targets})
     foreach(target ${targets})
       interrogate_sources(${target} "${target}_igate.cxx" "${target}.in" "${module}")
       interrogate_sources(${target} "${target}_igate.cxx" "${target}.in" "${module}")
+      get_target_property(target_extensions "${target}" IGATE_EXTENSIONS)
       list(APPEND infiles "${target}.in")
       list(APPEND infiles "${target}.in")
-      #list(APPEND sources "${target}_igate.cxx")
-
-      # HACK HACK HACK:
-      # Currently, the codebase has dependencies on the Interrogate-generated
-      # code when HAVE_PYTHON is enabled. rdb is working to remove this, but
-      # until then, the generated code must somehow be made available to the
-      # modules themselves. The workaround here is to put the _igate.cxx into
-      # its own micro-library, which is linked both here on the module and
-      # against the component library in question.
-      add_library(${target}_igate ${target}_igate.cxx)
-      list(APPEND HACKlinklibs "${target}_igate")
-      install(TARGETS ${target}_igate DESTINATION lib)
-
-      get_target_property(target_links "${target}" LINK_LIBRARIES)
-      target_link_libraries(${target}_igate ${target_links})
+      list(APPEND sources "${target}_igate.cxx" ${target_extensions})
+
+      #get_target_property(target_links "${target}" LINK_LIBRARIES)
+      #target_link_libraries(${target}_igate ${target_links})
     endforeach(target)
     endforeach(target)
 
 
     add_custom_command(
     add_custom_command(
@@ -276,10 +269,9 @@ function(add_python_module module)
       COMMENT "Generating module ${module}"
       COMMENT "Generating module ${module}"
     )
     )
 
 
-    add_library(${module} MODULE "${module}_module.cxx" ${sources})
+    add_library(${module} "${module}_module.cxx" ${sources})
     target_link_libraries(${module}
     target_link_libraries(${module}
       ${link_targets} ${PYTHON_LIBRARIES} p3interrogatedb)
       ${link_targets} ${PYTHON_LIBRARIES} p3interrogatedb)
-    target_link_libraries(${module} ${HACKlinklibs})
 
 
     set_target_properties(${module} PROPERTIES
     set_target_properties(${module} PROPERTIES
       LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/panda3d"
       LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/panda3d"

+ 1 - 0
direct/CMakeLists.txt

@@ -18,6 +18,7 @@ add_subdirectory(src/interval)
 add_subdirectory(src/showbase)
 add_subdirectory(src/showbase)
 
 
 add_python_module(direct p3dcparser p3deadrec p3distributed p3interval p3showbase)
 add_python_module(direct p3dcparser p3deadrec p3distributed p3interval p3showbase)
+target_link_libraries(direct core)
 
 
 # Installation:
 # Installation:
 if(HAVE_PYTHON)
 if(HAVE_PYTHON)

+ 3 - 0
panda/CMakeLists.txt

@@ -100,10 +100,13 @@ add_python_module(core ${CORE_MODULE_COMPONENTS} LINK panda)
 
 
 if(HAVE_EGG)
 if(HAVE_EGG)
   add_python_module(egg p3egg p3egg2pg)
   add_python_module(egg p3egg p3egg2pg)
+  target_link_libraries(egg core)
 endif()
 endif()
 
 
 add_python_module(physics p3physics p3particlesystem)
 add_python_module(physics p3physics p3particlesystem)
+target_link_libraries(physics core)
 
 
 if(HAVE_ODE)
 if(HAVE_ODE)
   add_python_module(ode p3ode)
   add_python_module(ode p3ode)
+  target_link_libraries(ode core)
 endif()
 endif()

+ 2 - 2
panda/src/display/CMakeLists.txt

@@ -98,9 +98,9 @@ if(APPLE)
 endif()
 endif()
 
 
 composite_sources(p3display P3DISPLAY_SOURCES)
 composite_sources(p3display P3DISPLAY_SOURCES)
-add_library(p3display ${P3DISPLAY_HEADERS} ${P3DISPLAY_SOURCES} ${P3DISPLAY_IGATEEXT})
+add_library(p3display ${P3DISPLAY_HEADERS} ${P3DISPLAY_SOURCES})
 target_link_libraries(p3display p3cull p3pgraphnodes)
 target_link_libraries(p3display p3cull p3pgraphnodes)
-target_interrogate(p3display ALL)
+target_interrogate(p3display ALL EXTENSIONS ${P3DISPLAY_IGATEEXT})
 
 
 install(TARGETS p3display DESTINATION lib)
 install(TARGETS p3display DESTINATION lib)
 
 

+ 2 - 2
panda/src/egg/CMakeLists.txt

@@ -99,9 +99,9 @@ if(HAVE_EGG)
     lexer.cxx)
     lexer.cxx)
 
 
   composite_sources(p3egg P3EGG_SOURCES)
   composite_sources(p3egg P3EGG_SOURCES)
-  add_library(p3egg ${P3EGG_HEADERS} ${P3EGG_SOURCES} ${P3EGG_IGATEEXT} ${P3EGG_PARSER_SOURCES})
+  add_library(p3egg ${P3EGG_HEADERS} ${P3EGG_SOURCES} ${P3EGG_PARSER_SOURCES})
   target_link_libraries(p3egg p3prc p3pandabase p3express p3linmath p3mathutil)
   target_link_libraries(p3egg p3prc p3pandabase p3express p3linmath p3mathutil)
-  target_interrogate(p3egg ${P3EGG_HEADERS} ${P3EGG_SOURCES} eggGroupNode_ext.h)
+  target_interrogate(p3egg ${P3EGG_HEADERS} ${P3EGG_SOURCES} EXTENSIONS ${P3EGG_IGATEEXT})
 
 
   install(TARGETS p3egg DESTINATION lib)
   install(TARGETS p3egg DESTINATION lib)
 endif()
 endif()

+ 2 - 2
panda/src/express/CMakeLists.txt

@@ -134,10 +134,10 @@ set(P3EXPRESS_IGATEEXT
 
 
 composite_sources(p3express P3EXPRESS_SOURCES)
 composite_sources(p3express P3EXPRESS_SOURCES)
 
 
-add_library(p3express ${P3EXPRESS_HEADERS} ${P3EXPRESS_SOURCES} ${P3EXPRESS_IGATEEXT})
+add_library(p3express ${P3EXPRESS_SOURCES} ${P3EXPRESS_HEADERS})
 target_link_libraries(p3express p3pandabase p3dtool p3dtoolconfig
 target_link_libraries(p3express p3pandabase p3dtool p3dtoolconfig
   ${_TAR_LIBRARY} ${_ZLIB_LIBRARY})
   ${_TAR_LIBRARY} ${_ZLIB_LIBRARY})
-target_interrogate(p3express ALL)
+target_interrogate(p3express ALL EXTENSIONS ${P3EXPRESS_IGATEEXT})
 
 
 if(WIN32)
 if(WIN32)
   target_link_libraries(p3express advapi32.lib ws2_32.lib)
   target_link_libraries(p3express advapi32.lib ws2_32.lib)

+ 2 - 2
panda/src/ode/CMakeLists.txt

@@ -81,10 +81,10 @@ if(HAVE_ODE)
   list(REMOVE_ITEM P3ODE_IGATE_SOURCES "odeHelperStructs.h")
   list(REMOVE_ITEM P3ODE_IGATE_SOURCES "odeHelperStructs.h")
 
 
   composite_sources(p3ode P3ODE_SOURCES)
   composite_sources(p3ode P3ODE_SOURCES)
-  add_library(p3ode ${P3ODE_HEADERS} ${P3ODE_SOURCES} ${P3ODE_IGATEEXT})
+  add_library(p3ode ${P3ODE_SOURCES} ${P3ODE_HEADERS})
   set_target_properties(p3ode PROPERTIES COMPILE_DEFINITIONS dSINGLE)
   set_target_properties(p3ode PROPERTIES COMPILE_DEFINITIONS dSINGLE)
   target_link_libraries(p3ode p3pgraph p3physics ${ODE_LIBRARY})
   target_link_libraries(p3ode p3pgraph p3physics ${ODE_LIBRARY})
-  target_interrogate(p3ode ${P3ODE_IGATE_SOURCES} ${P3ODE_IGATEEXT})
+  target_interrogate(p3ode ${P3ODE_IGATE_SOURCES} EXTENSIONS ${P3ODE_IGATEEXT})
 
 
   install(TARGETS p3ode DESTINATION lib)
   install(TARGETS p3ode DESTINATION lib)
 endif()
 endif()

+ 2 - 2
panda/src/pgraph/CMakeLists.txt

@@ -212,9 +212,9 @@ set(P3PGRAPH_IGATEEXT
 )
 )
 
 
 composite_sources(p3pgraph P3PGRAPH_SOURCES)
 composite_sources(p3pgraph P3PGRAPH_SOURCES)
-add_library(p3pgraph ${P3PGRAPH_HEADERS} ${P3PGRAPH_SOURCES} ${P3PGRAPH_IGATEEXT})
+add_library(p3pgraph ${P3PGRAPH_HEADERS} ${P3PGRAPH_SOURCES})
 target_link_libraries(p3pgraph p3gobj p3event p3gsgbase p3putil p3linmath p3downloader)
 target_link_libraries(p3pgraph p3gobj p3event p3gsgbase p3putil p3linmath p3downloader)
-target_interrogate(p3pgraph ALL)
+target_interrogate(p3pgraph ALL EXTENSIONS ${P3PGRAPH_IGATEEXT})
 
 
 install(TARGETS p3pgraph DESTINATION lib)
 install(TARGETS p3pgraph DESTINATION lib)
 
 

+ 2 - 2
panda/src/pnmimage/CMakeLists.txt

@@ -30,8 +30,8 @@ set(P3PNMIMAGE_IGATEEXT
 )
 )
 
 
 composite_sources(p3pnmimage P3PNMIMAGE_SOURCES)
 composite_sources(p3pnmimage P3PNMIMAGE_SOURCES)
-add_library(p3pnmimage ${P3PNMIMAGE_HEADERS} ${P3PNMIMAGE_SOURCES} ${P3PNMIMAGE_IGATEEXT})
+add_library(p3pnmimage ${P3PNMIMAGE_HEADERS} ${P3PNMIMAGE_SOURCES})
 target_link_libraries(p3pnmimage p3mathutil)
 target_link_libraries(p3pnmimage p3mathutil)
-target_interrogate(p3pnmimage ALL)
+target_interrogate(p3pnmimage ALL EXTENSIONS ${P3PNMIMAGE_IGATEEXT})
 
 
 install(TARGETS p3pnmimage DESTINATION lib)
 install(TARGETS p3pnmimage DESTINATION lib)

+ 2 - 2
panda/src/putil/CMakeLists.txt

@@ -116,9 +116,9 @@ set(P3PUTIL_IGATEEXT
 )
 )
 
 
 composite_sources(p3putil P3PUTIL_SOURCES)
 composite_sources(p3putil P3PUTIL_SOURCES)
-add_library(p3putil ${P3PUTIL_HEADERS} ${P3PUTIL_SOURCES} ${P3PUTIL_IGATEEXT})
+add_library(p3putil ${P3PUTIL_HEADERS} ${P3PUTIL_SOURCES})
 target_link_libraries(p3putil p3pipeline)
 target_link_libraries(p3putil p3pipeline)
-target_interrogate(p3putil ALL)
+target_interrogate(p3putil ALL EXTENSIONS ${P3PUTIL_IGATEEXT})
 
 
 install(TARGETS p3putil DESTINATION lib)
 install(TARGETS p3putil DESTINATION lib)