diff --git a/cmake/macros/CompositeSources.cmake b/cmake/macros/CompositeSources.cmake index 631de638f9..241a2a3d64 100644 --- a/cmake/macros/CompositeSources.cmake +++ b/cmake/macros/CompositeSources.cmake @@ -93,12 +93,6 @@ function(composite_sources target sources_var) endif() 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) # The new files are added to the existing files, which means the old files diff --git a/cmake/macros/Interrogate.cmake b/cmake/macros/Interrogate.cmake index 4b208f09bd..6387a5ca30 100644 --- a/cmake/macros/Interrogate.cmake +++ b/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,6 +76,7 @@ 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(exclude "${source}" WRAP_EXCLUDE) if(NOT exclude) @@ -77,9 +84,15 @@ function(target_interrogate target) list(APPEND absolute_sources ${location}) endif() 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 @@ -89,9 +102,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) @@ -109,6 +119,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 @@ -187,14 +198,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 @@ -210,7 +213,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() @@ -228,7 +232,6 @@ function(add_python_module module) set(link_targets) set(infiles) set(sources) - set(HACKlinklibs) set(link_keyword OFF) foreach(arg ${ARGN}) @@ -247,22 +250,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") + list(APPEND sources "${target}_igate.cxx" ${target_extensions}) - # 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}) + #get_target_property(target_links "${target}" LINK_LIBRARIES) + #target_link_libraries(${target}_igate ${target_links}) endforeach(target) add_custom_command( @@ -276,10 +269,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" diff --git a/direct/CMakeLists.txt b/direct/CMakeLists.txt index 04e8da3ab5..5843bacf6d 100644 --- a/direct/CMakeLists.txt +++ b/direct/CMakeLists.txt @@ -18,6 +18,7 @@ add_subdirectory(src/interval) add_subdirectory(src/showbase) add_python_module(direct p3dcparser p3deadrec p3distributed p3interval p3showbase) +target_link_libraries(direct core) # Installation: if(HAVE_PYTHON) diff --git a/panda/CMakeLists.txt b/panda/CMakeLists.txt index dcb015d012..96a32262c9 100644 --- a/panda/CMakeLists.txt +++ b/panda/CMakeLists.txt @@ -100,10 +100,13 @@ add_python_module(core ${CORE_MODULE_COMPONENTS} LINK panda) if(HAVE_EGG) add_python_module(egg p3egg p3egg2pg) + target_link_libraries(egg core) endif() add_python_module(physics p3physics p3particlesystem) +target_link_libraries(physics core) if(HAVE_ODE) add_python_module(ode p3ode) + target_link_libraries(ode core) endif() diff --git a/panda/src/display/CMakeLists.txt b/panda/src/display/CMakeLists.txt index b188b51694..31027d89ea 100644 --- a/panda/src/display/CMakeLists.txt +++ b/panda/src/display/CMakeLists.txt @@ -98,9 +98,9 @@ if(APPLE) endif() 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_interrogate(p3display ALL) +target_interrogate(p3display ALL EXTENSIONS ${P3DISPLAY_IGATEEXT}) install(TARGETS p3display DESTINATION lib) diff --git a/panda/src/egg/CMakeLists.txt b/panda/src/egg/CMakeLists.txt index 66c67b1ae5..caa59abeef 100644 --- a/panda/src/egg/CMakeLists.txt +++ b/panda/src/egg/CMakeLists.txt @@ -99,9 +99,9 @@ if(HAVE_EGG) lexer.cxx) 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_interrogate(p3egg ${P3EGG_HEADERS} ${P3EGG_SOURCES} eggGroupNode_ext.h) + target_interrogate(p3egg ${P3EGG_HEADERS} ${P3EGG_SOURCES} EXTENSIONS ${P3EGG_IGATEEXT}) install(TARGETS p3egg DESTINATION lib) endif() diff --git a/panda/src/express/CMakeLists.txt b/panda/src/express/CMakeLists.txt index 15c9a8dfe7..cfa57d0712 100644 --- a/panda/src/express/CMakeLists.txt +++ b/panda/src/express/CMakeLists.txt @@ -134,10 +134,10 @@ set(P3EXPRESS_IGATEEXT 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 ${_TAR_LIBRARY} ${_ZLIB_LIBRARY}) -target_interrogate(p3express ALL) +target_interrogate(p3express ALL EXTENSIONS ${P3EXPRESS_IGATEEXT}) if(WIN32) target_link_libraries(p3express advapi32.lib ws2_32.lib) diff --git a/panda/src/ode/CMakeLists.txt b/panda/src/ode/CMakeLists.txt index da1c5df4e7..25795f4fc0 100755 --- a/panda/src/ode/CMakeLists.txt +++ b/panda/src/ode/CMakeLists.txt @@ -81,10 +81,10 @@ if(HAVE_ODE) list(REMOVE_ITEM P3ODE_IGATE_SOURCES "odeHelperStructs.h") 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) 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() diff --git a/panda/src/pgraph/CMakeLists.txt b/panda/src/pgraph/CMakeLists.txt index 2e14103da5..a067ffbb25 100644 --- a/panda/src/pgraph/CMakeLists.txt +++ b/panda/src/pgraph/CMakeLists.txt @@ -212,9 +212,9 @@ set(P3PGRAPH_IGATEEXT ) 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_interrogate(p3pgraph ALL) +target_interrogate(p3pgraph ALL EXTENSIONS ${P3PGRAPH_IGATEEXT}) install(TARGETS p3pgraph DESTINATION lib) diff --git a/panda/src/pnmimage/CMakeLists.txt b/panda/src/pnmimage/CMakeLists.txt index 211172bdd7..d6fe2c0d4e 100644 --- a/panda/src/pnmimage/CMakeLists.txt +++ b/panda/src/pnmimage/CMakeLists.txt @@ -30,8 +30,8 @@ set(P3PNMIMAGE_IGATEEXT ) 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_interrogate(p3pnmimage ALL) +target_interrogate(p3pnmimage ALL EXTENSIONS ${P3PNMIMAGE_IGATEEXT}) install(TARGETS p3pnmimage DESTINATION lib) diff --git a/panda/src/putil/CMakeLists.txt b/panda/src/putil/CMakeLists.txt index 22b01dbad9..149fc79840 100644 --- a/panda/src/putil/CMakeLists.txt +++ b/panda/src/putil/CMakeLists.txt @@ -116,9 +116,9 @@ set(P3PUTIL_IGATEEXT ) 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_interrogate(p3putil ALL) +target_interrogate(p3putil ALL EXTENSIONS ${P3PUTIL_IGATEEXT}) install(TARGETS p3putil DESTINATION lib)