Merge branch 'cmake-proper-interrogate' into cmake

This commit is contained in:
Sam Edwards 2014-10-11 18:15:59 -07:00
commit 3bd9750439
11 changed files with 39 additions and 49 deletions

View File

@ -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

View File

@ -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"

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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)

View File

@ -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)