195 lines
5.5 KiB
CMake
195 lines
5.5 KiB
CMake
|
|
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
|
|
####### Any changes to this file will be overwritten by the next CMake run ####
|
|
####### The input file was PkgBinConfig.cmake.in ########
|
|
|
|
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
|
|
|
|
macro(set_and_check _var _file)
|
|
set(${_var} "${_file}")
|
|
if(NOT EXISTS "${_file}")
|
|
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
|
|
endif()
|
|
endmacro()
|
|
|
|
macro(check_required_components _NAME)
|
|
foreach(comp ${${_NAME}_FIND_COMPONENTS})
|
|
if(NOT ${_NAME}_${comp}_FOUND)
|
|
if(${_NAME}_FIND_REQUIRED_${comp})
|
|
set(${_NAME}_FOUND FALSE)
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endmacro()
|
|
|
|
####################################################################################
|
|
|
|
# Make a list of all configurations
|
|
# FIXME: Replace this with ${CMAKE_CONFIGURATION_TYPES}
|
|
set(CONFIGS "RELEASE" "DEBUG")
|
|
|
|
# Construct the executable names
|
|
set(cgv_viewer_OUTPUT_NAME_RELEASE "cgv_viewer")
|
|
set(cgv_viewer_OUTPUT_NAME_DEBUG "cgv_viewer_d")
|
|
|
|
|
|
# See if we can go the easy way when our dependency is also a target to be built
|
|
if (TARGET cgv_viewer)
|
|
set(cgv_viewer_EXECUTABLE cgv_viewer)
|
|
set(cgv_viewer_FOUND TRUE)
|
|
endif()
|
|
|
|
# See if the imported target already exists
|
|
if (TARGET cgv_viewer_IMPORTED_${TARGET_POSTFIX})
|
|
set(cgv_viewer_EXECUTABLE cgv_viewer_IMPORTED_${TARGET_POSTFIX})
|
|
set(cgv_viewer_FOUND TRUE)
|
|
endif()
|
|
|
|
|
|
# If the project is a target then it might not be built but we assume
|
|
# nevertheless that the files will be present. If it is not a target then
|
|
# we look for the libraries explicitly
|
|
if (NOT cgv_viewer_FOUND)
|
|
set(FIND_PATHS "${PACKAGE_PREFIX_DIR}/framework/lib/unix"
|
|
"${PACKAGE_PREFIX_DIR}/framework/bin/unix"
|
|
"${PACKAGE_PREFIX_DIR}/build/bin/unix"
|
|
"${PACKAGE_PREFIX_DIR}/build/lib/unix")
|
|
|
|
# Try to find executables for all configurations
|
|
foreach(conf ${CONFIGS})
|
|
find_program(cgv_viewer_EXE_${conf} ${cgv_viewer_OUTPUT_NAME_${conf}} PATHS ${FIND_PATHS})
|
|
endforeach()
|
|
|
|
# Check if all program types could be found
|
|
set(ALL_EXES_FOUND TRUE)
|
|
foreach(conf ${CONFIGS})
|
|
if (NOT cgv_viewer_EXE_${conf})
|
|
set(ALL_EXES_FOUND FALSE)
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
|
|
# If some programs could not be found then substitute their name with the
|
|
# first library name that could be found
|
|
if (NOT ALL_EXES_FOUND)
|
|
set(FIRST_FOUND_NAME FALSE)
|
|
|
|
foreach(conf ${CONFIGS})
|
|
if(cgv_viewer_EXE_${conf})
|
|
set(FIRST_FOUND_NAME ${cgv_viewer_EXE_${conf}})
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
|
|
# If no program was found then we failed
|
|
if (NOT FIRST_FOUND_NAME)
|
|
# FIXME: add better error handling here
|
|
message(FATAL_ERROR "Could not find program cgv_viewer")
|
|
set(cgv_viewer_FOUND FALSE)
|
|
return()
|
|
endif()
|
|
|
|
# Set all library names that were not found
|
|
foreach(conf ${CONFIGS})
|
|
if(NOT cgv_viewer_EXE_${conf})
|
|
set(cgv_viewer_EXE_${conf} ${FIRST_FOUND_NAME})
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
# Generate an imported target which each location for different configurations set accordingly
|
|
add_executable(cgv_viewer_IMPORTED_${TARGET_POSTFIX} IMPORTED)
|
|
foreach(conf ${CONFIGS})
|
|
set_target_properties(cgv_viewer_IMPORTED_${TARGET_POSTFIX} PROPERTIES
|
|
IMPORTED_LOCATION_${conf} "${cgv_viewer_EXE_${conf}}")
|
|
endforeach()
|
|
|
|
set(cgv_viewer_EXECUTABLE cgv_viewer_IMPORTED_${TARGET_POSTFIX})
|
|
set(cgv_viewer_FOUND TRUE)
|
|
endif()
|
|
|
|
|
|
get_filename_component(BASE_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
|
|
|
include("${BASE_PATH}/../CMakeMacroParseArguments.cmake")
|
|
|
|
|
|
function(cgv_add_viewer name)
|
|
# We only support linux and shared library builds
|
|
if (WIN32)
|
|
message("Viewer starters can only be generated under Linux at the moment")
|
|
return()
|
|
endif()
|
|
|
|
if (NOT BUILD_SHARED_LIBS)
|
|
message("Can only create a viewer for shared libraries at the moment")
|
|
return()
|
|
endif()
|
|
|
|
_cgv_add_shared_viewer(${name} ${ARGN})
|
|
endfunction()
|
|
|
|
|
|
|
|
|
|
function(_cgv_add_shared_viewer name)
|
|
|
|
set(CONFIG ${CMAKE_BUILD_TYPE})
|
|
if (NOT CONFIG)
|
|
set(CONFIG "Release")
|
|
endif()
|
|
|
|
cmake_parse_arguments(VDEFS "" "" "PLUGINS;ARGS" ${ARGN})
|
|
|
|
# If the command was not invoked with PLUGINS and CMDLINE sub lists
|
|
# then treat all arguments as plugins
|
|
if (NOT VDEFS_PLUGINS AND NOT VDEFS_ARGS)
|
|
set(VDEFS_PLUGINS ${ARGN})
|
|
set(VDEFS_ARGS "")
|
|
endif()
|
|
|
|
# Collect all library targets and definitions for all plugins
|
|
set(LIBS "")
|
|
foreach (mod ${VDEFS_PLUGINS})
|
|
# Check the according member if the plugin is a target
|
|
if (TARGET ${mod})
|
|
set(LIBS ${LIBS} ${mod})
|
|
get_target_property(MOD_LIB_SHARED ${mod} _SHARED_DEFINITIONS)
|
|
# Otherwise find the package
|
|
else()
|
|
find_package(${mod})
|
|
if (${mod}_FOUND)
|
|
set(LIBS ${LIBS} "${${mod}_LIBRARIES}")
|
|
else()
|
|
message(FATAL_ERROR "A project requested to create a viewer. The required module ${mod} could not be found!")
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
|
|
|
|
set(LIB_FILES "")
|
|
set(LIB_PATHS "")
|
|
|
|
# Find the file name of the library targets and construct a command line
|
|
# Also find the paths which we need for LD_LIBRARY_PATH later
|
|
foreach(lib ${LIBS})
|
|
get_target_property(LOC ${lib} LOCATION_${CONFIG})
|
|
set(LIB_FILES "${LIB_FILES} plugin:\"${LOC}\"")
|
|
|
|
get_filename_component(ABS_LOC_PATH "${LOC}" PATH)
|
|
list(APPEND LIB_PATHS ${ABS_LOC_PATH})
|
|
endforeach()
|
|
list(REMOVE_DUPLICATES LIB_PATHS)
|
|
string(REPLACE ";" ":" LIB_PATHS "${LIB_PATHS}")
|
|
|
|
# Find the name of the cgv viewer
|
|
get_target_property(VIEWER_EXE ${cgv_viewer_EXECUTABLE} LOCATION_${CONFIG})
|
|
|
|
configure_file(${BASE_PATH}/launcher.sh.in
|
|
${CMAKE_BINARY_DIR}/${name}.sh
|
|
@ONLY)
|
|
|
|
endfunction()
|
|
|
|
|
|
|