diff options
Diffstat (limited to 'libs/assimp/cmake-modules')
| -rw-r--r-- | libs/assimp/cmake-modules/Coveralls.cmake | 126 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/CoverallsClear.cmake | 31 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/CoverallsGenerateGcov.cmake | 482 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/DebSourcePPA.cmake | 347 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/FindDevIL.cmake | 72 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/FindDirectX.cmake | 101 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/FindPkgMacros.cmake | 146 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/FindRT.cmake | 20 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/FindZLIB.cmake | 48 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/Findassimp.cmake | 85 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/HunterGate.cmake | 539 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/MinGW_x86_64.cmake | 16 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/PrecompiledHeader.cmake | 25 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/assimp-hunter-config.cmake.in | 19 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/assimp-plain-config.cmake.in | 9 | ||||
| -rw-r--r-- | libs/assimp/cmake-modules/cmake_uninstall.cmake.in | 17 | 
16 files changed, 2083 insertions, 0 deletions
diff --git a/libs/assimp/cmake-modules/Coveralls.cmake b/libs/assimp/cmake-modules/Coveralls.cmake new file mode 100644 index 0000000..5343f15 --- /dev/null +++ b/libs/assimp/cmake-modules/Coveralls.cmake @@ -0,0 +1,126 @@ +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# Copyright (C) 2014 Joakim Söderberg <joakim.soderberg@gmail.com> +# + +set(_CMAKE_SCRIPT_PATH ${CMAKE_CURRENT_LIST_DIR}) # must be outside coveralls_setup() to get correct path + +# +# Param _COVERAGE_SRCS	A list of source files that coverage should be collected for. +# Param _COVERALLS_UPLOAD Upload the result to coveralls? +# + +function(coveralls_setup _COVERAGE_SRCS _COVERALLS_UPLOAD) + +	if (ARGC GREATER 2) +		set(_CMAKE_SCRIPT_PATH ${ARGN}) +		message(STATUS "Coveralls: Using alternate CMake script dir: ${_CMAKE_SCRIPT_PATH}") +	endif() + +	if (NOT EXISTS "${_CMAKE_SCRIPT_PATH}/CoverallsClear.cmake") +		message(FATAL_ERROR "Coveralls: Missing ${_CMAKE_SCRIPT_PATH}/CoverallsClear.cmake") +	endif() + +	if (NOT EXISTS "${_CMAKE_SCRIPT_PATH}/CoverallsGenerateGcov.cmake") +		message(FATAL_ERROR "Coveralls: Missing ${_CMAKE_SCRIPT_PATH}/CoverallsGenerateGcov.cmake") +	endif() + +	# When passing a CMake list to an external process, the list +	# will be converted from the format "1;2;3" to "1 2 3". +	# This means the script we're calling won't see it as a list +	# of sources, but rather just one long path. We remedy this +	# by replacing ";" with "*" and then reversing that in the script +	# that we're calling. +	# http://cmake.3232098.n2.nabble.com/Passing-a-CMake-list-quot-as-is-quot-to-a-custom-target-td6505681.html +	set(COVERAGE_SRCS_TMP ${_COVERAGE_SRCS}) +	set(COVERAGE_SRCS "") +	foreach (COVERAGE_SRC ${COVERAGE_SRCS_TMP}) +		set(COVERAGE_SRCS "${COVERAGE_SRCS}*${COVERAGE_SRC}") +	endforeach() + +	#message("Coverage sources: ${COVERAGE_SRCS}") +	set(COVERALLS_FILE ${PROJECT_BINARY_DIR}/coveralls.json) + +	add_custom_target(coveralls_generate + +		# Zero the coverage counters. +		COMMAND ${CMAKE_COMMAND} -DPROJECT_BINARY_DIR="${PROJECT_BINARY_DIR}" -P "${_CMAKE_SCRIPT_PATH}/CoverallsClear.cmake" + +		# Run regress tests. +		COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure + +		# Generate Gcov and translate it into coveralls JSON. +		# We do this by executing an external CMake script. +		# (We don't want this to run at CMake generation time, but after compilation and everything has run). +		COMMAND ${CMAKE_COMMAND} +				-DCOVERAGE_SRCS="${COVERAGE_SRCS}" # TODO: This is passed like: "a b c", not "a;b;c" +				-DCOVERALLS_OUTPUT_FILE="${COVERALLS_FILE}" +				-DCOV_PATH="${PROJECT_BINARY_DIR}" +				-DPROJECT_ROOT="${PROJECT_SOURCE_DIR}" +				-P "${_CMAKE_SCRIPT_PATH}/CoverallsGenerateGcov.cmake" + +		WORKING_DIRECTORY ${PROJECT_BINARY_DIR} +		COMMENT "Generating coveralls output..." +		) + +	if (_COVERALLS_UPLOAD) +		message("COVERALLS UPLOAD: ON") + +		find_program(CURL_EXECUTABLE curl) + +		if (NOT CURL_EXECUTABLE) +			message(FATAL_ERROR "Coveralls: curl not found! Aborting") +		endif() + +		add_custom_target(coveralls_upload +			# Upload the JSON to coveralls. +			COMMAND ${CURL_EXECUTABLE} +					-S -F json_file=@${COVERALLS_FILE} +					https://coveralls.io/api/v1/jobs + +			DEPENDS coveralls_generate + +			WORKING_DIRECTORY ${PROJECT_BINARY_DIR} +			COMMENT "Uploading coveralls output...") + +		add_custom_target(coveralls DEPENDS coveralls_upload) +	else() +		message("COVERALLS UPLOAD: OFF") +		add_custom_target(coveralls DEPENDS coveralls_generate) +	endif() + +endfunction() + +macro(coveralls_turn_on_coverage) +	if(NOT (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) +		AND (NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")) +		message(FATAL_ERROR "Coveralls: Compiler ${CMAKE_C_COMPILER_ID} is not GNU gcc! Aborting... You can set this on the command line using CC=/usr/bin/gcc CXX=/usr/bin/g++ cmake <options> ..") +	endif() + +	if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") +		message(FATAL_ERROR "Coveralls: Code coverage results with an optimised (non-Debug) build may be misleading! Add -DCMAKE_BUILD_TYPE=Debug") +	endif() + +	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") +	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") +endmacro() + diff --git a/libs/assimp/cmake-modules/CoverallsClear.cmake b/libs/assimp/cmake-modules/CoverallsClear.cmake new file mode 100644 index 0000000..a9ad487 --- /dev/null +++ b/libs/assimp/cmake-modules/CoverallsClear.cmake @@ -0,0 +1,31 @@ +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# Copyright (C) 2014 Joakim Söderberg <joakim.soderberg@gmail.com> +# + +# do not follow symlinks in file(GLOB_RECURSE ...) +cmake_policy(SET CMP0009 NEW) + +file(GLOB_RECURSE GCDA_FILES "${PROJECT_BINARY_DIR}/*.gcda") +if(NOT GCDA_FILES STREQUAL "") +  file(REMOVE ${GCDA_FILES}) +endif()
\ No newline at end of file diff --git a/libs/assimp/cmake-modules/CoverallsGenerateGcov.cmake b/libs/assimp/cmake-modules/CoverallsGenerateGcov.cmake new file mode 100644 index 0000000..1047371 --- /dev/null +++ b/libs/assimp/cmake-modules/CoverallsGenerateGcov.cmake @@ -0,0 +1,482 @@ +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# Copyright (C) 2014 Joakim Söderberg <joakim.soderberg@gmail.com> +# +# This is intended to be run by a custom target in a CMake project like this. +# 0. Compile program with coverage support. +# 1. Clear coverage data. (Recursively delete *.gcda in build dir) +# 2. Run the unit tests. +# 3. Run this script specifying which source files the coverage should be performed on. +# +# This script will then use gcov to generate .gcov files in the directory specified +# via the COV_PATH var. This should probably be the same as your cmake build dir. +# +# It then parses the .gcov files to convert them into the Coveralls JSON format: +# https://coveralls.io/docs/api +# +# Example for running as standalone CMake script from the command line: +# (Note it is important the -P is at the end...) +# $ cmake -DCOV_PATH=$(pwd) +#         -DCOVERAGE_SRCS="catcierge_rfid.c;catcierge_timer.c" +#         -P ../cmake/CoverallsGcovUpload.cmake +# +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + + +# +# Make sure we have the needed arguments. +# +if (NOT COVERALLS_OUTPUT_FILE) +	message(FATAL_ERROR "Coveralls: No coveralls output file specified. Please set COVERALLS_OUTPUT_FILE") +endif() + +if (NOT COV_PATH) +	message(FATAL_ERROR "Coveralls: Missing coverage directory path where gcov files will be generated. Please set COV_PATH") +endif() + +if (NOT COVERAGE_SRCS) +	message(FATAL_ERROR "Coveralls: Missing the list of source files that we should get the coverage data for COVERAGE_SRCS") +endif() + +if (NOT PROJECT_ROOT) +	message(FATAL_ERROR "Coveralls: Missing PROJECT_ROOT.") +endif() + +# Since it's not possible to pass a CMake list properly in the +# "1;2;3" format to an external process, we have replaced the +# ";" with "*", so reverse that here so we get it back into the +# CMake list format. +string(REGEX REPLACE "\\*" ";" COVERAGE_SRCS ${COVERAGE_SRCS}) + +if (NOT DEFINED ENV{GCOV}) +  find_program(GCOV_EXECUTABLE gcov) +else() +  find_program(GCOV_EXECUTABLE $ENV{GCOV}) +endif() + +# convert all paths in COVERAGE_SRCS to absolute paths +set(COVERAGE_SRCS_TMP "") +foreach (COVERAGE_SRC ${COVERAGE_SRCS}) +	if (NOT "${COVERAGE_SRC}" MATCHES "^/") +		set(COVERAGE_SRC ${PROJECT_ROOT}/${COVERAGE_SRC}) +	endif() +	list(APPEND COVERAGE_SRCS_TMP ${COVERAGE_SRC}) +endforeach() +set(COVERAGE_SRCS ${COVERAGE_SRCS_TMP}) +unset(COVERAGE_SRCS_TMP) + +if (NOT GCOV_EXECUTABLE) +	message(FATAL_ERROR "gcov not found! Aborting...") +endif() + +find_package(Git) + +set(JSON_REPO_TEMPLATE +  "{ +    \"head\": { +      \"id\": \"\@GIT_COMMIT_HASH\@\", +      \"author_name\": \"\@GIT_AUTHOR_NAME\@\", +      \"author_email\": \"\@GIT_AUTHOR_EMAIL\@\", +      \"committer_name\": \"\@GIT_COMMITTER_NAME\@\", +      \"committer_email\": \"\@GIT_COMMITTER_EMAIL\@\", +      \"message\": \"\@GIT_COMMIT_MESSAGE\@\" +    }, +    \"branch\": \"@GIT_BRANCH@\", +    \"remotes\": [] +  }" +) + +# TODO: Fill in git remote data +if (GIT_FOUND) +	# Branch. +	execute_process( +		COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD +		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +		OUTPUT_VARIABLE GIT_BRANCH +		OUTPUT_STRIP_TRAILING_WHITESPACE +	) + +	macro (git_log_format FORMAT_CHARS VAR_NAME) +		execute_process( +			COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%${FORMAT_CHARS} +			WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +			OUTPUT_VARIABLE ${VAR_NAME} +			OUTPUT_STRIP_TRAILING_WHITESPACE +		) +	endmacro() + +	git_log_format(an GIT_AUTHOR_NAME) +	git_log_format(ae GIT_AUTHOR_EMAIL) +	git_log_format(cn GIT_COMMITTER_NAME) +	git_log_format(ce GIT_COMMITTER_EMAIL) +	git_log_format(B GIT_COMMIT_MESSAGE) +	git_log_format(H GIT_COMMIT_HASH) + +	if(GIT_COMMIT_MESSAGE) +		string(REPLACE "\n" "\\n" GIT_COMMIT_MESSAGE ${GIT_COMMIT_MESSAGE}) +	endif() + +	message("Git exe: ${GIT_EXECUTABLE}") +	message("Git branch: ${GIT_BRANCH}") +	message("Git author: ${GIT_AUTHOR_NAME}") +	message("Git e-mail: ${GIT_AUTHOR_EMAIL}") +	message("Git commiter name: ${GIT_COMMITTER_NAME}") +	message("Git commiter e-mail: ${GIT_COMMITTER_EMAIL}") +	message("Git commit hash: ${GIT_COMMIT_HASH}") +	message("Git commit message: ${GIT_COMMIT_MESSAGE}") + +	string(CONFIGURE ${JSON_REPO_TEMPLATE} JSON_REPO_DATA) +else() +	set(JSON_REPO_DATA "{}") +endif() + +############################# Macros ######################################### + +# +# This macro converts from the full path format gcov outputs: +# +#    /path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov +# +# to the original source file path the .gcov is for: +# +#   /path/to/project/root/subdir/the_file.c +# +macro(get_source_path_from_gcov_filename _SRC_FILENAME _GCOV_FILENAME) + +	# /path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov +	# -> +	# #path#to#project#root#subdir#the_file.c.gcov +	get_filename_component(_GCOV_FILENAME_WEXT ${_GCOV_FILENAME} NAME) + +	# #path#to#project#root#subdir#the_file.c.gcov -> /path/to/project/root/subdir/the_file.c +	string(REGEX REPLACE "\\.gcov$" "" SRC_FILENAME_TMP ${_GCOV_FILENAME_WEXT}) +	string(REGEX REPLACE "\#" "/" SRC_FILENAME_TMP ${SRC_FILENAME_TMP}) +	set(${_SRC_FILENAME} "${SRC_FILENAME_TMP}") +endmacro() + +############################################################################## + +# Get the coverage data. +file(GLOB_RECURSE GCDA_FILES "${COV_PATH}/*.gcda") +message("GCDA files:") + +# Get a list of all the object directories needed by gcov +# (The directories the .gcda files and .o files are found in) +# and run gcov on those. +foreach(GCDA ${GCDA_FILES}) +	message("Process: ${GCDA}") +	message("------------------------------------------------------------------------------") +	get_filename_component(GCDA_DIR ${GCDA} PATH) + +	# +	# The -p below refers to "Preserve path components", +	# This means that the generated gcov filename of a source file will +	# keep the original files entire filepath, but / is replaced with #. +	# Example: +	# +	# /path/to/project/root/build/CMakeFiles/the_file.dir/subdir/the_file.c.gcda +	# ------------------------------------------------------------------------------ +	# File '/path/to/project/root/subdir/the_file.c' +	# Lines executed:68.34% of 199 +	# /path/to/project/root/subdir/the_file.c:creating '#path#to#project#root#subdir#the_file.c.gcov' +	# +	# If -p is not specified then the file is named only "the_file.c.gcov" +	# +	execute_process( +		COMMAND ${GCOV_EXECUTABLE} -p -o ${GCDA_DIR} ${GCDA} +		WORKING_DIRECTORY ${COV_PATH} +	) +endforeach() + +# TODO: Make these be absolute path +file(GLOB ALL_GCOV_FILES ${COV_PATH}/*.gcov) + +# Get only the filenames to use for filtering. +#set(COVERAGE_SRCS_NAMES "") +#foreach (COVSRC ${COVERAGE_SRCS}) +#	get_filename_component(COVSRC_NAME ${COVSRC} NAME) +#	message("${COVSRC} -> ${COVSRC_NAME}") +#	list(APPEND COVERAGE_SRCS_NAMES "${COVSRC_NAME}") +#endforeach() + +# +# Filter out all but the gcov files we want. +# +# We do this by comparing the list of COVERAGE_SRCS filepaths that the +# user wants the coverage data for with the paths of the generated .gcov files, +# so that we only keep the relevant gcov files. +# +# Example: +# COVERAGE_SRCS = +#				/path/to/project/root/subdir/the_file.c +# +# ALL_GCOV_FILES = +#				/path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov +#				/path/to/project/root/build/#path#to#project#root#subdir#other_file.c.gcov +# +# Result should be: +# GCOV_FILES = +#				/path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov +# +set(GCOV_FILES "") +#message("Look in coverage sources: ${COVERAGE_SRCS}") +message("\nFilter out unwanted GCOV files:") +message("===============================") + +set(COVERAGE_SRCS_REMAINING ${COVERAGE_SRCS}) + +foreach (GCOV_FILE ${ALL_GCOV_FILES}) + +	# +	# /path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov +	# -> +	# /path/to/project/root/subdir/the_file.c +	get_source_path_from_gcov_filename(GCOV_SRC_PATH ${GCOV_FILE}) +	file(RELATIVE_PATH GCOV_SRC_REL_PATH "${PROJECT_ROOT}" "${GCOV_SRC_PATH}") + +	# Is this in the list of source files? +	# TODO: We want to match against relative path filenames from the source file root... +	list(FIND COVERAGE_SRCS ${GCOV_SRC_PATH} WAS_FOUND) + +	if (NOT WAS_FOUND EQUAL -1) +		message("YES: ${GCOV_FILE}") +		list(APPEND GCOV_FILES ${GCOV_FILE}) + +		# We remove it from the list, so we don't bother searching for it again. +		# Also files left in COVERAGE_SRCS_REMAINING after this loop ends should +		# have coverage data generated from them (no lines are covered). +		list(REMOVE_ITEM COVERAGE_SRCS_REMAINING ${GCOV_SRC_PATH}) +	else() +		message("NO:  ${GCOV_FILE}") +	endif() +endforeach() + +# TODO: Enable setting these +set(JSON_SERVICE_NAME "travis-ci") +set(JSON_SERVICE_JOB_ID $ENV{TRAVIS_JOB_ID}) +set(JSON_REPO_TOKEN $ENV{COVERALLS_REPO_TOKEN}) + +set(JSON_TEMPLATE +"{ +  \"repo_token\": \"\@JSON_REPO_TOKEN\@\", +  \"service_name\": \"\@JSON_SERVICE_NAME\@\", +  \"service_job_id\": \"\@JSON_SERVICE_JOB_ID\@\", +  \"source_files\": \@JSON_GCOV_FILES\@, +  \"git\": \@JSON_REPO_DATA\@ +}" +) + +set(SRC_FILE_TEMPLATE +"{ +      \"name\": \"\@GCOV_SRC_REL_PATH\@\", +      \"source_digest\": \"\@GCOV_CONTENTS_MD5\@\", +      \"coverage\": \@GCOV_FILE_COVERAGE\@ +  }" +) + +message("\nGenerate JSON for files:") +message("=========================") + +set(JSON_GCOV_FILES "[") + +# Read the GCOV files line by line and get the coverage data. +foreach (GCOV_FILE ${GCOV_FILES}) + +	get_source_path_from_gcov_filename(GCOV_SRC_PATH ${GCOV_FILE}) +	file(RELATIVE_PATH GCOV_SRC_REL_PATH "${PROJECT_ROOT}" "${GCOV_SRC_PATH}") + +	# The new coveralls API doesn't need the entire source (Yay!) +	# However, still keeping that part for now. Will cleanup in the future. +	file(MD5 "${GCOV_SRC_PATH}" GCOV_CONTENTS_MD5) +	message("MD5: ${GCOV_SRC_PATH} = ${GCOV_CONTENTS_MD5}") + +	# Loads the gcov file as a list of lines. +	# (We first open the file and replace all occurrences of [] with _ +	#  because CMake will fail to parse a line containing unmatched brackets... +	#  also the \ to escaped \n in macros screws up things.) +	# https://public.kitware.com/Bug/view.php?id=15369 +	file(READ ${GCOV_FILE} GCOV_CONTENTS) +	string(REPLACE "[" "_" GCOV_CONTENTS "${GCOV_CONTENTS}") +	string(REPLACE "]" "_" GCOV_CONTENTS "${GCOV_CONTENTS}") +	string(REPLACE "\\" "_" GCOV_CONTENTS "${GCOV_CONTENTS}") + +	# Remove file contents to avoid encoding issues (cmake 2.8 has no ENCODING option) +	string(REGEX REPLACE "([^:]*):([^:]*):([^\n]*)\n" "\\1:\\2: \n" GCOV_CONTENTS "${GCOV_CONTENTS}") +	file(WRITE ${GCOV_FILE}_tmp "${GCOV_CONTENTS}") + +	file(STRINGS ${GCOV_FILE}_tmp GCOV_LINES) +	list(LENGTH GCOV_LINES LINE_COUNT) + +	# Instead of trying to parse the source from the +	# gcov file, simply read the file contents from the source file. +	# (Parsing it from the gcov is hard because C-code uses ; in many places +	#  which also happens to be the same as the CMake list delimiter). +	file(READ ${GCOV_SRC_PATH} GCOV_FILE_SOURCE) + +	string(REPLACE "\\" "\\\\" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") +	string(REGEX REPLACE "\"" "\\\\\"" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") +	string(REPLACE "\t" "\\\\t" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") +	string(REPLACE "\r" "\\\\r" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") +	string(REPLACE "\n" "\\\\n" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") +	# According to http://json.org/ these should be escaped as well. +	# Don't know how to do that in CMake however... +	#string(REPLACE "\b" "\\\\b" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") +	#string(REPLACE "\f" "\\\\f" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") +	#string(REGEX REPLACE "\u([a-fA-F0-9]{4})" "\\\\u\\1" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") + +	# We want a json array of coverage data as a single string +	# start building them from the contents of the .gcov +	set(GCOV_FILE_COVERAGE "[") + +	set(GCOV_LINE_COUNT 1) # Line number for the .gcov. +	set(DO_SKIP 0) +	foreach (GCOV_LINE ${GCOV_LINES}) +		#message("${GCOV_LINE}") +		# Example of what we're parsing: +		# Hitcount  |Line | Source +		# "        8:   26:        if (!allowed || (strlen(allowed) == 0))" +		string(REGEX REPLACE +			"^([^:]*):([^:]*):(.*)$" +			"\\1;\\2;\\3" +			RES +			"${GCOV_LINE}") + +		# Check if we should exclude lines using the Lcov syntax. +		string(REGEX MATCH "LCOV_EXCL_START" START_SKIP "${GCOV_LINE}") +		string(REGEX MATCH "LCOV_EXCL_END" END_SKIP "${GCOV_LINE}") +		string(REGEX MATCH "LCOV_EXCL_LINE" LINE_SKIP "${GCOV_LINE}") + +		set(RESET_SKIP 0) +		if (LINE_SKIP AND NOT DO_SKIP) +			set(DO_SKIP 1) +			set(RESET_SKIP 1) +		endif() + +		if (START_SKIP) +			set(DO_SKIP 1) +			message("${GCOV_LINE_COUNT}: Start skip") +		endif() + +		if (END_SKIP) +			set(DO_SKIP 0) +		endif() + +		list(LENGTH RES RES_COUNT) + +		if (RES_COUNT GREATER 2) +			list(GET RES 0 HITCOUNT) +			list(GET RES 1 LINE) +			list(GET RES 2 SOURCE) + +			string(STRIP ${HITCOUNT} HITCOUNT) +			string(STRIP ${LINE} LINE) + +			# Lines with 0 line numbers are metadata and can be ignored. +			if (NOT ${LINE} EQUAL 0) + +				if (DO_SKIP) +					set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}null, ") +				else() +					# Translate the hitcount into valid JSON values. +					if (${HITCOUNT} STREQUAL "#####" OR ${HITCOUNT} STREQUAL "=====") +						set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}0, ") +					elseif (${HITCOUNT} STREQUAL "-") +						set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}null, ") +					else() +						set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}${HITCOUNT}, ") +					endif() +				endif() +			endif() +		else() +			message(WARNING "Failed to properly parse line (RES_COUNT = ${RES_COUNT}) ${GCOV_FILE}:${GCOV_LINE_COUNT}\n-->${GCOV_LINE}") +		endif() + +		if (RESET_SKIP) +			set(DO_SKIP 0) +		endif() +		math(EXPR GCOV_LINE_COUNT "${GCOV_LINE_COUNT}+1") +	endforeach() + +	message("${GCOV_LINE_COUNT} of ${LINE_COUNT} lines read!") + +	# Advanced way of removing the trailing comma in the JSON array. +	# "[1, 2, 3, " -> "[1, 2, 3" +	string(REGEX REPLACE ",[ ]*$" "" GCOV_FILE_COVERAGE ${GCOV_FILE_COVERAGE}) + +	# Append the trailing ] to complete the JSON array. +	set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}]") + +	# Generate the final JSON for this file. +	message("Generate JSON for file: ${GCOV_SRC_REL_PATH}...") +	string(CONFIGURE ${SRC_FILE_TEMPLATE} FILE_JSON) + +	set(JSON_GCOV_FILES "${JSON_GCOV_FILES}${FILE_JSON}, ") +endforeach() + +# Loop through all files we couldn't find any coverage for +# as well, and generate JSON for those as well with 0% coverage. +foreach(NOT_COVERED_SRC ${COVERAGE_SRCS_REMAINING}) + +	# Set variables for json replacement +	set(GCOV_SRC_PATH ${NOT_COVERED_SRC}) +	file(MD5 "${GCOV_SRC_PATH}" GCOV_CONTENTS_MD5) +	file(RELATIVE_PATH GCOV_SRC_REL_PATH "${PROJECT_ROOT}" "${GCOV_SRC_PATH}") + +	# Loads the source file as a list of lines. +	file(STRINGS ${NOT_COVERED_SRC} SRC_LINES) + +	set(GCOV_FILE_COVERAGE "[") +	set(GCOV_FILE_SOURCE "") + +	foreach (SOURCE ${SRC_LINES}) +		set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}null, ") + +		string(REPLACE "\\" "\\\\" SOURCE "${SOURCE}") +		string(REGEX REPLACE "\"" "\\\\\"" SOURCE "${SOURCE}") +		string(REPLACE "\t" "\\\\t" SOURCE "${SOURCE}") +		string(REPLACE "\r" "\\\\r" SOURCE "${SOURCE}") +		set(GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}${SOURCE}\\n") +	endforeach() + +	# Remove trailing comma, and complete JSON array with ] +	string(REGEX REPLACE ",[ ]*$" "" GCOV_FILE_COVERAGE ${GCOV_FILE_COVERAGE}) +	set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}]") + +	# Generate the final JSON for this file. +	message("Generate JSON for non-gcov file: ${NOT_COVERED_SRC}...") +	string(CONFIGURE ${SRC_FILE_TEMPLATE} FILE_JSON) +	set(JSON_GCOV_FILES "${JSON_GCOV_FILES}${FILE_JSON}, ") +endforeach() + +# Get rid of trailing comma. +string(REGEX REPLACE ",[ ]*$" "" JSON_GCOV_FILES ${JSON_GCOV_FILES}) +set(JSON_GCOV_FILES "${JSON_GCOV_FILES}]") + +# Generate the final complete JSON! +message("Generate final JSON...") +string(CONFIGURE ${JSON_TEMPLATE} JSON) + +file(WRITE "${COVERALLS_OUTPUT_FILE}" "${JSON}") +message("###########################################################################") +message("Generated coveralls JSON containing coverage data:") +message("${COVERALLS_OUTPUT_FILE}") +message("###########################################################################") diff --git a/libs/assimp/cmake-modules/DebSourcePPA.cmake b/libs/assimp/cmake-modules/DebSourcePPA.cmake new file mode 100644 index 0000000..d8a786f --- /dev/null +++ b/libs/assimp/cmake-modules/DebSourcePPA.cmake @@ -0,0 +1,347 @@ +## Debian Source Package Generator +# +# Copyright (c) 2010 Daniel Pfeifer <daniel@pfeifer-mail.de> +# Many modifications by Rosen Diankov <rosen.diankov@gmail.com> +# +# Creates source debian files and manages library dependencies +# +# Features: +#  +# - Automatically generates symbols and run-time dependencies from the build dependencies +# - Custom copy of source directory via CPACK_DEBIAN_PACKAGE_SOURCE_COPY +# - Simultaneous output of multiple debian source packages for each distribution +# - Can specificy distribution-specific dependencies by suffixing DEPENDS with _${DISTRO_NAME}, for example: CPACK_DEBIAN_PACKAGE_DEPENDS_LUCID, CPACK_COMPONENT_MYCOMP0_DEPENDS_LUCID +# +# Usage: +# +# set(CPACK_DEBIAN_BUILD_DEPENDS debhelper cmake) +# set(CPACK_DEBIAN_PACKAGE_PRIORITY optional) +# set(CPACK_DEBIAN_PACKAGE_SECTION devel) +# set(CPACK_DEBIAN_CMAKE_OPTIONS "-DMYOPTION=myvalue") +# set(CPACK_DEBIAN_PACKAGE_DEPENDS mycomp0 mycomp1 some_ubuntu_package) +# set(CPACK_DEBIAN_PACKAGE_DEPENDS_UBUNTU_LUCID mycomp0 mycomp1 lucid_specific_package) +# set(CPACK_DEBIAN_PACKAGE_NAME mypackage) +# set(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES unnecessary_file unnecessary_dir/file0) +# set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force) # if using subversion +# set(CPACK_DEBIAN_DISTRIBUTION_NAME ubuntu) +# set(CPACK_DEBIAN_DISTRIBUTION_RELEASES karmic lucid maverick natty) +# set(CPACK_DEBIAN_CHANGELOG "  * Extra change log lines") +# set(CPACK_DEBIAN_PACKAGE_SUGGESTS "ipython") +# set(CPACK_COMPONENT_X_RECOMMENDS "recommended-package") +## + +find_program(DEBUILD_EXECUTABLE debuild) +find_program(DPUT_EXECUTABLE dput) + +if(NOT DEBUILD_EXECUTABLE OR NOT DPUT_EXECUTABLE) +  return() +endif(NOT DEBUILD_EXECUTABLE OR NOT DPUT_EXECUTABLE) + +# DEBIAN/control +# debian policy enforce lower case for package name +# Package: (mandatory) +IF(NOT CPACK_DEBIAN_PACKAGE_NAME) +  STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME) +ENDIF(NOT CPACK_DEBIAN_PACKAGE_NAME) + +# Section: (recommended) +IF(NOT CPACK_DEBIAN_PACKAGE_SECTION) +  SET(CPACK_DEBIAN_PACKAGE_SECTION "devel") +ENDIF(NOT CPACK_DEBIAN_PACKAGE_SECTION) + +# Priority: (recommended) +IF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY) +  SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") +ENDIF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY) + +file(STRINGS ${CPACK_PACKAGE_DESCRIPTION_FILE} DESC_LINES) +foreach(LINE ${DESC_LINES}) +  set(DEB_LONG_DESCRIPTION "${DEB_LONG_DESCRIPTION} ${LINE}\n") +endforeach(LINE ${DESC_LINES}) + +file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/Debian") +file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/Debian") +set(DEBIAN_SOURCE_ORIG_DIR "${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") + +if( CPACK_DEBIAN_PACKAGE_SOURCE_COPY ) +  execute_process(COMMAND ${CPACK_DEBIAN_PACKAGE_SOURCE_COPY} "${CMAKE_SOURCE_DIR}" "${DEBIAN_SOURCE_ORIG_DIR}.orig") +else() +  execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR} "${DEBIAN_SOURCE_ORIG_DIR}.orig") +  execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${DEBIAN_SOURCE_ORIG_DIR}.orig/.git") +  execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${DEBIAN_SOURCE_ORIG_DIR}.orig/.svn") +endif() + +# remove unnecessary folders +foreach(REMOVE_DIR ${CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES}) +  file(REMOVE_RECURSE ${DEBIAN_SOURCE_ORIG_DIR}.orig/${REMOVE_DIR}) +endforeach() + +# create the original source tar +execute_process(COMMAND ${CMAKE_COMMAND} -E tar czf "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz" "${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.orig" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Debian) + +set(DEB_SOURCE_CHANGES) +foreach(RELEASE ${CPACK_DEBIAN_DISTRIBUTION_RELEASES}) +  set(DEBIAN_SOURCE_DIR "${DEBIAN_SOURCE_ORIG_DIR}-${CPACK_DEBIAN_DISTRIBUTION_NAME}1~${RELEASE}1") +  set(RELEASE_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_DISTRIBUTION_NAME}1~${RELEASE}1") +  string(TOUPPER ${RELEASE} RELEASE_UPPER) +  string(TOUPPER ${CPACK_DEBIAN_DISTRIBUTION_NAME} DISTRIBUTION_NAME_UPPER) +  file(MAKE_DIRECTORY ${DEBIAN_SOURCE_DIR}/debian) +  ############################################################################## +  # debian/control +  set(DEBIAN_CONTROL ${DEBIAN_SOURCE_DIR}/debian/control) +  file(WRITE ${DEBIAN_CONTROL} +    "Source: ${CPACK_DEBIAN_PACKAGE_NAME}\n" +    "Section: ${CPACK_DEBIAN_PACKAGE_SECTION}\n" +    "Priority: ${CPACK_DEBIAN_PACKAGE_PRIORITY}\n" +    "DM-Upload-Allowed: yes\n" +    "Maintainer: ${CPACK_PACKAGE_CONTACT}\n" +    "Build-Depends: " +    ) + +  if( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +    foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +      file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +    endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +  else( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +    if( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) +      foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) +        file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +      endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) +    else( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) +      foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS}) +        file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +      endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS}) +    endif( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) +  endif( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + +     +  file(APPEND ${DEBIAN_CONTROL} "\n" +    "Standards-Version: 3.8.4\n" +    "Homepage: ${CPACK_PACKAGE_VENDOR}\n" +    "\n" +    "Package: ${CPACK_DEBIAN_PACKAGE_NAME}\n" +    "Architecture: any\n" +    "Depends: " +    ) + +  if( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +    foreach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +      file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +    endforeach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +  else( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +    if( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) +      foreach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) +        file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +      endforeach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) +    else( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) +      foreach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS}) +        file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +      endforeach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS}) +    endif( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) +  endif( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + +  file(APPEND ${DEBIAN_CONTROL} "\nRecommends: ") +  if( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +    foreach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +      file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +    endforeach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +  else( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +    if( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) +      foreach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) +        file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +      endforeach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) +    else( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) +      foreach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS}) +        file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +      endforeach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS}) +    endif( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) +  endif( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + +  file(APPEND ${DEBIAN_CONTROL} "\nSuggests: ") +  if( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +    foreach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +      file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +    endforeach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +  else( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +    if( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) +      foreach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) +        file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +      endforeach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) +    else( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) +      foreach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS}) +        file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") +      endforeach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS}) +    endif( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) +  endif( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +   +  file(APPEND ${DEBIAN_CONTROL} "\n" +    "Description: ${CPACK_PACKAGE_DISPLAY_NAME} ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}\n" +    "${DEB_LONG_DESCRIPTION}" +    ) + +  foreach(COMPONENT ${CPACK_COMPONENTS_ALL}) +    string(TOUPPER ${COMPONENT} UPPER_COMPONENT) +    set(DEPENDS "\${shlibs:Depends}") +    if( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +      foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +        set(DEPENDS "${DEPENDS}, ${DEP}") +      endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +    else( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +      if( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) +        foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) +          set(DEPENDS "${DEPENDS}, ${DEP}") +        endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) +      else( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) +        foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS}) +          set(DEPENDS "${DEPENDS}, ${DEP}") +        endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS}) +      endif( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) +    endif( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + +    set(RECOMMENDS) +    if( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +      foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +        set(RECOMMENDS "${RECOMMENDS} ${DEP}, ") +      endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +    else( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +      if( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) +        foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) +          set(RECOMMENDS "${RECOMMENDS} ${DEP}, ") +        endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) +      else( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) +        foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS}) +          set(RECOMMENDS "${RECOMMENDS} ${DEP}, ") +        endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS}) +      endif( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) +    endif( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + +    set(SUGGESTS) +    if( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +      foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +        set(SUGGESTS "${SUGGESTS} ${DEP}, ") +      endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) +    else( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) +      if( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) +        foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) +          set(SUGGESTS "${SUGGESTS} ${DEP}, ") +        endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) +      else( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) +        foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS}) +          set(SUGGESTS "${SUGGESTS} ${DEP}, ") +        endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS}) +      endif( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) +    endif( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + +    file(APPEND ${DEBIAN_CONTROL} "\n" +      "Package: ${COMPONENT}\n" +      "Architecture: any\n" +      "Depends: ${DEPENDS}\n" +      "Recommends: ${RECOMMENDS}\n" +      "Suggests: ${SUGGESTS}\n" +      "Description: ${CPACK_PACKAGE_DISPLAY_NAME} ${CPACK_COMPONENT_${UPPER_COMPONENT}_DISPLAY_NAME}\n" +      "${DEB_LONG_DESCRIPTION}" +      " .\n" +      " ${CPACK_COMPONENT_${UPPER_COMPONENT}_DESCRIPTION}\n" +      ) +  endforeach(COMPONENT ${CPACK_COMPONENTS_ALL}) + +  ############################################################################## +  # debian/copyright +  set(DEBIAN_COPYRIGHT ${DEBIAN_SOURCE_DIR}/debian/copyright) +  execute_process(COMMAND ${CMAKE_COMMAND} -E +    copy ${CPACK_RESOURCE_FILE_LICENSE} ${DEBIAN_COPYRIGHT} +    ) + +  ############################################################################## +  # debian/rules +  set(DEBIAN_RULES ${DEBIAN_SOURCE_DIR}/debian/rules) +  file(WRITE ${DEBIAN_RULES} +    "#!/usr/bin/make -f\n" +    "\n" +    "BUILDDIR = build_dir\n" +    "\n" +    "build:\n" +    "	mkdir $(BUILDDIR)\n" +    "	cd $(BUILDDIR); cmake -DCMAKE_BUILD_TYPE=Release ${CPACK_DEBIAN_CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=/usr ..\n" +    "	$(MAKE) -C $(BUILDDIR) preinstall\n" +    "	touch build\n" +    "\n" +    "binary: binary-indep binary-arch\n" +    "\n" +    "binary-indep: build\n" +    "\n" +    "binary-arch: build\n" +    "	cd $(BUILDDIR); cmake -DCOMPONENT=Unspecified -DCMAKE_INSTALL_PREFIX=../debian/tmp/usr -P cmake_install.cmake\n" +    "	mkdir -p debian/tmp/DEBIAN\n" +    "	dpkg-gensymbols -p${CPACK_DEBIAN_PACKAGE_NAME}\n" +    ) + +  foreach(COMPONENT ${CPACK_COMPONENTS_ALL}) +    set(PATH debian/${COMPONENT}) +    file(APPEND ${DEBIAN_RULES} +      "	cd $(BUILDDIR); cmake -DCOMPONENT=${COMPONENT} -DCMAKE_INSTALL_PREFIX=../${PATH}/usr -P cmake_install.cmake\n" +      "	mkdir -p ${PATH}/DEBIAN\n" +      "	dpkg-gensymbols -p${COMPONENT} -P${PATH}\n" +      ) +  endforeach(COMPONENT ${CPACK_COMPONENTS_ALL}) + +  file(APPEND ${DEBIAN_RULES} +    "	dh_shlibdeps\n" +    "	dh_strip\n" # for reducing size +    "	dpkg-gencontrol -p${CPACK_DEBIAN_PACKAGE_NAME}\n" +    "	dpkg --build debian/tmp ..\n" +    ) + +  foreach(COMPONENT ${CPACK_COMPONENTS_ALL}) +    set(PATH debian/${COMPONENT}) +    file(APPEND ${DEBIAN_RULES} +      "	dpkg-gencontrol -p${COMPONENT} -P${PATH} -Tdebian/${COMPONENT}.substvars\n" +      "	dpkg --build ${PATH} ..\n" +      ) +  endforeach(COMPONENT ${CPACK_COMPONENTS_ALL}) + +  file(APPEND ${DEBIAN_RULES} +    "\n" +    "clean:\n" +    "	rm -f build\n" +    "	rm -rf $(BUILDDIR)\n" +    "\n" +    ".PHONY: binary binary-arch binary-indep clean\n" +    ) + +  execute_process(COMMAND chmod +x ${DEBIAN_RULES}) + +  ############################################################################## +  # debian/compat +  file(WRITE ${DEBIAN_SOURCE_DIR}/debian/compat "7") + +  ############################################################################## +  # debian/source/format +  file(WRITE ${DEBIAN_SOURCE_DIR}/debian/source/format "3.0 (quilt)") + +  ############################################################################## +  # debian/changelog +  set(DEBIAN_CHANGELOG ${DEBIAN_SOURCE_DIR}/debian/changelog) +  execute_process(COMMAND date -R  OUTPUT_VARIABLE DATE_TIME) +  file(WRITE ${DEBIAN_CHANGELOG} +    "${CPACK_DEBIAN_PACKAGE_NAME} (${RELEASE_PACKAGE_VERSION}) ${RELEASE}; urgency=medium\n\n" +    "  * Package built with CMake\n\n" +    "${CPACK_DEBIAN_CHANGELOG}" +    " -- ${CPACK_PACKAGE_CONTACT}  ${DATE_TIME}" +    ) + +  ############################################################################## +  # debuild -S +  if( DEB_SOURCE_CHANGES ) +    set(DEBUILD_OPTIONS "-sd") +  else() +    set(DEBUILD_OPTIONS "-sa") +  endif() +  set(SOURCE_CHANGES_FILE "${CPACK_DEBIAN_PACKAGE_NAME}_${RELEASE_PACKAGE_VERSION}_source.changes") +  set(DEB_SOURCE_CHANGES ${DEB_SOURCE_CHANGES} "${SOURCE_CHANGES_FILE}") +  add_custom_command(OUTPUT "${SOURCE_CHANGES_FILE}" COMMAND ${DEBUILD_EXECUTABLE} -S ${DEBUILD_OPTIONS} WORKING_DIRECTORY ${DEBIAN_SOURCE_DIR}) +endforeach(RELEASE ${CPACK_DEBIAN_DISTRIBUTION_RELEASES}) + +############################################################################## +# dput ppa:your-lp-id/ppa <source.changes> +add_custom_target(dput ${DPUT_EXECUTABLE} ${DPUT_HOST} ${DEB_SOURCE_CHANGES} DEPENDS ${DEB_SOURCE_CHANGES} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Debian) diff --git a/libs/assimp/cmake-modules/FindDevIL.cmake b/libs/assimp/cmake-modules/FindDevIL.cmake new file mode 100644 index 0000000..381a75d --- /dev/null +++ b/libs/assimp/cmake-modules/FindDevIL.cmake @@ -0,0 +1,72 @@ +# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindDevIL +# --------- +# +# +# +# This module locates the developer's image library. +# http://openil.sourceforge.net/ +# +# This module sets: +# +# :: +# +#    IL_LIBRARIES -   the name of the IL library. These include the full path to +#                     the core DevIL library. This one has to be linked into the +#                     application. +#    ILU_LIBRARIES -  the name of the ILU library. Again, the full path. This +#                     library is for filters and effects, not actual loading. It +#                     doesn't have to be linked if the functionality it provides +#                     is not used. +#    ILUT_LIBRARIES - the name of the ILUT library. Full path. This part of the +#                     library interfaces with OpenGL. It is not strictly needed +#                     in applications. +#    IL_INCLUDE_DIR - where to find the il.h, ilu.h and ilut.h files. +#    IL_FOUND -       this is set to TRUE if all the above variables were set. +#                     This will be set to false if ILU or ILUT are not found, +#                     even if they are not needed. In most systems, if one +#                     library is found all the others are as well. That's the +#                     way the DevIL developers release it. + +# TODO: Add version support. +# Tested under Linux and Windows (MSVC) + +#include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +include(FindPackageHandleStandardArgs) + +find_path(IL_INCLUDE_DIR il.h +  PATH_SUFFIXES include IL +  DOC "The path to the directory that contains il.h" +) + +#message("IL_INCLUDE_DIR is ${IL_INCLUDE_DIR}") + +find_library(IL_LIBRARIES +  NAMES IL DEVIL +  PATH_SUFFIXES lib64 lib lib32 +  DOC "The file that corresponds to the base il library." +) + +#message("IL_LIBRARIES is ${IL_LIBRARIES}") + +find_library(ILUT_LIBRARIES +  NAMES ILUT +  PATH_SUFFIXES lib64 lib lib32 +  DOC "The file that corresponds to the il (system?) utility library." +) + +#message("ILUT_LIBRARIES is ${ILUT_LIBRARIES}") + +find_library(ILU_LIBRARIES +  NAMES ILU +  PATH_SUFFIXES lib64 lib lib32 +  DOC "The file that corresponds to the il utility library." +) + +#message("ILU_LIBRARIES is ${ILU_LIBRARIES}") + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(IL DEFAULT_MSG +                                  IL_LIBRARIES IL_INCLUDE_DIR) diff --git a/libs/assimp/cmake-modules/FindDirectX.cmake b/libs/assimp/cmake-modules/FindDirectX.cmake new file mode 100644 index 0000000..7070431 --- /dev/null +++ b/libs/assimp/cmake-modules/FindDirectX.cmake @@ -0,0 +1,101 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +#     (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Find DirectX SDK +# Define: +# DirectX_FOUND +# DirectX_INCLUDE_DIR +# DirectX_LIBRARY +# DirectX_ROOT_DIR + +if(WIN32) # The only platform it makes sense to check for DirectX SDK +  include(FindPkgMacros) +  findpkg_begin(DirectX) + +  # Get path, convert backslashes as ${ENV_DXSDK_DIR} +  getenv_path(DXSDK_DIR) +  getenv_path(DIRECTX_HOME) +  getenv_path(DIRECTX_ROOT) +  getenv_path(DIRECTX_BASE) + +  # construct search paths +  set(DirectX_PREFIX_PATH  +    "${DXSDK_DIR}" "${ENV_DXSDK_DIR}" +    "${DIRECTX_HOME}" "${ENV_DIRECTX_HOME}" +    "${DIRECTX_ROOT}" "${ENV_DIRECTX_ROOT}" +    "${DIRECTX_BASE}" "${ENV_DIRECTX_BASE}" +    "C:/apps_x86/Microsoft DirectX SDK*" +    "C:/Program Files (x86)/Microsoft DirectX SDK*" +    "C:/apps/Microsoft DirectX SDK*" +    "C:/Program Files/Microsoft DirectX SDK*" +    "C:/Program Files (x86)/Windows Kits/8.1" +    "$ENV{ProgramFiles}/Microsoft DirectX SDK*" +  ) +  create_search_paths(DirectX) +  # redo search if prefix path changed +  clear_if_changed(DirectX_PREFIX_PATH +    DirectX_LIBRARY +    DirectX_INCLUDE_DIR +  ) + +  find_path(DirectX_INCLUDE_DIR NAMES d3d9.h HINTS ${DirectX_INC_SEARCH_PATH}) +  # dlls are in DirectX_ROOT_DIR/Developer Runtime/x64|x86 +  # lib files are in DirectX_ROOT_DIR/Lib/x64|x86 +  if(CMAKE_CL_64) +    set(DirectX_LIBPATH_SUFFIX "x64") +  else(CMAKE_CL_64) +    set(DirectX_LIBPATH_SUFFIX "x86") +  endif(CMAKE_CL_64) +  find_library(DirectX_LIBRARY NAMES d3d9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) +  find_library(DirectX_D3DX9_LIBRARY NAMES d3dx9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) +  find_library(DirectX_DXERR_LIBRARY NAMES DxErr HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) +  find_library(DirectX_DXGUID_LIBRARY NAMES dxguid HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + + +  # look for dxgi (needed by both 10 and 11) +  find_library(DirectX_DXGI_LIBRARY NAMES dxgi HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + +  # look for d3dcompiler (needed by 11) +  find_library(DirectX_D3DCOMPILER_LIBRARY NAMES d3dcompiler HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + +  findpkg_finish(DirectX) +  set(DirectX_LIBRARIES ${DirectX_LIBRARIES}  +    ${DirectX_D3DX9_LIBRARY} +    ${DirectX_DXERR_LIBRARY} +    ${DirectX_DXGUID_LIBRARY} +  ) + +  mark_as_advanced(DirectX_D3DX9_LIBRARY DirectX_DXERR_LIBRARY DirectX_DXGUID_LIBRARY +    DirectX_DXGI_LIBRARY DirectX_D3DCOMPILER_LIBRARY) + + +  # look for D3D11 components +  if (DirectX_FOUND) +    find_path(DirectX_D3D11_INCLUDE_DIR NAMES D3D11Shader.h HINTS ${DirectX_INC_SEARCH_PATH}) +      get_filename_component(DirectX_LIBRARY_DIR "${DirectX_LIBRARY}" PATH) +      message(STATUS "DX lib dir: ${DirectX_LIBRARY_DIR}") +    find_library(DirectX_D3D11_LIBRARY NAMES d3d11 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) +    find_library(DirectX_D3DX11_LIBRARY NAMES d3dx11 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})	 +    if (DirectX_D3D11_INCLUDE_DIR AND DirectX_D3D11_LIBRARY) +      set(DirectX_D3D11_FOUND TRUE) +      set(DirectX_D3D11_INCLUDE_DIR ${DirectX_D3D11_INCLUDE_DIR}) +      set(DirectX_D3D11_LIBRARIES ${DirectX_D3D11_LIBRARIES} +	${DirectX_D3D11_LIBRARY} +	${DirectX_D3DX11_LIBRARY} +	${DirectX_DXGI_LIBRARY} +	${DirectX_DXERR_LIBRARY} +	${DirectX_DXGUID_LIBRARY} +	${DirectX_D3DCOMPILER_LIBRARY}        	   +      )	 +    endif () +    mark_as_advanced(DirectX_D3D11_INCLUDE_DIR DirectX_D3D11_LIBRARY DirectX_D3DX11_LIBRARY) +  endif () + +endif(WIN32) diff --git a/libs/assimp/cmake-modules/FindPkgMacros.cmake b/libs/assimp/cmake-modules/FindPkgMacros.cmake new file mode 100644 index 0000000..074cce3 --- /dev/null +++ b/libs/assimp/cmake-modules/FindPkgMacros.cmake @@ -0,0 +1,146 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +#     (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +################################################################## +# Provides some common functionality for the FindPackage modules +################################################################## + +# Begin processing of package +macro(findpkg_begin PREFIX) +  if (NOT ${PREFIX}_FIND_QUIETLY) +    message(STATUS "Looking for ${PREFIX}...") +  endif () +endmacro(findpkg_begin) + +# Display a status message unless FIND_QUIETLY is set +macro(pkg_message PREFIX) +  if (NOT ${PREFIX}_FIND_QUIETLY) +    message(STATUS ${ARGN}) +  endif () +endmacro(pkg_message) + +# Get environment variable, define it as ENV_$var and make sure backslashes are converted to forward slashes +macro(getenv_path VAR) +   set(ENV_${VAR} $ENV{${VAR}}) +   # replace won't work if var is blank +   if (ENV_${VAR}) +     string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} ) +   endif () +endmacro(getenv_path) + +# Construct search paths for includes and libraries from a PREFIX_PATH +macro(create_search_paths PREFIX) +  foreach(dir ${${PREFIX}_PREFIX_PATH}) +    set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH} +      ${dir}/include ${dir}/include/${PREFIX} ${dir}/Headers) +    set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH} +      ${dir}/lib ${dir}/lib/${PREFIX} ${dir}/Libs) +  endforeach(dir) +  set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH}) +endmacro(create_search_paths) + +# clear cache variables if a certain variable changed +macro(clear_if_changed TESTVAR) +  # test against internal check variable +  if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}") +    message(STATUS "${TESTVAR} changed.") +    foreach(var ${ARGN}) +      set(${var} "NOTFOUND" CACHE STRING "x" FORCE) +    endforeach(var) +  endif () +  set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE) +endmacro(clear_if_changed) + +# Try to get some hints from pkg-config, if available +macro(use_pkgconfig PREFIX PKGNAME) +  # Android does not support PKG_CONFIG so we disable it +  IF ( NOT ANDROID ) +    find_package(PkgConfig) +    if (PKG_CONFIG_FOUND) +      pkg_check_modules(${PREFIX} ${PKGNAME}) +    endif () +  ENDIF ( NOT ANDROID ) +endmacro (use_pkgconfig) + +# Couple a set of release AND debug libraries (or frameworks) +macro(make_library_set PREFIX) +  if (${PREFIX}_FWK) +    set(${PREFIX} ${${PREFIX}_FWK}) +  elseif (${PREFIX}_REL AND ${PREFIX}_DBG) +    set(${PREFIX} optimized ${${PREFIX}_REL} debug ${${PREFIX}_DBG}) +  elseif (${PREFIX}_REL) +    set(${PREFIX} ${${PREFIX}_REL}) +  elseif (${PREFIX}_DBG) +    set(${PREFIX} ${${PREFIX}_DBG}) +  endif () +endmacro(make_library_set) + +# Generate debug names from given release names +macro(get_debug_names PREFIX) +  foreach(i ${${PREFIX}}) +    set(${PREFIX}_DBG ${${PREFIX}_DBG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i}) +  endforeach(i) +endmacro(get_debug_names) + +# Add the parent dir from DIR to VAR +macro(add_parent_dir VAR DIR) +  get_filename_component(${DIR}_TEMP "${${DIR}}/.." ABSOLUTE) +  set(${VAR} ${${VAR}} ${${DIR}_TEMP}) +endmacro(add_parent_dir) + +# Do the final processing for the package find. +macro(findpkg_finish PREFIX) +  # skip if already processed during this run +  if (NOT ${PREFIX}_FOUND) +    if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY) +      set(${PREFIX}_FOUND TRUE) +      set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR}) +      set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY}) +      if (NOT ${PREFIX}_FIND_QUIETLY) +        message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}") +      endif () +    else () +      if (NOT ${PREFIX}_FIND_QUIETLY) +        message(STATUS "Could not locate ${PREFIX}") +      endif () +      if (${PREFIX}_FIND_REQUIRED) +        message(FATAL_ERROR "Required library ${PREFIX} not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake.") +      endif () +    endif () + +    mark_as_advanced(${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK) +  endif () +endmacro(findpkg_finish) + + +# Slightly customised framework finder +MACRO(findpkg_framework fwk) +  IF(APPLE) +    SET(${fwk}_FRAMEWORK_PATH +      ${${fwk}_FRAMEWORK_SEARCH_PATH} +      ${CMAKE_FRAMEWORK_PATH} +      ~/Library/Frameworks +      /Library/Frameworks +      /System/Library/Frameworks +      /Network/Library/Frameworks +      /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/Frameworks/ +      /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/Frameworks/ +    ) +    FOREACH(dir ${${fwk}_FRAMEWORK_PATH}) +      SET(fwkpath ${dir}/${fwk}.framework) +      IF(EXISTS ${fwkpath}) +        SET(${fwk}_FRAMEWORK_INCLUDES ${${fwk}_FRAMEWORK_INCLUDES} +          ${fwkpath}/Headers ${fwkpath}/PrivateHeaders) +        if (NOT ${fwk}_LIBRARY_FWK) +          SET(${fwk}_LIBRARY_FWK "-framework ${fwk}") +        endif () +      ENDIF(EXISTS ${fwkpath}) +    ENDFOREACH(dir) +  ENDIF(APPLE) +ENDMACRO(findpkg_framework) diff --git a/libs/assimp/cmake-modules/FindRT.cmake b/libs/assimp/cmake-modules/FindRT.cmake new file mode 100644 index 0000000..c397aca --- /dev/null +++ b/libs/assimp/cmake-modules/FindRT.cmake @@ -0,0 +1,20 @@ +# Try to find real time libraries +# Once done, this will define +# +# RT_FOUND - system has rt library +# RT_LIBRARIES - rt libraries directory +# +# Source: https://gitlab.cern.ch/dss/eos/commit/44070e575faaa46bd998708ef03eedb381506ff0 +# + +if(RT_LIBRARIES) +    set(RT_FIND_QUIETLY TRUE) +endif(RT_LIBRARIES) + +find_library(RT_LIBRARY rt) +set(RT_LIBRARIES ${RT_LIBRARY}) +# handle the QUIETLY and REQUIRED arguments and set +# RT_FOUND to TRUE if all listed variables are TRUE +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(RT DEFAULT_MSG RT_LIBRARY) +mark_as_advanced(RT_LIBRARY) diff --git a/libs/assimp/cmake-modules/FindZLIB.cmake b/libs/assimp/cmake-modules/FindZLIB.cmake new file mode 100644 index 0000000..95eb515 --- /dev/null +++ b/libs/assimp/cmake-modules/FindZLIB.cmake @@ -0,0 +1,48 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +#     (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# - Try to find ZLIB +# Once done, this will define +# +#  ZLIB_FOUND - system has ZLIB +#  ZLIB_INCLUDE_DIRS - the ZLIB include directories +#  ZLIB_LIBRARIES - link these to use ZLIB + +include(FindPkgMacros) +findpkg_begin(ZLIB) + +# Get path, convert backslashes as ${ENV_${var}} +getenv_path(ZLIB_HOME) + +# construct search paths +set(ZLIB_PREFIX_PATH ${ZLIB_HOME} ${ENV_ZLIB_HOME}) +create_search_paths(ZLIB) +# redo search if prefix path changed +clear_if_changed(ZLIB_PREFIX_PATH +  ZLIB_LIBRARY_FWK +  ZLIB_LIBRARY_REL +  ZLIB_LIBRARY_DBG +  ZLIB_INCLUDE_DIR +) + +set(ZLIB_LIBRARY_NAMES z zlib zdll) +get_debug_names(ZLIB_LIBRARY_NAMES) + +use_pkgconfig(ZLIB_PKGC zzip-zlib-config) + +findpkg_framework(ZLIB) + +find_path(ZLIB_INCLUDE_DIR NAMES zlib.h HINTS ${ZLIB_INC_SEARCH_PATH} ${ZLIB_PKGC_INCLUDE_DIRS}) +find_library(ZLIB_LIBRARY_REL NAMES ${ZLIB_LIBRARY_NAMES} HINTS ${ZLIB_LIB_SEARCH_PATH} ${ZLIB_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" release relwithdebinfo minsizerel) +find_library(ZLIB_LIBRARY_DBG NAMES ${ZLIB_LIBRARY_NAMES_DBG} HINTS ${ZLIB_LIB_SEARCH_PATH} ${ZLIB_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" debug) + +make_library_set(ZLIB_LIBRARY) + +findpkg_finish(ZLIB) + diff --git a/libs/assimp/cmake-modules/Findassimp.cmake b/libs/assimp/cmake-modules/Findassimp.cmake new file mode 100644 index 0000000..6636455 --- /dev/null +++ b/libs/assimp/cmake-modules/Findassimp.cmake @@ -0,0 +1,85 @@ +if(CMAKE_SIZEOF_VOID_P EQUAL 8) +	set(ASSIMP_ARCHITECTURE "64") +elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) +	set(ASSIMP_ARCHITECTURE "32") +endif(CMAKE_SIZEOF_VOID_P EQUAL 8) +	 +if(WIN32) +	set(ASSIMP_ROOT_DIR CACHE PATH "ASSIMP root directory") + +	# Find path of each library +	find_path(ASSIMP_INCLUDE_DIR +		NAMES +			assimp/anim.h +		HINTS +			${ASSIMP_ROOT_DIR}/include +	) + +	if(MSVC12) +		set(ASSIMP_MSVC_VERSION "vc120") +	elseif(MSVC14)	 +		set(ASSIMP_MSVC_VERSION "vc140") +	endif(MSVC12) +	 +	if(MSVC12 OR MSVC14) +	 +		find_path(ASSIMP_LIBRARY_DIR +			NAMES +				assimp-${ASSIMP_MSVC_VERSION}-mt.lib +			HINTS +				${ASSIMP_ROOT_DIR}/lib${ASSIMP_ARCHITECTURE} +		) +		 +		find_library(ASSIMP_LIBRARY_RELEASE				assimp-${ASSIMP_MSVC_VERSION}-mt.lib 			PATHS ${ASSIMP_LIBRARY_DIR}) +		find_library(ASSIMP_LIBRARY_DEBUG				assimp-${ASSIMP_MSVC_VERSION}-mtd.lib			PATHS ${ASSIMP_LIBRARY_DIR}) +		 +		set(ASSIMP_LIBRARY  +			optimized 	${ASSIMP_LIBRARY_RELEASE} +			debug		${ASSIMP_LIBRARY_DEBUG} +		) +		 +		set(ASSIMP_LIBRARIES "ASSIMP_LIBRARY_RELEASE" "ASSIMP_LIBRARY_DEBUG") +	 +		FUNCTION(ASSIMP_COPY_BINARIES TargetDirectory) +			ADD_CUSTOM_TARGET(AssimpCopyBinaries +				COMMAND ${CMAKE_COMMAND} -E copy ${ASSIMP_ROOT_DIR}/bin${ASSIMP_ARCHITECTURE}/assimp-${ASSIMP_MSVC_VERSION}-mtd.dll 	${TargetDirectory}/Debug/assimp-${ASSIMP_MSVC_VERSION}-mtd.dll +				COMMAND ${CMAKE_COMMAND} -E copy ${ASSIMP_ROOT_DIR}/bin${ASSIMP_ARCHITECTURE}/assimp-${ASSIMP_MSVC_VERSION}-mt.dll 		${TargetDirectory}/Release/assimp-${ASSIMP_MSVC_VERSION}-mt.dll +			COMMENT "Copying Assimp binaries to '${TargetDirectory}'" +			VERBATIM) +		ENDFUNCTION(ASSIMP_COPY_BINARIES) +	 +	endif() +	 +else(WIN32) + +	find_path( +	  assimp_INCLUDE_DIRS +	  NAMES assimp/postprocess.h assimp/scene.h assimp/version.h assimp/config.h assimp/cimport.h +	  PATHS /usr/local/include +	  PATHS /usr/include/ + +	) + +	find_library( +	  assimp_LIBRARIES +	  NAMES assimp +	  PATHS /usr/local/lib/ +	  PATHS /usr/lib64/ +	  PATHS /usr/lib/ +	) + +	if (assimp_INCLUDE_DIRS AND assimp_LIBRARIES) +	  SET(assimp_FOUND TRUE) +	ENDIF (assimp_INCLUDE_DIRS AND assimp_LIBRARIES) + +	if (assimp_FOUND) +	  if (NOT assimp_FIND_QUIETLY) +		message(STATUS "Found asset importer library: ${assimp_LIBRARIES}") +	  endif (NOT assimp_FIND_QUIETLY) +	else (assimp_FOUND) +	  if (assimp_FIND_REQUIRED) +		message(FATAL_ERROR "Could not find asset importer library") +	  endif (assimp_FIND_REQUIRED) +	endif (assimp_FOUND) +	 +endif(WIN32) diff --git a/libs/assimp/cmake-modules/HunterGate.cmake b/libs/assimp/cmake-modules/HunterGate.cmake new file mode 100644 index 0000000..6d9cc24 --- /dev/null +++ b/libs/assimp/cmake-modules/HunterGate.cmake @@ -0,0 +1,539 @@ +# Copyright (c) 2013-2019, Ruslan Baratov +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +#   list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +#   this list of conditions and the following disclaimer in the documentation +#   and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This is a gate file to Hunter package manager. +# Include this file using `include` command and add package you need, example: +# +#     cmake_minimum_required(VERSION 3.2) +# +#     include("cmake/HunterGate.cmake") +#     HunterGate( +#         URL "https://github.com/path/to/hunter/archive.tar.gz" +#         SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d" +#     ) +# +#     project(MyProject) +# +#     hunter_add_package(Foo) +#     hunter_add_package(Boo COMPONENTS Bar Baz) +# +# Projects: +#     * https://github.com/hunter-packages/gate/ +#     * https://github.com/ruslo/hunter + +option(HUNTER_ENABLED "Enable Hunter package manager support" ON) + +if(HUNTER_ENABLED) +  if(CMAKE_VERSION VERSION_LESS "3.2") +    message( +        FATAL_ERROR +        "At least CMake version 3.2 required for Hunter dependency management." +        " Update CMake or set HUNTER_ENABLED to OFF." +    ) +  endif() +endif() + +include(CMakeParseArguments) # cmake_parse_arguments + +option(HUNTER_STATUS_PRINT "Print working status" ON) +option(HUNTER_STATUS_DEBUG "Print a lot info" OFF) +option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON) + +set(HUNTER_ERROR_PAGE "https://docs.hunter.sh/en/latest/reference/errors") + +function(hunter_gate_status_print) +  if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG) +    foreach(print_message ${ARGV}) +      message(STATUS "[hunter] ${print_message}") +    endforeach() +  endif() +endfunction() + +function(hunter_gate_status_debug) +  if(HUNTER_STATUS_DEBUG) +    foreach(print_message ${ARGV}) +      string(TIMESTAMP timestamp) +      message(STATUS "[hunter *** DEBUG *** ${timestamp}] ${print_message}") +    endforeach() +  endif() +endfunction() + +function(hunter_gate_error_page error_page) +  message("------------------------------ ERROR ------------------------------") +  message("    ${HUNTER_ERROR_PAGE}/${error_page}.html") +  message("-------------------------------------------------------------------") +  message("") +  message(FATAL_ERROR "") +endfunction() + +function(hunter_gate_internal_error) +  message("") +  foreach(print_message ${ARGV}) +    message("[hunter ** INTERNAL **] ${print_message}") +  endforeach() +  message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") +  message("") +  hunter_gate_error_page("error.internal") +endfunction() + +function(hunter_gate_fatal_error) +  cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}") +  if("${hunter_ERROR_PAGE}" STREQUAL "") +    hunter_gate_internal_error("Expected ERROR_PAGE") +  endif() +  message("") +  foreach(x ${hunter_UNPARSED_ARGUMENTS}) +    message("[hunter ** FATAL ERROR **] ${x}") +  endforeach() +  message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") +  message("") +  hunter_gate_error_page("${hunter_ERROR_PAGE}") +endfunction() + +function(hunter_gate_user_error) +  hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data") +endfunction() + +function(hunter_gate_self root version sha1 result) +  string(COMPARE EQUAL "${root}" "" is_bad) +  if(is_bad) +    hunter_gate_internal_error("root is empty") +  endif() + +  string(COMPARE EQUAL "${version}" "" is_bad) +  if(is_bad) +    hunter_gate_internal_error("version is empty") +  endif() + +  string(COMPARE EQUAL "${sha1}" "" is_bad) +  if(is_bad) +    hunter_gate_internal_error("sha1 is empty") +  endif() + +  string(SUBSTRING "${sha1}" 0 7 archive_id) + +  if(EXISTS "${root}/cmake/Hunter") +    set(hunter_self "${root}") +  else() +    set( +        hunter_self +        "${root}/_Base/Download/Hunter/${version}/${archive_id}/Unpacked" +    ) +  endif() + +  set("${result}" "${hunter_self}" PARENT_SCOPE) +endfunction() + +# Set HUNTER_GATE_ROOT cmake variable to suitable value. +function(hunter_gate_detect_root) +  # Check CMake variable +  string(COMPARE NOTEQUAL "${HUNTER_ROOT}" "" not_empty) +  if(not_empty) +    set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE) +    hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable") +    return() +  endif() + +  # Check environment variable +  string(COMPARE NOTEQUAL "$ENV{HUNTER_ROOT}" "" not_empty) +  if(not_empty) +    set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE) +    hunter_gate_status_debug("HUNTER_ROOT detected by environment variable") +    return() +  endif() + +  # Check HOME environment variable +  string(COMPARE NOTEQUAL "$ENV{HOME}" "" result) +  if(result) +    set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE) +    hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable") +    return() +  endif() + +  # Check SYSTEMDRIVE and USERPROFILE environment variable (windows only) +  if(WIN32) +    string(COMPARE NOTEQUAL "$ENV{SYSTEMDRIVE}" "" result) +    if(result) +      set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE) +      hunter_gate_status_debug( +          "HUNTER_ROOT set using SYSTEMDRIVE environment variable" +      ) +      return() +    endif() + +    string(COMPARE NOTEQUAL "$ENV{USERPROFILE}" "" result) +    if(result) +      set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE) +      hunter_gate_status_debug( +          "HUNTER_ROOT set using USERPROFILE environment variable" +      ) +      return() +    endif() +  endif() + +  hunter_gate_fatal_error( +      "Can't detect HUNTER_ROOT" +      ERROR_PAGE "error.detect.hunter.root" +  ) +endfunction() + +function(hunter_gate_download dir) +  string( +      COMPARE +      NOTEQUAL +      "$ENV{HUNTER_DISABLE_AUTOINSTALL}" +      "" +      disable_autoinstall +  ) +  if(disable_autoinstall AND NOT HUNTER_RUN_INSTALL) +    hunter_gate_fatal_error( +        "Hunter not found in '${dir}'" +        "Set HUNTER_RUN_INSTALL=ON to auto-install it from '${HUNTER_GATE_URL}'" +        "Settings:" +        "  HUNTER_ROOT: ${HUNTER_GATE_ROOT}" +        "  HUNTER_SHA1: ${HUNTER_GATE_SHA1}" +        ERROR_PAGE "error.run.install" +    ) +  endif() +  string(COMPARE EQUAL "${dir}" "" is_bad) +  if(is_bad) +    hunter_gate_internal_error("Empty 'dir' argument") +  endif() + +  string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" is_bad) +  if(is_bad) +    hunter_gate_internal_error("HUNTER_GATE_SHA1 empty") +  endif() + +  string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" is_bad) +  if(is_bad) +    hunter_gate_internal_error("HUNTER_GATE_URL empty") +  endif() + +  set(done_location "${dir}/DONE") +  set(sha1_location "${dir}/SHA1") + +  set(build_dir "${dir}/Build") +  set(cmakelists "${dir}/CMakeLists.txt") + +  hunter_gate_status_debug("Locking directory: ${dir}") +  file(LOCK "${dir}" DIRECTORY GUARD FUNCTION) +  hunter_gate_status_debug("Lock done") + +  if(EXISTS "${done_location}") +    # while waiting for lock other instance can do all the job +    hunter_gate_status_debug("File '${done_location}' found, skip install") +    return() +  endif() + +  file(REMOVE_RECURSE "${build_dir}") +  file(REMOVE_RECURSE "${cmakelists}") + +  file(MAKE_DIRECTORY "${build_dir}") # check directory permissions + +  # Disabling languages speeds up a little bit, reduces noise in the output +  # and avoids path too long windows error +  file( +      WRITE +      "${cmakelists}" +      "cmake_minimum_required(VERSION 3.2)\n" +      "project(HunterDownload LANGUAGES NONE)\n" +      "include(ExternalProject)\n" +      "ExternalProject_Add(\n" +      "    Hunter\n" +      "    URL\n" +      "    \"${HUNTER_GATE_URL}\"\n" +      "    URL_HASH\n" +      "    SHA1=${HUNTER_GATE_SHA1}\n" +      "    DOWNLOAD_DIR\n" +      "    \"${dir}\"\n" +      "    TLS_VERIFY\n" +      "    ${HUNTER_TLS_VERIFY}\n" +      "    SOURCE_DIR\n" +      "    \"${dir}/Unpacked\"\n" +      "    CONFIGURE_COMMAND\n" +      "    \"\"\n" +      "    BUILD_COMMAND\n" +      "    \"\"\n" +      "    INSTALL_COMMAND\n" +      "    \"\"\n" +      ")\n" +  ) + +  if(HUNTER_STATUS_DEBUG) +    set(logging_params "") +  else() +    set(logging_params OUTPUT_QUIET) +  endif() + +  hunter_gate_status_debug("Run generate") + +  # Need to add toolchain file too. +  # Otherwise on Visual Studio + MDD this will fail with error: +  # "Could not find an appropriate version of the Windows 10 SDK installed on this machine" +  if(EXISTS "${CMAKE_TOOLCHAIN_FILE}") +    get_filename_component(absolute_CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE) +    set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=${absolute_CMAKE_TOOLCHAIN_FILE}") +  else() +    # 'toolchain_arg' can't be empty +    set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=") +  endif() + +  string(COMPARE EQUAL "${CMAKE_MAKE_PROGRAM}" "" no_make) +  if(no_make) +    set(make_arg "") +  else() +    # Test case: remove Ninja from PATH but set it via CMAKE_MAKE_PROGRAM +    set(make_arg "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}") +  endif() + +  execute_process( +      COMMAND +      "${CMAKE_COMMAND}" +      "-H${dir}" +      "-B${build_dir}" +      "-G${CMAKE_GENERATOR}" +      "${toolchain_arg}" +      ${make_arg} +      WORKING_DIRECTORY "${dir}" +      RESULT_VARIABLE download_result +      ${logging_params} +  ) + +  if(NOT download_result EQUAL 0) +    hunter_gate_internal_error( +        "Configure project failed." +        "To reproduce the error run: ${CMAKE_COMMAND} -H${dir} -B${build_dir} -G${CMAKE_GENERATOR} ${toolchain_arg} ${make_arg}" +        "In directory ${dir}" +    ) +  endif() + +  hunter_gate_status_print( +      "Initializing Hunter workspace (${HUNTER_GATE_SHA1})" +      "  ${HUNTER_GATE_URL}" +      "  -> ${dir}" +  ) +  execute_process( +      COMMAND "${CMAKE_COMMAND}" --build "${build_dir}" +      WORKING_DIRECTORY "${dir}" +      RESULT_VARIABLE download_result +      ${logging_params} +  ) + +  if(NOT download_result EQUAL 0) +    hunter_gate_internal_error("Build project failed") +  endif() + +  file(REMOVE_RECURSE "${build_dir}") +  file(REMOVE_RECURSE "${cmakelists}") + +  file(WRITE "${sha1_location}" "${HUNTER_GATE_SHA1}") +  file(WRITE "${done_location}" "DONE") + +  hunter_gate_status_debug("Finished") +endfunction() + +# Must be a macro so master file 'cmake/Hunter' can +# apply all variables easily just by 'include' command +# (otherwise PARENT_SCOPE magic needed) +macro(HunterGate) +  if(HUNTER_GATE_DONE) +    # variable HUNTER_GATE_DONE set explicitly for external project +    # (see `hunter_download`) +    set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES) +  endif() + +  # First HunterGate command will init Hunter, others will be ignored +  get_property(_hunter_gate_done GLOBAL PROPERTY HUNTER_GATE_DONE SET) + +  if(NOT HUNTER_ENABLED) +    # Empty function to avoid error "unknown function" +    function(hunter_add_package) +    endfunction() + +    set( +        _hunter_gate_disabled_mode_dir +        "${CMAKE_CURRENT_LIST_DIR}/cmake/Hunter/disabled-mode" +    ) +    if(EXISTS "${_hunter_gate_disabled_mode_dir}") +      hunter_gate_status_debug( +          "Adding \"disabled-mode\" modules: ${_hunter_gate_disabled_mode_dir}" +      ) +      list(APPEND CMAKE_PREFIX_PATH "${_hunter_gate_disabled_mode_dir}") +    endif() +  elseif(_hunter_gate_done) +    hunter_gate_status_debug("Secondary HunterGate (use old settings)") +    hunter_gate_self( +        "${HUNTER_CACHED_ROOT}" +        "${HUNTER_VERSION}" +        "${HUNTER_SHA1}" +        _hunter_self +    ) +    include("${_hunter_self}/cmake/Hunter") +  else() +    set(HUNTER_GATE_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}") + +    string(COMPARE NOTEQUAL "${PROJECT_NAME}" "" _have_project_name) +    if(_have_project_name) +      hunter_gate_fatal_error( +          "Please set HunterGate *before* 'project' command. " +          "Detected project: ${PROJECT_NAME}" +          ERROR_PAGE "error.huntergate.before.project" +      ) +    endif() + +    cmake_parse_arguments( +        HUNTER_GATE "LOCAL" "URL;SHA1;GLOBAL;FILEPATH" "" ${ARGV} +    ) + +    string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" _empty_sha1) +    string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" _empty_url) +    string( +        COMPARE +        NOTEQUAL +        "${HUNTER_GATE_UNPARSED_ARGUMENTS}" +        "" +        _have_unparsed +    ) +    string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global) +    string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath) + +    if(_have_unparsed) +      hunter_gate_user_error( +          "HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}" +      ) +    endif() +    if(_empty_sha1) +      hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory") +    endif() +    if(_empty_url) +      hunter_gate_user_error("URL suboption of HunterGate is mandatory") +    endif() +    if(_have_global) +      if(HUNTER_GATE_LOCAL) +        hunter_gate_user_error("Unexpected LOCAL (already has GLOBAL)") +      endif() +      if(_have_filepath) +        hunter_gate_user_error("Unexpected FILEPATH (already has GLOBAL)") +      endif() +    endif() +    if(HUNTER_GATE_LOCAL) +      if(_have_global) +        hunter_gate_user_error("Unexpected GLOBAL (already has LOCAL)") +      endif() +      if(_have_filepath) +        hunter_gate_user_error("Unexpected FILEPATH (already has LOCAL)") +      endif() +    endif() +    if(_have_filepath) +      if(_have_global) +        hunter_gate_user_error("Unexpected GLOBAL (already has FILEPATH)") +      endif() +      if(HUNTER_GATE_LOCAL) +        hunter_gate_user_error("Unexpected LOCAL (already has FILEPATH)") +      endif() +    endif() + +    hunter_gate_detect_root() # set HUNTER_GATE_ROOT + +    # Beautify path, fix probable problems with windows path slashes +    get_filename_component( +        HUNTER_GATE_ROOT "${HUNTER_GATE_ROOT}" ABSOLUTE +    ) +    hunter_gate_status_debug("HUNTER_ROOT: ${HUNTER_GATE_ROOT}") +    if(NOT HUNTER_ALLOW_SPACES_IN_PATH) +      string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces) +      if(NOT _contain_spaces EQUAL -1) +        hunter_gate_fatal_error( +            "HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces." +            "Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error" +            "(Use at your own risk!)" +            ERROR_PAGE "error.spaces.in.hunter.root" +        ) +      endif() +    endif() + +    string( +        REGEX +        MATCH +        "[0-9]+\\.[0-9]+\\.[0-9]+[-_a-z0-9]*" +        HUNTER_GATE_VERSION +        "${HUNTER_GATE_URL}" +    ) +    string(COMPARE EQUAL "${HUNTER_GATE_VERSION}" "" _is_empty) +    if(_is_empty) +      set(HUNTER_GATE_VERSION "unknown") +    endif() + +    hunter_gate_self( +        "${HUNTER_GATE_ROOT}" +        "${HUNTER_GATE_VERSION}" +        "${HUNTER_GATE_SHA1}" +        _hunter_self +    ) + +    set(_master_location "${_hunter_self}/cmake/Hunter") +    if(EXISTS "${HUNTER_GATE_ROOT}/cmake/Hunter") +      # Hunter downloaded manually (e.g. by 'git clone') +      set(_unused "xxxxxxxxxx") +      set(HUNTER_GATE_SHA1 "${_unused}") +      set(HUNTER_GATE_VERSION "${_unused}") +    else() +      get_filename_component(_archive_id_location "${_hunter_self}/.." ABSOLUTE) +      set(_done_location "${_archive_id_location}/DONE") +      set(_sha1_location "${_archive_id_location}/SHA1") + +      # Check Hunter already downloaded by HunterGate +      if(NOT EXISTS "${_done_location}") +        hunter_gate_download("${_archive_id_location}") +      endif() + +      if(NOT EXISTS "${_done_location}") +        hunter_gate_internal_error("hunter_gate_download failed") +      endif() + +      if(NOT EXISTS "${_sha1_location}") +        hunter_gate_internal_error("${_sha1_location} not found") +      endif() +      file(READ "${_sha1_location}" _sha1_value) +      string(COMPARE EQUAL "${_sha1_value}" "${HUNTER_GATE_SHA1}" _is_equal) +      if(NOT _is_equal) +        hunter_gate_internal_error( +            "Short SHA1 collision:" +            "  ${_sha1_value} (from ${_sha1_location})" +            "  ${HUNTER_GATE_SHA1} (HunterGate)" +        ) +      endif() +      if(NOT EXISTS "${_master_location}") +        hunter_gate_user_error( +            "Master file not found:" +            "  ${_master_location}" +            "try to update Hunter/HunterGate" +        ) +      endif() +    endif() +    include("${_master_location}") +    set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES) +  endif() +endmacro() diff --git a/libs/assimp/cmake-modules/MinGW_x86_64.cmake b/libs/assimp/cmake-modules/MinGW_x86_64.cmake new file mode 100644 index 0000000..d5c1f15 --- /dev/null +++ b/libs/assimp/cmake-modules/MinGW_x86_64.cmake @@ -0,0 +1,16 @@ +# this one sets internal to crosscompile (in theory) +SET(CMAKE_SYSTEM_NAME Windows) + +# the minimalistic settings +SET(CMAKE_C_COMPILER "/usr/bin/x86_64-w64-mingw32-gcc") +SET(CMAKE_CXX_COMPILER "/usr/bin/x86_64-w64-mingw32-g++") +SET(CMAKE_RC_COMPILER "/usr/bin/x86_64-w64-mingw32-windres") + +# where is the target (so called staging) environment +SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) + +# search for programs in the build host directories (default BOTH) +#SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +# for libraries and headers in the target directories +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/libs/assimp/cmake-modules/PrecompiledHeader.cmake b/libs/assimp/cmake-modules/PrecompiledHeader.cmake new file mode 100644 index 0000000..6af7866 --- /dev/null +++ b/libs/assimp/cmake-modules/PrecompiledHeader.cmake @@ -0,0 +1,25 @@ +MACRO(ADD_MSVC_PRECOMPILED_HEADER PrecompiledHeader PrecompiledSource SourcesVar) +  IF(MSVC) +    GET_FILENAME_COMPONENT(PrecompiledBasename ${PrecompiledHeader} NAME_WE) +    SET(PrecompiledBinary "${CMAKE_CFG_INTDIR}/${PrecompiledBasename}.pch") +    SET(Sources ${${SourcesVar}}) + +    SET_SOURCE_FILES_PROPERTIES(${PrecompiledSource} +      PROPERTIES COMPILE_FLAGS "/Yc\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\"" +      OBJECT_OUTPUTS "${PrecompiledBinary}") + +    # Do not consider .c files +    foreach(fname ${Sources})  +      GET_FILENAME_COMPONENT(fext ${fname} EXT) +      if(fext STREQUAL ".cpp") +	SET_SOURCE_FILES_PROPERTIES(${fname} +	  PROPERTIES COMPILE_FLAGS "/Yu\"${PrecompiledBinary}\" /FI\"${PrecompiledBinary}\" /Fp\"${PrecompiledBinary}\"" +          OBJECT_DEPENDS "${PrecompiledBinary}")      +      endif(fext STREQUAL ".cpp") +    endforeach(fname)  + +  ENDIF(MSVC) +  # Add precompiled header to SourcesVar +  LIST(APPEND ${SourcesVar} ${PrecompiledSource}) + +ENDMACRO(ADD_MSVC_PRECOMPILED_HEADER) diff --git a/libs/assimp/cmake-modules/assimp-hunter-config.cmake.in b/libs/assimp/cmake-modules/assimp-hunter-config.cmake.in new file mode 100644 index 0000000..1988f7e --- /dev/null +++ b/libs/assimp/cmake-modules/assimp-hunter-config.cmake.in @@ -0,0 +1,19 @@ +@PACKAGE_INIT@ + +find_package(RapidJSON     CONFIG REQUIRED) +find_package(ZLIB          CONFIG REQUIRED) +find_package(utf8cpp       CONFIG REQUIRED) +find_package(minizip       CONFIG REQUIRED) +find_package(openddlparser CONFIG REQUIRED) +find_package(poly2tri      CONFIG REQUIRED) +find_package(polyclipping  CONFIG REQUIRED) +find_package(zip           CONFIG REQUIRED) +find_package(pugixml       CONFIG REQUIRED) +find_package(stb           CONFIG REQUIRED) + +if(@ASSIMP_BUILD_DRACO@) +  find_package(draco CONFIG REQUIRED) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake") +check_required_components("@PROJECT_NAME@") diff --git a/libs/assimp/cmake-modules/assimp-plain-config.cmake.in b/libs/assimp/cmake-modules/assimp-plain-config.cmake.in new file mode 100644 index 0000000..6551dcb --- /dev/null +++ b/libs/assimp/cmake-modules/assimp-plain-config.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake") + +set(ASSIMP_ROOT_DIR ${PACKAGE_PREFIX_DIR}) +set(ASSIMP_LIBRARIES assimp::assimp) +set(ASSIMP_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@) +get_property(ASSIMP_INCLUDE_DIRS TARGET assimp::assimp PROPERTY INTERFACE_INCLUDE_DIRECTORIES) +set(ASSIMP_LIBRARY_DIRS "") diff --git a/libs/assimp/cmake-modules/cmake_uninstall.cmake.in b/libs/assimp/cmake-modules/cmake_uninstall.cmake.in new file mode 100644 index 0000000..1670115 --- /dev/null +++ b/libs/assimp/cmake-modules/cmake_uninstall.cmake.in @@ -0,0 +1,17 @@ +IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") +  MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +STRING(REGEX REPLACE "\n" ";" files "${files}") +FOREACH(file ${files}) +  MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") +  EXEC_PROGRAM( +    "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" +    OUTPUT_VARIABLE rm_out +    RETURN_VALUE rm_retval +    ) +  IF(NOT "${rm_retval}" STREQUAL 0) +    MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") +  ENDIF(NOT "${rm_retval}" STREQUAL 0) +ENDFOREACH(file)  | 
