6d7ca06e02
The following shell script was used: while read f do sed -Ei 's/[[:space:]]+$//g' "$f" done <<EOF $(svn ls -R | grep \ -e '.\cpp$' \ -e '\.cmake$' \ -e '\.txt$' \ -e '\.cppcheck$' \ -e '\.frag$' \ -e '\.h$' \ -e '\.hpp$' \ -e '\.vert$' \ -e '\.xml$' \ -e '\.java$' \ -e '\.c$') EOF As a side effect, this has also converted some files from CRLF line endings to LF. File extensions such as .ac or .osg were intentionally left out because those usually are very large files generated by tools. git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9507 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 6c1e5ab34415982ec77fc92a77e1b1c149518eca Former-commit-id: c6cf9480ae7c1d2f9a999eb6c6b976eef8bae3ba
536 lines
21 KiB
CMake
536 lines
21 KiB
CMake
############################################################################
|
|
#
|
|
# file : install.cmake
|
|
# copyright : (C) 2008 by Mart Kelder, 2010 by J.-P. Meuret
|
|
# web : www.speed-dreams.org
|
|
# version : $Id$
|
|
#
|
|
############################################################################
|
|
|
|
############################################################################
|
|
# #
|
|
# This program is free software; you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation; either version 2 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
############################################################################
|
|
|
|
# @file CMake install macros
|
|
# @author Mart Kelder, J.-P. Meuret
|
|
# @version $Id$
|
|
|
|
|
|
# Get the real pathname of a target (taking care of the MSVC configuration-driven variables).
|
|
# Args :
|
|
# TGT_NAME Name of the target
|
|
# Name of the target variable for the output path-name
|
|
MACRO(_GET_TARGET_REAL_PATHNAME TGT_NAME VAR_PATHNAME)
|
|
|
|
GET_TARGET_PROPERTY(${VAR_PATHNAME} ${TGT_NAME} LOCATION)
|
|
MESSAGE(STATUS "GET_TARGET_REAL_PATHNAME(${TGT_NAME})=${${VAR_PATHNAME}}")
|
|
IF(MSVC)
|
|
STRING(REPLACE "$(OutDir)" "${CMAKE_INSTALL_CONFIG_NAME}" ${VAR_PATHNAME} ${${VAR_PATHNAME}})
|
|
STRING(REPLACE "$(ConfigurationName)" "${CMAKE_INSTALL_CONFIG_NAME}" ${VAR_PATHNAME} ${${VAR_PATHNAME}})
|
|
STRING(REPLACE "$(Configuration)" "${CMAKE_INSTALL_CONFIG_NAME}" ${VAR_PATHNAME} ${${VAR_PATHNAME}})
|
|
ENDIF(MSVC)
|
|
|
|
ENDMACRO(_GET_TARGET_REAL_PATHNAME TGT_NAME VAR_PATHNAME)
|
|
|
|
|
|
# Update and install the version.xml file (for user settings files management).
|
|
MACRO(SD_SETUP_SETTINGS_VERSION)
|
|
|
|
# Create a custom target for updating the version.xml file (through xmlversion.exe)
|
|
# which registers the versions of the (XML) user settings files.
|
|
# This target will depend on all other ones, in order it is built
|
|
# after them, in cas they install such (XML) user settings files
|
|
# (see SD_INSTALL_FILES and SD_INSTALL_DIRECTORIES, with USER flag).
|
|
# Note: We need a specific target for doing this, rather than adding custom
|
|
# xmlversion.exe commands to each corresponding target,
|
|
# otherwise parallel builds would likely conflict while updating
|
|
# the unique version.xml file.
|
|
ADD_CUSTOM_TARGET(settings_versions ALL)
|
|
|
|
# Initialize the list of xmlversion args.
|
|
DEFINE_PROPERTY(TARGET PROPERTY XMLVERSION_ARGS
|
|
BRIEF_DOCS "List of xmlversion args"
|
|
FULL_DOCS "List of xmlversion args ({src file, target user dir} couples)")
|
|
|
|
ENDMACRO(SD_SETUP_SETTINGS_VERSION)
|
|
|
|
# Update and install the version.xml file (for user settings files management).
|
|
# Note: This macro must be called in the same folder (CMakeLists.txt) as SD_SETUP_SETTINGS_VERSION
|
|
# because of ADD_CUSTOM_COMMAND(TARGET limitations (will simply be ignored if not same dir
|
|
# as when the ADD_CUSTOM_TARGET was called).
|
|
MACRO(SD_UPDATE_SETTINGS_VERSION)
|
|
|
|
# Determine the full path-name of xmlversion.exe
|
|
SET(_XMLVER_EXE "${CMAKE_BINARY_DIR}/${SD_BINDIR}/${CMAKE_EXECUTABLE_PREFIX}xmlversion${CMAKE_EXECUTABLE_SUFFIX}")
|
|
|
|
#MESSAGE(STATUS "_XMLVER_EXE=${_XMLVER_EXE}")
|
|
|
|
# In order to run xmlversion.exe in the build tree (see below), under Windows,
|
|
# we nearly always have to copy 3rd party dependency and compiler run-time DLLs next to it.
|
|
# Note: Not really needed as speed-dreams-2 is built before settings_versions,
|
|
# and so already did this job. But in case someone changes the build order ...
|
|
IF(WIN32)
|
|
|
|
SET(_DLLS_TO_INSTALL)
|
|
|
|
# Internal dependencies : not needed, as we already generate them in SD_BINDIR.
|
|
|
|
# 3rd party dependencies
|
|
# (not needed for MinGW builds through the "MSYS Makefiles" generator,
|
|
# as in this case, these DLLs are installed in the standard Linux folder /usr/local/bin,
|
|
# which is in the PATH under MSYS).
|
|
# TODO: Use Custom3rdParty macros for this (and thus avoid duplicate code) ?
|
|
IF(NOT CMAKE_GENERATOR STREQUAL "MSYS Makefiles")
|
|
|
|
IF(OPTION_3RDPARTY_EXPAT)
|
|
FIND_PACKAGE(EXPAT)
|
|
GET_FILENAME_COMPONENT(_LIB_PATH "${EXPAT_LIBRARY}" PATH)
|
|
GET_FILENAME_COMPONENT(_LIB_NAME "${EXPAT_LIBRARY}" NAME_WE)
|
|
SET(_DLL_PATHNAME ${_LIB_PATH}/../bin/${_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
LIST(APPEND _DLLS_TO_INSTALL ${_DLL_PATHNAME})
|
|
ENDIF()
|
|
|
|
FIND_PACKAGE(SDL2)
|
|
SET(_LIB_PATHNAME "${SDL2_LIBRARY}")
|
|
|
|
IF(MINGW)
|
|
# Multiple lib specs fuss ... find the one
|
|
STRING(REGEX REPLACE ".*;([^;]+dll[^;]*);.*" "\\1" _LIB_PATHNAME "${_LIB_PATHNAME}")
|
|
ENDIF(MINGW)
|
|
GET_FILENAME_COMPONENT(_LIB_PATH "${_LIB_PATHNAME}" PATH)
|
|
GET_FILENAME_COMPONENT(_LIB_NAME "${_LIB_PATHNAME}" NAME_WE)
|
|
IF(MINGW)
|
|
STRING(REGEX REPLACE "lib(.*)" "\\1" _LIB_NAME "${_LIB_NAME}")
|
|
ENDIF(MINGW)
|
|
SET(_DLL_PATHNAME ${_LIB_PATH}/../bin/${_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
LIST(APPEND _DLLS_TO_INSTALL ${_DLL_PATHNAME})
|
|
|
|
ENDIF(NOT CMAKE_GENERATOR STREQUAL "MSYS Makefiles")
|
|
|
|
# Compiler run-time dependencies
|
|
# (neither needed for MinGW builds through the "MSYS Makefiles" generator,
|
|
# - same reason than for the 3rd party dependencies -
|
|
# nor for MSVC builds, where Visual Studio takes care itself of it).
|
|
# TODO: Use Custom3rdParty macros for this (and thus avoid duplicate code) ?
|
|
IF(MINGW AND NOT CMAKE_GENERATOR STREQUAL "MSYS Makefiles")
|
|
|
|
GET_FILENAME_COMPONENT(_MINGW_BINDIR "${CMAKE_CXX_COMPILER}" PATH)
|
|
LIST(APPEND _DLLS_TO_INSTALL "${_MINGW_BINDIR}/libstdc++-6.dll")
|
|
LIST(APPEND _DLLS_TO_INSTALL "${_MINGW_BINDIR}/libgcc_s_dw2-1.dll")
|
|
|
|
ENDIF(MINGW AND NOT CMAKE_GENERATOR STREQUAL "MSYS Makefiles")
|
|
|
|
# Copy the dependency DLLs found above.
|
|
#MESSAGE(STATUS "xmlversion : DLLs to install=${_DLLS_TO_INSTALL}")
|
|
IF(_DLLS_TO_INSTALL)
|
|
SET(_TGT_DIR "${CMAKE_BINARY_DIR}/${SD_BINDIR}")
|
|
ADD_CUSTOM_COMMAND(TARGET settings_versions PRE_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E echo Creating directory "${_TGT_DIR}"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${_TGT_DIR}"
|
|
VERBATIM)
|
|
FOREACH(_DLL ${_DLLS_TO_INSTALL})
|
|
ADD_CUSTOM_COMMAND(TARGET settings_versions PRE_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E echo Copying "${_DLL}" to "${_TGT_DIR}"
|
|
COMMAND ${CMAKE_COMMAND} -E copy "${_DLL}" "${_TGT_DIR}"
|
|
VERBATIM)
|
|
ENDFOREACH()
|
|
ENDIF()
|
|
|
|
ENDIF(WIN32)
|
|
|
|
# Update version.xml from the collected user settings files (see SD_INSTALL_FILES).
|
|
GET_PROPERTY(_XMLVER_ARGS TARGET settings_versions PROPERTY XMLVERSION_ARGS)
|
|
#MESSAGE(STATUS "SD_UPDATE_SETTINGS_VERSION : XMLVERSION_ARGS=${_XMLVER_ARGS}")
|
|
GET_FILENAME_COMPONENT(_XMLVER_DIR ${_XMLVER_EXE} PATH)
|
|
GET_FILENAME_COMPONENT(_XMLVER_NAME ${_XMLVER_EXE} NAME)
|
|
|
|
SET(_SRC_FILE)
|
|
FOREACH(_ARG ${_XMLVER_ARGS})
|
|
|
|
#MESSAGE(STATUS "${_ARG}")
|
|
IF(NOT _SRC_FILE)
|
|
|
|
SET(_SRC_FILE ${_ARG})
|
|
|
|
ELSE()
|
|
|
|
SET(_USER_DIR ${_ARG})
|
|
|
|
# Register file for run-time install/update at game startup, thanks to xmlversion
|
|
# (filesetup.cpp services will do the job at game startup).
|
|
ADD_CUSTOM_COMMAND(TARGET settings_versions POST_BUILD
|
|
WORKING_DIRECTORY "${_XMLVER_DIR}"
|
|
COMMAND ${CMAKE_COMMAND} -E echo "${_XMLVER_EXE}" "${CMAKE_BINARY_DIR}/${SD_BINDIR}/version.xml" "${_SRC_FILE}" "${_USER_DIR}" "${PROJECT_SOURCE_DIR}/data"
|
|
COMMAND "${_XMLVER_NAME}" "${CMAKE_BINARY_DIR}/${SD_BINDIR}/version.xml" "${_SRC_FILE}" "${_USER_DIR}" "${PROJECT_SOURCE_DIR}/data"
|
|
VERBATIM)
|
|
|
|
# Done for this {file, folder} couple, ready for next one.
|
|
SET(_SRC_FILE)
|
|
|
|
ENDIF()
|
|
|
|
ENDFOREACH()
|
|
|
|
# Install version.xml
|
|
INSTALL(FILES "${CMAKE_BINARY_DIR}/${SD_BINDIR}/version.xml" DESTINATION "${SD_DATADIR}")
|
|
|
|
ENDMACRO(SD_UPDATE_SETTINGS_VERSION)
|
|
|
|
# Data/Lib/Bin/Include files installation (with user settings registration for data files)
|
|
# Note: Missing files will be skipped if not there and OPTION_CHECK_CONTENTS is Off.
|
|
# Args:
|
|
# DATA : Data subdirectory where to install specified data files
|
|
# LIB : Lib subdirectory where to install specified files/targets
|
|
# BIN : If present, instructs to install specified files/targets in the bin dir
|
|
# INCLUDE : Include subdirectory where to install specified files
|
|
# USER : User settings subdirectory where to install/update specified data files at run-time
|
|
# PREFIX : Prefix to use to get source path for files specified in FILES
|
|
# FILES : Files to install (see PREFIX)
|
|
# TARGETS : Targets to install
|
|
# Examples:
|
|
# SD_INSTALL_FILES(DATA drivers/bt FILES bt.xml logo.rgb)
|
|
# Installs bt.xml and logo.rgb in ${prefix}/${SD_DATADIR}/drivers/bt
|
|
# SD_INSTALL_FILES(DATA config/raceman USER config/raceman FILES quickrace.xml endrace.xml)
|
|
# Installs quickrace.xml and endrace.xml in ${prefix}/${SD_DATADIR}/drivers/bt
|
|
# and copies the file to the users settings folder ${SD_LOCALDIR}/config/raceman at startup.
|
|
# SD_INSTALL_FILES(LIB drivers/bt TARGETS bt.so)
|
|
# Installs bt.so in ${prefix}/${SD_LIBDIR}/drivers/bt
|
|
# SD_INSTALL_FILES(BIN TARGETS speed-dreams)
|
|
# Installs the speed-dreams target in ${prefix}/${SD_BINDIR}
|
|
# SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES sd2-menuview.6)
|
|
# Installs ${SOURCE_DIR}/doc/man/sd2-menuview.6 in ${prefix}/${SD_MANDIR}/man6
|
|
MACRO(SD_INSTALL_FILES)
|
|
|
|
SET(SD_INSTALL_FILES_SYNTAX "DATA,1,1,IS_DATA,DATA_PATH")
|
|
SET(SD_INSTALL_FILES_SYNTAX ${SD_INSTALL_FILES_SYNTAX} "LIB,1,1,IS_LIB,LIB_PATH")
|
|
SET(SD_INSTALL_FILES_SYNTAX ${SD_INSTALL_FILES_SYNTAX} "BIN,0,0,IS_BIN,_")
|
|
SET(SD_INSTALL_FILES_SYNTAX ${SD_INSTALL_FILES_SYNTAX} "INCLUDE,0,1,IS_INCLUDE,INCLUDE_PATH")
|
|
SET(SD_INSTALL_FILES_SYNTAX ${SD_INSTALL_FILES_SYNTAX} "MAN,1,1,IS_MAN,MAN_PATH")
|
|
SET(SD_INSTALL_FILES_SYNTAX ${SD_INSTALL_FILES_SYNTAX} "USER,1,1,IS_USER,USER_PATH")
|
|
SET(SD_INSTALL_FILES_SYNTAX ${SD_INSTALL_FILES_SYNTAX} "PREFIX,0,1,HAS_PREFIX,PREFIX")
|
|
SET(SD_INSTALL_FILES_SYNTAX ${SD_INSTALL_FILES_SYNTAX} "FILES,0,-1,HAS_FILES,FILES")
|
|
SET(SD_INSTALL_FILES_SYNTAX ${SD_INSTALL_FILES_SYNTAX} "TARGETS,0,-1,HAS_TARGETS,TARGETS")
|
|
|
|
SPLIT_ARGN(${SD_INSTALL_FILES_SYNTAX} ARGUMENTS ${ARGN})
|
|
|
|
#MESSAGE(STATUS " SD_INSTALL_FILES: LIB=${IS_LIB}:${LIB_PATH} BIN=${IS_BIN} INCLUDE=${IS_INCLUDE}:${INCLUDE_PATH} DATA=${IS_DATA}:${DATA_PATH} MAN=${IS_MAN}:${MAN_PATH} USER=${IS_USER}:${USER_PATH} TARGETS=${HAS_TARGETS}:${TARGETS} FILES=${HAS_FILES}:${FILES}")
|
|
|
|
# Fix/Check argument syntax / values
|
|
IF(NOT DATA_PATH)
|
|
SET(IS_DATA FALSE)
|
|
ENDIF()
|
|
IF(NOT USER_PATH)
|
|
SET(IS_USER FALSE)
|
|
ENDIF()
|
|
IF(NOT LIB_PATH)
|
|
SET(IS_LIB FALSE)
|
|
ENDIF()
|
|
IF(NOT MAN_PATH)
|
|
SET(IS_MAN FALSE)
|
|
ENDIF()
|
|
IF(NOT PREFIX)
|
|
SET(HAS_PREFIX FALSE)
|
|
ENDIF()
|
|
IF(NOT FILES)
|
|
SET(HAS_FILES FALSE)
|
|
ENDIF()
|
|
IF(NOT TARGETS)
|
|
SET(HAS_TARGETS FALSE)
|
|
ENDIF()
|
|
|
|
IF(IS_DATA OR IS_LIB OR IS_BIN OR IS_INCLUDE OR IS_MAN)
|
|
IF(HAS_PREFIX)
|
|
IF(NOT HAS_FILES)
|
|
MESSAGE(FATAL_ERROR "SD_INSTALL_FILES: Expected FILES when PREFIX keyword is present")
|
|
ENDIF()
|
|
ENDIF()
|
|
ELSE()
|
|
MESSAGE(FATAL_ERROR "SD_INSTALL_FILES: Expected 1 and only 1 LIB, DATA, BIN, INCLUDE or MAN keyword")
|
|
ENDIF()
|
|
|
|
IF(IS_USER)
|
|
IF(NOT IS_DATA)
|
|
MESSAGE(FATAL_ERROR "SD_INSTALL_FILES: Expected DATA when USER keyword is present")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
# Compute destination sub-dir
|
|
IF(IS_LIB)
|
|
SET(DEST1 ${SD_LIBDIR})
|
|
SET(DEST2 ${LIB_PATH})
|
|
ELSEIF(IS_DATA)
|
|
SET(DEST1 ${SD_DATADIR})
|
|
SET(DEST2 ${DATA_PATH})
|
|
ELSEIF(IS_BIN)
|
|
SET(DEST1 ${SD_BINDIR})
|
|
SET(DEST2 "")
|
|
ELSEIF(IS_INCLUDE)
|
|
SET(DEST1 ${SD_INCLUDEDIR})
|
|
SET(DEST2 ${INCLUDE_PATH})
|
|
ELSEIF(IS_MAN)
|
|
SET(DEST1 ${SD_MANDIR})
|
|
SET(DEST2 ${MAN_PATH})
|
|
ENDIF()
|
|
|
|
IF(DEST2 STREQUAL "" OR DEST2 STREQUAL "/")
|
|
SET(DEST2 "")
|
|
SET(DEST_ALL "${DEST1}")
|
|
ELSE()
|
|
SET(DEST_ALL "${DEST1}/${DEST2}")
|
|
ENDIF()
|
|
|
|
# Prepend prefix to files if specified.
|
|
SET(REAL_FILES) # Reset the list (remember, it's a CMakeLists.txt global variable :-()
|
|
IF(HAS_FILES)
|
|
SET(_FILES) # Same.
|
|
FOREACH(FILE ${FILES})
|
|
#MESSAGE(STATUS "SD_INSTALL_FILES: ${FILE}")
|
|
IF(HAS_PREFIX)
|
|
SET(_FILE ${PREFIX}/${FILE})
|
|
ELSE()
|
|
SET(_FILE ${FILE})
|
|
ENDIF()
|
|
# Contents check for non-generated files if specified.
|
|
IF(NOT IS_ABSOLUTE ${_FILE})
|
|
SET(_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${_FILE}")
|
|
ENDIF()
|
|
IF(IS_LIB OR IS_BIN OR EXISTS ${_FILE} OR OPTION_CHECK_CONTENTS)
|
|
LIST(APPEND REAL_FILES ${_FILE})
|
|
LIST(APPEND _FILES ${FILE})
|
|
ELSE()
|
|
IF(IS_ABSOLUTE ${_FILE}) # Make message less long : remove useless source dir path.
|
|
STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" _FILE "${_FILE}")
|
|
ENDIF()
|
|
MESSAGE(STATUS "Note : Won't install missing file ${_FILE}")
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
SET(FILES ${_FILES})
|
|
ENDIF()
|
|
|
|
# Install files
|
|
#MESSAGE(STATUS "REAL_FILES '${REAL_FILES}' DESTINATION '${DEST_ALL}'")
|
|
IF(REAL_FILES)
|
|
INSTALL(FILES ${REAL_FILES} DESTINATION ${DEST_ALL})
|
|
ENDIF()
|
|
|
|
# Install targets
|
|
IF(HAS_TARGETS)
|
|
|
|
INSTALL(TARGETS ${TARGETS} DESTINATION ${DEST_ALL})
|
|
|
|
ENDIF()
|
|
|
|
# Collect user settings files and target folder for later (see SD_XX_SETTINGS_VERSION above).
|
|
IF(IS_USER)
|
|
|
|
FOREACH(FILE ${FILES})
|
|
IF("${FILE}" MATCHES "\\.xml")
|
|
GET_FILENAME_COMPONENT(FILE_NAME ${FILE} NAME)
|
|
SET_PROPERTY(TARGET settings_versions APPEND PROPERTY XMLVERSION_ARGS
|
|
"${DATA_PATH}/${FILE_NAME};${USER_PATH}/${FILE_NAME}")
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
|
|
# Debug traces.
|
|
#GET_PROPERTY(_XMLVER_ARGS TARGET settings_versions PROPERTY XMLVERSION_ARGS)
|
|
#MESSAGE(STATUS "SD_INSTALL_FILES(USER) : XMLVERSION_ARGS=${_XMLVER_ARGS}")
|
|
|
|
ENDIF(IS_USER)
|
|
|
|
ENDMACRO(SD_INSTALL_FILES)
|
|
|
|
# Directory installation with pattern matching on files and user settings registration
|
|
# Note: Missing dirs will be skipped if not there and OPTION_CHECK_CONTENTS is Off.
|
|
# Args:
|
|
# DATA : Data subdirectory where to install specified sub-dirs
|
|
# USER : User settings subdirectory where to install/update specified sub-dirs at run-time
|
|
# PREFIX : Prefix to use to get source path for dirs specified in DIRECTORIES
|
|
# DIRECTORIES : Sub-dirs to recursively install (see PREFIX)
|
|
# PATTERNS : Glob patterns to use for seelecting files to install (defaults to *.*)
|
|
# Example:
|
|
# SD_INSTALL_DIRECTORIES(DATA drivers/human USER drivers/human
|
|
# PREFIX pfx DIRECTORIES cars tracks PATTERNS *.xml)
|
|
# will recursively install any .xml file from drivers/human/pfx/cars and drivers/human/pfx/tracks
|
|
# into drivers/human/cars and drivers/human/pfx/tracks data dirs ;
|
|
# these files / sub-dirs will also be scheduled for run-time update/install in user settings dir.
|
|
MACRO(SD_INSTALL_DIRECTORIES)
|
|
|
|
SET(SDID_SYNTAX "DATA,1,1,IS_DATA,DATA_PATH")
|
|
SET(SDID_SYNTAX ${SDID_SYNTAX} "USER,1,1,IS_USER,USER_PATH")
|
|
SET(SDID_SYNTAX ${SDID_SYNTAX} "PREFIX,0,1,HAS_PREFIX,PREFIX")
|
|
SET(SDID_SYNTAX ${SDID_SYNTAX} "DIRECTORIES,0,-1,HAS_DIRECTORIES,DIRECTORIES")
|
|
SET(SDID_SYNTAX ${SDID_SYNTAX} "PATTERNS,0,-1,HAS_PATTERNS,PATTERNS")
|
|
|
|
SPLIT_ARGN(${SDID_SYNTAX} ARGUMENTS ${ARGN})
|
|
|
|
#MESSAGE(STATUS " SD_INSTALL_DIRECTORIES: DATA=${IS_DATA}:${DATA_PATH} USER=${IS_USER}:${USER_PATH} DIRS=${HAS_DIRECTORIES}:${DIRECTORIES} PATTERNS=${HAS_PATTERNS}:${PATTERNS}")
|
|
|
|
# Fix/Check argument syntax / values
|
|
IF(NOT DATA_PATH)
|
|
SET(IS_DATA FALSE)
|
|
ENDIF()
|
|
IF(NOT USER_PATH)
|
|
SET(IS_USER FALSE)
|
|
ENDIF()
|
|
IF(NOT PREFIX)
|
|
SET(HAS_PREFIX FALSE)
|
|
ENDIF()
|
|
IF(NOT DIRECTORIES)
|
|
SET(HAS_DIRECTORIES FALSE)
|
|
ENDIF()
|
|
IF(NOT PATTERNS)
|
|
SET(HAS_PATTERNS TRUE)
|
|
SET(PATTERNS "*.*")
|
|
ENDIF()
|
|
|
|
IF(IS_DATA AND HAS_DIRECTORIES)
|
|
IF(HAS_PREFIX)
|
|
SET(PREFIX "${PREFIX}/")
|
|
SET(POSTFIX "/${PREFIX}")
|
|
ELSE()
|
|
SET(PREFIX "")
|
|
SET(POSTFIX "")
|
|
ENDIF()
|
|
ELSE()
|
|
MESSAGE(ERROR ": SD_INSTALL_DIRECTORIES: Expected mandatory DATA and DIRECTORIES keywords")
|
|
ENDIF()
|
|
|
|
# Compute destination sub-dir
|
|
IF(DATA_PATH STREQUAL "/")
|
|
SET(DEST_ALL "${SD_DATADIR}")
|
|
ELSE()
|
|
SET(DEST_ALL "${SD_DATADIR}/${DATA_PATH}")
|
|
ENDIF()
|
|
|
|
# Check / filter contents if specified
|
|
SET(_DIRECTORIES)
|
|
FOREACH(DIRECTORY ${DIRECTORIES})
|
|
#MESSAGE(STATUS "SD_INSTALL_DIRS: ${DIRECTORY}")
|
|
IF(NOT IS_ABSOLUTE ${DIRECTORY})
|
|
SET(_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${PREFIX}${DIRECTORY}")
|
|
ELSE()
|
|
SET(_DIRECTORY "${DIRECTORY}")
|
|
ENDIF()
|
|
IF(EXISTS ${_DIRECTORY} OR OPTION_CHECK_CONTENTS)
|
|
LIST(APPEND _DIRECTORIES ${DIRECTORY})
|
|
ELSE()
|
|
MESSAGE(STATUS "Note : Won't install missing dir. ${PREFIX}${DIRECTORY}")
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
SET(DIRECTORIES ${_DIRECTORIES})
|
|
|
|
# Install selected files into the data dir.
|
|
# And collect user settings files (if any) and target folder for later
|
|
# (see SD_XX_SETTINGS_VERSION above).
|
|
FOREACH(DIRECTORY ${DIRECTORIES})
|
|
SET(FILES)
|
|
FOREACH(PATTERN ${PATTERNS})
|
|
FILE(GLOB_RECURSE _FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}${POSTFIX}" "${PREFIX}${DIRECTORY}/${PATTERN}")
|
|
LIST(APPEND FILES ${_FILES})
|
|
ENDFOREACH()
|
|
#MESSAGE(STATUS "SD_INSTALL_DIRS: FILES=${FILES}")
|
|
FOREACH(FILE ${FILES})
|
|
IF(NOT "${FILE}" MATCHES "\\.svn")
|
|
GET_FILENAME_COMPONENT(SUBDIR ${FILE} PATH)
|
|
INSTALL(FILES ${PREFIX}${FILE} DESTINATION ${DEST_ALL}/${SUBDIR})
|
|
IF(IS_USER AND "${FILE}" MATCHES "\\.xml")
|
|
SET_PROPERTY(TARGET settings_versions APPEND PROPERTY XMLVERSION_ARGS
|
|
"${DATA_PATH}/${FILE};${USER_PATH}/${FILE}")
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
ENDFOREACH()
|
|
|
|
ENDMACRO(SD_INSTALL_DIRECTORIES)
|
|
|
|
# Macro to install CMake config files for SD if in-source build.
|
|
IF(IN_SOURCETREE)
|
|
MACRO(INSTALL_SD_CMAKE)
|
|
INSTALL(CODE
|
|
"SET(CUR_DESTDIR \"\$ENV{DESTDIR}\")
|
|
IF(CUR_DESTDIR MATCHES \"[^/]\")
|
|
STRING(REGEX REPLACE \"^(.*[^/])/*$\" \"\\\\1\" CUR_DESTDIR_CORR \"\${CUR_DESTDIR}\")
|
|
ELSE(CUR_DESTDIR MATCHES \"[^/]\")
|
|
SET(CUR_DESTDIR_CORR \"\")
|
|
ENDIF(CUR_DESTDIR MATCHES \"[^/]\")
|
|
FILE(MAKE_DIRECTORY \"\${CUR_DESTDIR_CORR}${SD_DATADIR_ABS}/cmake\")
|
|
FILE(WRITE \"\${CUR_DESTDIR_CORR}${SD_DATADIR_ABS}/cmake/speed-dreams.cmake\"
|
|
\"SET(SD_DATADIR_ABS \\\"${SD_DATADIR_ABS}\\\")
|
|
SET(SD_LOCALDIR \\\"${SD_LOCALDIR}\\\")
|
|
SET(SD_LIBDIR_ABS \\\"${SD_LIBDIR_ABS}\\\")
|
|
SET(SD_BINDIR_ABS \\\"${SD_BINDIR_ABS}\\\")
|
|
SET(SD_INCLUDEDIR_ABS \\\"${SD_INCLUDEDIR_ABS}\\\")
|
|
SET(IN_SOURCETREE FALSE)\\n\\n\")
|
|
FILE(READ \"${SOURCE_DIR}/cmake/macros.cmake\" SD_MACRO_CONTENT)
|
|
FILE(APPEND \"\${CUR_DESTDIR_CORR}${SD_DATADIR_ABS}/cmake/speed-dreams.cmake\" \${SD_MACRO_CONTENT})")
|
|
ENDMACRO(INSTALL_SD_CMAKE)
|
|
ENDIF(IN_SOURCETREE)
|
|
|
|
MACRO(SD_INSTALL_CAR CARNAME)
|
|
|
|
SET(SDIC_FILES ${ARGN})
|
|
|
|
FILE(GLOB XML_FILES ${CARNAME}*.xml)
|
|
FILE(GLOB AC3D_FILES *.acc)
|
|
FILE(GLOB SRCAC_FILES *-src.ac)
|
|
FILE(GLOB AC_FILES *.ac)
|
|
FOREACH(AC_FILE ${AC_FILES})
|
|
LIST(FIND SRCAC_FILES "${AC_FILE}" IS_SRC)
|
|
LIST(FIND ACC_FILES "${AC_FILE}c" HAS_ACC)
|
|
IF(IS_SRC EQUAL -1 AND HAS_ACC EQUAL -1)
|
|
LIST(APPEND AC3D_FILES ${AC_FILE})
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
SET(AC3D_FILES ${AC3D_FILES} ${ACC_FILES})
|
|
|
|
FILE(GLOB OSGT_FILES *.osg)
|
|
FILE(GLOB PNG_FILES *.png)
|
|
FILE(GLOB DDS_FILES *.dds)
|
|
FILE(GLOB JPG_FILES *.jpg)
|
|
FILE(GLOB RGB_FILES *.rgb)
|
|
FILE(GLOB WAV_FILES *.wav)
|
|
|
|
SET(SDIC_FILES ${SDIC_FILES} ${AC3D_FILES} ${OSGT_FILE} ${XML_FILES}
|
|
${RGB_FILES} ${PNG_FILES} ${DDS_FILES} ${JPG_FILES} ${WAV_FILES})
|
|
|
|
SD_INSTALL_FILES(DATA cars/models/${CARNAME} FILES ${SDIC_FILES})
|
|
SET_PROPERTY(GLOBAL APPEND PROPERTY SD_CAR_LIST "${CARNAME}")
|
|
|
|
ENDMACRO(SD_INSTALL_CAR CARNAME)
|
|
|
|
MACRO(SD_INSTALL_TRACK TRACKNAME CATEGORY)
|
|
|
|
SET(SDIT_FILES ${TRACKNAME}.xml ${ARGN})
|
|
|
|
# Among AC3D files, keep any .acc one, but exclude *-src.ac
|
|
# and *.ac when a .acc with same name exists.
|
|
FILE(GLOB ACC_FILES *.acc)
|
|
FILE(GLOB OSGT_FILES *.osg)
|
|
FILE(GLOB SRCAC_FILES *-src.ac)
|
|
FILE(GLOB AC_FILES *.ac)
|
|
FOREACH(AC_FILE ${AC_FILES})
|
|
LIST(FIND SRCAC_FILES "${AC_FILE}" IS_SRC)
|
|
LIST(FIND ACC_FILES "${AC_FILE}c" HAS_ACC)
|
|
IF(IS_SRC EQUAL -1 AND HAS_ACC EQUAL -1)
|
|
LIST(APPEND AC3D_FILES ${AC_FILE})
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
SET(AC3D_FILES ${AC3D_FILES} ${ACC_FILES})
|
|
|
|
FILE(GLOB PNG_FILES *.png)
|
|
FILE(GLOB DDS_FILES *.dds)
|
|
FILE(GLOB JPG_FILES *.jpg)
|
|
FILE(GLOB RGB_FILES *.rgb)
|
|
|
|
SET(SDIT_FILES ${SDIT_FILES} ${AC3D_FILES} ${OSGT_FILES}
|
|
${RGB_FILES} ${PNG_FILES} ${JPG_FILES} ${DDS_FILES})
|
|
|
|
SD_INSTALL_FILES(DATA tracks/${CATEGORY}/${TRACKNAME} FILES ${SDIT_FILES})
|
|
SET_PROPERTY(GLOBAL APPEND PROPERTY SD_TRACK_LIST "${CATEGORY}/${TRACKNAME}")
|
|
|
|
ENDMACRO(SD_INSTALL_TRACK TRACKNAME CATEGORY)
|