Browse Source

CMake: Add new "EXTENSIONS" syntax to target_interrogate(...) macro.

Sam Edwards 11 years ago
parent
commit
b300848589

+ 23 - 31
cmake/macros/Interrogate.cmake

@@ -50,10 +50,16 @@ set(ALL_INTERROGATE_MODULES CACHE INTERNAL "Internal variable")
 function(target_interrogate target)
   if(HAVE_PYTHON AND HAVE_INTERROGATE)
     set(sources)
+    set(extensions)
     set(want_all OFF)
+    set(extensions_keyword OFF)
     foreach(arg ${ARGN})
       if(arg STREQUAL "ALL")
         set(want_all ON)
+      elseif(arg STREQUAL "EXTENSIONS")
+        set(extensions_keyword ON)
+      elseif(extensions_keyword)
+        list(APPEND extensions "${arg}")
       else()
         list(APPEND sources "${arg}")
       endif()
@@ -70,13 +76,20 @@ function(target_interrogate target)
     # Now let's get everything's absolute path, so that it can be passed
     # through a property while still preserving the reference.
     set(absolute_sources)
+    set(absolute_extensions)
     foreach(source ${sources})
       get_source_file_property(location "${source}" LOCATION)
-      set(absolute_sources ${absolute_sources} ${location})
+      list(APPEND absolute_sources ${location})
     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
       "${absolute_sources}")
+    set_target_properties("${target}" PROPERTIES IGATE_EXTENSIONS
+      "${absolute_extensions}")
 
     # CMake has no property for determining the source directory where the
     # target was originally added. interrogate_sources makes use of this
@@ -86,9 +99,6 @@ function(target_interrogate target)
     # an IGATE_ prefix.
     set_target_properties("${target}" PROPERTIES TARGET_SRCDIR
       "${CMAKE_CURRENT_SOURCE_DIR}")
-
-    # HACK HACK HACK -- this is part of the below hack.
-    target_link_libraries(${target} ${target}_igate)
   endif()
 endfunction(target_interrogate)
 
@@ -106,6 +116,7 @@ endfunction(target_interrogate)
 function(interrogate_sources target output database module)
   if(HAVE_PYTHON AND HAVE_INTERROGATE)
     get_target_property(sources "${target}" IGATE_SOURCES)
+    get_target_property(extensions "${target}" IGATE_EXTENSIONS)
 
     if(NOT sources)
       message(FATAL_ERROR
@@ -189,14 +200,6 @@ function(interrogate_sources target output database module)
       list(APPEND define_flags "-DNDEBUG")
     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(
       OUTPUT "${output}" "${database}"
       COMMAND interrogate
@@ -212,7 +215,8 @@ function(interrogate_sources target output database module)
         -S "${PROJECT_BINARY_DIR}/include/parser-inc"
         ${include_flags}
         ${scan_sources}
-      DEPENDS interrogate ${sources} ${nfiles}
+        ${extensions}
+      DEPENDS interrogate ${sources} ${extensions} ${nfiles}
       COMMENT "Interrogating ${target}"
     )
   endif()
@@ -230,7 +234,6 @@ function(add_python_module module)
     set(link_targets)
     set(infiles)
     set(sources)
-    set(HACKlinklibs)
 
     set(link_keyword OFF)
     foreach(arg ${ARGN})
@@ -249,22 +252,12 @@ function(add_python_module module)
 
     foreach(target ${targets})
       interrogate_sources(${target} "${target}_igate.cxx" "${target}.in" "${module}")
+      get_target_property(target_extensions "${target}" IGATE_EXTENSIONS)
       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)
 
     add_custom_command(
@@ -278,10 +271,9 @@ function(add_python_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}
       ${link_targets} ${PYTHON_LIBRARIES} p3interrogatedb)
-    target_link_libraries(${module} ${HACKlinklibs})
 
     set_target_properties(${module} PROPERTIES
       LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/panda3d"

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

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

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

@@ -101,7 +101,7 @@ if(HAVE_EGG)
   composite_sources(p3egg P3EGG_SOURCES)
   add_library(p3egg ${P3EGG_HEADERS} ${P3EGG_SOURCES} ${P3EGG_PARSER_SOURCES})
   target_link_libraries(p3egg p3prc p3pandabase p3express p3linmath p3mathutil)
-  target_interrogate(p3egg ${P3EGG_HEADERS} ${P3EGG_SOURCES} ${P3EGG_IGATEEXT})
+  target_interrogate(p3egg ${P3EGG_HEADERS} ${P3EGG_SOURCES} EXTENSIONS ${P3EGG_IGATEEXT})
 
   install(TARGETS p3egg DESTINATION lib)
 endif()

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

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

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

@@ -84,7 +84,7 @@ if(HAVE_ODE)
   add_library(p3ode ${P3ODE_SOURCES} ${P3ODE_HEADERS})
   set_target_properties(p3ode PROPERTIES COMPILE_DEFINITIONS dSINGLE)
   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)
 endif()

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

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

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

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

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

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