CMake: Add support for building against FCollada

This commit is contained in:
Sam Edwards 2019-03-17 17:14:23 -06:00
parent 3a9353c0ca
commit b4a532f1d0
6 changed files with 130 additions and 0 deletions

View File

@ -0,0 +1,80 @@
# Filename: FindFCollada.cmake
# Author: CFSworks (17 Mar, 2019)
#
# Usage:
# find_package(FCollada [REQUIRED] [QUIET])
#
# Once done this will define:
# FCOLLADA_FOUND - system has FCollada
# FCOLLADA_INCLUDE_DIR - the FCollada include directory
#
# FCOLLADA_RELEASE_LIBRARY - the filepath of the FCollada release library
# FCOLLADA_DEBUG_LIBRARY - the filepath of the FCollada debug library
#
# FCollada::FCollada - The recommended FCollada library to link against
#
# Find the FCollada include files
find_path(FCOLLADA_INCLUDE_DIR "FCollada.h" PATH_SUFFIXES "FCollada")
# Find the library built for release
find_library(FCOLLADA_RELEASE_LIBRARY
NAMES "FCollada" "libFCollada"
"FColladaS" "libFColladaS"
"FColladaU" "libFColladaU"
"FColladaSU" "libFColladaSU"
)
# Find the library built for debug
find_library(FCOLLADA_DEBUG_LIBRARY
NAMES "FColladaD" "libFColladaD"
"FColladaSD" "libFColladaSD"
"FColladaUD" "libFColladaUD"
"FColladaSUD" "libFColladaSUD"
)
mark_as_advanced(FCOLLADA_INCLUDE_DIR)
mark_as_advanced(FCOLLADA_RELEASE_LIBRARY)
mark_as_advanced(FCOLLADA_DEBUG_LIBRARY)
set(_defines)
if(FCOLLADA_RELEASE_LIBRARY MATCHES "FCollada[^/]*U" OR
FCOLLADA_DEBUG_LIBRARY MATCHES "FCollada[^/]*U")
list(APPEND _defines "UNICODE")
endif()
if(NOT MSVC AND
NOT FCOLLADA_RELEASE_LIBRARY MATCHES "FCollada[^/]*S" AND
NOT FCOLLADA_DEBUG_LIBRARY MATCHES "FCollada[^/]*S")
list(APPEND _defines "FCOLLADA_DLL")
endif()
foreach(_config RELEASE DEBUG)
# Make sure we have lib/includes for this config
if(NOT FCOLLADA_${_config}_LIBRARY OR NOT FCOLLADA_INCLUDE_DIR)
continue()
endif()
if(NOT _HAS_FCOLLADA_LIBRARY)
set(_HAS_FCOLLADA_LIBRARY ON)
add_library(FCollada::FCollada UNKNOWN IMPORTED GLOBAL)
set_target_properties(FCollada::FCollada PROPERTIES
INTERFACE_COMPILE_DEFINITIONS "${_defines}"
INTERFACE_INCLUDE_DIRECTORIES "${FCOLLADA_INCLUDE_DIR}")
endif()
set_property(TARGET FCollada::FCollada
APPEND PROPERTY IMPORTED_CONFIGURATIONS "${_config}")
set_target_properties(FCollada::FCollada PROPERTIES
IMPORTED_LOCATION_${_config} "${FCOLLADA_${_config}_LIBRARY}")
endforeach(_config)
unset(_config)
unset(_defines)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FCollada DEFAULT_MSG FCOLLADA_INCLUDE_DIR _HAS_FCOLLADA_LIBRARY)
unset(_HAS_FCOLLADA_LIBRARY)

View File

@ -171,6 +171,13 @@ package_option(ASSIMP
"Build pandatool with support for loading 3D assets supported by Assimp.") "Build pandatool with support for loading 3D assets supported by Assimp.")
package_status(ASSIMP "Assimp") package_status(ASSIMP "Assimp")
# FCollada
find_package(FCollada QUIET)
package_option(FCOLLADA
"Build pandatool with support for loading Collada files using FCollada."
IMPORTED_AS FCollada::FCollada)
package_status(FCOLLADA "FCollada")
# #
# ------------ Math libraries ------------ # ------------ Math libraries ------------

View File

@ -6,6 +6,8 @@ endif()
add_subdirectory(src/assimp) add_subdirectory(src/assimp)
add_subdirectory(src/bam) add_subdirectory(src/bam)
add_subdirectory(src/converter) add_subdirectory(src/converter)
add_subdirectory(src/daeegg)
add_subdirectory(src/daeprogs)
add_subdirectory(src/dxf) add_subdirectory(src/dxf)
add_subdirectory(src/dxfegg) add_subdirectory(src/dxfegg)
add_subdirectory(src/dxfprogs) add_subdirectory(src/dxfprogs)

View File

@ -0,0 +1,26 @@
if(NOT HAVE_EGG OR NOT HAVE_FCOLLADA)
return()
endif()
set(P3DAEEGG_HEADERS
config_daeegg.h
daeCharacter.h
daeMaterials.h
daeToEggConverter.h
fcollada_utils.h
pre_fcollada_include.h
)
set(P3DAEEGG_SOURCES
config_daeegg.cxx
daeCharacter.cxx
daeMaterials.cxx
daeToEggConverter.cxx
)
add_library(p3daeegg STATIC ${P3DAEEGG_HEADERS} ${P3DAEEGG_SOURCES})
target_link_libraries(p3daeegg p3eggbase
PKG::FCOLLADA)
# This is only needed for binaries in the pandatool package. It is not useful
# for user applications, so it is not installed.

View File

@ -0,0 +1,11 @@
if(HAVE_EGG AND HAVE_FCOLLADA)
add_executable(egg2dae eggToDAE.cxx eggToDAE.h)
target_link_libraries(egg2dae p3daeegg p3eggbase p3progbase)
install(TARGETS egg2dae EXPORT Tools COMPONENT Tools DESTINATION bin)
add_executable(dae2egg daeToEgg.cxx daeToEgg.h)
target_link_libraries(dae2egg p3daeegg p3eggbase p3progbase)
install(TARGETS dae2egg EXPORT Tools COMPONENT Tools DESTINATION bin)
endif()

View File

@ -19,4 +19,8 @@ target_link_libraries(p3ptloader PRIVATE
p3dxfegg p3fltegg p3lwoegg p3objegg p3vrmlegg p3xfileegg p3dxfegg p3fltegg p3lwoegg p3objegg p3vrmlegg p3xfileegg
p3converter) p3converter)
if(HAVE_FCOLLADA)
target_link_libraries(p3ptloader PRIVATE p3daeegg)
endif()
install(TARGETS p3ptloader EXPORT Tools COMPONENT Tools DESTINATION ${MODULE_DESTINATION}) install(TARGETS p3ptloader EXPORT Tools COMPONENT Tools DESTINATION ${MODULE_DESTINATION})