mirror of
https://github.com/crystalidea/qt-build-tools.git
synced 2025-07-02 07:25:24 +08:00
qt 6.6.0
This commit is contained in:
@ -0,0 +1,158 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
#[=[
|
||||
|
||||
NOTE: This function is used internally by CMake. Projects should not include
|
||||
this file directly.
|
||||
|
||||
The cmake_try_compiler_or_linker_flag() function can be used to compile and link a
|
||||
source file to check whether a specific compiler or linker flag is supported.
|
||||
The function does not use the try_compile() command so as to avoid infinite
|
||||
recursion. It may not work for all platforms or toolchains, the caller is
|
||||
responsible for ensuring it is only called in valid situations.
|
||||
|
||||
cmake_try_compiler_or_linker_flag(<lang> <flag> <result>
|
||||
[SRC_EXT <ext>] [COMMAND_PATTERN <pattern>]
|
||||
[FAIL_REGEX <regex> ...]
|
||||
[OUTPUT_VARIABLE <output>])
|
||||
|
||||
Parameters:
|
||||
<lang> - Language to check.
|
||||
<flag> - The flag to add to the compile/link command line.
|
||||
<result> - Boolean output variable. It will be stored in the cache as an
|
||||
internal variable and if true, will cause future tests that assign
|
||||
to that variable to be bypassed.
|
||||
|
||||
Optional parameters:
|
||||
SRC_EXT - Overrides the extension of the source file used for the
|
||||
check. Defaults are 'c' (C), 'cxx' (CXX), 'F' (Fortran).
|
||||
COMMAND_PATTERN - Pattern to be used for the command line. The default is
|
||||
'<FLAG> -o <OUTPUT> <SOURCE>'
|
||||
FAIL_REGEX - List of additional regular expressions that, if matched by
|
||||
the output, give a failed result for the check. A common
|
||||
set of regular expressions will be included in addition to
|
||||
those given by FAIL_REGEX.
|
||||
OUTPUT_VARIABLE - Set <output> variable with details about any error.
|
||||
#]=]
|
||||
|
||||
include_guard(GLOBAL)
|
||||
include(CMakeCheckCompilerFlagCommonPatterns)
|
||||
|
||||
function(CMAKE_TRY_COMPILER_OR_LINKER_FLAG lang flag result)
|
||||
# Cache results between runs similar to check_<lang>_source_compiles()
|
||||
if(DEFINED ${result})
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(comment "Is the '${flag}' option(s) supported")
|
||||
string(REPLACE ";" " " comment "${comment}")
|
||||
|
||||
if (NOT lang MATCHES "^(C|CXX|Fortran|ASM)$")
|
||||
# other possible languages are not supported
|
||||
# log message to keep trace of this problem...
|
||||
message(CONFIGURE_LOG
|
||||
"Function 'CMAKE_CHECK_COMPILER_FLAG' called with unsupported language: ${lang}\n")
|
||||
set(${result} FALSE CACHE INTERNAL ${comment})
|
||||
return()
|
||||
endif()
|
||||
if (lang STREQUAL "ASM")
|
||||
# assume ASM compiler is a multi-language compiler, so supports C language as well
|
||||
set(check_lang C)
|
||||
else()
|
||||
set(check_lang ${lang})
|
||||
endif()
|
||||
|
||||
cmake_parse_arguments(CCCF "" "SRC_EXT;COMMAND_PATTERN;OUTPUT_VARIABLE" "FAIL_REGEX" ${ARGN})
|
||||
|
||||
if (NOT CCCF_COMMAND_PATTERN)
|
||||
set (CCCF_COMMAND_PATTERN "<FLAG> -o <OUTPUT> <SOURCE>")
|
||||
endif()
|
||||
|
||||
list (APPEND CCCF_FAIL_REGEX "argument unused during compilation") # clang
|
||||
if (check_lang STREQUAL "C")
|
||||
list(APPEND CCCF_FAIL_REGEX
|
||||
"command line option .* is valid for .* but not for C") # GNU
|
||||
elseif(check_lang STREQUAL "CXX")
|
||||
list(APPEND CCCF_FAIL_REGEX
|
||||
"command line option .* is valid for .* but not for C\\+\\+") # GNU
|
||||
elseif(check_lang STREQUAL "Fortran")
|
||||
list(APPEND CCCF_FAIL_REGEX
|
||||
"command line option .* is valid for .* but not for Fortran") # GNU
|
||||
endif()
|
||||
|
||||
# Add patterns for common errors
|
||||
check_compiler_flag_common_patterns(COMPILER_FLAG_COMMON_PATTERNS)
|
||||
foreach(arg IN LISTS COMPILER_FLAG_COMMON_PATTERNS)
|
||||
if(arg MATCHES "^FAIL_REGEX$")
|
||||
continue()
|
||||
endif()
|
||||
list(APPEND CCCF_FAIL_REGEX "${arg}")
|
||||
endforeach()
|
||||
|
||||
if(NOT CCCF_SRC_EXT)
|
||||
if (check_lang STREQUAL "C")
|
||||
set(CCCF_SRC_EXT c)
|
||||
elseif(check_lang STREQUAL "CXX")
|
||||
set(CCCF_SRC_EXT cxx)
|
||||
elseif(check_lang STREQUAL "Fortran")
|
||||
set(CCCF_SRC_EXT F)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (CCCF_OUTPUT_VARIABLE)
|
||||
unset(${CCCF_OUTPUT_VARIABLE} PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
# Compute the directory in which to run the test.
|
||||
set(COMPILER_FLAG_DIR "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp")
|
||||
# Compute source and output files.
|
||||
set(COMPILER_FLAG_SRC
|
||||
"${COMPILER_FLAG_DIR}/CompilerFlag${lang}.${CCCF_SRC_EXT}")
|
||||
if(check_lang STREQUAL "Fortran")
|
||||
file(WRITE "${COMPILER_FLAG_SRC}"
|
||||
" program simple\n end program simple\n")
|
||||
else()
|
||||
file(WRITE "${COMPILER_FLAG_SRC}" "int main (void)\n{ return 0; }\n")
|
||||
endif()
|
||||
get_filename_component(COMPILER_FLAG_EXE "${COMPILER_FLAG_SRC}" NAME_WE)
|
||||
string(APPEND COMPILER_FLAG_EXE "${CMAKE_EXECUTABLE_SUFFIX}")
|
||||
|
||||
# Build command line
|
||||
separate_arguments(CCCF_COMMAND_PATTERN UNIX_COMMAND
|
||||
"${CCCF_COMMAND_PATTERN}")
|
||||
list(TRANSFORM CCCF_COMMAND_PATTERN REPLACE "<SOURCE>" "${COMPILER_FLAG_SRC}")
|
||||
list(TRANSFORM CCCF_COMMAND_PATTERN REPLACE "<OUTPUT>" "${COMPILER_FLAG_EXE}")
|
||||
list(TRANSFORM CCCF_COMMAND_PATTERN REPLACE "<FLAG>" "${flag}")
|
||||
|
||||
execute_process(
|
||||
COMMAND "${CMAKE_COMMAND}" -E env LC_ALL=C LC_MESSAGES=C LANG=C
|
||||
"${CMAKE_${lang}_COMPILER}" ${CCCF_COMMAND_PATTERN}
|
||||
WORKING_DIRECTORY "${COMPILER_FLAG_DIR}"
|
||||
OUTPUT_VARIABLE COMPILER_FLAG_OUTPUT
|
||||
ERROR_VARIABLE COMPILER_FLAG_OUTPUT
|
||||
RESULT_VARIABLE COMPILER_FLAG_RESULT)
|
||||
|
||||
# Record result in the cache so we can avoid re-testing every CMake run
|
||||
if (COMPILER_FLAG_RESULT)
|
||||
set(${result} FALSE CACHE INTERNAL ${comment})
|
||||
else()
|
||||
foreach(regex IN LISTS CCCF_FAIL_REGEX)
|
||||
if(COMPILER_FLAG_OUTPUT MATCHES "${regex}")
|
||||
set(${result} FALSE CACHE INTERNAL ${comment})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
if (DEFINED ${result})
|
||||
message(CONFIGURE_LOG
|
||||
"Determining if the ${flag} option "
|
||||
"is supported for ${lang} language failed with the following output:\n"
|
||||
"${COMPILER_FLAG_OUTPUT}\n")
|
||||
if (CCCF_OUTPUT_VARIABLE)
|
||||
set(${CCCF_OUTPUT_VARIABLE} "${COMPILER_FLAG_OUTPUT}" PARENT_SCOPE)
|
||||
endif()
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(${result} TRUE CACHE INTERNAL ${comment})
|
||||
endfunction()
|
Binary file not shown.
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.4">
|
||||
<dict>
|
||||
<key>IFPkgDescriptionTitle</key>
|
||||
<string>@CPACK_PACKAGE_NAME@</string>
|
||||
<key>IFPkgDescriptionVersion</key>
|
||||
<string>@CPACK_PACKAGE_VERSION@</string>
|
||||
<key>IFPkgDescriptionDescription</key>
|
||||
<string>@CPACK_PACKAGE_DESCRIPTION@</string>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IFMajorVersion</key>
|
||||
<integer>@CPACK_PACKAGE_VERSION_MAJOR@</integer>
|
||||
<key>IFMinorVersion</key>
|
||||
<integer>@CPACK_PACKAGE_VERSION_MINOR@</integer>
|
||||
<key>IFPkgFlagAllowBackRev</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagAuthorizationAction</key>
|
||||
<string>AdminAuthorization</string>
|
||||
<key>IFPkgFlagDefaultLocation</key>
|
||||
<string>@CPACK_PACKAGE_DEFAULT_LOCATION@</string>
|
||||
<key>IFPkgFlagInstallFat</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagIsRequired</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagOverwritePermissions</key>
|
||||
<true/>
|
||||
<key>IFPkgFlagRelocatable</key>
|
||||
<@CPACK_PACKAGE_RELOCATABLE@/>
|
||||
<key>IFPkgFlagRestartAction</key>
|
||||
<string>NoRestart</string>
|
||||
<key>IFPkgFlagRootVolumeOnly</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagUpdateInstalledLanguages</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagUseUserMask</key>
|
||||
<false/>
|
||||
<key>IFPkgFormatVersion</key>
|
||||
<real>0.10000000149011612</real>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.@CPACK_PACKAGE_VENDOR@.@CPACK_PACKAGE_NAME@@CPACK_MODULE_VERSION_SUFFIX@</string>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||
<metadata>
|
||||
<!-- Required elements-->
|
||||
<id>@CPACK_NUGET_PACKAGE_NAME@</id>
|
||||
<version>@CPACK_NUGET_PACKAGE_VERSION@</version>
|
||||
<description>@CPACK_NUGET_PACKAGE_DESCRIPTION@</description>
|
||||
<authors>@CPACK_NUGET_PACKAGE_AUTHORS@</authors>
|
||||
|
||||
<!-- Optional elements -->
|
||||
@_CPACK_NUGET_TITLE_TAG@
|
||||
@_CPACK_NUGET_OWNERS_TAG@
|
||||
@_CPACK_NUGET_PROJECTURL_TAG@
|
||||
@_CPACK_NUGET_LICENSEURL_TAG@
|
||||
@_CPACK_NUGET_LICENSE_TAG@
|
||||
@_CPACK_NUGET_ICONURL_TAG@
|
||||
@_CPACK_NUGET_ICON_TAG@
|
||||
@_CPACK_NUGET_REQUIRELICENSEACCEPTANCE_TAG@
|
||||
@_CPACK_NUGET_SUMMARY_TAG@
|
||||
@_CPACK_NUGET_RELEASENOTES_TAG@
|
||||
@_CPACK_NUGET_COPYRIGHT_TAG@
|
||||
@_CPACK_NUGET_LANGUAGE_TAG@
|
||||
@_CPACK_NUGET_TAGS_TAG@
|
||||
@_CPACK_NUGET_DEPENDENCIES_TAG@
|
||||
</metadata>
|
||||
@_CPACK_NUGET_FILES_TAG@
|
||||
</package>
|
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>@CPACK_FILE_ASSOCIATION_EXTENSION@</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>@CPACK_FILE_ASSOCIATION_TYPE@</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>@CPACK_PACKAGE_FILE_NAME@</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>@CPACK_APPLE_GUI_INFO_STRING@</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>@CPACK_APPLE_GUI_ICON@</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>@CPACK_APPLE_GUI_IDENTIFIER@</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleLongVersionString</key>
|
||||
<string>@CPACK_APPLE_GUI_LONG_VERSION_STRING@</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>@CPACK_APPLE_GUI_BUNDLE_NAME@</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>@CPACK_APPLE_GUI_SHORT_VERSION_STRING@</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@CPACK_APPLE_GUI_BUNDLE_VERSION@</string>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>@CPACK_APPLE_GUI_COPYRIGHT@</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
@ -0,0 +1,87 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Modified from: Aaron Voisine <aaron@voisine.org>
|
||||
|
||||
CWD="`dirname \"$0\"`"
|
||||
TMP=/tmp/$(id -ru)/TemporaryItems
|
||||
|
||||
version=`sw_vers -productVersion`
|
||||
if [ "$?" = "0" ]; then
|
||||
major=${version%%\.*}
|
||||
rest=${version#*\.}
|
||||
minor=${rest%%\.*}
|
||||
build=${rest#*\.}
|
||||
else
|
||||
major=10
|
||||
minor=4
|
||||
build=0
|
||||
fi
|
||||
|
||||
echo $version
|
||||
echo "Major = $major"
|
||||
echo "Minor = $minor"
|
||||
echo "Build = $build"
|
||||
|
||||
|
||||
# if 10.5 or greater, then all the open-x11 stuff need not occur
|
||||
if [ "$major" -lt 10 ] || ([ "$major" -eq 10 ] && [ "$minor" -lt 5 ]); then
|
||||
version=`sw_vers -productVersion`
|
||||
if [ "$?" = "0" ]; then
|
||||
major=${version%%\.*}
|
||||
rest=${version#*\.}
|
||||
minor=${rest%%\.*}
|
||||
build=${rest#*\.}
|
||||
else
|
||||
major=10
|
||||
minor=4
|
||||
build=0
|
||||
fi
|
||||
|
||||
echo $version
|
||||
echo "Major = $major"
|
||||
echo "Minor = $minor"
|
||||
echo "Build = $build"
|
||||
|
||||
|
||||
# if 10.5 or greater, then all the open-x11 stuff need not occur
|
||||
if [ "$major" -lt 10 ] || ([ "$major" -eq 10 ] && [ "$minor" -lt 5 ]); then
|
||||
ps -wx -ocommand | grep -e '[X]11.app' > /dev/null
|
||||
if [ "$?" != "0" -a ! -f ~/.xinitrc ]; then
|
||||
echo "rm -f ~/.xinitrc" > ~/.xinitrc
|
||||
sed 's/xterm/# xterm/' /usr/X11R6/lib/X11/xinit/xinitrc >> ~/.xinitrc
|
||||
fi
|
||||
|
||||
mkdir -p $TMP
|
||||
cat << __END_OF_GETDISPLAY_SCRIPT__ > "$TMP/getdisplay.sh"
|
||||
#!/bin/sh
|
||||
mkdir -p "$TMP"
|
||||
|
||||
if [ "\$DISPLAY"x = "x" ]; then
|
||||
echo :0 > "$TMP/display"
|
||||
else
|
||||
echo \$DISPLAY > "$TMP/display"
|
||||
fi
|
||||
__END_OF_GETDISPLAY_SCRIPT__
|
||||
fi
|
||||
chmod +x "$TMP/getdisplay.sh"
|
||||
rm -f $TMP/display
|
||||
open-x11 $TMP/getdisplay.sh || \
|
||||
open -a XDarwin $TMP/getdisplay.sh || \
|
||||
echo ":0" > $TMP/display
|
||||
|
||||
while [ "$?" = "0" -a ! -f $TMP/display ];
|
||||
do
|
||||
#echo "Waiting for display $TMP/display"
|
||||
sleep 1;
|
||||
done
|
||||
export "DISPLAY=`cat $TMP/display`"
|
||||
|
||||
ps -wx -ocommand | grep -e '[X]11' > /dev/null || exit 11
|
||||
|
||||
cd ~/
|
||||
echo "$@" > /tmp/arguments.log
|
||||
if echo $1 | grep -- "^-psn_"; then
|
||||
shift
|
||||
fi
|
||||
fi
|
||||
exec "$CWD/bin/@CPACK_EXECUTABLE_NAME@" "$@" > /tmp/slicer.output 2>&1
|
@ -0,0 +1,149 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Display usage
|
||||
cpack_usage()
|
||||
{
|
||||
cat <<EOF
|
||||
Usage: $0 [options]
|
||||
Options: [defaults in brackets after descriptions]
|
||||
--help print this message
|
||||
--version print cmake installer version
|
||||
--prefix=dir directory in which to install
|
||||
--include-subdir include the @CPACK_PACKAGE_FILE_NAME@ subdirectory
|
||||
--exclude-subdir exclude the @CPACK_PACKAGE_FILE_NAME@ subdirectory
|
||||
--skip-license accept license
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
cpack_echo_exit()
|
||||
{
|
||||
echo $1
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Display version
|
||||
cpack_version()
|
||||
{
|
||||
echo "@CPACK_PACKAGE_NAME@ Installer Version: @CPACK_PACKAGE_VERSION@, Copyright (c) @CPACK_PACKAGE_VENDOR@"
|
||||
}
|
||||
|
||||
# Helper function to fix windows paths.
|
||||
cpack_fix_slashes ()
|
||||
{
|
||||
echo "$1" | sed 's/\\/\//g'
|
||||
}
|
||||
|
||||
interactive=TRUE
|
||||
cpack_skip_license=FALSE
|
||||
cpack_include_subdir=""
|
||||
for a in "$@CPACK_AT_SIGN@"; do
|
||||
if echo $a | grep "^--prefix=" > /dev/null 2> /dev/null; then
|
||||
cpack_prefix_dir=`echo $a | sed "s/^--prefix=//"`
|
||||
cpack_prefix_dir=`cpack_fix_slashes "${cpack_prefix_dir}"`
|
||||
fi
|
||||
if echo $a | grep "^--help" > /dev/null 2> /dev/null; then
|
||||
cpack_usage
|
||||
fi
|
||||
if echo $a | grep "^--version" > /dev/null 2> /dev/null; then
|
||||
cpack_version
|
||||
exit 2
|
||||
fi
|
||||
if echo $a | grep "^--include-subdir" > /dev/null 2> /dev/null; then
|
||||
cpack_include_subdir=TRUE
|
||||
fi
|
||||
if echo $a | grep "^--exclude-subdir" > /dev/null 2> /dev/null; then
|
||||
cpack_include_subdir=FALSE
|
||||
fi
|
||||
if echo $a | grep "^--skip-license" > /dev/null 2> /dev/null; then
|
||||
cpack_skip_license=TRUE
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "x${cpack_include_subdir}x" != "xx" -o "x${cpack_skip_license}x" = "xTRUEx" ]
|
||||
then
|
||||
interactive=FALSE
|
||||
fi
|
||||
|
||||
cpack_version
|
||||
echo "This is a self-extracting archive."
|
||||
toplevel="`pwd`"
|
||||
if [ "x${cpack_prefix_dir}x" != "xx" ]
|
||||
then
|
||||
toplevel="${cpack_prefix_dir}"
|
||||
fi
|
||||
|
||||
echo "The archive will be extracted to: ${toplevel}"
|
||||
|
||||
if [ "x${interactive}x" = "xTRUEx" ]
|
||||
then
|
||||
echo ""
|
||||
echo "If you want to stop extracting, please press <ctrl-C>."
|
||||
|
||||
if [ "x${cpack_skip_license}x" != "xTRUEx" ]
|
||||
then
|
||||
more << '____cpack__here_doc____'
|
||||
@CPACK_RESOURCE_FILE_LICENSE_CONTENT@
|
||||
____cpack__here_doc____
|
||||
echo
|
||||
while true
|
||||
do
|
||||
echo "Do you accept the license? [yn]: "
|
||||
read line leftover
|
||||
case ${line} in
|
||||
y* | Y*)
|
||||
cpack_license_accepted=TRUE
|
||||
break;;
|
||||
n* | N* | q* | Q* | e* | E*)
|
||||
echo "License not accepted. Exiting ..."
|
||||
exit 1;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "x${cpack_include_subdir}x" = "xx" ]
|
||||
then
|
||||
echo "By default the @CPACK_PACKAGE_NAME@ will be installed in:"
|
||||
echo " \"${toplevel}/@CPACK_PACKAGE_FILE_NAME@\""
|
||||
echo "Do you want to include the subdirectory @CPACK_PACKAGE_FILE_NAME@?"
|
||||
echo "Saying no will install in: \"${toplevel}\" [Yn]: "
|
||||
read line leftover
|
||||
cpack_include_subdir=TRUE
|
||||
case ${line} in
|
||||
n* | N*)
|
||||
cpack_include_subdir=FALSE
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "x${cpack_include_subdir}x" = "xTRUEx" ]
|
||||
then
|
||||
toplevel="${toplevel}/@CPACK_PACKAGE_FILE_NAME@"
|
||||
mkdir -p "${toplevel}"
|
||||
fi
|
||||
echo
|
||||
echo "Using target directory: ${toplevel}"
|
||||
echo "Extracting, please wait..."
|
||||
echo ""
|
||||
|
||||
# take the archive portion of this file and pipe it to tar
|
||||
# the NUMERIC parameter in this command should be one more
|
||||
# than the number of lines in this header file
|
||||
# there are tails which don't understand the "-n" argument, e.g. on SunOS
|
||||
# OTOH there are tails which complain when not using the "-n" argument (e.g. GNU)
|
||||
# so at first try to tail some file to see if tail fails if used with "-n"
|
||||
# if so, don't use "-n"
|
||||
use_new_tail_syntax="-n"
|
||||
tail $use_new_tail_syntax +1 "$0" > /dev/null 2> /dev/null || use_new_tail_syntax=""
|
||||
|
||||
extractor="pax -r"
|
||||
command -v pax > /dev/null 2> /dev/null || extractor="tar xf -"
|
||||
|
||||
tail $use_new_tail_syntax +###CPACK_HEADER_LENGTH### "$0" | gunzip | (cd "${toplevel}" && ${extractor}) || cpack_echo_exit "Problem unpacking the @CPACK_PACKAGE_FILE_NAME@"
|
||||
|
||||
echo "Unpacking finished successfully"
|
||||
|
||||
exit 0
|
||||
#-----------------------------------------------------------
|
||||
# Start of TAR.GZ file
|
||||
#-----------------------------------------------------------;
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<installer-gui-script minSpecVersion="1.0">
|
||||
<title>@CPACK_PACKAGE_NAME@</title>
|
||||
<welcome file="@CPACK_RESOURCE_FILE_WELCOME_NOPATH@"/>
|
||||
<readme file="@CPACK_RESOURCE_FILE_README_NOPATH@"/>
|
||||
<license file="@CPACK_RESOURCE_FILE_LICENSE_NOPATH@"/>
|
||||
@CPACK_APPLE_PKG_INSTALLER_CONTENT@
|
||||
</installer-gui-script>
|
@ -0,0 +1,803 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
# CPack script for creating Debian package
|
||||
# Author: Mathieu Malaterre
|
||||
#
|
||||
# http://wiki.debian.org/HowToPackageForDebian
|
||||
|
||||
if(CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally.")
|
||||
endif()
|
||||
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0057 NEW) # if IN_LIST
|
||||
|
||||
function(cpack_deb_variable_fallback OUTPUT_VAR_NAME)
|
||||
set(FALLBACK_VAR_NAMES ${ARGN})
|
||||
|
||||
foreach(variable_name IN LISTS FALLBACK_VAR_NAMES)
|
||||
if(${variable_name})
|
||||
set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(get_component_package_name var component)
|
||||
string(TOUPPER "${component}" component_upcase)
|
||||
if(CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME)
|
||||
string(TOLOWER "${CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME}" package_name)
|
||||
else()
|
||||
string(TOLOWER "${CPACK_DEBIAN_PACKAGE_NAME}-${component}" package_name)
|
||||
endif()
|
||||
|
||||
set("${var}" "${package_name}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
#extract library name and version for given shared object
|
||||
function(extract_so_info shared_object libname version)
|
||||
if(CPACK_READELF_EXECUTABLE)
|
||||
execute_process(COMMAND "${CPACK_READELF_EXECUTABLE}" -d "${shared_object}"
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE output
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(result EQUAL 0)
|
||||
string(REGEX MATCH "\\(?SONAME\\)?[^\n]*\\[([^\n]+)\\.so\\.([^\n]*)\\]" soname "${output}")
|
||||
set(${libname} "${CMAKE_MATCH_1}" PARENT_SCOPE)
|
||||
set(${version} "${CMAKE_MATCH_2}" PARENT_SCOPE)
|
||||
else()
|
||||
message(WARNING "Error running readelf for \"${shared_object}\"")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Readelf utility is not available.")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(cpack_deb_check_description SUMMARY LINES RESULT_VARIABLE)
|
||||
set(_result TRUE)
|
||||
|
||||
# Get the summary line
|
||||
if(NOT SUMMARY MATCHES "^[^\\s].*$")
|
||||
set(_result FALSE)
|
||||
set(${RESULT_VARIABLE} ${_result} PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
foreach(_line IN LISTS LINES)
|
||||
if(NOT _line MATCHES "^ +[^ ]+.*$")
|
||||
set(_result FALSE)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(${RESULT_VARIABLE} ${_result} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cpack_deb_format_package_description TEXT OUTPUT_VAR)
|
||||
# Turn the possible multi-line string into a list
|
||||
string(UUID uuid NAMESPACE 00000000-0000-0000-0000-000000000000 TYPE SHA1)
|
||||
string(REPLACE ";" "${uuid}" _text "${TEXT}")
|
||||
string(REPLACE "\n" ";" _lines "${_text}")
|
||||
list(POP_FRONT _lines _summary)
|
||||
|
||||
# If the description ends with a newline (e.g. typically if it was read
|
||||
# from a file) the last line will be empty. We drop it here, otherwise
|
||||
# it would be replaced by a `.` which would lead to the package violating
|
||||
# the extended-description-contains-empty-paragraph debian policy
|
||||
list(POP_BACK _lines _last_line)
|
||||
string(STRIP "${_last_line}" _last_line_strip)
|
||||
if(_last_line_strip)
|
||||
list(APPEND _lines "${_last_line_strip}")
|
||||
endif()
|
||||
|
||||
# Check if reformatting required
|
||||
cpack_deb_check_description("${_summary}" "${_lines}" _result)
|
||||
if(_result)
|
||||
# Ok, no formatting required
|
||||
set(${OUTPUT_VAR} "${TEXT}" PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Format the summary line
|
||||
string(STRIP "${_summary}" _summary)
|
||||
|
||||
# Make sure the rest formatted properly
|
||||
set(_result)
|
||||
foreach(_line IN LISTS _lines)
|
||||
string(STRIP "${_line}" _line_strip)
|
||||
if(NOT _line_strip)
|
||||
# Replace empty lines w/ a _single full stop character_
|
||||
set(_line " .")
|
||||
else()
|
||||
# Prepend the normal lines w/ a single space.
|
||||
# If the line already starts w/ at least one space,
|
||||
# it'll become _verbatim_ (assuming it supposed to be
|
||||
# verbatim in the original text).
|
||||
string(PREPEND _line " ")
|
||||
endif()
|
||||
list(APPEND _result "${_line}")
|
||||
endforeach()
|
||||
|
||||
list(PREPEND _result "${_summary}")
|
||||
list(JOIN _result "\n" _result)
|
||||
string(REPLACE "${uuid}" ";" _result "${_result}")
|
||||
set(${OUTPUT_VAR} "${_result}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cpack_deb_prepare_package_vars)
|
||||
# CPACK_DEBIAN_PACKAGE_SHLIBDEPS
|
||||
# If specify OFF, only user depends are used
|
||||
if(NOT DEFINED CPACK_DEBIAN_PACKAGE_SHLIBDEPS)
|
||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF)
|
||||
endif()
|
||||
|
||||
set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}")
|
||||
set(DBGSYMDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}-dbgsym")
|
||||
file(REMOVE_RECURSE "${DBGSYMDIR}")
|
||||
|
||||
# per component automatic discover: some of the component might not have
|
||||
# binaries.
|
||||
if(CPACK_DEB_PACKAGE_COMPONENT)
|
||||
string(TOUPPER "${CPACK_DEB_PACKAGE_COMPONENT}" _local_component_name)
|
||||
set(_component_shlibdeps_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_SHLIBDEPS")
|
||||
|
||||
# if set, overrides the global configuration
|
||||
if(DEFINED ${_component_shlibdeps_var})
|
||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS "${${_component_shlibdeps_var}}")
|
||||
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
||||
message("CPackDeb Debug: component '${CPACK_DEB_PACKAGE_COMPONENT}' dpkg-shlibdeps set to ${CPACK_DEBIAN_PACKAGE_SHLIBDEPS}")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
cpack_deb_variable_fallback("CPACK_DEBIAN_DEBUGINFO_PACKAGE"
|
||||
"CPACK_DEBIAN_${_local_component_name}_DEBUGINFO_PACKAGE"
|
||||
"CPACK_DEBIAN_DEBUGINFO_PACKAGE")
|
||||
if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OR CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS OR CPACK_DEBIAN_DEBUGINFO_PACKAGE)
|
||||
# Generating binary list - Get type of all install files
|
||||
file(GLOB_RECURSE FILE_PATHS_ LIST_DIRECTORIES false RELATIVE "${WDIR}" "${WDIR}/*")
|
||||
|
||||
find_program(FILE_EXECUTABLE file)
|
||||
if(NOT FILE_EXECUTABLE)
|
||||
message(FATAL_ERROR "CPackDeb: file utility is not available. CPACK_DEBIAN_PACKAGE_SHLIBDEPS and CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS options are not available.")
|
||||
endif()
|
||||
|
||||
# get file info so that we can determine if file is executable or not
|
||||
unset(CPACK_DEB_INSTALL_FILES)
|
||||
foreach(FILE_ IN LISTS FILE_PATHS_)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${FILE_EXECUTABLE} "./${FILE_}"
|
||||
WORKING_DIRECTORY "${WDIR}"
|
||||
RESULT_VARIABLE FILE_RESULT_
|
||||
OUTPUT_VARIABLE INSTALL_FILE_)
|
||||
if(NOT FILE_RESULT_ EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: execution of command: '${FILE_EXECUTABLE} ./${FILE_}' failed with exit code: ${FILE_RESULT_}")
|
||||
endif()
|
||||
list(APPEND CPACK_DEB_INSTALL_FILES "${INSTALL_FILE_}")
|
||||
endforeach()
|
||||
|
||||
# Only dynamically linked ELF files are included
|
||||
# Extract only file name infront of ":"
|
||||
foreach(_FILE IN LISTS CPACK_DEB_INSTALL_FILES)
|
||||
if(_FILE MATCHES "ELF.*dynamically linked")
|
||||
string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
|
||||
list(APPEND CPACK_DEB_BINARY_FILES "${CMAKE_MATCH_1}")
|
||||
set(CONTAINS_EXECUTABLE_FILES_ TRUE)
|
||||
endif()
|
||||
if(_FILE MATCHES "ELF.*shared object")
|
||||
string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
|
||||
list(APPEND CPACK_DEB_SHARED_OBJECT_FILES "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
if(_FILE MATCHES "ELF.*not stripped")
|
||||
string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
|
||||
list(APPEND CPACK_DEB_UNSTRIPPED_FILES "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
find_program(CPACK_READELF_EXECUTABLE NAMES readelf)
|
||||
|
||||
if(CPACK_DEBIAN_DEBUGINFO_PACKAGE AND CPACK_DEB_UNSTRIPPED_FILES)
|
||||
find_program(CPACK_OBJCOPY_EXECUTABLE NAMES objcopy)
|
||||
|
||||
if(NOT CPACK_OBJCOPY_EXECUTABLE)
|
||||
message(FATAL_ERROR "debuginfo packages require the objcopy tool")
|
||||
endif()
|
||||
if(NOT CPACK_READELF_EXECUTABLE)
|
||||
message(FATAL_ERROR "debuginfo packages require the readelf tool")
|
||||
endif()
|
||||
|
||||
file(RELATIVE_PATH _DBGSYM_ROOT "${CPACK_TEMPORARY_DIRECTORY}" "${DBGSYMDIR}")
|
||||
foreach(_FILE IN LISTS CPACK_DEB_UNSTRIPPED_FILES)
|
||||
|
||||
# Get the file's Build ID
|
||||
execute_process(COMMAND env LC_ALL=C ${CPACK_READELF_EXECUTABLE} -n "${_FILE}"
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
OUTPUT_VARIABLE READELF_OUTPUT
|
||||
RESULT_VARIABLE READELF_RESULT
|
||||
ERROR_VARIABLE READELF_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
if(NOT READELF_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: readelf: '${READELF_ERROR}';\n"
|
||||
"executed command: '${CPACK_READELF_EXECUTABLE} -n ${_FILE}'")
|
||||
endif()
|
||||
if(READELF_OUTPUT MATCHES "Build ID: ([0-9a-zA-Z][0-9a-zA-Z])([0-9a-zA-Z]*)")
|
||||
set(_BUILD_ID_START ${CMAKE_MATCH_1})
|
||||
set(_BUILD_ID_REMAINING ${CMAKE_MATCH_2})
|
||||
list(APPEND BUILD_IDS ${_BUILD_ID_START}${_BUILD_ID_REMAINING})
|
||||
else()
|
||||
message(FATAL_ERROR "Unable to determine Build ID for ${_FILE}")
|
||||
endif()
|
||||
|
||||
# Split out the debug symbols from the binaries
|
||||
set(_FILE_DBGSYM ${_DBGSYM_ROOT}/usr/lib/debug/.build-id/${_BUILD_ID_START}/${_BUILD_ID_REMAINING}.debug)
|
||||
get_filename_component(_OUT_DIR "${_FILE_DBGSYM}" DIRECTORY)
|
||||
file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/${_OUT_DIR}")
|
||||
execute_process(COMMAND ${CPACK_OBJCOPY_EXECUTABLE} --only-keep-debug "${_FILE}" "${_FILE_DBGSYM}"
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
OUTPUT_VARIABLE OBJCOPY_OUTPUT
|
||||
RESULT_VARIABLE OBJCOPY_RESULT
|
||||
ERROR_VARIABLE OBJCOPY_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
if(NOT OBJCOPY_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
|
||||
"executed command: '${CPACK_OBJCOPY_EXECUTABLE} --only-keep-debug ${_FILE} ${_FILE_DBGSYM}'")
|
||||
endif()
|
||||
execute_process(COMMAND ${CPACK_OBJCOPY_EXECUTABLE} --strip-unneeded ${_FILE}
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
OUTPUT_VARIABLE OBJCOPY_OUTPUT
|
||||
RESULT_VARIABLE OBJCOPY_RESULT
|
||||
ERROR_VARIABLE OBJCOPY_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
if(NOT OBJCOPY_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
|
||||
"executed command: '${CPACK_OBJCOPY_EXECUTABLE} --strip-debug ${_FILE}'")
|
||||
endif()
|
||||
execute_process(COMMAND ${CPACK_OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
OUTPUT_VARIABLE OBJCOPY_OUTPUT
|
||||
RESULT_VARIABLE OBJCOPY_RESULT
|
||||
ERROR_VARIABLE OBJCOPY_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
if(NOT OBJCOPY_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
|
||||
"executed command: '${CPACK_OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}'")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS)
|
||||
# dpkg-shlibdeps is a Debian utility for generating dependency list
|
||||
find_program(SHLIBDEPS_EXECUTABLE dpkg-shlibdeps)
|
||||
|
||||
if(SHLIBDEPS_EXECUTABLE)
|
||||
# Check version of the dpkg-shlibdeps tool using CPackDEB method
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --version
|
||||
OUTPUT_VARIABLE _TMP_VERSION
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(_TMP_VERSION MATCHES "dpkg-shlibdeps version ([0-9]+\\.[0-9]+\\.[0-9]+)")
|
||||
set(SHLIBDEPS_EXECUTABLE_VERSION "${CMAKE_MATCH_1}")
|
||||
else()
|
||||
unset(SHLIBDEPS_EXECUTABLE_VERSION)
|
||||
endif()
|
||||
|
||||
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
||||
message("CPackDeb Debug: dpkg-shlibdeps --version output is '${_TMP_VERSION}'")
|
||||
message("CPackDeb Debug: dpkg-shlibdeps version is <${SHLIBDEPS_EXECUTABLE_VERSION}>")
|
||||
endif()
|
||||
|
||||
if(CONTAINS_EXECUTABLE_FILES_)
|
||||
message("CPackDeb: - Generating dependency list")
|
||||
|
||||
# Create blank control file for running dpkg-shlibdeps
|
||||
# There might be some other way to invoke dpkg-shlibdeps without creating this file
|
||||
# but standard debian package should not have anything that can collide with this file or directory
|
||||
file(MAKE_DIRECTORY ${CPACK_TEMPORARY_DIRECTORY}/debian)
|
||||
file(WRITE ${CPACK_TEMPORARY_DIRECTORY}/debian/control "")
|
||||
|
||||
# Create a DEBIAN directory so that dpkg-shlibdeps can find the package dir when resolving $ORIGIN.
|
||||
file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/DEBIAN")
|
||||
|
||||
# Add --ignore-missing-info if the tool supports it
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --help
|
||||
OUTPUT_VARIABLE _TMP_HELP
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(_TMP_HELP MATCHES "--ignore-missing-info")
|
||||
set(IGNORE_MISSING_INFO_FLAG "--ignore-missing-info")
|
||||
endif()
|
||||
|
||||
if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS)
|
||||
unset(PRIVATE_SEARCH_DIR_OPTIONS)
|
||||
# Add -l option if the tool supports it
|
||||
if(DEFINED SHLIBDEPS_EXECUTABLE_VERSION AND SHLIBDEPS_EXECUTABLE_VERSION VERSION_GREATER_EQUAL 1.17.0)
|
||||
foreach(dir IN LISTS CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS)
|
||||
list(APPEND PRIVATE_SEARCH_DIR_OPTIONS "-l${dir}")
|
||||
endforeach()
|
||||
else()
|
||||
message(WARNING "CPackDeb: dkpg-shlibdeps is too old. \"CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS\" is therefore ignored.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Execute dpkg-shlibdeps
|
||||
# --ignore-missing-info : allow dpkg-shlibdeps to run even if some libs do not belong to a package
|
||||
# -l<dir>: make dpkg-shlibdeps also search in this directory for (private) shared library dependencies
|
||||
# -O : print to STDOUT
|
||||
execute_process(COMMAND ${SHLIBDEPS_EXECUTABLE} ${PRIVATE_SEARCH_DIR_OPTIONS} ${IGNORE_MISSING_INFO_FLAG} -O ${CPACK_DEB_BINARY_FILES}
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
OUTPUT_VARIABLE SHLIBDEPS_OUTPUT
|
||||
RESULT_VARIABLE SHLIBDEPS_RESULT
|
||||
ERROR_VARIABLE SHLIBDEPS_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
|
||||
# E2K OSL 6.0.1 and prior has broken dpkg-shlibdeps. CPack will deal with that (mocking SHLIBDEPS_OUTPUT), but inform user of this.
|
||||
if("${SHLIBDEPS_ERROR}" MATCHES "unknown gcc system type e2k.*, falling back to default")
|
||||
message(WARNING "CPackDeb: broken dpkg-shlibdeps on E2K detected, will fall back to minimal dependencies.\n"
|
||||
"You should expect that dependencies list in the package will be incomplete.")
|
||||
set(SHLIBDEPS_OUTPUT "shlibs:Depends=libc6, lcc-libs")
|
||||
endif()
|
||||
|
||||
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
||||
# dpkg-shlibdeps will throw some warnings if some input files are not binary
|
||||
message( "CPackDeb Debug: dpkg-shlibdeps warnings \n${SHLIBDEPS_ERROR}")
|
||||
endif()
|
||||
if(NOT SHLIBDEPS_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: dpkg-shlibdeps: '${SHLIBDEPS_ERROR}';\n"
|
||||
"executed command: '${SHLIBDEPS_EXECUTABLE} ${PRIVATE_SEARCH_DIR_OPTIONS} ${IGNORE_MISSING_INFO_FLAG} -O ${CPACK_DEB_BINARY_FILES}';\n"
|
||||
"found files: '${INSTALL_FILE_}';\n"
|
||||
"files info: '${CPACK_DEB_INSTALL_FILES}';\n"
|
||||
"binary files: '${CPACK_DEB_BINARY_FILES}'")
|
||||
endif()
|
||||
|
||||
#Get rid of prefix generated by dpkg-shlibdeps
|
||||
string(REGEX REPLACE "^.*Depends=" "" CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS "${SHLIBDEPS_OUTPUT}")
|
||||
|
||||
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
||||
message("CPackDeb Debug: Found dependency: ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS} from output ${SHLIBDEPS_OUTPUT}")
|
||||
endif()
|
||||
|
||||
# Remove blank control file
|
||||
# Might not be safe if package actual contain file or directory named debian
|
||||
file(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/debian")
|
||||
|
||||
# remove temporary directory that was created only for dpkg-shlibdeps execution
|
||||
file(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/DEBIAN")
|
||||
else()
|
||||
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
||||
message(AUTHOR_WARNING "CPackDeb Debug: Using only user-provided depends because package does not contain executable files that link to shared libraries.")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
message("CPackDeb: Using only user-provided dependencies because dpkg-shlibdeps is not found.")
|
||||
endif()
|
||||
|
||||
else()
|
||||
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
||||
message("CPackDeb Debug: Using only user-provided dependencies")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Let's define the control file found in debian package:
|
||||
|
||||
# Binary package:
|
||||
# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles
|
||||
|
||||
# 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()
|
||||
|
||||
# Version: (mandatory)
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_VERSION)
|
||||
if(NOT CPACK_PACKAGE_VERSION)
|
||||
message(FATAL_ERROR "CPackDeb: Debian package requires a package version")
|
||||
endif()
|
||||
set(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
|
||||
endif()
|
||||
|
||||
if(DEFINED CPACK_DEBIAN_PACKAGE_RELEASE OR DEFINED CPACK_DEBIAN_PACKAGE_EPOCH)
|
||||
# only test the version format if CPACK_DEBIAN_PACKAGE_RELEASE or
|
||||
# CPACK_DEBIAN_PACKAGE_EPOCH is set
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_VERSION MATCHES "^[0-9][A-Za-z0-9.+~-]*$")
|
||||
message(FATAL_ERROR
|
||||
"CPackDeb: Debian package version must confirm to \"^[0-9][A-Za-z0-9.+~-]*$\" regex!")
|
||||
endif()
|
||||
else()
|
||||
# before CMake 3.10 version format was not tested so only warn to preserve
|
||||
# backward compatibility
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_VERSION MATCHES "^([0-9]+:)?[0-9][A-Za-z0-9.+~-]*$")
|
||||
message(AUTHOR_WARNING
|
||||
"CPackDeb: Debian package versioning ([<epoch>:]<version>[-<release>])"
|
||||
" should confirm to \"^([0-9]+:)?[0-9][A-Za-z0-9.+~-]*$\" regex in"
|
||||
" order to satisfy Debian packaging rules.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CPACK_DEBIAN_PACKAGE_RELEASE)
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_RELEASE MATCHES "^[A-Za-z0-9.+~]+$")
|
||||
message(FATAL_ERROR
|
||||
"CPackDeb: Debian package release must confirm to \"^[A-Za-z0-9.+~]+$\" regex!")
|
||||
endif()
|
||||
string(APPEND CPACK_DEBIAN_PACKAGE_VERSION
|
||||
"-${CPACK_DEBIAN_PACKAGE_RELEASE}")
|
||||
elseif(DEFINED CPACK_DEBIAN_PACKAGE_EPOCH)
|
||||
# only test the version format if CPACK_DEBIAN_PACKAGE_RELEASE or
|
||||
# CPACK_DEBIAN_PACKAGE_EPOCH is set - versions CPack/Deb generator before
|
||||
# CMake 3.10 did not check for version format so we have to preserve
|
||||
# backward compatibility
|
||||
if(CPACK_DEBIAN_PACKAGE_VERSION MATCHES ".*-.*")
|
||||
message(FATAL_ERROR
|
||||
"CPackDeb: Debian package version must not contain hyphens when CPACK_DEBIAN_PACKAGE_RELEASE is not provided!")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CPACK_DEBIAN_PACKAGE_EPOCH)
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_EPOCH MATCHES "^[0-9]+$")
|
||||
message(FATAL_ERROR
|
||||
"CPackDeb: Debian package epoch must confirm to \"^[0-9]+$\" regex!")
|
||||
endif()
|
||||
set(CPACK_DEBIAN_PACKAGE_VERSION
|
||||
"${CPACK_DEBIAN_PACKAGE_EPOCH}:${CPACK_DEBIAN_PACKAGE_VERSION}")
|
||||
endif()
|
||||
|
||||
# Architecture: (mandatory)
|
||||
if(CPACK_DEB_PACKAGE_COMPONENT AND CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE)
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE}")
|
||||
elseif(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
|
||||
# There is no such thing as i686 architecture on debian, you should use i386 instead
|
||||
# $ dpkg --print-architecture
|
||||
find_program(DPKG_CMD dpkg)
|
||||
if(NOT DPKG_CMD)
|
||||
message(STATUS "CPackDeb: Can not find dpkg in your path, default to i386.")
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386)
|
||||
endif()
|
||||
execute_process(COMMAND "${DPKG_CMD}" --print-architecture
|
||||
OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
endif()
|
||||
|
||||
# Source: (optional)
|
||||
# in case several packages are constructed from a unique source
|
||||
# (multipackaging), the source may be indicated as well.
|
||||
# The source might contain a version if the generated package
|
||||
# version is different from the source version
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_SOURCE)
|
||||
set(CPACK_DEBIAN_PACKAGE_SOURCE "")
|
||||
endif()
|
||||
|
||||
# have a look at get_property(result GLOBAL PROPERTY ENABLED_FEATURES),
|
||||
# this returns the successful find_package() calls, maybe this can help
|
||||
# Depends:
|
||||
# You should set: DEBIAN_PACKAGE_DEPENDS
|
||||
# TODO: automate 'objdump -p | grep NEEDED'
|
||||
|
||||
# if per-component variable, overrides the global CPACK_DEBIAN_PACKAGE_${variable_type_}
|
||||
# automatic dependency discovery will be performed afterwards.
|
||||
if(CPACK_DEB_PACKAGE_COMPONENT)
|
||||
foreach(value_type_ IN ITEMS DEPENDS RECOMMENDS SUGGESTS PREDEPENDS ENHANCES BREAKS CONFLICTS PROVIDES REPLACES SOURCE SECTION PRIORITY NAME)
|
||||
set(_component_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_${value_type_}")
|
||||
|
||||
# if set, overrides the global variable
|
||||
if(DEFINED ${_component_var})
|
||||
set(CPACK_DEBIAN_PACKAGE_${value_type_} "${${_component_var}}")
|
||||
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
||||
message("CPackDeb Debug: component '${_local_component_name}' ${value_type_} "
|
||||
"value set to '${CPACK_DEBIAN_PACKAGE_${value_type_}}'")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS)
|
||||
unset(COMPONENT_DEPENDS)
|
||||
foreach(_PACK IN LISTS CPACK_COMPONENT_${_local_component_name}_DEPENDS)
|
||||
get_component_package_name(_PACK_NAME "${_PACK}")
|
||||
list(PREPEND COMPONENT_DEPENDS "${_PACK_NAME} (= ${CPACK_DEBIAN_PACKAGE_VERSION})")
|
||||
endforeach()
|
||||
list(JOIN COMPONENT_DEPENDS ", " COMPONENT_DEPENDS)
|
||||
if(COMPONENT_DEPENDS)
|
||||
list(PREPEND CPACK_DEBIAN_PACKAGE_DEPENDS ${COMPONENT_DEPENDS})
|
||||
list(JOIN CPACK_DEBIAN_PACKAGE_DEPENDS ", " CPACK_DEBIAN_PACKAGE_DEPENDS)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# at this point, the CPACK_DEBIAN_PACKAGE_DEPENDS is properly set
|
||||
# to the minimal dependency of the package
|
||||
# Append automatically discovered dependencies .
|
||||
if(CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS)
|
||||
list(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS})
|
||||
list(JOIN CPACK_DEBIAN_PACKAGE_DEPENDS ", " CPACK_DEBIAN_PACKAGE_DEPENDS)
|
||||
endif()
|
||||
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
|
||||
message(STATUS "CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.")
|
||||
endif()
|
||||
|
||||
# Maintainer: (mandatory)
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
|
||||
if(NOT CPACK_PACKAGE_CONTACT)
|
||||
message(FATAL_ERROR "CPackDeb: Debian package requires a maintainer for a package, set CPACK_PACKAGE_CONTACT or CPACK_DEBIAN_PACKAGE_MAINTAINER")
|
||||
endif()
|
||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT})
|
||||
endif()
|
||||
|
||||
# Description: (mandatory)
|
||||
# Try package description first
|
||||
if(CPACK_USED_DEFAULT_PACKAGE_DESCRIPTION_FILE)
|
||||
set(_desc_fallback)
|
||||
else()
|
||||
set(_desc_fallback "CPACK_PACKAGE_DESCRIPTION")
|
||||
endif()
|
||||
if(CPACK_DEB_PACKAGE_COMPONENT)
|
||||
cpack_deb_variable_fallback("CPACK_DEBIAN_PACKAGE_DESCRIPTION"
|
||||
"CPACK_DEBIAN_${_local_component_name}_DESCRIPTION"
|
||||
"CPACK_COMPONENT_${_local_component_name}_DESCRIPTION")
|
||||
else()
|
||||
cpack_deb_variable_fallback("CPACK_DEBIAN_PACKAGE_DESCRIPTION"
|
||||
"CPACK_DEBIAN_PACKAGE_DESCRIPTION"
|
||||
${_desc_fallback})
|
||||
endif()
|
||||
|
||||
# Still no description? ... and description file has set ...
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION
|
||||
AND CPACK_PACKAGE_DESCRIPTION_FILE
|
||||
AND NOT CPACK_PACKAGE_DESCRIPTION_FILE STREQUAL CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE)
|
||||
# Read `CPACK_PACKAGE_DESCRIPTION_FILE` then...
|
||||
file(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_DEBIAN_PACKAGE_DESCRIPTION)
|
||||
endif()
|
||||
|
||||
# Still no description? #2
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION)
|
||||
# Try to get `CPACK_PACKAGE_DESCRIPTION_SUMMARY` as the last hope
|
||||
if(CPACK_PACKAGE_DESCRIPTION_SUMMARY)
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
|
||||
else()
|
||||
# Giving up! Report an error...
|
||||
set(_description_failure_message
|
||||
"CPackDeb: Debian package requires a summary for a package, set CPACK_PACKAGE_DESCRIPTION_SUMMARY or CPACK_DEBIAN_PACKAGE_DESCRIPTION")
|
||||
if(CPACK_DEB_PACKAGE_COMPONENT)
|
||||
string(APPEND _description_failure_message
|
||||
" or CPACK_DEBIAN_${_local_component_name}_DESCRIPTION")
|
||||
endif()
|
||||
message(FATAL_ERROR "${_description_failure_message}")
|
||||
endif()
|
||||
|
||||
# Ok, description has set. According to the `Debian Policy Manual`_ the first
|
||||
# line is a package summary. Try to get it as well...
|
||||
# See also: https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
|
||||
elseif(CPACK_PACKAGE_DESCRIPTION_SUMMARY AND
|
||||
NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY STREQUAL CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY)
|
||||
# Merge summary w/ the detailed description
|
||||
string(PREPEND CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}\n")
|
||||
endif()
|
||||
# assert(CPACK_DEBIAN_PACKAGE_DESCRIPTION)
|
||||
|
||||
# Make sure description is properly formatted
|
||||
cpack_deb_format_package_description(
|
||||
"${CPACK_DEBIAN_PACKAGE_DESCRIPTION}"
|
||||
CPACK_DEBIAN_PACKAGE_DESCRIPTION
|
||||
)
|
||||
|
||||
# Homepage: (optional)
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_HOMEPAGE AND CPACK_PACKAGE_HOMEPAGE_URL)
|
||||
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${CPACK_PACKAGE_HOMEPAGE_URL}")
|
||||
endif()
|
||||
|
||||
# Section: (recommended)
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_SECTION)
|
||||
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
|
||||
endif()
|
||||
|
||||
# Priority: (recommended)
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_PRIORITY)
|
||||
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
||||
endif()
|
||||
|
||||
if(CPACK_DEBIAN_ARCHIVE_TYPE)
|
||||
if(CPACK_DEBIAN_ARCHIVE_TYPE STREQUAL "paxr")
|
||||
message(DEPRECATION "CPACK_DEBIAN_ARCHIVE_TYPE set to old and invalid "
|
||||
"type 'paxr', mapping to 'gnutar'")
|
||||
set(CPACK_DEBIAN_ARCHIVE_TYPE "gnutar")
|
||||
elseif(NOT CPACK_DEBIAN_ARCHIVE_TYPE STREQUAL "gnutar")
|
||||
message(FATAL_ERROR "CPACK_DEBIAN_ARCHIVE_TYPE set to unsupported"
|
||||
"type ${CPACK_DEBIAN_ARCHIVE_TYPE}")
|
||||
endif()
|
||||
else()
|
||||
set(CPACK_DEBIAN_ARCHIVE_TYPE "gnutar")
|
||||
endif()
|
||||
|
||||
# Compression: (recommended)
|
||||
if(NOT CPACK_DEBIAN_COMPRESSION_TYPE)
|
||||
set(CPACK_DEBIAN_COMPRESSION_TYPE "gzip")
|
||||
endif()
|
||||
|
||||
# Recommends:
|
||||
# You should set: CPACK_DEBIAN_PACKAGE_RECOMMENDS
|
||||
|
||||
# Suggests:
|
||||
# You should set: CPACK_DEBIAN_PACKAGE_SUGGESTS
|
||||
|
||||
# CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
||||
# This variable allow advanced user to add custom script to the control.tar.gz (inside the .deb archive)
|
||||
# Typical examples are:
|
||||
# - conffiles
|
||||
# - postinst
|
||||
# - postrm
|
||||
# - prerm
|
||||
# Usage:
|
||||
# set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
||||
# "${CMAKE_CURRENT_SOURCE_DIR}/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
|
||||
|
||||
# Are we packaging components ?
|
||||
if(CPACK_DEB_PACKAGE_COMPONENT)
|
||||
# override values with per component version if set
|
||||
foreach(VAR_NAME_ IN ITEMS PACKAGE_CONTROL_EXTRA PACKAGE_CONTROL_STRICT_PERMISSION)
|
||||
if(CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_})
|
||||
set(CPACK_DEBIAN_${VAR_NAME_} "${CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_}}")
|
||||
endif()
|
||||
endforeach()
|
||||
get_component_package_name(CPACK_DEBIAN_PACKAGE_NAME ${_local_component_name})
|
||||
endif()
|
||||
|
||||
if(NOT CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY)
|
||||
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY "=")
|
||||
endif()
|
||||
|
||||
unset(CPACK_DEBIAN_PACKAGE_SHLIBS_LIST)
|
||||
|
||||
if(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS)
|
||||
if(CPACK_READELF_EXECUTABLE)
|
||||
foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES)
|
||||
extract_so_info("${_FILE}" libname soversion)
|
||||
if(libname AND DEFINED soversion)
|
||||
list(APPEND CPACK_DEBIAN_PACKAGE_SHLIBS_LIST
|
||||
"${libname} ${soversion} ${CPACK_DEBIAN_PACKAGE_NAME} (${CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY} ${CPACK_DEBIAN_PACKAGE_VERSION})")
|
||||
else()
|
||||
message(AUTHOR_WARNING "Shared library '${_FILE}' is missing soname or soversion. Library will not be added to DEBIAN/shlibs control file.")
|
||||
endif()
|
||||
endforeach()
|
||||
list(JOIN CPACK_DEBIAN_PACKAGE_SHLIBS_LIST "\n" CPACK_DEBIAN_PACKAGE_SHLIBS_LIST)
|
||||
else()
|
||||
message(FATAL_ERROR "Readelf utility is not available. CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS option is not available.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# add ldconfig call in default postrm and postint
|
||||
set(CPACK_ADD_LDCONFIG_CALL 0)
|
||||
# all files in CPACK_DEB_SHARED_OBJECT_FILES have dot at the beginning
|
||||
set(_LDCONF_DEFAULTS "./lib" "./usr/lib")
|
||||
foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES)
|
||||
get_filename_component(_DIR ${_FILE} DIRECTORY)
|
||||
get_filename_component(_PARENT_DIR ${_DIR} DIRECTORY)
|
||||
if(_DIR IN_LIST _LDCONF_DEFAULTS OR _PARENT_DIR IN_LIST _LDCONF_DEFAULTS)
|
||||
set(CPACK_ADD_LDCONFIG_CALL 1)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(CPACK_ADD_LDCONFIG_CALL)
|
||||
set(CPACK_DEBIAN_GENERATE_POSTINST 1)
|
||||
set(CPACK_DEBIAN_GENERATE_POSTRM 1)
|
||||
foreach(f IN LISTS CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA)
|
||||
get_filename_component(n "${f}" NAME)
|
||||
if(n STREQUAL "postinst")
|
||||
set(CPACK_DEBIAN_GENERATE_POSTINST 0)
|
||||
endif()
|
||||
if(n STREQUAL "postrm")
|
||||
set(CPACK_DEBIAN_GENERATE_POSTRM 0)
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
set(CPACK_DEBIAN_GENERATE_POSTINST 0)
|
||||
set(CPACK_DEBIAN_GENERATE_POSTRM 0)
|
||||
endif()
|
||||
|
||||
cpack_deb_variable_fallback("CPACK_DEBIAN_FILE_NAME"
|
||||
"CPACK_DEBIAN_${_local_component_name}_FILE_NAME"
|
||||
"CPACK_DEBIAN_FILE_NAME")
|
||||
if(CPACK_DEBIAN_FILE_NAME)
|
||||
if(CPACK_DEBIAN_FILE_NAME STREQUAL "DEB-DEFAULT")
|
||||
# Patch package file name to be in correct debian format:
|
||||
# <foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
|
||||
set(CPACK_OUTPUT_FILE_NAME
|
||||
"${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
|
||||
set(CPACK_DBGSYM_OUTPUT_FILE_NAME
|
||||
"${CPACK_DEBIAN_PACKAGE_NAME}-dbgsym_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.ddeb")
|
||||
else()
|
||||
if(NOT CPACK_DEBIAN_FILE_NAME MATCHES ".*\\.(deb|ipk)")
|
||||
message(FATAL_ERROR "'${CPACK_DEBIAN_FILE_NAME}' is not a valid DEB package file name as it must end with '.deb' or '.ipk'!")
|
||||
endif()
|
||||
|
||||
set(CPACK_OUTPUT_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}")
|
||||
string(REGEX REPLACE "\.deb$" "-dbgsym.ddeb" CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}")
|
||||
endif()
|
||||
|
||||
set(CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_OUTPUT_FILE_NAME}")
|
||||
get_filename_component(BINARY_DIR "${CPACK_OUTPUT_FILE_PATH}" DIRECTORY)
|
||||
set(CPACK_OUTPUT_FILE_PATH "${BINARY_DIR}/${CPACK_OUTPUT_FILE_NAME}")
|
||||
else()
|
||||
# back compatibility - don't change the name
|
||||
string(REGEX REPLACE "\.deb$" "-dbgsym.ddeb" CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}")
|
||||
endif()
|
||||
|
||||
# Print out some debug information if we were asked for that
|
||||
if(CPACK_DEBIAN_PACKAGE_DEBUG)
|
||||
message("CPackDeb:Debug: CPACK_TOPLEVEL_DIRECTORY = '${CPACK_TOPLEVEL_DIRECTORY}'")
|
||||
message("CPackDeb:Debug: CPACK_TOPLEVEL_TAG = '${CPACK_TOPLEVEL_TAG}'")
|
||||
message("CPackDeb:Debug: CPACK_TEMPORARY_DIRECTORY = '${CPACK_TEMPORARY_DIRECTORY}'")
|
||||
message("CPackDeb:Debug: CPACK_OUTPUT_FILE_NAME = '${CPACK_OUTPUT_FILE_NAME}'")
|
||||
message("CPackDeb:Debug: CPACK_OUTPUT_FILE_PATH = '${CPACK_OUTPUT_FILE_PATH}'")
|
||||
message("CPackDeb:Debug: CPACK_PACKAGE_FILE_NAME = '${CPACK_PACKAGE_FILE_NAME}'")
|
||||
message("CPackDeb:Debug: CPACK_PACKAGE_INSTALL_DIRECTORY = '${CPACK_PACKAGE_INSTALL_DIRECTORY}'")
|
||||
message("CPackDeb:Debug: CPACK_TEMPORARY_PACKAGE_FILE_NAME = '${CPACK_TEMPORARY_PACKAGE_FILE_NAME}'")
|
||||
message("CPackDeb:Debug: CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION = '${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}'")
|
||||
message("CPackDeb:Debug: CPACK_DEBIAN_PACKAGE_SOURCE = '${CPACK_DEBIAN_PACKAGE_SOURCE}'")
|
||||
endif()
|
||||
|
||||
# For debian source packages:
|
||||
# debian/control
|
||||
# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles
|
||||
|
||||
# .dsc
|
||||
# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-debiansourcecontrolfiles
|
||||
|
||||
# Builds-Depends:
|
||||
#if(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS)
|
||||
# set(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS
|
||||
# "debhelper (>> 5.0.0), libncurses5-dev, tcl8.4"
|
||||
# )
|
||||
#endif()
|
||||
|
||||
# move variables to parent scope so that they may be used to create debian package
|
||||
set(GEN_CPACK_OUTPUT_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TEMPORARY_PACKAGE_FILE_NAME}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_DEBIAN_PACKAGE_VERSION}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_SECTION "${CPACK_DEBIAN_PACKAGE_SECTION}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_PRIORITY "${CPACK_DEBIAN_PACKAGE_PRIORITY}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_DEBIAN_PACKAGE_MAINTAINER}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_DEBIAN_PACKAGE_DESCRIPTION}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_ARCHIVE_TYPE "${CPACK_DEBIAN_ARCHIVE_TYPE}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_COMPRESSION_TYPE "${CPACK_DEBIAN_COMPRESSION_TYPE}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_RECOMMENDS "${CPACK_DEBIAN_PACKAGE_RECOMMENDS}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_SUGGESTS "${CPACK_DEBIAN_PACKAGE_SUGGESTS}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_HOMEPAGE "${CPACK_DEBIAN_PACKAGE_HOMEPAGE}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_PREDEPENDS "${CPACK_DEBIAN_PACKAGE_PREDEPENDS}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_ENHANCES "${CPACK_DEBIAN_PACKAGE_ENHANCES}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_BREAKS "${CPACK_DEBIAN_PACKAGE_BREAKS}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_CONFLICTS "${CPACK_DEBIAN_PACKAGE_CONFLICTS}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_PROVIDES "${CPACK_DEBIAN_PACKAGE_PROVIDES}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_REPLACES}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_SHLIBS "${CPACK_DEBIAN_PACKAGE_SHLIBS_LIST}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
|
||||
"${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_PACKAGE_SOURCE
|
||||
"${CPACK_DEBIAN_PACKAGE_SOURCE}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_GENERATE_POSTINST "${CPACK_DEBIAN_GENERATE_POSTINST}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DEBIAN_GENERATE_POSTRM "${CPACK_DEBIAN_GENERATE_POSTRM}" PARENT_SCOPE)
|
||||
set(GEN_WDIR "${WDIR}" PARENT_SCOPE)
|
||||
|
||||
set(GEN_CPACK_DEBIAN_DEBUGINFO_PACKAGE "${CPACK_DEBIAN_DEBUGINFO_PACKAGE}" PARENT_SCOPE)
|
||||
if(BUILD_IDS)
|
||||
set(GEN_DBGSYMDIR "${DBGSYMDIR}" PARENT_SCOPE)
|
||||
set(GEN_CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_DBGSYM_OUTPUT_FILE_NAME}" PARENT_SCOPE)
|
||||
list(JOIN BUILD_IDS " " BUILD_IDS)
|
||||
set(GEN_BUILD_IDS "${BUILD_IDS}" PARENT_SCOPE)
|
||||
else()
|
||||
unset(GEN_DBGSYMDIR PARENT_SCOPE)
|
||||
unset(GEN_CPACK_DBGSYM_OUTPUT_FILE_NAME PARENT_SCOPE)
|
||||
unset(GEN_BUILD_IDS PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
cpack_deb_prepare_package_vars()
|
||||
|
||||
cmake_policy(POP)
|
@ -0,0 +1,53 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
if(NOT "${CPACK_EXTERNAL_REQUESTED_VERSIONS}" STREQUAL "")
|
||||
unset(_found_major)
|
||||
|
||||
foreach(_req_version IN LISTS CPACK_EXTERNAL_REQUESTED_VERSIONS)
|
||||
if(_req_version MATCHES "^([0-9]+)\\.([0-9]+)$")
|
||||
set(_req_major "${CMAKE_MATCH_1}")
|
||||
set(_req_minor "${CMAKE_MATCH_2}")
|
||||
|
||||
foreach(_known_version IN LISTS CPACK_EXTERNAL_KNOWN_VERSIONS)
|
||||
string(REGEX MATCH
|
||||
"^([0-9]+)\\.([0-9]+)$"
|
||||
_known_version_dummy
|
||||
"${_known_version}"
|
||||
)
|
||||
|
||||
set(_known_major "${CMAKE_MATCH_1}")
|
||||
set(_known_minor "${CMAKE_MATCH_2}")
|
||||
|
||||
if(_req_major EQUAL _known_major AND NOT _known_minor LESS _req_minor)
|
||||
set(_found_major "${_known_major}")
|
||||
set(_found_minor "${_known_minor}")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(DEFINED _found_major)
|
||||
break()
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(DEFINED _found_major)
|
||||
set(CPACK_EXTERNAL_SELECTED_MAJOR "${_found_major}")
|
||||
set(CPACK_EXTERNAL_SELECTED_MINOR "${_found_minor}")
|
||||
set(CPACK_EXTERNAL_SELECTED_VERSION "${_found_major}.${_found_minor}")
|
||||
else()
|
||||
message(FATAL_ERROR
|
||||
"Could not find a suitable version in CPACK_EXTERNAL_REQUESTED_VERSIONS"
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
list(GET CPACK_EXTERNAL_KNOWN_VERSIONS 0 CPACK_EXTERNAL_SELECTED_VERSION)
|
||||
string(REGEX MATCH
|
||||
"^([0-9]+)\\.([0-9]+)$"
|
||||
_dummy
|
||||
"${CPACK_EXTERNAL_SELECTED_VERSION}"
|
||||
)
|
||||
set(CPACK_EXTERNAL_SELECTED_MAJOR "${CMAKE_MATCH_1}")
|
||||
set(CPACK_EXTERNAL_SELECTED_MINOR "${CMAKE_MATCH_2}")
|
||||
endif()
|
@ -0,0 +1,107 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
|
||||
if(CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR "CPackFreeBSD.cmake may only be used by CPack internally.")
|
||||
endif()
|
||||
|
||||
if(NOT UNIX)
|
||||
message(FATAL_ERROR "CPackFreeBSD.cmake may only be used under UNIX.")
|
||||
endif()
|
||||
|
||||
|
||||
###
|
||||
#
|
||||
# These bits are copied from the Debian packaging file; slightly modified.
|
||||
# They are used for filling in FreeBSD-packaging variables that can take
|
||||
# on values from elsewhere -- e.g. the package description may as well be
|
||||
# copied from Debian.
|
||||
#
|
||||
function(_cpack_freebsd_fallback_var OUTPUT_VAR_NAME)
|
||||
set(FALLBACK_VAR_NAMES ${ARGN})
|
||||
|
||||
set(VALUE "${${OUTPUT_VAR_NAME}}")
|
||||
if(VALUE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
foreach(variable_name IN LISTS FALLBACK_VAR_NAMES)
|
||||
if(${variable_name})
|
||||
set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE)
|
||||
set(VALUE "${${variable_name}}")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
if(NOT VALUE)
|
||||
message(WARNING "Variable ${OUTPUT_VAR_NAME} could not be given a fallback value from (any of) ${FALLBACK_VAR_NAMES}.")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(check_required_var VAR_NAME)
|
||||
if(NOT ${VAR_NAME})
|
||||
message(FATAL_ERROR "Variable ${VAR_NAME} is not set.")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
set(_cpack_freebsd_fallback_origin "misc/bogus")
|
||||
|
||||
_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_NAME"
|
||||
"CPACK_PACKAGE_NAME"
|
||||
"CMAKE_PROJECT_NAME"
|
||||
)
|
||||
|
||||
set(_cpack_freebsd_fallback_www "http://example.com/?pkg=${CPACK_FREEBSD_PACKAGE_NAME}")
|
||||
|
||||
_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_COMMENT"
|
||||
"CPACK_PACKAGE_DESCRIPTION_SUMMARY"
|
||||
)
|
||||
|
||||
# TODO: maybe read the PACKAGE_DESCRIPTION file for the longer
|
||||
# FreeBSD pkg-descr?
|
||||
_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_DESCRIPTION"
|
||||
"CPACK_DEBIAN_PACKAGE_DESCRIPTION"
|
||||
"CPACK_PACKAGE_DESCRIPTION_SUMMARY"
|
||||
"PACKAGE_DESCRIPTION"
|
||||
)
|
||||
|
||||
# There's really only one homepage for a project, so
|
||||
# re-use the Debian setting if it's there.
|
||||
_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_WWW"
|
||||
"CPACK_PACKAGE_HOMEPAGE_URL"
|
||||
"CPACK_DEBIAN_PACKAGE_HOMEPAGE"
|
||||
"_cpack_freebsd_fallback_www"
|
||||
)
|
||||
|
||||
_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_VERSION"
|
||||
"CMAKE_PROJECT_VERSION"
|
||||
"${CMAKE_PROJECT_NAME}_VERSION"
|
||||
"PROJECT_VERSION"
|
||||
"CPACK_PACKAGE_VERSION"
|
||||
"CPACK_PACKAGE_VERSION"
|
||||
)
|
||||
|
||||
_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_MAINTAINER"
|
||||
"CPACK_PACKAGE_CONTACT"
|
||||
)
|
||||
|
||||
_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_LICENSE"
|
||||
"CPACK_RPM_PACKAGE_LICENSE"
|
||||
)
|
||||
|
||||
_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_ORIGIN"
|
||||
"_cpack_freebsd_fallback_origin"
|
||||
)
|
||||
|
||||
if(NOT CPACK_FREEBSD_PACKAGE_CATEGORIES)
|
||||
string(REGEX REPLACE "/.*" "" CPACK_FREEBSD_PACKAGE_CATEGORIES ${CPACK_FREEBSD_PACKAGE_ORIGIN})
|
||||
endif()
|
||||
|
||||
check_required_var("CPACK_FREEBSD_PACKAGE_NAME")
|
||||
check_required_var("CPACK_FREEBSD_PACKAGE_ORIGIN")
|
||||
check_required_var("CPACK_FREEBSD_PACKAGE_VERSION")
|
||||
check_required_var("CPACK_FREEBSD_PACKAGE_MAINTAINER")
|
||||
check_required_var("CPACK_FREEBSD_PACKAGE_COMMENT")
|
||||
check_required_var("CPACK_FREEBSD_PACKAGE_DESCRIPTION")
|
||||
check_required_var("CPACK_FREEBSD_PACKAGE_WWW")
|
||||
check_required_var("CPACK_FREEBSD_PACKAGE_LICENSE")
|
@ -0,0 +1,442 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
# Author: Alex Turbov
|
||||
|
||||
if(CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR "CPackNuGet.cmake may only be used by CPack internally.")
|
||||
endif()
|
||||
|
||||
function(_cpack_nuget_debug)
|
||||
if(CPACK_NUGET_PACKAGE_DEBUG)
|
||||
message("CPackNuGet:Debug: " ${ARGN})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(_cpack_nuget_debug_var NAME)
|
||||
if(CPACK_NUGET_PACKAGE_DEBUG)
|
||||
message("CPackNuGet:Debug: ${NAME}=`${${NAME}}`")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(_cpack_nuget_variable_fallback OUTPUT_VAR_NAME NUGET_VAR_NAME)
|
||||
if(ARGN)
|
||||
list(JOIN ARGN "`, `" _va_args)
|
||||
set(_va_args ", ARGN: `${_va_args}`")
|
||||
endif()
|
||||
_cpack_nuget_debug(
|
||||
"_cpack_nuget_variable_fallback: "
|
||||
"OUTPUT_VAR_NAME=`${OUTPUT_VAR_NAME}`, "
|
||||
"NUGET_VAR_NAME=`${NUGET_VAR_NAME}`"
|
||||
"${_va_args}"
|
||||
)
|
||||
|
||||
set(_options USE_CDATA)
|
||||
set(_one_value_args LIST_GLUE)
|
||||
set(_multi_value_args FALLBACK_VARS)
|
||||
cmake_parse_arguments(PARSE_ARGV 0 _args "${_options}" "${_one_value_args}" "${_multi_value_args}")
|
||||
|
||||
if(CPACK_NUGET_PACKAGE_COMPONENT)
|
||||
string(
|
||||
TOUPPER "${CPACK_NUGET_PACKAGE_COMPONENT}"
|
||||
CPACK_NUGET_PACKAGE_COMPONENT_UPPER
|
||||
)
|
||||
endif()
|
||||
|
||||
if(CPACK_NUGET_PACKAGE_COMPONENT
|
||||
AND CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_PACKAGE_${NUGET_VAR_NAME}
|
||||
)
|
||||
set(
|
||||
_result
|
||||
"${CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_PACKAGE_${NUGET_VAR_NAME}}"
|
||||
)
|
||||
_cpack_nuget_debug(
|
||||
" CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_PACKAGE_${NUGET_VAR_NAME}: "
|
||||
"OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
|
||||
)
|
||||
|
||||
elseif(CPACK_NUGET_PACKAGE_COMPONENT_UPPER
|
||||
AND CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_${NUGET_VAR_NAME}
|
||||
)
|
||||
set(
|
||||
_result
|
||||
"${CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_${NUGET_VAR_NAME}}"
|
||||
)
|
||||
_cpack_nuget_debug(
|
||||
" CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_${NUGET_VAR_NAME}: "
|
||||
"OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
|
||||
)
|
||||
|
||||
elseif(CPACK_NUGET_PACKAGE_${NUGET_VAR_NAME})
|
||||
set(_result "${CPACK_NUGET_PACKAGE_${NUGET_VAR_NAME}}")
|
||||
_cpack_nuget_debug(
|
||||
" CPACK_NUGET_PACKAGE_${NUGET_VAR_NAME}: "
|
||||
"OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
|
||||
)
|
||||
|
||||
else()
|
||||
foreach(_var IN LISTS _args_FALLBACK_VARS)
|
||||
_cpack_nuget_debug(" Fallback: ${_var} ...")
|
||||
if(${_var})
|
||||
_cpack_nuget_debug(" ${_var}=`${${_var}}`")
|
||||
set(_result "${${_var}}")
|
||||
_cpack_nuget_debug(
|
||||
" ${_var}: OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
|
||||
)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if(_result)
|
||||
if(_args_USE_CDATA)
|
||||
set(_value_before "<![CDATA[")
|
||||
set(_value_after "]]>")
|
||||
endif()
|
||||
|
||||
list(LENGTH _result _result_len)
|
||||
if(_result_len GREATER 1 AND _args_LIST_GLUE)
|
||||
list(JOIN _result "${_args_LIST_GLUE}" _result)
|
||||
endif()
|
||||
|
||||
set(${OUTPUT_VAR_NAME} "${_value_before}${_result}${_value_after}" PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
|
||||
function(_cpack_nuget_variable_fallback_and_wrap_into_element ELEMENT NUGET_VAR_NAME)
|
||||
set(_options)
|
||||
set(_one_value_args)
|
||||
set(_multi_value_args FALLBACK_VARS ATTRIBUTES)
|
||||
cmake_parse_arguments(PARSE_ARGV 2 _args "${_options}" "${_one_value_args}" "${_multi_value_args}")
|
||||
|
||||
if(_args_ATTRIBUTES)
|
||||
list(JOIN _args_ATTRIBUTES " " _attributes)
|
||||
string(PREPEND _attributes " ")
|
||||
endif()
|
||||
|
||||
_cpack_nuget_variable_fallback(_value ${NUGET_VAR_NAME} ${ARGN} USE_CDATA)
|
||||
|
||||
string(TOUPPER "${ELEMENT}" _ELEMENT_UP)
|
||||
if(_value)
|
||||
set(
|
||||
_CPACK_NUGET_${_ELEMENT_UP}_TAG
|
||||
"<${ELEMENT}${_attributes}>${_value}</${ELEMENT}>"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
elseif(_attributes)
|
||||
set(
|
||||
_CPACK_NUGET_${_ELEMENT_UP}_TAG
|
||||
"<${ELEMENT}${_attributes} />"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Warn of obsolete nuspec fields, referencing CMake variables and suggested
|
||||
# replacement, if any
|
||||
function(_cpack_nuget_deprecation_warning NUGET_ELEMENT VARNAME REPLACEMENT)
|
||||
if(${VARNAME})
|
||||
if(REPLACEMENT)
|
||||
message(DEPRECATION "nuspec element `${NUGET_ELEMENT}` is deprecated in NuGet; consider replacing `${VARNAME}` with `${REPLACEMENT}`")
|
||||
else()
|
||||
message(DEPRECATION "nuspec element `${NUGET_ELEMENT}` is deprecated in NuGet; consider removing `${VARNAME}`")
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Print some debug info
|
||||
_cpack_nuget_debug("---[CPack NuGet Input Variables]---")
|
||||
_cpack_nuget_debug_var(CPACK_PACKAGE_NAME)
|
||||
_cpack_nuget_debug_var(CPACK_PACKAGE_VERSION)
|
||||
_cpack_nuget_debug_var(CPACK_TOPLEVEL_TAG)
|
||||
_cpack_nuget_debug_var(CPACK_TOPLEVEL_DIRECTORY)
|
||||
_cpack_nuget_debug_var(CPACK_TEMPORARY_DIRECTORY)
|
||||
_cpack_nuget_debug_var(CPACK_NUGET_GROUPS)
|
||||
if(CPACK_NUGET_GROUPS)
|
||||
foreach(_group IN LISTS CPACK_NUGET_GROUPS)
|
||||
string(MAKE_C_IDENTIFIER "${_group}" _group_up)
|
||||
string(TOUPPER "${_group_up}" _group_up)
|
||||
_cpack_nuget_debug_var(CPACK_NUGET_${_group_up}_GROUP_COMPONENTS)
|
||||
endforeach()
|
||||
endif()
|
||||
_cpack_nuget_debug_var(CPACK_NUGET_COMPONENTS)
|
||||
_cpack_nuget_debug_var(CPACK_NUGET_ALL_IN_ONE)
|
||||
_cpack_nuget_debug_var(CPACK_NUGET_ORDINAL_MONOLITIC)
|
||||
_cpack_nuget_debug("-----------------------------------")
|
||||
|
||||
function(_cpack_nuget_render_spec)
|
||||
# Make a variable w/ upper-cased component name
|
||||
if(CPACK_NUGET_PACKAGE_COMPONENT)
|
||||
string(TOUPPER "${CPACK_NUGET_PACKAGE_COMPONENT}" CPACK_NUGET_PACKAGE_COMPONENT_UPPER)
|
||||
endif()
|
||||
|
||||
# Set mandatory variables (not wrapped into XML elements)
|
||||
# https://docs.microsoft.com/en-us/nuget/reference/nuspec#required-metadata-elements
|
||||
if(CPACK_NUGET_PACKAGE_COMPONENT)
|
||||
if(CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME)
|
||||
set(
|
||||
CPACK_NUGET_PACKAGE_NAME
|
||||
"${CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME}"
|
||||
)
|
||||
elseif(NOT CPACK_NUGET_PACKAGE_COMPONENT STREQUAL "Unspecified")
|
||||
set(
|
||||
CPACK_NUGET_PACKAGE_NAME
|
||||
"${CPACK_PACKAGE_NAME}.${CPACK_NUGET_PACKAGE_COMPONENT}"
|
||||
)
|
||||
else()
|
||||
set(CPACK_NUGET_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
|
||||
endif()
|
||||
elseif(NOT CPACK_NUGET_PACKAGE_NAME)
|
||||
set(CPACK_NUGET_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
|
||||
endif()
|
||||
|
||||
# Warn about deprecated nuspec elements; warnings only display if
|
||||
# variable is set
|
||||
# Note that while nuspec's "summary" element is deprecated, there
|
||||
# is no suggested replacement so (for now) no deprecation warning
|
||||
# is shown for `CPACK_NUGET_*_DESCRIPTION_SUMMARY`
|
||||
_cpack_nuget_deprecation_warning("licenseUrl" CPACK_NUGET_PACKAGE_LICENSEURL
|
||||
"CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME or CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION")
|
||||
_cpack_nuget_deprecation_warning("licenseUrl" CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_LICENSEURL
|
||||
"CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_LICENSE_FILE_NAME or CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_LICENSE_EXPRESSION")
|
||||
_cpack_nuget_deprecation_warning("iconUrl" CPACK_NUGET_PACKAGE_ICONURL
|
||||
"CPACK_NUGET_PACKAGE_ICON")
|
||||
_cpack_nuget_deprecation_warning("iconUrl" CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_ICONURL
|
||||
"CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_ICON")
|
||||
|
||||
# Set nuspec fields
|
||||
_cpack_nuget_variable_fallback(
|
||||
CPACK_NUGET_PACKAGE_VERSION VERSION
|
||||
FALLBACK_VARS
|
||||
CPACK_PACKAGE_VERSION
|
||||
)
|
||||
_cpack_nuget_variable_fallback(
|
||||
CPACK_NUGET_PACKAGE_DESCRIPTION DESCRIPTION
|
||||
FALLBACK_VARS
|
||||
CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT}_DESCRIPTION
|
||||
CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DESCRIPTION
|
||||
CPACK_COMPONENT_GROUP_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DESCRIPTION
|
||||
CPACK_PACKAGE_DESCRIPTION
|
||||
USE_CDATA
|
||||
)
|
||||
_cpack_nuget_variable_fallback(
|
||||
CPACK_NUGET_PACKAGE_AUTHORS AUTHORS
|
||||
FALLBACK_VARS
|
||||
CPACK_PACKAGE_VENDOR
|
||||
USE_CDATA
|
||||
LIST_GLUE ","
|
||||
)
|
||||
|
||||
# Set optional variables (wrapped into XML elements)
|
||||
# https://docs.microsoft.com/en-us/nuget/reference/nuspec#optional-metadata-elements
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(
|
||||
title
|
||||
TITLE
|
||||
FALLBACK_VARS
|
||||
CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT}_DISPLAY_NAME
|
||||
CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DISPLAY_NAME
|
||||
CPACK_COMPONENT_GROUP_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DISPLAY_NAME
|
||||
)
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(owners OWNERS LIST_GLUE ",")
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(
|
||||
projectUrl
|
||||
HOMEPAGE_URL
|
||||
FALLBACK_VARS
|
||||
CPACK_PACKAGE_HOMEPAGE_URL
|
||||
)
|
||||
|
||||
# "licenseUrl" is deprecated in favor of "license"
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(licenseUrl LICENSEURL)
|
||||
|
||||
# "iconUrl" is deprecated in favor of "icon"
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(iconUrl ICONURL)
|
||||
|
||||
# "license" takes a "type" attribute of either "file" or "expression"
|
||||
# "file" refers to a file path of a .txt or .md file relative to the installation root
|
||||
# "expression" refers to simple or compound expression of license identifiers
|
||||
# listed at https://spdx.org/licenses/
|
||||
# Note that only one of CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME and
|
||||
# CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION may be specified. If both are specified,
|
||||
# CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME takes precedence and CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION is ignored.
|
||||
if(CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME)
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(
|
||||
license LICENSE_FILE_NAME
|
||||
ATTRIBUTES [[type="file"]]
|
||||
)
|
||||
elseif(CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION)
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(
|
||||
license LICENSE_EXPRESSION
|
||||
ATTRIBUTES [[type="expression"]]
|
||||
)
|
||||
endif()
|
||||
|
||||
# "icon" refers to a file path relative to the installation root
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(icon ICON)
|
||||
# "summary" is deprecated in favor of "description"
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(
|
||||
summary DESCRIPTION_SUMMARY
|
||||
FALLBACK_VARS
|
||||
CPACK_PACKAGE_DESCRIPTION_SUMMARY
|
||||
)
|
||||
if(CPACK_NUGET_PACKAGE_REQUIRE_LICENSE_ACCEPTANCE)
|
||||
set(
|
||||
_CPACK_NUGET_REQUIRELICENSEACCEPTANCE_TAG
|
||||
"<requireLicenseAcceptance>true</requireLicenseAcceptance>"
|
||||
)
|
||||
endif()
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(releaseNotes RELEASE_NOTES)
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(copyright COPYRIGHT)
|
||||
# "language" is a locale identifier such as "en_CA"
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(language LANGUAGE)
|
||||
_cpack_nuget_variable_fallback_and_wrap_into_element(tags TAGS LIST_GLUE " ")
|
||||
# "repository" holds repository metadata consisting of four optional
|
||||
# attributes: "type", "url", "branch", and "commit". While all fields are
|
||||
# considered optional, they are not independent. Currently unsupported.
|
||||
|
||||
# Handle dependencies
|
||||
_cpack_nuget_variable_fallback(_deps DEPENDENCIES)
|
||||
set(_collected_deps)
|
||||
foreach(_dep IN LISTS _deps)
|
||||
_cpack_nuget_debug(" checking dependency `${_dep}`")
|
||||
|
||||
_cpack_nuget_variable_fallback(_ver DEPENDENCIES_${_dep}_VERSION)
|
||||
|
||||
if(NOT _ver)
|
||||
string(TOUPPER "${_dep}" _dep_upper)
|
||||
_cpack_nuget_variable_fallback(_ver DEPENDENCIES_${_dep_upper}_VERSION)
|
||||
endif()
|
||||
|
||||
if(_ver)
|
||||
_cpack_nuget_debug(" got `${_dep}` dependency version ${_ver}")
|
||||
string(CONCAT _collected_deps "${_collected_deps}" " <dependency id=\"${_dep}\" version=\"${_ver}\" />\n")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Render deps into the variable
|
||||
if(_collected_deps)
|
||||
string(CONCAT _CPACK_NUGET_DEPENDENCIES_TAG "<dependencies>\n" "${_collected_deps}" " </dependencies>")
|
||||
endif()
|
||||
|
||||
# Render the spec file
|
||||
# NOTE The spec filename doesn't matter. Being included into a package,
|
||||
# NuGet will name it properly.
|
||||
_cpack_nuget_debug("Rendering `${CPACK_TEMPORARY_DIRECTORY}/CPack.NuGet.nuspec` file...")
|
||||
configure_file(
|
||||
"${CMAKE_ROOT}/Modules/Internal/CPack/CPack.NuGet.nuspec.in"
|
||||
"${CPACK_TEMPORARY_DIRECTORY}/CPack.NuGet.nuspec"
|
||||
@ONLY
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(_cpack_nuget_make_files_tag)
|
||||
set(_files)
|
||||
foreach(_comp IN LISTS ARGN)
|
||||
cmake_path(APPEND _comp "**")
|
||||
cmake_path(NATIVE_PATH _comp _comp)
|
||||
string(APPEND _files " <file src=\"${_comp}\" target=\".\" />\n")
|
||||
endforeach()
|
||||
set(_CPACK_NUGET_FILES_TAG "<files>\n${_files} </files>" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
find_program(NUGET_EXECUTABLE nuget)
|
||||
_cpack_nuget_debug_var(NUGET_EXECUTABLE)
|
||||
if(NOT NUGET_EXECUTABLE)
|
||||
message(FATAL_ERROR "NuGet executable not found")
|
||||
endif()
|
||||
|
||||
# Add details for debug run
|
||||
if(CPACK_NUGET_PACKAGE_DEBUG)
|
||||
list(APPEND CPACK_NUGET_PACK_ADDITIONAL_OPTIONS "-Verbosity" "detailed")
|
||||
endif()
|
||||
|
||||
# Case one: ordinal all-in-one package
|
||||
if(CPACK_NUGET_ORDINAL_MONOLITIC)
|
||||
# This variable `CPACK_NUGET_ALL_IN_ONE` set by C++ code:
|
||||
# Meaning to pack all installed files into a single package
|
||||
_cpack_nuget_debug("---[Making an ordinal monolitic package]---")
|
||||
_cpack_nuget_render_spec()
|
||||
execute_process(
|
||||
COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
RESULT_VARIABLE _nuget_result
|
||||
)
|
||||
if(NOT _nuget_result EQUAL 0)
|
||||
message(FATAL_ERROR "Nuget pack failed")
|
||||
endif()
|
||||
|
||||
elseif(CPACK_NUGET_ALL_IN_ONE)
|
||||
# This variable `CPACK_NUGET_ALL_IN_ONE` set by C++ code:
|
||||
# Meaning to pack all installed components into a single package
|
||||
_cpack_nuget_debug("---[Making a monolitic package from installed components]---")
|
||||
|
||||
# Prepare the `files` element which include files from several components
|
||||
_cpack_nuget_make_files_tag(${CPACK_NUGET_COMPONENTS})
|
||||
_cpack_nuget_render_spec()
|
||||
execute_process(
|
||||
COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
RESULT_VARIABLE _nuget_result
|
||||
)
|
||||
if(NOT _nuget_result EQUAL 0)
|
||||
message(FATAL_ERROR "Nuget pack failed")
|
||||
endif()
|
||||
|
||||
else()
|
||||
# Is there any grouped component?
|
||||
if(CPACK_NUGET_GROUPS)
|
||||
_cpack_nuget_debug("---[Making grouped component(s) package(s)]---")
|
||||
foreach(_group IN LISTS CPACK_NUGET_GROUPS)
|
||||
_cpack_nuget_debug("Starting to make the package for group `${_group}`")
|
||||
string(MAKE_C_IDENTIFIER "${_group}" _group_up)
|
||||
string(TOUPPER "${_group_up}" _group_up)
|
||||
|
||||
# Render a spec file which includes all components in the current group
|
||||
unset(_CPACK_NUGET_FILES_TAG)
|
||||
_cpack_nuget_make_files_tag(${CPACK_NUGET_${_group_up}_GROUP_COMPONENTS})
|
||||
# Temporary set `CPACK_NUGET_PACKAGE_COMPONENT` to the group name
|
||||
# to properly collect various per group settings
|
||||
set(CPACK_NUGET_PACKAGE_COMPONENT ${_group})
|
||||
_cpack_nuget_render_spec()
|
||||
unset(CPACK_NUGET_PACKAGE_COMPONENT)
|
||||
execute_process(
|
||||
COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
RESULT_VARIABLE _nuget_result
|
||||
)
|
||||
if(NOT _nuget_result EQUAL 0)
|
||||
message(FATAL_ERROR "Nuget pack failed")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
# Is there any single component package needed?
|
||||
if(CPACK_NUGET_COMPONENTS)
|
||||
_cpack_nuget_debug("---[Making single-component(s) package(s)]---")
|
||||
foreach(_comp IN LISTS CPACK_NUGET_COMPONENTS)
|
||||
_cpack_nuget_debug("Starting to make the package for component `${_comp}`")
|
||||
# Render a spec file which includes only given component
|
||||
unset(_CPACK_NUGET_FILES_TAG)
|
||||
_cpack_nuget_make_files_tag(${_comp})
|
||||
# Temporary set `CPACK_NUGET_PACKAGE_COMPONENT` to the current
|
||||
# component name to properly collect various per group settings
|
||||
set(CPACK_NUGET_PACKAGE_COMPONENT ${_comp})
|
||||
_cpack_nuget_render_spec()
|
||||
unset(CPACK_NUGET_PACKAGE_COMPONENT)
|
||||
execute_process(
|
||||
COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
RESULT_VARIABLE _nuget_result
|
||||
)
|
||||
if(NOT _nuget_result EQUAL 0)
|
||||
message(FATAL_ERROR "Nuget pack failed")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
file(GLOB_RECURSE GEN_CPACK_OUTPUT_FILES "${CPACK_TEMPORARY_DIRECTORY}/*.nupkg")
|
||||
if(NOT GEN_CPACK_OUTPUT_FILES)
|
||||
message(FATAL_ERROR "NuGet package was not generated at `${CPACK_TEMPORARY_DIRECTORY}`!")
|
||||
endif()
|
||||
|
||||
_cpack_nuget_debug("Generated files: ${GEN_CPACK_OUTPUT_FILES}")
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,20 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
if(NOT CPACK_WIX_ROOT)
|
||||
string(REPLACE "\\" "/" CPACK_WIX_ROOT "$ENV{WIX}")
|
||||
endif()
|
||||
|
||||
find_program(CPACK_WIX_CANDLE_EXECUTABLE candle
|
||||
PATHS "${CPACK_WIX_ROOT}" PATH_SUFFIXES "bin")
|
||||
|
||||
if(NOT CPACK_WIX_CANDLE_EXECUTABLE)
|
||||
message(FATAL_ERROR "Could not find the WiX candle executable.")
|
||||
endif()
|
||||
|
||||
find_program(CPACK_WIX_LIGHT_EXECUTABLE light
|
||||
PATHS "${CPACK_WIX_ROOT}" PATH_SUFFIXES "bin")
|
||||
|
||||
if(NOT CPACK_WIX_LIGHT_EXECUTABLE)
|
||||
message(FATAL_ERROR "Could not find the WiX light executable.")
|
||||
endif()
|
@ -0,0 +1,30 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
|
||||
if(CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR "CPackZIP.cmake may only be used by CPack internally.")
|
||||
endif()
|
||||
|
||||
find_program(ZIP_EXECUTABLE wzzip PATHS "$ENV{ProgramFiles}/WinZip")
|
||||
if(ZIP_EXECUTABLE)
|
||||
set(CPACK_ZIP_COMMAND "\"${ZIP_EXECUTABLE}\" -P \"<ARCHIVE>\" @<FILELIST>")
|
||||
set(CPACK_ZIP_NEED_QUOTES TRUE)
|
||||
endif()
|
||||
|
||||
if(NOT ZIP_EXECUTABLE)
|
||||
find_program(ZIP_EXECUTABLE 7z PATHS "$ENV{ProgramFiles}/7-Zip")
|
||||
if(ZIP_EXECUTABLE)
|
||||
set(CPACK_ZIP_COMMAND "\"${ZIP_EXECUTABLE}\" a -tzip \"<ARCHIVE>\" @<FILELIST>")
|
||||
set(CPACK_ZIP_NEED_QUOTES TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT ZIP_EXECUTABLE)
|
||||
find_package(Cygwin)
|
||||
find_program(ZIP_EXECUTABLE zip PATHS "${CYGWIN_INSTALL_PATH}/bin")
|
||||
if(ZIP_EXECUTABLE)
|
||||
set(CPACK_ZIP_COMMAND "\"${ZIP_EXECUTABLE}\" -r \"<ARCHIVE>\" . -i@<FILELIST>")
|
||||
set(CPACK_ZIP_NEED_QUOTES FALSE)
|
||||
endif()
|
||||
endif()
|
@ -0,0 +1,88 @@
|
||||
{ Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file Copyright.txt or https://cmake.org/licensing for details. }
|
||||
|
||||
function CPackGetCustomInstallationMessage(Param: String): String;
|
||||
begin
|
||||
Result := SetupMessage(msgCustomInstallation);
|
||||
end;
|
||||
|
||||
{ Downloaded components }
|
||||
#ifdef CPackDownloadCount
|
||||
const
|
||||
NO_PROGRESS_BOX = 4;
|
||||
RESPOND_YES_TO_ALL = 16;
|
||||
var
|
||||
CPackDownloadPage: TDownloadWizardPage;
|
||||
CPackShell: Variant;
|
||||
|
||||
<event('InitializeWizard')>
|
||||
procedure CPackInitializeWizard();
|
||||
begin
|
||||
CPackDownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), nil);
|
||||
CPackShell := CreateOleObject('Shell.Application');
|
||||
end;
|
||||
|
||||
<event('NextButtonClick')>
|
||||
function CPackNextButtonClick(CurPageID: Integer): Boolean;
|
||||
begin
|
||||
if CurPageID = wpReady then
|
||||
begin
|
||||
CPackDownloadPage.Clear;
|
||||
CPackDownloadPage.Show;
|
||||
|
||||
#sub AddDownload
|
||||
if WizardIsComponentSelected('{#CPackDownloadComponents[i]}') then
|
||||
#emit "CPackDownloadPage.Add('" + CPackDownloadUrls[i] + "', '" + CPackDownloadArchives[i] + ".zip', '" + CPackDownloadHashes[i] + "');"
|
||||
#endsub
|
||||
#define i
|
||||
#for {i = 0; i < CPackDownloadCount; i++} AddDownload
|
||||
#undef i
|
||||
|
||||
try
|
||||
try
|
||||
CPackDownloadPage.Download;
|
||||
Result := True;
|
||||
except
|
||||
if not CPackDownloadPage.AbortedByUser then
|
||||
SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbCriticalError, MB_OK, IDOK);
|
||||
|
||||
Result := False;
|
||||
end;
|
||||
finally
|
||||
CPackDownloadPage.Hide;
|
||||
end;
|
||||
end else
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
procedure CPackExtractFile(ArchiveName, FileName: String);
|
||||
var
|
||||
ZipFileName: String;
|
||||
ZipFile: Variant;
|
||||
Item: Variant;
|
||||
TargetFolderName: String;
|
||||
TargetFolder: Variant;
|
||||
begin
|
||||
TargetFolderName := RemoveBackslashUnlessRoot(ExpandConstant('{tmp}\' + ArchiveName + '\' + ExtractFileDir(FileName)));
|
||||
ZipFileName := ExpandConstant('{tmp}\' + ArchiveName + '.zip');
|
||||
|
||||
if not DirExists(TargetFolderName) then
|
||||
if not ForceDirectories(TargetFolderName) then
|
||||
RaiseException(Format('Target path "%s" cannot be created', [TargetFolderName]));
|
||||
|
||||
ZipFile := CPackShell.NameSpace(ZipFileName);
|
||||
if VarIsClear(ZipFile) then
|
||||
RaiseException(Format('Cannot open ZIP file "%s" or does not exist', [ZipFileName]));
|
||||
|
||||
Item := ZipFile.ParseName(FileName);
|
||||
if VarIsClear(Item) then
|
||||
RaiseException(Format('Cannot find "%s" in "%s" ZIP file', [FileName, ZipFileName]));
|
||||
|
||||
TargetFolder := CPackShell.NameSpace(TargetFolderName);
|
||||
if VarIsClear(TargetFolder) then
|
||||
RaiseException(Format('Target path "%s" does not exist', [TargetFolderName]));
|
||||
|
||||
TargetFolder.CopyHere(Item, NO_PROGRESS_BOX or RESPOND_YES_TO_ALL);
|
||||
end;
|
||||
|
||||
#endif
|
@ -0,0 +1,34 @@
|
||||
; Script generated by the CPack Inno Setup generator.
|
||||
; All changes made in this file will be lost when CPack is run again.
|
||||
|
||||
@CPACK_INNOSETUP_INCLUDES_INTERNAL@
|
||||
|
||||
[Setup]
|
||||
@CPACK_INNOSETUP_SETUP_INTERNAL@
|
||||
|
||||
[Languages]
|
||||
@CPACK_INNOSETUP_LANGUAGES_INTERNAL@
|
||||
|
||||
[Dirs]
|
||||
@CPACK_INNOSETUP_DIRS_INTERNAL@
|
||||
|
||||
[Files]
|
||||
@CPACK_INNOSETUP_FILES_INTERNAL@
|
||||
|
||||
[Types]
|
||||
@CPACK_INNOSETUP_TYPES_INTERNAL@
|
||||
|
||||
[Components]
|
||||
@CPACK_INNOSETUP_COMPONENTS_INTERNAL@
|
||||
|
||||
[Tasks]
|
||||
@CPACK_INNOSETUP_TASKS_INTERNAL@
|
||||
|
||||
[Icons]
|
||||
@CPACK_INNOSETUP_ICONS_INTERNAL@
|
||||
|
||||
[Run]
|
||||
@CPACK_INNOSETUP_RUN_INTERNAL@
|
||||
|
||||
[Code]
|
||||
@CPACK_INNOSETUP_CODE_INTERNAL@
|
@ -0,0 +1,46 @@
|
||||
[Settings]
|
||||
NumFields=5
|
||||
|
||||
[Field 1]
|
||||
Type=label
|
||||
Text=By default @CPACK_PACKAGE_INSTALL_DIRECTORY@ does not add its directory to the system PATH.
|
||||
Left=0
|
||||
Right=-1
|
||||
Top=0
|
||||
Bottom=20
|
||||
|
||||
[Field 2]
|
||||
Type=radiobutton
|
||||
Text=Do not add @CPACK_PACKAGE_NAME@ to the system PATH
|
||||
Left=0
|
||||
Right=-1
|
||||
Top=30
|
||||
Bottom=40
|
||||
State=1
|
||||
|
||||
[Field 3]
|
||||
Type=radiobutton
|
||||
Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for all users
|
||||
Left=0
|
||||
Right=-1
|
||||
Top=40
|
||||
Bottom=50
|
||||
State=0
|
||||
|
||||
[Field 4]
|
||||
Type=radiobutton
|
||||
Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for current user
|
||||
Left=0
|
||||
Right=-1
|
||||
Top=50
|
||||
Bottom=60
|
||||
State=0
|
||||
|
||||
[Field 5]
|
||||
Type=CheckBox
|
||||
Text=Create @CPACK_PACKAGE_NAME@ Desktop Icon
|
||||
Left=0
|
||||
Right=-1
|
||||
Top=80
|
||||
Bottom=90
|
||||
State=0
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?include "cpack_variables.wxi"?>
|
||||
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" @CPACK_WIX_CUSTOM_XMLNS_EXPANDED@
|
||||
RequiredVersion="3.6.3303.0">
|
||||
|
||||
<Product Id="$(var.CPACK_WIX_PRODUCT_GUID)"
|
||||
Name="$(var.CPACK_PACKAGE_NAME)"
|
||||
Language="1033"
|
||||
Version="$(var.CPACK_PACKAGE_VERSION)"
|
||||
Manufacturer="$(var.CPACK_PACKAGE_VENDOR)"
|
||||
UpgradeCode="$(var.CPACK_WIX_UPGRADE_GUID)">
|
||||
|
||||
<Package InstallerVersion="301" Compressed="yes"/>
|
||||
|
||||
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes"/>
|
||||
|
||||
<MajorUpgrade
|
||||
Schedule="afterInstallInitialize"
|
||||
AllowSameVersionUpgrades="yes"
|
||||
DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."/>
|
||||
|
||||
<WixVariable Id="WixUILicenseRtf" Value="$(var.CPACK_WIX_LICENSE_RTF)"/>
|
||||
<Property Id="WIXUI_INSTALLDIR" Value="INSTALL_ROOT"/>
|
||||
|
||||
<?ifdef CPACK_WIX_PRODUCT_ICON?>
|
||||
<Property Id="ARPPRODUCTICON">ProductIcon.ico</Property>
|
||||
<Icon Id="ProductIcon.ico" SourceFile="$(var.CPACK_WIX_PRODUCT_ICON)"/>
|
||||
<?endif?>
|
||||
|
||||
<?ifdef CPACK_WIX_UI_BANNER?>
|
||||
<WixVariable Id="WixUIBannerBmp" Value="$(var.CPACK_WIX_UI_BANNER)"/>
|
||||
<?endif?>
|
||||
|
||||
<?ifdef CPACK_WIX_UI_DIALOG?>
|
||||
<WixVariable Id="WixUIDialogBmp" Value="$(var.CPACK_WIX_UI_DIALOG)"/>
|
||||
<?endif?>
|
||||
|
||||
<FeatureRef Id="ProductFeature"/>
|
||||
|
||||
<UIRef Id="$(var.CPACK_WIX_UI_REF)" />
|
||||
|
||||
<?include "properties.wxi"?>
|
||||
<?include "product_fragment.wxi"?>
|
||||
</Product>
|
||||
</Wix>
|
@ -0,0 +1,31 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
include_guard(GLOBAL)
|
||||
include(Internal/CheckFlagCommonConfig)
|
||||
include(Internal/CheckSourceCompiles)
|
||||
include(CMakeCheckCompilerFlagCommonPatterns)
|
||||
|
||||
function(CMAKE_CHECK_COMPILER_FLAG _lang _flag _var)
|
||||
# Parse extra arguments
|
||||
cmake_parse_arguments(PARSE_ARGV 3 CHECK_COMPILER_FLAG "" "OUTPUT_VARIABLE" "")
|
||||
|
||||
cmake_check_flag_common_init("check_compiler_flag" ${_lang} _lang_src _lang_fail_regex)
|
||||
|
||||
set(CMAKE_REQUIRED_DEFINITIONS ${_flag})
|
||||
|
||||
check_compiler_flag_common_patterns(_common_patterns)
|
||||
cmake_check_source_compiles(${_lang}
|
||||
"${_lang_src}"
|
||||
${_var}
|
||||
${_lang_fail_regex}
|
||||
${_common_patterns}
|
||||
OUTPUT_VARIABLE _output
|
||||
)
|
||||
|
||||
if (CHECK_COMPILER_FLAG_OUTPUT_VARIABLE)
|
||||
set(${CHECK_COMPILER_FLAG_OUTPUT_VARIABLE} "${_output}" PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
cmake_check_flag_common_finish()
|
||||
endfunction()
|
@ -0,0 +1,78 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
|
||||
# Do NOT include this module directly into any of your code. It is meant as
|
||||
# a library for Check*CompilerFlag.cmake and Check*LinkerFlag.cma modules.
|
||||
# It's content may change in any way between releases.
|
||||
|
||||
include_guard(GLOBAL)
|
||||
|
||||
block(SCOPE_FOR POLICIES)
|
||||
cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
|
||||
cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
|
||||
|
||||
macro(CMAKE_CHECK_FLAG_COMMON_INIT _FUNC _LANG _SRC _PATTERNS)
|
||||
if("${_LANG}" STREQUAL "C")
|
||||
set(${_SRC} "int main(void) { return 0; }")
|
||||
set(${_PATTERNS} FAIL_REGEX "command[ -]line option .* is valid for .* but not for C"
|
||||
FAIL_REGEX "-Werror=.* argument .* is not valid for C")
|
||||
elseif("${_LANG}" STREQUAL "CXX")
|
||||
set(${_SRC} "int main() { return 0; }")
|
||||
set(${_PATTERNS} FAIL_REGEX "command[ -]line option .* is valid for .* but not for C\\+\\+"
|
||||
FAIL_REGEX "-Werror=.* argument .* is not valid for C\\+\\+")
|
||||
elseif("${_LANG}" STREQUAL "CUDA")
|
||||
set(${_SRC} "__host__ int main() { return 0; }")
|
||||
set(${_PATTERNS} FAIL_REGEX "command[ -]line option .* is valid for .* but not for C\\+\\+" # Host GNU
|
||||
FAIL_REGEX "argument unused during compilation: .*") # Clang
|
||||
elseif("${_LANG}" STREQUAL "Fortran")
|
||||
set(${_SRC} " program test\n stop\n end program")
|
||||
set(${_PATTERNS} FAIL_REGEX "command[ -]line option .* is valid for .* but not for Fortran")
|
||||
elseif("${_LANG}" STREQUAL "HIP")
|
||||
set(${_SRC} "__host__ int main() { return 0; }")
|
||||
set(${_PATTERNS} FAIL_REGEX "argument unused during compilation: .*") # Clang
|
||||
elseif("${_LANG}" STREQUAL "OBJC")
|
||||
set(${_SRC} [=[
|
||||
#ifndef __OBJC__
|
||||
# error "Not an Objective-C compiler"
|
||||
#endif
|
||||
int main(void) { return 0; }]=])
|
||||
set(${_PATTERNS} FAIL_REGEX "command[ -]line option .* is valid for .* but not for Objective-C" # GNU
|
||||
FAIL_REGEX "argument unused during compilation: .*") # Clang
|
||||
elseif("${_LANG}" STREQUAL "OBJCXX")
|
||||
set(${_SRC} [=[
|
||||
#ifndef __OBJC__
|
||||
# error "Not an Objective-C++ compiler"
|
||||
#endif
|
||||
int main(void) { return 0; }]=])
|
||||
set(${_PATTERNS} FAIL_REGEX "command[ -]line option .* is valid for .* but not for Objective-C\\+\\+" # GNU
|
||||
FAIL_REGEX "argument unused during compilation: .*") # Clang
|
||||
elseif("${_LANG}" STREQUAL "ISPC")
|
||||
set(${_SRC} "float func(uniform int32, float a) { return a / 2.25; }")
|
||||
elseif("${_LANG}" STREQUAL "Swift")
|
||||
set(${_SRC} "func blarpy() { }")
|
||||
else()
|
||||
message (SEND_ERROR "${_FUNC}: ${_LANG}: unknown language.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
get_property (_supported_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
if (NOT "${_LANG}" IN_LIST _supported_languages)
|
||||
message (SEND_ERROR "${_FUNC}: ${_LANG}: needs to be enabled before use.")
|
||||
return()
|
||||
endif()
|
||||
# Normalize locale during test compilation.
|
||||
set(_CFCC_locale_vars LC_ALL LC_MESSAGES LANG)
|
||||
foreach(v IN LISTS _CFCC_locale_vars)
|
||||
set(_CMAKE_CHECK_FLAG_COMMON_CONFIG_locale_vars_saved_${v} "$ENV{${v}}")
|
||||
set(ENV{${v}} C)
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
macro(CMAKE_CHECK_FLAG_COMMON_FINISH)
|
||||
foreach(v IN LISTS _CFCC_locale_vars)
|
||||
set(ENV{${v}} ${_CMAKE_CHECK_FLAG_COMMON_CONFIG_locale_vars_saved_${v}})
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
endblock()
|
@ -0,0 +1,52 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
include_guard(GLOBAL)
|
||||
include(Internal/CheckFlagCommonConfig)
|
||||
include(Internal/CheckSourceCompiles)
|
||||
include(CMakeCheckCompilerFlagCommonPatterns)
|
||||
|
||||
block(SCOPE_FOR POLICIES)
|
||||
cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
|
||||
|
||||
function(CMAKE_CHECK_LINKER_FLAG _lang _flag _var)
|
||||
# link step supports less languages than the compiler
|
||||
# so do a first check about the requested language
|
||||
if (_lang STREQUAL "ISPC")
|
||||
message (SEND_ERROR "check_linker_flag: ${_lang}: unsupported language.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Parse extra arguments
|
||||
cmake_parse_arguments(PARSE_ARGV 3 CHECK_LINKER_FLAG "" "OUTPUT_VARIABLE" "")
|
||||
|
||||
cmake_check_flag_common_init("check_linker_flag" ${_lang} _lang_src _lang_fail_regex)
|
||||
|
||||
set(CMAKE_REQUIRED_LINK_OPTIONS "${_flag}")
|
||||
|
||||
check_compiler_flag_common_patterns(_common_patterns)
|
||||
|
||||
# Match linker warnings if the exact flag is ignored.
|
||||
foreach(flag IN LISTS _flag)
|
||||
string(REGEX REPLACE "([][+.*?()^$])" [[\\\1]] _flag_regex "${flag}")
|
||||
list(APPEND _common_patterns
|
||||
FAIL_REGEX "warning: .*${_flag_regex}.* ignored"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
cmake_check_source_compiles(${_lang}
|
||||
"${_lang_src}"
|
||||
${_var}
|
||||
${_lang_fail_regex}
|
||||
${_common_patterns}
|
||||
OUTPUT_VARIABLE _output
|
||||
)
|
||||
|
||||
if (CHECK_LINKER_FLAG_OUTPUT_VARIABLE)
|
||||
set(${CHECK_LINKER_FLAG_OUTPUT_VARIABLE} "${_output}" PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
cmake_check_flag_common_finish()
|
||||
endfunction()
|
||||
|
||||
endblock()
|
@ -0,0 +1,134 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
include_guard(GLOBAL)
|
||||
|
||||
block(SCOPE_FOR POLICIES)
|
||||
cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
|
||||
cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
|
||||
|
||||
function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
|
||||
if(NOT DEFINED "${_var}")
|
||||
set(_lang_filename "src")
|
||||
if(_lang STREQUAL "C")
|
||||
set(_lang_textual "C")
|
||||
set(_lang_ext "c")
|
||||
elseif(_lang STREQUAL "CXX")
|
||||
set(_lang_textual "C++")
|
||||
set(_lang_ext "cxx")
|
||||
elseif(_lang STREQUAL "CUDA")
|
||||
set(_lang_textual "CUDA")
|
||||
set(_lang_ext "cu")
|
||||
elseif(_lang STREQUAL "Fortran")
|
||||
set(_lang_textual "Fortran")
|
||||
set(_lang_ext "F90")
|
||||
elseif(_lang STREQUAL "HIP")
|
||||
set(_lang_textual "HIP")
|
||||
set(_lang_ext "hip")
|
||||
elseif(_lang STREQUAL "ISPC")
|
||||
set(_lang_textual "ISPC")
|
||||
set(_lang_ext "ispc")
|
||||
elseif(_lang STREQUAL "OBJC")
|
||||
set(_lang_textual "Objective-C")
|
||||
set(_lang_ext "m")
|
||||
elseif(_lang STREQUAL "OBJCXX")
|
||||
set(_lang_textual "Objective-C++")
|
||||
set(_lang_ext "mm")
|
||||
elseif(_lang STREQUAL "Swift")
|
||||
set(_lang_textual "Swift")
|
||||
set(_lang_ext "swift")
|
||||
if (NOT DEFINED CMAKE_TRY_COMPILE_TARGET_TYPE
|
||||
OR CMAKE_TRY_COMPILE_TARGET_TYPE STREQUAL "EXECUTABLE")
|
||||
set(_lang_filename "main")
|
||||
endif()
|
||||
else()
|
||||
message (SEND_ERROR "check_source_compiles: ${_lang}: unknown language.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
get_property (_supported_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
if (NOT _lang IN_LIST _supported_languages)
|
||||
message (SEND_ERROR "check_source_compiles: ${_lang}: needs to be enabled before use.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(_FAIL_REGEX)
|
||||
set(_SRC_EXT)
|
||||
set(_key)
|
||||
foreach(arg ${ARGN})
|
||||
if("${arg}" MATCHES "^(FAIL_REGEX|SRC_EXT|OUTPUT_VARIABLE)$")
|
||||
set(_key "${arg}")
|
||||
elseif(_key STREQUAL "FAIL_REGEX")
|
||||
list(APPEND _FAIL_REGEX "${arg}")
|
||||
elseif(_key STREQUAL "SRC_EXT")
|
||||
set(_SRC_EXT "${arg}")
|
||||
set(_key "")
|
||||
elseif(_key STREQUAL "OUTPUT_VARIABLE")
|
||||
set(_OUTPUT_VARIABLE "${arg}")
|
||||
set(_key "")
|
||||
else()
|
||||
message(FATAL_ERROR "Unknown argument:\n ${arg}\n")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT _SRC_EXT)
|
||||
set(_SRC_EXT ${_lang_ext})
|
||||
endif()
|
||||
|
||||
if(CMAKE_REQUIRED_LINK_OPTIONS)
|
||||
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS
|
||||
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
|
||||
else()
|
||||
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS)
|
||||
endif()
|
||||
if(CMAKE_REQUIRED_LIBRARIES)
|
||||
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES
|
||||
LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
|
||||
else()
|
||||
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES)
|
||||
endif()
|
||||
if(CMAKE_REQUIRED_INCLUDES)
|
||||
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES
|
||||
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
|
||||
else()
|
||||
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES)
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_REQUIRED_QUIET)
|
||||
message(CHECK_START "Performing Test ${_var}")
|
||||
endif()
|
||||
string(APPEND _source "\n")
|
||||
try_compile(${_var}
|
||||
SOURCE_FROM_VAR "${_lang_filename}.${_SRC_EXT}" _source
|
||||
COMPILE_DEFINITIONS -D${_var} ${CMAKE_REQUIRED_DEFINITIONS}
|
||||
${CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS}
|
||||
${CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES}
|
||||
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
|
||||
"${CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES}"
|
||||
OUTPUT_VARIABLE OUTPUT)
|
||||
|
||||
foreach(_regex ${_FAIL_REGEX})
|
||||
if("${OUTPUT}" MATCHES "${_regex}")
|
||||
set(${_var} 0)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if (_OUTPUT_VARIABLE)
|
||||
set(${_OUTPUT_VARIABLE} "${OUTPUT}" PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
if(${_var})
|
||||
set(${_var} 1 CACHE INTERNAL "Test ${_var}")
|
||||
if(NOT CMAKE_REQUIRED_QUIET)
|
||||
message(CHECK_PASS "Success")
|
||||
endif()
|
||||
else()
|
||||
if(NOT CMAKE_REQUIRED_QUIET)
|
||||
message(CHECK_FAIL "Failed")
|
||||
endif()
|
||||
set(${_var} "" CACHE INTERNAL "Test ${_var}")
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
endblock()
|
@ -0,0 +1,127 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
include_guard(GLOBAL)
|
||||
|
||||
block(SCOPE_FOR POLICIES)
|
||||
cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
|
||||
cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
|
||||
|
||||
function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var)
|
||||
if(NOT DEFINED "${_var}")
|
||||
|
||||
if(_lang STREQUAL "C")
|
||||
set(_lang_textual "C")
|
||||
set(_lang_ext "c")
|
||||
elseif(_lang STREQUAL "CXX")
|
||||
set(_lang_textual "C++")
|
||||
set(_lang_ext "cxx")
|
||||
elseif(_lang STREQUAL "CUDA")
|
||||
set(_lang_textual "CUDA")
|
||||
set(_lang_ext "cu")
|
||||
elseif(_lang STREQUAL "Fortran")
|
||||
set(_lang_textual "Fortran")
|
||||
set(_lang_ext "F90")
|
||||
elseif(_lang STREQUAL "HIP")
|
||||
set(_lang_textual "HIP")
|
||||
set(_lang_ext "hip")
|
||||
elseif(_lang STREQUAL "OBJC")
|
||||
set(_lang_textual "Objective-C")
|
||||
set(_lang_ext "m")
|
||||
elseif(_lang STREQUAL "OBJCXX")
|
||||
set(_lang_textual "Objective-C++")
|
||||
set(_lang_ext "mm")
|
||||
else()
|
||||
message (SEND_ERROR "check_source_runs: ${_lang}: unknown language.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
get_property (_supported_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
if (NOT _lang IN_LIST _supported_languages)
|
||||
message (SEND_ERROR "check_source_runs: ${_lang}: needs to be enabled before use.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(_FAIL_REGEX)
|
||||
set(_SRC_EXT)
|
||||
set(_key)
|
||||
foreach(arg ${ARGN})
|
||||
if("${arg}" MATCHES "^(FAIL_REGEX|SRC_EXT)$")
|
||||
set(_key "${arg}")
|
||||
elseif(_key STREQUAL "FAIL_REGEX")
|
||||
list(APPEND _FAIL_REGEX "${arg}")
|
||||
elseif(_key STREQUAL "SRC_EXT")
|
||||
set(_SRC_EXT "${arg}")
|
||||
set(_key "")
|
||||
else()
|
||||
set(message_type FATAL_ERROR)
|
||||
if (_CheckSourceRuns_old_signature)
|
||||
set(message_type AUTHOR_WARNING)
|
||||
endif ()
|
||||
message("${message_type}" "Unknown argument:\n ${arg}\n")
|
||||
unset(message_type)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT _SRC_EXT)
|
||||
set(_SRC_EXT ${_lang_ext})
|
||||
endif()
|
||||
|
||||
if(CMAKE_REQUIRED_LINK_OPTIONS)
|
||||
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LINK_OPTIONS
|
||||
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
|
||||
else()
|
||||
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LINK_OPTIONS)
|
||||
endif()
|
||||
if(CMAKE_REQUIRED_LIBRARIES)
|
||||
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES
|
||||
LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
|
||||
else()
|
||||
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES)
|
||||
endif()
|
||||
if(CMAKE_REQUIRED_INCLUDES)
|
||||
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES
|
||||
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
|
||||
else()
|
||||
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES)
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_REQUIRED_QUIET)
|
||||
message(CHECK_START "Performing Test ${_var}")
|
||||
endif()
|
||||
string(APPEND _source "\n")
|
||||
try_run(${_var}_EXITCODE ${_var}_COMPILED
|
||||
SOURCE_FROM_VAR "src.${_SRC_EXT}" _source
|
||||
COMPILE_DEFINITIONS -D${_var} ${CMAKE_REQUIRED_DEFINITIONS}
|
||||
${CHECK_${_lang}_SOURCE_COMPILES_ADD_LINK_OPTIONS}
|
||||
${CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES}
|
||||
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
|
||||
-DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
|
||||
"${CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES}"
|
||||
)
|
||||
# if it did not compile make the return value fail code of 1
|
||||
if(NOT ${_var}_COMPILED)
|
||||
set(${_var}_EXITCODE 1)
|
||||
set(${_var}_EXITCODE 1 PARENT_SCOPE)
|
||||
endif()
|
||||
# if the return value was 0 then it worked
|
||||
if("${${_var}_EXITCODE}" EQUAL 0)
|
||||
set(${_var} 1 CACHE INTERNAL "Test ${_var}")
|
||||
if(NOT CMAKE_REQUIRED_QUIET)
|
||||
message(CHECK_PASS "Success")
|
||||
endif()
|
||||
else()
|
||||
if(CMAKE_CROSSCOMPILING AND "${${_var}_EXITCODE}" MATCHES "FAILED_TO_RUN")
|
||||
set(${_var} "${${_var}_EXITCODE}" PARENT_SCOPE)
|
||||
else()
|
||||
set(${_var} "" CACHE INTERNAL "Test ${_var}")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_REQUIRED_QUIET)
|
||||
message(CHECK_FAIL "Failed")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
endblock()
|
@ -0,0 +1,129 @@
|
||||
|
||||
macro(_record_compiler_features lang compile_flags feature_list)
|
||||
include("${CMAKE_ROOT}/Modules/Compiler/${CMAKE_${lang}_COMPILER_ID}-${lang}-FeatureTests.cmake" OPTIONAL)
|
||||
|
||||
string(TOLOWER ${lang} lang_lc)
|
||||
file(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin")
|
||||
set(_content "
|
||||
const char features[] = {\"\\n\"\n")
|
||||
|
||||
get_property(known_features GLOBAL PROPERTY CMAKE_${lang}_KNOWN_FEATURES)
|
||||
|
||||
foreach(feature ${known_features})
|
||||
if (_cmake_feature_test_${feature})
|
||||
if (${_cmake_feature_test_${feature}} STREQUAL 1)
|
||||
set(_feature_condition "\"1\" ")
|
||||
else()
|
||||
set(_feature_condition "#if ${_cmake_feature_test_${feature}}\n\"1\"\n#else\n\"0\"\n#endif\n")
|
||||
endif()
|
||||
string(APPEND _content
|
||||
"\"${lang}_FEATURE:\"\n${_feature_condition}\"${feature}\\n\"\n")
|
||||
endif()
|
||||
endforeach()
|
||||
string(APPEND _content
|
||||
"\n};\n\nint main(int argc, char** argv) { (void)argv; return features[argc]; }\n")
|
||||
|
||||
if(CMAKE_${lang}_LINK_WITH_STANDARD_COMPILE_OPTION)
|
||||
# This toolchain requires use of the language standard flag
|
||||
# when linking in order to use the matching standard library.
|
||||
set(compile_flags_for_link "${compile_flags}")
|
||||
else()
|
||||
set(compile_flags_for_link "")
|
||||
endif()
|
||||
|
||||
try_compile(CMAKE_${lang}_FEATURE_TEST
|
||||
SOURCE_FROM_VAR "feature_tests.${lang_lc}" _content
|
||||
COMPILE_DEFINITIONS "${compile_flags}"
|
||||
LINK_LIBRARIES "${compile_flags_for_link}"
|
||||
COPY_FILE "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin"
|
||||
COPY_FILE_ERROR _copy_error
|
||||
)
|
||||
if(NOT CMAKE_${lang}_FEATURE_TEST)
|
||||
set(_result 255)
|
||||
elseif(_copy_error)
|
||||
set(_result 255)
|
||||
message(WARNING "${_copy_error}")
|
||||
else()
|
||||
set(_result 0)
|
||||
endif()
|
||||
unset(CMAKE_${lang}_FEATURE_TEST CACHE)
|
||||
unset(compile_flags_for_link)
|
||||
|
||||
if (_result EQUAL 0)
|
||||
if(EXISTS "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin")
|
||||
file(STRINGS "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin"
|
||||
features REGEX "${lang}_FEATURE:.*")
|
||||
foreach(info ${features})
|
||||
string(REPLACE "${lang}_FEATURE:" "" info ${info})
|
||||
string(SUBSTRING ${info} 0 1 has_feature)
|
||||
if(has_feature)
|
||||
string(REGEX REPLACE "^1" "" feature ${info})
|
||||
list(APPEND ${feature_list} ${feature})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(_record_compiler_features_c std)
|
||||
list(APPEND CMAKE_C${std}_COMPILE_FEATURES c_std_${std})
|
||||
|
||||
get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_C${std}_KNOWN_FEATURES)
|
||||
if(lang_level_has_features)
|
||||
_record_compiler_features(C "${CMAKE_C${std}_STANDARD_COMPILE_OPTION}" CMAKE_C${std}_COMPILE_FEATURES)
|
||||
endif()
|
||||
unset(lang_level_has_features)
|
||||
endmacro()
|
||||
|
||||
macro(_record_compiler_features_cxx std)
|
||||
list(APPEND CMAKE_CXX${std}_COMPILE_FEATURES cxx_std_${std})
|
||||
|
||||
get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_CXX${std}_KNOWN_FEATURES)
|
||||
if(lang_level_has_features)
|
||||
_record_compiler_features(CXX "${CMAKE_CXX${std}_STANDARD_COMPILE_OPTION}" CMAKE_CXX${std}_COMPILE_FEATURES)
|
||||
endif()
|
||||
unset(lang_level_has_features)
|
||||
endmacro()
|
||||
|
||||
macro(_record_compiler_features_cuda std)
|
||||
list(APPEND CMAKE_CUDA${std}_COMPILE_FEATURES cuda_std_${std})
|
||||
|
||||
get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_CUDA${std}_KNOWN_FEATURES)
|
||||
if(lang_level_has_features)
|
||||
_record_compiler_features(CUDA "${CMAKE_CUDA${std}_STANDARD_COMPILE_OPTION}" CMAKE_CUDA${std}_COMPILE_FEATURES)
|
||||
endif()
|
||||
unset(lang_level_has_features)
|
||||
endmacro()
|
||||
|
||||
macro(_record_compiler_features_hip std)
|
||||
list(APPEND CMAKE_HIP${std}_COMPILE_FEATURES hip_std_${std})
|
||||
|
||||
get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_HIP${std}_KNOWN_FEATURES)
|
||||
if(lang_level_has_features)
|
||||
_record_compiler_features(HIP "${CMAKE_HIP${std}_STANDARD_COMPILE_OPTION}" CMAKE_HIP${std}_COMPILE_FEATURES)
|
||||
endif()
|
||||
unset(lang_level_has_features)
|
||||
endmacro()
|
||||
|
||||
macro(_has_compiler_features lang level compile_flags feature_list)
|
||||
# presume all known features are supported
|
||||
get_property(known_features GLOBAL PROPERTY CMAKE_${lang}${level}_KNOWN_FEATURES)
|
||||
list(APPEND ${feature_list} ${known_features})
|
||||
endmacro()
|
||||
|
||||
macro(_has_compiler_features_c std)
|
||||
list(APPEND CMAKE_C${std}_COMPILE_FEATURES c_std_${std})
|
||||
_has_compiler_features(C ${std} "${CMAKE_C${std}_STANDARD_COMPILE_OPTION}" CMAKE_C${std}_COMPILE_FEATURES)
|
||||
endmacro()
|
||||
macro(_has_compiler_features_cxx std)
|
||||
list(APPEND CMAKE_CXX${std}_COMPILE_FEATURES cxx_std_${std})
|
||||
_has_compiler_features(CXX ${std} "${CMAKE_CXX${std}_STANDARD_COMPILE_OPTION}" CMAKE_CXX${std}_COMPILE_FEATURES)
|
||||
endmacro()
|
||||
macro(_has_compiler_features_cuda std)
|
||||
list(APPEND CMAKE_CUDA${std}_COMPILE_FEATURES cuda_std_${std})
|
||||
_has_compiler_features(CUDA ${std} "${CMAKE_CUDA${std}_STANDARD_COMPILE_OPTION}" CMAKE_CUDA${std}_COMPILE_FEATURES)
|
||||
endmacro()
|
||||
macro(_has_compiler_features_hip std)
|
||||
list(APPEND CMAKE_HIP${std}_COMPILE_FEATURES hip_std_${std})
|
||||
_has_compiler_features(HIP ${std} "${CMAKE_HIP${std}_STANDARD_COMPILE_OPTION}" CMAKE_HIP${std}_COMPILE_FEATURES)
|
||||
endmacro()
|
@ -0,0 +1,69 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
|
||||
# Do NOT include this module directly into any of your code. It is used by
|
||||
# the try_compile() implementation to work around a specific issue with
|
||||
# conflicting flags when building for Apple platforms.
|
||||
if(NOT APPLE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
block(SCOPE_FOR POLICIES)
|
||||
cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
|
||||
|
||||
function(__cmake_internal_workaround_headerpad_flag_conflict _LANG)
|
||||
|
||||
# Until we can avoid hard-coding -Wl,-headerpad_max_install_names in the
|
||||
# linker flags, we need to remove it here for cases where we know it will
|
||||
# conflict with other flags, generate a warning and be ignored.
|
||||
set(regex "(^| )(-fembed-bitcode(-marker|=(all|bitcode|marker))?|-bundle_bitcode)($| )")
|
||||
set(remove_headerpad NO)
|
||||
|
||||
# Check arbitrary flags that the user or project has set. These compiler
|
||||
# flags get added to the linker command line.
|
||||
if("${CMAKE_${_LANG}_FLAGS}" MATCHES "${regex}")
|
||||
set(remove_headerpad YES)
|
||||
endif()
|
||||
if(NOT remove_headerpad)
|
||||
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||
if(is_multi_config)
|
||||
# Only one of these config-specific variables will be set by try_compile()
|
||||
# and the rest will be unset, but we can't easily tell which one is set.
|
||||
# No harm to just add them all here, empty ones won't add flags to check.
|
||||
foreach(config IN LISTS CMAKE_CONFIGURATION_TYPES)
|
||||
if("${CMAKE_${_LANG}_FLAGS_${config}}" MATCHES "${regex}")
|
||||
set(remove_headerpad YES)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
if("${CMAKE_${_LANG}_FLAGS_${CMAKE_BUILD_TYPE}}" MATCHES "${regex}")
|
||||
set(remove_headerpad YES)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# The try_compile() command passes compiler flags to check in a way that
|
||||
# results in them being added to add_definitions(). Those don't end up on
|
||||
# the linker command line, so we don't need to check them here.
|
||||
|
||||
if(remove_headerpad)
|
||||
foreach(flag IN ITEMS
|
||||
CMAKE_${_LANG}_LINK_FLAGS
|
||||
CMAKE_SHARED_LIBRARY_CREATE_${_LANG}_FLAGS
|
||||
CMAKE_SHARED_MODULE_CREATE_${_LANG}_FLAGS)
|
||||
string(REPLACE "-Wl,-headerpad_max_install_names" "" ${flag} "${${flag}}")
|
||||
set(${flag} "${${flag}}" PARENT_SCOPE)
|
||||
endforeach()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
get_property(__enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
foreach(__lang IN LISTS __enabled_languages)
|
||||
__cmake_internal_workaround_headerpad_flag_conflict(${__lang})
|
||||
endforeach()
|
||||
unset(__lang)
|
||||
unset(__enabled_languages)
|
||||
|
||||
endblock()
|
@ -0,0 +1,41 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
# Author: Alex Turbov
|
||||
|
||||
if(NOT EXISTS "${CMAKE_SYSROOT}/etc/centos-release")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Get the first string only
|
||||
file(
|
||||
STRINGS "${CMAKE_SYSROOT}/etc/centos-release" CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT
|
||||
LIMIT_COUNT 1
|
||||
)
|
||||
|
||||
#
|
||||
# Example:
|
||||
# CentOS release 6.10 (Final)
|
||||
#
|
||||
if(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT MATCHES "CentOS release ([0-9\.]+) .*")
|
||||
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME CentOS)
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME "${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT}")
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID centos)
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID_LIKE rhel)
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION ${CMAKE_MATCH_1})
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID ${CMAKE_MATCH_1})
|
||||
|
||||
list(
|
||||
APPEND CMAKE_GET_OS_RELEASE_FALLBACK_RESULT
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID_LIKE
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
unset(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT)
|
@ -0,0 +1,38 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
# Author: Alex Turbov
|
||||
|
||||
if(NOT EXISTS "${CMAKE_SYSROOT}/etc/debian_version")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Get the first string only
|
||||
file(
|
||||
STRINGS "${CMAKE_SYSROOT}/etc/debian_version" CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT
|
||||
LIMIT_COUNT 1
|
||||
)
|
||||
|
||||
#
|
||||
# Example:
|
||||
# 6.0.10 # Old debian
|
||||
# wheezy/sid # Ubuntu
|
||||
#
|
||||
if(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT MATCHES "[0-9]+(\.[0-9]+)*")
|
||||
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME Debian)
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID debian)
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION ${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT})
|
||||
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID ${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT})
|
||||
|
||||
list(
|
||||
APPEND CMAKE_GET_OS_RELEASE_FALLBACK_RESULT
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION
|
||||
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
unset(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT)
|
Reference in New Issue
Block a user