c778606c89
* Templates/Restricted upgrade/fixes: Fixed template storage format: templates now only store true relative paths and no longer save "origin" paths and "optional" has been removed, it was never used. Upgraded all templates to new standard Template system now correctly handles child objects: Child objects no longer have to specify restricted they inherit from parent Restricted now operates at the object level and makes no assumptions about parent Restricted templates can now be combined and seperated on creation ly_get_list_relative_filename has been deprecated for o3de_pal_dir All Gems/Projects/Templates updated to use new code Signed-off-by: byrcolin <byrcolin@amazon.com>
201 lines
7.3 KiB
CMake
201 lines
7.3 KiB
CMake
#
|
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
#
|
|
#
|
|
|
|
set(LY_INSTALL_ENABLED TRUE CACHE BOOL "Indicates if the install process is enabled")
|
|
|
|
#! ly_install: wrapper to install that handles common functionality
|
|
#
|
|
# \notes:
|
|
# - this wrapper handles the case where common installs are called multiple times from different
|
|
# build folders (when using LY_INSTALL_EXTERNAL_BUILD_DIRS) to generate install layouts that
|
|
# have multiple build permutations
|
|
#
|
|
function(ly_install)
|
|
|
|
if(NOT LY_INSTALL_ENABLED)
|
|
return()
|
|
endif()
|
|
|
|
cmake_parse_arguments(ly_install "" "COMPONENT" "" ${ARGN})
|
|
if (NOT ly_install_COMPONENT OR "${ly_install_COMPONENT}" STREQUAL "${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}")
|
|
# if it is installing under the default component, we need to de-duplicate since we can have
|
|
# cases coming from different build directories (when using LY_INSTALL_EXTERNAL_BUILD_DIRS)
|
|
install(CODE "if(NOT LY_CORE_COMPONENT_ALREADY_INCLUDED)" ALL_COMPONENTS)
|
|
install(${ARGN})
|
|
install(CODE "endif()\n" ALL_COMPONENTS)
|
|
else()
|
|
install(${ARGN})
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
#! ly_install_directory: specifies a directory to be copied to the install layout at install time
|
|
#
|
|
# \arg:DIRECTORIES directories to install
|
|
# \arg:DESTINATION (optional) destination to install the directory to (relative to CMAKE_PREFIX_PATH)
|
|
# \arg:EXCLUDE_PATTERNS (optional) patterns to exclude
|
|
# \arg:COMPONENT (optional) component to use (defaults to CMAKE_INSTALL_DEFAULT_COMPONENT_NAME)
|
|
# \arg:VERBATIM (optional) copies the directories as they are, this excludes the default exclude patterns
|
|
#
|
|
# \notes:
|
|
# - refer to cmake's install(DIRECTORY documentation for more information
|
|
# - If the directory contains programs/scripts, exclude them from this call and add a specific ly_install_files with
|
|
# PROGRAMS set. This is necessary to set the proper execution permissions.
|
|
# - This function will automatically filter out __pycache__, *.egg-info, CMakeLists.txt, *.cmake files. If those files
|
|
# need to be installed, use ly_install_files. Use VERBATIM to exclude such filters.
|
|
#
|
|
function(ly_install_directory)
|
|
|
|
if(NOT LY_INSTALL_ENABLED)
|
|
return()
|
|
endif()
|
|
|
|
set(options VERBATIM)
|
|
set(oneValueArgs DESTINATION COMPONENT)
|
|
set(multiValueArgs DIRECTORIES EXCLUDE_PATTERNS)
|
|
|
|
cmake_parse_arguments(ly_install_directory "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
|
|
if(NOT ly_install_directory_DIRECTORIES)
|
|
message(FATAL_ERROR "You must provide at least a directory to install")
|
|
endif()
|
|
|
|
if(NOT ly_install_directory_COMPONENT)
|
|
set(ly_install_directory_COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME})
|
|
endif()
|
|
|
|
foreach(directory ${ly_install_directory_DIRECTORIES})
|
|
|
|
cmake_path(ABSOLUTE_PATH directory)
|
|
|
|
if(NOT ly_install_directory_DESTINATION)
|
|
# maintain the same structure relative to LY_ROOT_FOLDER
|
|
set(ly_install_directory_DESTINATION ${directory})
|
|
if(${ly_install_directory_DESTINATION} STREQUAL ".")
|
|
set(ly_install_directory_DESTINATION ${CMAKE_CURRENT_LIST_DIR})
|
|
else()
|
|
cmake_path(ABSOLUTE_PATH ly_install_directory_DESTINATION BASE_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})
|
|
endif()
|
|
# take out the last directory since install asks for the destination of the folder, without including the fodler itself
|
|
cmake_path(GET ly_install_directory_DESTINATION PARENT_PATH ly_install_directory_DESTINATION)
|
|
cmake_path(RELATIVE_PATH ly_install_directory_DESTINATION BASE_DIRECTORY ${LY_ROOT_FOLDER})
|
|
endif()
|
|
|
|
unset(exclude_patterns)
|
|
if(ly_install_directory_EXCLUDE_PATTERNS)
|
|
foreach(exclude_pattern ${ly_install_directory_EXCLUDE_PATTERNS})
|
|
list(APPEND exclude_patterns PATTERN ${exclude_pattern} EXCLUDE)
|
|
endforeach()
|
|
endif()
|
|
|
|
if(NOT ly_install_directory_VERBATIM)
|
|
# Exclude cmake since that has to be generated
|
|
list(APPEND exclude_patterns PATTERN CMakeLists.txt EXCLUDE)
|
|
list(APPEND exclude_patterns PATTERN *.cmake EXCLUDE)
|
|
|
|
# Exclude python-related things that dont need to be installed
|
|
list(APPEND exclude_patterns PATTERN __pycache__ EXCLUDE)
|
|
list(APPEND exclude_patterns PATTERN *.egg-info EXCLUDE)
|
|
endif()
|
|
|
|
ly_install(DIRECTORY ${directory}
|
|
DESTINATION ${ly_install_directory_DESTINATION}
|
|
COMPONENT ${ly_install_directory_COMPONENT}
|
|
${exclude_patterns}
|
|
)
|
|
|
|
endforeach()
|
|
|
|
endfunction()
|
|
|
|
#! ly_install_files: specifies files to be copied to the install layout at install time
|
|
#
|
|
# \arg:FILES files to install
|
|
# \arg:DESTINATION destination to install the directory to (relative to CMAKE_PREFIX_PATH)
|
|
# \arg:PROGRAMS (optional) indicates if the files are programs that should be installed with EXECUTE permissions
|
|
#
|
|
# \notes:
|
|
# - refer to cmake's install(FILES/PROGRAMS documentation for more information
|
|
#
|
|
function(ly_install_files)
|
|
|
|
if(NOT LY_INSTALL_ENABLED)
|
|
return()
|
|
endif()
|
|
|
|
set(options PROGRAMS)
|
|
set(oneValueArgs DESTINATION)
|
|
set(multiValueArgs FILES)
|
|
|
|
cmake_parse_arguments(ly_install_files "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
|
|
if(NOT ly_install_files_FILES)
|
|
message(FATAL_ERROR "You must provide a list of files to install")
|
|
endif()
|
|
if(NOT ly_install_files_DESTINATION)
|
|
message(FATAL_ERROR "You must provide a destination to install files to")
|
|
endif()
|
|
|
|
unset(files)
|
|
foreach(file ${ly_install_files_FILES})
|
|
cmake_path(ABSOLUTE_PATH file)
|
|
list(APPEND files ${file})
|
|
endforeach()
|
|
|
|
if(ly_install_files_PROGRAMS)
|
|
set(install_type PROGRAMS)
|
|
else()
|
|
set(install_type FILES)
|
|
endif()
|
|
|
|
ly_install(${install_type} ${files}
|
|
DESTINATION ${ly_install_files_DESTINATION}
|
|
COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME} # use the default for the time being
|
|
)
|
|
|
|
endfunction()
|
|
|
|
#! ly_install_run_code: specifies code to be added to the install process (will run at install time)
|
|
#
|
|
# \notes:
|
|
# - refer to cmake's install(CODE documentation for more information
|
|
#
|
|
function(ly_install_run_code CODE)
|
|
|
|
if(NOT LY_INSTALL_ENABLED)
|
|
return()
|
|
endif()
|
|
|
|
ly_install(CODE ${CODE}
|
|
COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME} # use the default for the time being
|
|
)
|
|
|
|
endfunction()
|
|
|
|
#! ly_install_run_script: specifies path to script to be added to the install process (will run at install time)
|
|
#
|
|
# \notes:
|
|
# - refer to cmake's install(SCRIPT documentation for more information
|
|
#
|
|
function(ly_install_run_script SCRIPT)
|
|
|
|
if(NOT LY_INSTALL_ENABLED)
|
|
return()
|
|
endif()
|
|
|
|
ly_install(SCRIPT ${SCRIPT}
|
|
COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME} # use the default for the time being
|
|
)
|
|
|
|
endfunction()
|
|
|
|
if(LY_INSTALL_ENABLED)
|
|
o3de_pal_dir(pal_dir ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Platform/${PAL_PLATFORM_NAME} ${O3DE_ENGINE_RESTRICTED_PATH} ${LY_ROOT_FOLDER})
|
|
include(${pal_dir}/Install_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
|
|
endif()
|