We run MSVC-like compilers with the `/showIncludes` option and match the
output to extract the corresponding message. Fix the matching to
support compilers like `clang-cl` that print the message on the first
line such that it is not preceded by a newline.
LLVM-Issue: https://llvm.org/bugs/show_bug.cgi?id=27226
Previously we added only NO_CMAKE_SYSTEM_PATH to find command calls.
Add NO_SYSTEM_ENVIRONMENT_PATH too so that paths found from system
environment variables are not considered either.
e1c77472 Format include directive blocks and ordering with clang-format
180538c7 Source: Stabilize include order
0e7bca92 Utilities/Release: Stabilize include order in WiX custom action
eb817be0 Tests: Stabilize include order in MFC, VSXaml, and VSWinStorePhone
eda313b4 Tests: Stabilize include order in StringFileTest
7110b754 CursesDialog: add missing cmState include
d7a5f255 Modules: Remove unused CMakeTestWatcomVersion.c file
Sort include directives within each block (separated by a blank line) in
lexicographic order (except to prioritize `sys/types.h` first). First
run `clang-format` with the config file:
---
SortIncludes: false
...
Commit the result temporarily. Then run `clang-format` again with:
---
SortIncludes: true
IncludeCategories:
- Regex: 'sys/types.h'
Priority: -1
...
Commit the result temporarily. Start a new branch and cherry-pick the
second commit. Manually resolve conflicts to preserve indentation of
re-ordered includes. This cleans up the include ordering without
changing any other style.
Use the following command to run `clang-format`:
$ git ls-files -z -- \
'*.c' '*.cc' '*.cpp' '*.cxx' '*.h' '*.hh' '*.hpp' '*.hxx' |
egrep -z -v '(Lexer|Parser|ParserHelper)\.' |
egrep -z -v '^Source/cm_sha2' |
egrep -z -v '^Source/(kwsys|CursesDialog/form)/' |
egrep -z -v '^Utilities/(KW|cm).*/' |
egrep -z -v '^Tests/Module/GenerateExportHeader' |
egrep -z -v '^Tests/RunCMake/CommandLine/cmake_depends/test_UTF-16LE.h' |
xargs -0 clang-format -i
This selects source files that do not come from a third-party.
Inspired-by: Daniel Pfeifer <daniel@pfeifer-mail.de>
21b1fa5c Help: Add notes for topic 'intel-compiler-features'
9addce99 Features: Record standard flags for Intel C/C++ on Windows
15a6c950 WCDH: Add Intel to list of supported compilers
36f32ede Features: Record standards and features for Intel C on UNIX
d028b948 Features: Specify minimum version Intel C++ 12.1
be910f00 Features: Record standards and features for Intel C++ on UNIX
7f401ae4 Features: Detect C default dialect on MSVC-like compilers
Versions below 12.1 do not provide enough information to properly detect
if compiling with c++98 or c++0x enabled so remove them from the
supported list.
These compilers default to C 90 but do not define __STDC__. While MSVC
itself has no option to change the dialect, compilers that document
compatibility with MSVC and define _MSC_VER may (e.g. Intel).
The DELETE option to ctest_coverage_collect_gcov now properly
removes all the .gcov files that were created by this function.
Previously it left behind any files that were excluded by
CTEST_CUSTOM_COVERAGE_EXCLUDE.
This option now also deletes the following files/directory that
are created by ctest_coverage_collect_gcov:
data.json
coverage_file_list.txt
the uncovered/ directory
2a99fae1 FindMPI: Recognize `.lib` file names for specification of link libraries
c4417b09 FindMPI: Recognize /LIBPATH for specification of linker paths.
GitHub for Windows now installs in
$ENV{LOCALAPPDATA}/Github/PortableGit*/cmd
instead of
$ENV{LOCALAPPDATA}/Github/PortableGit*/bin
Search the new location first but keep the old one in case people have
older versions installed.
a1c40291 GetPrerequisites: Look for VS tools using environment variables
c79f88b0 GetPrerequisites: add path of VS 10,11,12,14 in order to find dumpbin.exe
The `VS*COMNTOOLS` environment variables specify locations of VS tools
and are set during the VS installation. Use them in addition to the
hard-coded default install locations.
We define `NDEBUG` without a space after the `-D` option for most
compilers. Remove the space for MSVC (and Intel Fortran) for
consistency. The MS compiler technically does not document that
the `-D` argument may be separated from its value, though every
version to date supports it.
4d8c988c ExternalProject: Fix file download script with CMAKE_TLS_{VERIFY,CAINFO}
23a71e4e ExternalProject: Tell Git not to verify certs only if TLS_VERIFY is OFF
Teach CTestCoverageCollectGCOV to honor the
CTEST_EXTRA_COVERAGE_GLOB variable. When this variable is set,
this module will glob for matching source files that were not
covered and include them in the resulting tar file.
Since commit 272779ce (ExternalProject: Allow TLS_VERIFY for git clones,
2016-04-01) we pass the `-c http.sslVerify=false` option to `git clone`
even if no explicit `TLS_VERIFY` option was set. This changes behavior
because we used to use the default Git behavior by default. Revise the
logic to preserve the old default behavior by passing the new option
only if `TLS_VERIFY` was explicitly passed as `OFF`.
While at it, also honor `CMAKE_TLS_VERIFY` if the explicit `TLS_VERIFY`
option is not given.
On mingw-w64 the GNU Fortran compiler does not define `__MINGW32__` or
any similar indicator. Fix `CMAKE_Fortran_PLATFORM_ID` detection in
this case by falling back to preprocessing a `.c` source file even
when the compiler id is already detected.
c18d91ad Help: add release notes for topic 'ctest-run-submodule-sync'
7f560743 cmCTestGIT: run `git submodule sync` before updating submodules
06b310b5 cmCTestGIT: add an option to initialize submodules on update
56c1ea40 cmCTestGIT: fix git version references
Add NAMES_PER_DIR to all find_library invocations so that we consider
all possible names in each search directory before moving on to the next
directory. Otherwise we may not find self-built libraries first even if
they appear early in the search path.
Use `CMAKE_<LANG>_COMPILER_LOADED` to detect enabled languages because
`if( _LANGUAGES_ MATCHES C )` is always true on Windows as the RC
language is activated automatically and matches C.
Consistently glob for .gcda files in the binary directory.
Previously the behavior of this function depended on the
current working directory that it was called from.
Currently, CTest will not initialize any submodules within the already
checked out source tree. Add an option to do so. The use case for not
doing so is that some submodules may not be necessary for the current
test and keeping network usage down may be important.
Symbolic links that point to external
location no longer cause cmake to fail
with string out of bounds error but
are instead packaged as non relocatable
symlinks and print out a warning message.
This placeholder was added to the compilation rules for other languages
by commit v3.4.0-rc1~342^2 (Factor an <INCLUDES> placeholder out of
<FLAGS> in rule variables, 2015-07-13) but ASM was incorrectly left out.
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
RPM supports setting of default user, group,
file and directory permissions that will be
applied for files in package unless specified
per file/dir with attr setting
This is related to bug report 14714
Prior to Xcode 7.3 a XCTest bundle was built like an ordinary
bundle. But starting with Xcode 7.3 it is implicitely built as
a plugin for the test host. It looks like in that case the
'Build Products Path' is ignored.
This patch simply sets the CMake target output path to the value
Xcode expects internally to get a matching view of both.
The command:
xcodebuild -showBuildSettings -target CocoaExampleTests -configuration Debug
Output with Xcode 7.2:
TARGET_BUILD_DIR = .../Tests/XCTest/Debug
Output with Xcode 7.3
TARGET_BUILD_DIR = .../Tests/XCTest/Debug/CocoaExample.app/Contents/PlugIns
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
In v2.8.12.1-654-g7621ad6 I added underscore prefixes to
CPACK_ADDCOMP_(STR|UNAME) to prevent them from being automatically
written to CPackConfig.cmake.
Do the same for CPACK_ADDGRP_(STR|UNAME) and CPACK_INSTTYPE_(STR|UNAME).
Since commit v3.5.0-rc1~47^2 (FindCUDA: Support special characters in
path, 2016-01-15) our add_custom_command calls use VERBATIM so that
CMake will automatically quote special characters correctly. Fix the
separate compilation code path to not add its own quoting when the
VERBATIM option will be used.
The fix in commit v3.5.0-rc1~27^2 (FindPkgConfig: set standard variables
in the cache, 2016-01-20) added the wrong variable name to the cache.
The test was only testing that the cache variable existed, not that it
also had the correct value. Update the test to ensure that the cache
value matches the local variable value.
Reported-by: Bernd Lörwald
6a6e5d89 GenerateExportHeader: Allow common NO_DEPRECATED_MACRO_NAME for multiple libs
be5a8973 GenerateExportHeader: Do not define DEFINE_NO_DEPRECATED (#16022)
Previously we allowed this definition to persist outside our header.
This would cause conflicts across multiple such headers because the name
was always the same. Fix this by avoiding the definition altogether.
When system-provided packages are upgraded we must re-compile sources
depending on their headers. Use `-MD` instead of `-MMD` so that the
generated depfiles do not exclude system headers.
Suggested-by: Jussi Judin
If list of valid target architectures is empty for given SDK then there will
be no VALID_ARCHS build setting returned by Xcode. Return "" (empty string)
explicitly in this case. This may happens if CMAKE_IOS_INSTALL_COMBINED is ON
but only one architecture used in target.
Depending upon the configuration, certain components may or may not
be installed, for example Boost.Regex, but other components may
still have header dependencies upon these components which will
obviously fail to work. Since we can't make a sensible
determination with the hardcoded dependency information, we
choose to interpret these dependencies less strictly.
491b41dd Help: Add notes for topic 'vs-clang-cl'
ad6d27ac Tests: do not build PrecompiledHeader on Clang/C2
a0f0541f Tests: fix PDBDirectoryAndName on Clang/C2
3541af67 Tests: fix Plugin building on Clang/C2
1902c293 Tests: fix complexOneConfig building on Clang/C2
cab2ec11 Tests: fix Complex building on Clang/C2
ada3736c Tests: fix Module.GenerateExportHeader building on Clang/C2
123b7e13 Tests: fix AliasTarget building on Clang/C2
445d4d4b VS 14: Add flag map for -std= to CppLanguageStandard tag in project files
0a785eb4 Features: Clang has no cxx_decltype_incomplete_return_type in MSVC sim mode
2c2ec488 VS: in Clang/C2 toolset, setup correct compiler settings
37afe00f CMakeDetermineCompilerId: Add detection of clang.exe bundled with VS
Since commit v3.1.0-rc1~564^2 (OS X: Use -iframework for system
framework directories, 2014-05-05) we test the version of Clang is smaller
that 3.1 to see if it supports -iframework.
Considering that "iframework" support has been added in clang@r142418
(Frontend: Support -iframework.) prior to clang 3.1, this made sense.
That said, considering that support for multiple -iframework parameters
has been added later in clang@r164607 (-iframework should allow separate
arguments. ) prior to clang 3.2, this commit updates the check to enable
framework support only if version is >= 3.2
We originally deprecated this module in commit v3.5.0-rc1~295^2
(CMakeForceCompiler: Deprecate this module and its macros, 2015-10-19).
Then a use case was found to still require the module so the deprecation
was reverted for CMake 3.5 by commit v3.5.0-rc3~4^2 (CMakeForceCompiler:
De-deprecate until more use cases have alternatives, 2016-02-17). Since
then `CMAKE_TRY_COMPILE_TARGET_TYPE` was introduced to provide an
alternative solution for that use case. Deprecate the module again.
Canonicalize the input paths so we treat them both consistently,
in particular when comparing them via string operations. This
is needed for calls like
fixup_bundle("${CMAKE_INSTALL_PREFIX}/../test" ...)
Suggested-by: Benjamin Ballet <bballet@ivsweb.com>
Use recommended case for variable names. i.e. matching name of the
module as passed to `find_package`.
For backwards compatibility, the upper case versions of both input and
output variables are used and defined when appropriate. Skip this for
the _FOUND variable because FPHSA already does it. Skip this for the
_VERSION variable because that was recently added and never available
with the old name in a release of CMake.
Also detect the library version number. Provide results as variables
and as an imported target, LTTng::UST.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
When we check for a working compiler we print a message of the form:
Check for working <LANG> compiler: ...
At one time CMAKE_<LANG>_COMPILER was not well-defined for all
generators so we printed the generator name instead of the path to
the compiler. Nowadays we always know the compiler, so update the
message to print it unconditionally. This is more informative than
the generator name, especially when a toolset (cmake -T) is used.
Suggested-by: Gregor Jasny <gjasny@googlemail.com>
This is done the same way as for Eclipse: cmake tries to determine
the number of CPUs, and then adds the respective -jN to the make
invocations in the project file.
Alex
If CMAKE_INSTALL_RPATH is set and contains $ORIGIN then
dpkg-shlibdeps searches for the DEBIAN directory in order
to resolve $ORIGIN in the rpath to a directory. We need to
create the DEBIAN directory for this to work.
Since commit v3.5.0-rc1~47^2 (FindCUDA: Support special characters in
path, 2016-01-15) our add_custom_command calls use VERBATIM so that
CMake will automatically quote special characters correctly. However,
this breaks the special `$(VCInstallDir)` placeholder used with Visual
Studio generators. Since we do not support preservation of such
placeholders with VERBATIM (see issue #15001) we must fall back to not
using VERBATIM when the placeholder is used.
A better fix would be to stop using `$(VCInstallDir)` and use the value
of `CMAKE_${CUDA_C_OR_CXX}_COMPILER` instead, but that will require
additional semantic and documentation changes. For now simply fix the
regression with the above approach.
Reported-by: Stephen Sorley <Stephen.Sorley@jhuapl.edu>
We deprecated this module in commit v3.5.0-rc1~295^2
(CMakeForceCompiler: Deprecate this module and its macros, 2015-10-19)
in order to determine whether anyone still has use cases that require
it. Indeed we still need to provide a way to work with toolchains that
cannot link binaries without special flags. Remove the deprecation
warnings until we can provide an alternative to the module for this use
case.
We use `sh wx-config` to launch the `wx-config` tool so that it can run
even on Windows. Since it is always a shell script its output may use
POSIX paths even on Windows. Use `cygpath` to convert to Windows paths.
Check found libraries version to match user required version.
Protobuf compiler executable version is checked to be aligned with found
libraries, raising a warning message otherwise.
CPACK_* variables expect component name in upper case.
CPACK_RPM_* variables expected component name to be
in same case as component name.
This patch adds support for CPACK_RPM_* variables with
upper case component names to match the convention with
CPACK_* variables and also preserves same case component
names for back compatibility.
The specific cause is when e.g.
/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgio-2.0.0.dylib
is detected by fixup_bundle. set_bundle_key_values() interprets this as
a framework, thus doing a string replace that creates an embedded_item
that is equal to the original path, i.e. it is not embedded.
Before this change, the variable PROTOBUF_LIBRARIES might get redundant
value for debug and optimized configurations, e.g.
`optimized;/usr/lib/libprotobuf.so;debug;/usr/lib/libprotobuf.so`.
Some projects may want to use the detailed mangling information
directly instead of using the FortranCInterface_HEADER function.
We already provide variables encoding the mangling information,
so just document them as available.
This commit introduces two new options to CTestCoverageCollectGCOV.
When GLOB is set we recursively search in the source & binary
directories for .gcda files. Otherwise the default behavior is to
parse TargetDirectories.txt for a list of locations to search.
When DELETE is set we remove any .gcda file found after it has
been used to generate the corresponding .gcov file. The .gcov
file is also removed after the result tarball has been created.
Together these two new features help support the use case of
computing coverage across subprojects.
81ecc726 FindCUDA: Added some additional comments about non-existent dependency files.
4b561b4c FindCUDA: Fix for when a non-existent dependency file is found.
Due to #4662 -isystem support was disabled for all GNU Compilers
on Apple platforms. But the change was probably a just work around
for a broken compiler on Tiger (see 10837#c27206). So we tighten
the condition to only kick in for GCC versions earlier than 4.
That should ensure sane behavior for Xcode 3.2 and later.
Previously if a non-existent dependency file is found we set the file to "" and
then do if(NOT IS_DIRECTORY "${file}"). Later we call get_filename_component
on the empty file which returns basically the current build directory.
Having a dependency on the current build directory is really annoying, because
anything that compiles into that directory will change the file stamp and
cause your files to rebuild every time you call make. :(
Since commit v3.5.0-rc1~32^2~1 (ExternalProject: Simplify `cmake
--build` configuration passing, 2016-01-19) we use the `$<CONFIG>`
generator expression to generate the `cmake --build . --config <config>`
value for the default BUILD_COMMAND instead of the CMAKE_CFG_INTDIR
placeholder value provided by multi-config generators. However, some
projects have been abusing the old implementation detail by setting
CMAKE_CFG_INTDIR themselves to get a specific configuration. Those
projects should be updated to set their own BUILD_COMMAND to get
non-default behavior. Meanwhile we can be compatible with their
existing releases by detecting when CMAKE_CFG_INTDIR is not a
generator-provided placeholder and using its value instead.
The dependency flags require recent versions of `iccarm` and `iccavr`.
The multi-rule dependency generated with `--dependencies=m` does not
work well with Ninja, so use `--dependencies=ns` instead.
Imported targets are now the recommended way of dealing with external
library dependencies. Add one for FindPNG and update documentation
accordingly. Also add a test case activated by CMake_TEST_FindPNG.
Check CMAKE_CONFIGURATION_TYPES instead of CMAKE_CFG_INTDIR in order
to recognize multi-config generators. Then use $<CONFIG> to pass
the configuration value.
The original value is saved in `_pkg_config_path_old`. Fix this typo
left by commit v3.1.0-rc1~763^2 (FindPkgConfig: Extend PKG_CONFIG_PATH
using CMake variables, 2014-03-06).
In Modules/Platform/WindowsPaths.cmake our previously recorded
environment variable combinations no longer seem to be correct. For
example, a 64-bit cmake binary may see ProgramW6432 in the environment
and end up not considering the "ProgramFiles(x86)" variable. Instead
check for all possible environment variables in the preferred order and
then remove duplicates.
Reported-by: Shawn Waldon <shawn.waldon@kitware.com>
Add `VERBATIM` to all `add_custom_command` calls so that CMake will
escape arguments properly even when special characters such as "()" are
present.
Suggested-by: Nils Gladitz <nilsgladitz@gmail.com>
Most packages install their .pc files into PREFIX/lib/pkgconfig, but
some put them into PREFIX/share/pkgconfig. Either is valid, and
pkg-config itself looks in both for the /usr and /usr/local prefixes.
This fixes an issue where some packages (yajl, for example) are not
found if they are installed into a non-standard prefix and
CMAKE_PREFIX_PATH is used to locate them.
This improvement to the FindDCMTK module improves compatibility with recent
DCMTK, which provides a DCMTKConfig.cmake file. See the module comments for a
compatibility matrix.
It also provides DCMTK_INCLUDE_DIRS.
Ported from CommonTK (commontk.org).
This was added by commit v2.8.0~2292 (... Set variable
wxWidgets_INCLUDE_DIRS_NO_SYSTEM on the Mac ..., 2008-04-16) and updated
by commit v2.8.9~183^2 (FindwxWidgets: Do not use -isystem on OpenBSD,
2012-05-14). Since the underlying cause was never investigated fully we
do not know the conditions under which -isystem breaks wxWidgets, but
suppressing -isystem is problematic for users that do not want to see
warnings in wxWidgets headers. Simply drop the special case for now so
we can see whether anyone hits the problem again, at which point it can
be investigated in more detail.
Reported-by: Simon Wells <swel024@gmail.com>
Drop the 'UNIX' condition on Clang compiler features. This enables
use of compile features with MinGW Clang, though additional work may
be needed for clang-cl.
The if(STREQUAL) expressions do not support globbing expressions.
Use regular experssions with MATCHES instead.
Reported-by: Yahui Wang <youngqv@foxmail.com>
VS expects the platform to be just `Itanium`, so drop the incorrect
special case mapping it to `ia64`. This platform name has been wrong
since the logic was added by commit v2.8.10~148^2~8 (VS: Detect the
compiler id and tool location, 2012-08-16).
24cdb9df CMake: Mimic NSIS options dialog in WiX installer
de77d4a7 CPackWIX: Allow multiple patch files and diagnose if any are missing
38d723b3 CPackWIX: Allow patching of shortcut components
When parsing implicit include dirs, link dirs, and link libs, all
arguments are resolved to absolute paths instead of relative paths.
This is correct for link and include directories but link libraries
should only include the library name, not it's path.
The `otool` command may return multiple RPATH entires, so call
`gp_append_unique` for each one. Otherwise we may try to ask
`install_name_tool` to deal with the same entry twice.
Implement a native `cmake_parse_arguments` command that is fully
compatible with the documented behaviour of the previous implementation.
Leave the CMakeParseArguments module empty but existing for
compatibility.
CPACK_WIX_PATCH_FILE now accepts a list of patch files.
An error will now be produced if any of the patch files is missing.
Previously this would be silently ignored.
CMake had been setting OPENGL_glu_LIBRARY to AGL.framework, even
though AGL is not GLU. AGL is simply the GL component for the
deprecated Carbon framework. GLU is provided by OpenGL.framework.
A side effect of the old behavior was that if AGL was not found
(it is absent from OS X SDK 10.10 or later), then OPENGL_GLU_FOUND
would be incorrectly set to "NO".
All other modules use their module name (e.g. XxX for FindXxX.cmake) in
find_package_handle_standard_args. Protobuf used all-caps, which triggers
a bug when we try to find Protobuf with the CMakeFindDependencyMacro.cmake
macro, which only checks for the mixed-case _FOUND.
The CMAKE_SHARED_LIBRARY_LINK_<LANG>_FLAGS setting has always been meant
for flags needed to export symbols from executables for use by shared
library plugins. Since commit v3.4.0-rc1~58^2~1 (CMP0065: Restrict the
use of CMAKE_SHARED_LIBRARY_LINK_<LANG>_FLAGS, 2015-08-24) this is made
explicit by using the flags only for executables with ENABLE_EXPORTS,
guarded by CMP0065 for compatibility.
On some platforms we were accidentally using this setting to pass other
flags to the linker:
* AIX: -bnoipath, -brtl
* HP-UX: +s, +nodefaultrpath
These flags are incorrectly dropped when CMP0065 is set to NEW. Fix
this by moving the flags to more appropriate places for linking
executables.
This patch solves the problem of installing both: Device and Simulator
libraries on iOS. Before only one of them was installed.
If the IOS_INSTALL_COMBINED property is set on a target, a
special install hook will be activated which builds the corresponding
target and combines both at the install location.
The original patch was contributed by Ruslan Baratov, and polished by
Gregor Jasny.
Some OpenAL implementations on Windows provide both Win32 and Win64
binaries. Search the location of the matching architecture.
Author: George "Zogzer@GitHub" <insertlogic@gmail.com>
This is an extensive refactoring of the Cray compiler wrapper usage.
Using the new compiler wrapper checks, the CrayPrgEnv info files have
been moved from Platform/ to Compiler/. The adjusted naming convention
allows the compiler-wrapper information files to be loaded for both the
CrayLinuxEnvironment platform when cross-compiling and the Linux
platform if building natively on the Cray compute nodes. It also
creates a separation of common arguments for compiler id and language
information used to perform the appropriate introspection of implicit
arguments and libraries used by the compiler wrappers based on the
loaded module environment.
- Add TIFF::TIFF imported target
- Document imported target
- Add testcase to test the standard variables and the imported
target
Also:
- Add TIFF_INCLUDE_DIRS to match common practice
- Update documentation generally, including documenting
TIFF_INCLUDE_DIRS
7a327727 Embarcadero: Fix erroneous interpretation of __CODEGEARC_VERSION__.
25211d75 Compiler ID: Compiler versions must be a valid, numeric version string.
060442c2 Embarcadero: Check code using CMAKE_CXX_COMPILER_ID and CMAKE_C_COMPILER_ID.
f3b3219c Embarcadero/Watcom: Properly skip VSResource test for other generators.
ddbda722 Embarcadero: Fix bug where duplicate Ninja job pools would be created.
As per the following link:
http://docwiki.embarcadero.com/RADStudio/Seattle/en/Example_of_CODEGEARC_VERSION_Macro
The major/minor versions must be decoded as a hex string, while the patch
version must be decoded as a normal decimal string.
As an example, C++ Builder XE 8.1's bcc32.exe sets this macro to 0x070189C9.
The file version of bcc32.exe is 7.1.5570.35273. Therefore, the correct
interpretation to COMPILER_VERSION would be 7.1.35273.
The CMAKE_CXX_COMPILER_ID and CMAKE_C_COMPILER_ID variables are set to
"Borland" for older versions of the compiler. Newer CodeGear/Embarcadero
compilers will have those variables set to "Embarcadero". Search for lines of
code referencing both the variable name and Borland to be sure that they also
refer to Embarcadero.
Fix typos introduced by commit v3.4.0-rc1~257^2~2 (FindJava: Add support
for idlj and jarsigner tools, 2015-07-31) to correctly report when these
components are found.
The function _Boost_MISSING_DEPENDENCIES will look at the
user-supplied component list, check the dependency
information for each component using
_Boost_COMPONENT_DEPENDENCIES, and will add any missing
dependencies to the component list. This ensures that
all required components will be searched for.
The function _Boost_COMPONENT_DEPENDENCIES is used to query the
library dependencies for a given component for a given version of
Boost. This covers Boost releases from 1.33 to 1.59, using the
information generated by Utilities/Scripts/BoostScanDeps.cmake.
When both CPACK_DMG_SLA_DIR and CPACK_RESOURCE_FILE_LICENSE are defined,
use the license file for all languages instead of looking for a license
file for each language. Also expand the documentation on the SLA
variables.
In commit v3.4.0-rc1~18^2 (Disable shared library support when compiler
links statically, 2015-09-30) we tried to detect when the compiler is
not capable of linking shared libraries (possibly due to flags in use).
However, the approach is not robust against flags like `-nostdlib`.
Revert it for now pending another solution to the original problem.
Prior to commit v3.4.0-rc1~71^2 (Project: Determine default language
dialect for the compiler, 2015-09-15) we always guessed the default
language standard dialect based on the compiler version. This was not
reliable so that commit switched to computing the default language
standard dialect while detecting the compiler id.
When a toolchain file uses CMakeForceCompiler to set the compiler id
then the detection does not occur. Therefore commit v3.4.0-rc1~54^2
(Project: Don't require computed default dialect if compiler was forced,
2015-09-22) made the lack of detection an error only if the compiler was
not forced. However, this means that projects using CMakeForceCompiler
no longer even get the guess that we had before so <LANG>_COMPILER does
not work.
Due to the sophistication of CMake's compiler detection logic projects
should be ported away from using CMakeForceCompiler. In the meantime,
restore a guess of the default language standard dialect when the
compiler is forced.
In commit v3.4.0-rc1~71^2 (Project: Determine default language dialect
for the compiler, 2015-09-15) we added an "INFO:..." string to the
compiler id detection binary. The value can be optimized out of the
compiler id binary unless we force it to be included by making the
program behavior depend on it at runtime. Add references to the value
as we do for the other info strings already.
Gentoo-Issue: https://bugs.gentoo.org/show_bug.cgi?id=565744
Our CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES setting is no longer needed
because CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES is now populated with the
actual implicit link directories for the current toolchain. The old
values we hard-coded in CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES are not
relevant to modern toolchains, so simply drop them.
Co-Author: Shawn Walker-Salas <shawn.walker@oracle.com>
4bca9401 Improve appearance of CMake .dmg package on OS X
c4b9ee18 CPack/DragNDrop: Update documentation to include new variables
167a4655 CPack/DragNDrop: Optionally run an AppleScript when making a package
9c1dfbfd CPack/DragNDrop: Place the background image file in a hidden folder
47302038 CPack/DragNDrop: Use source file extension for background image
We already recognize the Cray Fortran compiler id. Extract the version
number using the same predefined macros we already use for Cray C and
C++ compilers.
04a2a923 Help: Add notes for topic 'cpack-deb-new-component-vars'
57672e72 CPackDeb: CPACK_DEBIAN_PACKAGE_NAME documentation improvement
a45a4b2d CPackDeb: set package control field per component
a60574f1 CPackDeb: set priority control field per component
24012e3c CPackDeb: additional CPACK_DEBIAN_PACKAGE_SECTION documentation
47182ab8 CPackDeb: set section control field per component
Also add GTK2_TARGETS variable containing all imported targets.
Previously, the GTK2_LIBRARIES variable was filled with the paths to the
libraries, and only the GTK2_XXX_LIBRARY variables contained the imported
targets.
Multiple languages for SLAs and the SLA UI can be added via the CPack
variables CPACK_DMG_SLA_DIR and CPACK_DMG_SLA_LANGUAGES. For each
language defined in the languages variable, CPack will search for
<language>.menu.txt and <language>.license.txt in CPACK_DMG_SLA_DIR.
If the sla directory variable is not defined, the old behaviour using
CPACK_RESOURCE_FILE_LICENSE is retained.
There is the global CMAKE_DL_LIBS setting which can be used instead. There are
even platforms where this is either empty because those functions are part of
the libc or is called entirely different, so this code wouldn't work reliable
anyway.
In some cases, CMake returned the following error:
-- Checking for module 'foo'
-- Package 'foo' not found
When the actual error returned by pkg-config was:
Package 'bar', required by 'foo', not found
Now, the actual error is forwarded to the user.
-- Checking for module 'foo'
-- Package 'bar', required by 'foo', not found
For the standard case (i.e. the package was indeed not found), the
CMake error was:
-- Checking for module 'foo'
-- Package 'foo' not found
But it now prints:
-- Checking for module 'foo'
-- No package 'foo' found
The associated test was also updated. ${last} refers to the last
CLI argument.
We support setting CMAKE_OSX_SYSROOT to a symbolic value like "macosx".
Modules/Platform/Darwin-Initialize.cmake takes care of finding the
actual SDK path on disk. Use that result to set CPACK_OSX_SYSROOT
instead.
Set variables in the platform information modules to tell the Ninja
generator what deps type to use instead of hard-coding conditions in the
generator itself.
This module was added by commit v2.6.0~1489 (...supporting embedded
compilers..., 2007-07-02) to avoid needing to build the compiler id
detection source on toolchains that need special flags or linker files
to produce executables. Since then CMake has learned other ways to
identify such compilers (e.g. passing vendor-specific version flags and
checking for vendor-specific banners in the output). Furthermore, CMake
now detects a lot more than just the compiler id during language
initialization in order to support things like <LANG>_STANDARD and
COMPILE_FEATURES. Therefore CMakeForceCompiler is no longer a viable
approach because it skips such detection.
One remaining challenge to support toolchains that require special
linker files is to build the test for a working compiler, compiler ABI
detection binary, and other try_compile cases. This will have to be
worked out as such cases are encountered.
Unset CMAKE_MODULE_PATH before calling find_package(Git) to ensure we do
not get a project-provided FindGit module that may not provide the
GIT_VERSION_STRING that we need. We do not need to restore the value
explicitly because this occurs inside the _ep_add_download_command
function call scope.
Refactoring in commit v3.4.0-rc1~77^2~1 (ExternalProject: Use
GIT_VERSION_STRING instead of custom method, 2015-09-17) forgot
to update the variable name used in an error message.
If the automatically selected SDK is newer than the host OS version
and no deployment version has been set then adjust the deployment
version to the host OS version. Otherwise the user won't be able to
launch the executables on the build host.
This is for example a problem on a MacOSX 10.10 host with Xcode 7
which only provides a MacOSX10.11 SDK.
Starting with sigc++ 2.5.1, c++11 must be enabled in order to use
sigc++. The GTK2::sigc++ imported target will automatically enable the
required build flags in order to build with the version found on the
system.
1bf66fed FindOpenSSL: Search for unix-named libraries first on MinGW (#15765)
6b575dec FindOpenSSL: Tolerate tabs in header while parsing version (#15765)
Revert commit v3.4.0-rc1~10^2~2 (Features: Disable support for Oracle
SolarisStudio on non-Linux, 2015-09-29) and two follow-up commits.
The support of compile features and language standards on Orcale
SolarisStudio needs more investigation so for CMake 3.4 we should
just act as 3.3 did.
Generalize the change made by commit v2.8.10~228^2~4 (FindOpenSSL: find
cross-compiled OpenSSL from MinGW, 2012-07-23) to be used on builds
hosted on Windows too. When building for MinGW, consider library names
that come with MinGW before looking for the main Windows distribution of
OpenSSL.
2402bb8c Help: Document Windows 10 Universal Applications in cmake-toolchains(7)
1be2f12c VS: Add support for Windows 10 Universal (Store) Applications
2798dbda VS: Refactor indentation of LinkLibraryDependencies
8c426183 MSVC: Add system libs for WindowsStore on VS 2015
d1b87d72 VS: Select Windows 10 Store SDK and toolset for VS 2015
5fdf7594 Tests: Suppress WriteCompilerDetectionHeader failure on SunPro
c824b23d Features: Fix C++98 flags on Oracle SolarisStudio 12.4 on Linux
61bc0f73 Features: Disable support for Oracle SolarisStudio on non-Linux
3f077996 VS: Add support for selecting the Windows 10 SDK (#15670)
5dfc4c5f VS: Add hook to initialize Windows platform settings
61c472a2 cmSystemTools: Add VersionCompareGreater helper
Teach the VS 2015 generator to produce a WindowsTargetPlatformVersion
value. Use the CMAKE_SYSTEM_VERSION to specify the version and if not
set choose a default based on available SDKs. Activate this behavior
when targeting Windows 10.
Co-Author: Brad King <brad.king@kitware.com>
Teach CMakeDetermineSystem to check for a CMAKE_SYSTEM_VERSION setting
even when CMAKE_SYSTEM_NAME is not set. This will allow builds on the
host OS to target other versions of the OS without full cross-compiling.
When a user or a compiler wrapper adds '-static' to the compiler flags
then it will always link static binaries. Detect this from the compiler
id binary and disable TARGET_SUPPORTS_SHARED_LIBS. This will prevent
projects from accidentally adding shared libraries when the toolchain
does not support them. It also helps CMake avoid linking with flags
that require shared libraries to be supported.
On SunOS the -std=c++11 flag must be used for linking as well as
compiling. Until we implement support for this we cannot support
the CXX_STANDARD property except on Linux (where it was tested).
The latter is now the preferred URL for visiting cmake.org with a
browser. Convert using the shell code:
git ls-files -z | xargs -0 sed -i 's|http://www\.cmake|https://cmake|g'
fff9434d FindThreads: officially announce it works with only C++ enabled
66db914a FindThreads: fix printing a pointer value in test code
0b38424c FindThreads: make the call to try_run() work also if only C++ is enabled
9924a212 FindThreads: replace CheckIncludeFiles by CheckIncludeFile
a27bc0cc Check(Function|Library|Symbol)Exists: make it work if only C++ is enabled
7279f293 FindThreads: add simple testcase
This causes a warning in C mode, and entirely fails in C++ mode:
CMake/Modules/CheckForPthreads.c: In function ‘runner’:
CMake/Modules/CheckForPthreads.c:34:27: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
printf("%d CC: %d\n", (int)args, cc);
^
Use %p to print out a pointer value, which will not cause any problems.
While at it, also add a branch using CheckIncludeFileCXX. Also give a better
error message if no supported language is enabled. C++ support isn't working
yet, but it has never worked.
Commit 7235334a (Project: Determine default language dialect for the
compiler., 2015-09-15) introduced a mechanism to determine the default
dialect used for the running compiler. If conditions in
the <CompilerId>-<Lang>.cmake file are such that compile features for
that version of the compiler should be supported, the _DEFAULT_STANDARD
is set to the computed value.
However, the CMakeForceCompiler module allows users to bypass execution of the
compiler by CMake. In that case, do not set the _DEFAULT_STANDARD variable at
all, which effectively disables the compile-features where the module is used.
No compile features have ever been recorded where the module is used so no
functionality is lost.
If variable is set to TRUE, values of all variables prefixed with CPACK_
will be escaped so special characters such as dolar sign, quotes or
foreward slash will not be lost. By default variable is treated as set
to FALSE for back compatibility.
The cpack_encode_variables macro is changed into a function to remove
scope pollution. There should be no other effects.
Move detection over to the compiler id logic where we have already
constructed the list of compiler flags from ARG1 and CMAKE_<LANG>_FLAGS.
Pass the flags when we execute "cl" with "/showIncludes". Also pass "/c"
because we only need to compile, not link. Check the compiler process
exit code before trusting its output.
19934b67 FindPythonLibs: unset temporary _PREFIX variable
f8bc4e11 FindPythonLibs: Use python executable prefix as a hint
a9d32dff FindPythonLibs: Match include dir to library version
e134e53b Add support for *.manifest source files with MSVC tools
da00be63 MSVC: Rewrite manifest file handling with Makefile and Ninja
d488b5c9 Ninja: Always add OBJECT_DIR variable to link rules
6d620f5a VS: Add manifest tool settings to VS 8 and 9 project files
7c5b6ed5 ExternalProject: Use "git stash save --all" only if supported (#15722)
b04c3815 ExternalProject: Use GIT_VERSION_STRING instead of custom method
becb14c9 CPack/DEB: test preserve extra config file permissions
7044e8ee CPackDeb: use of libarchive and removal of fakeroot
415405a3 cmArchiveWrite: control user/group, permissions and recursive file adding
4f2ff601 Tests: Make RunCMake.CPack error messages more readable
81b748ae cmGeneratedFileStream: Fix spelling in comment
If PYTHON_EXECUTABLE is set, then we should look for the libs in the
same prefix, e.g. /usr/local/python -> /usr/local/lib, and on Win32
/Python34/python.exe -> /Python34/libs.
This commit ensures that FindPythonLibs has found the library before
before the search for the include dir begins. The library prefix and
version can then be used to find the matching include dir.
ea2db3bb FindPythonLibs: Fix OS X framework include directory search path
c57334fa FindPythonLibs: Remove PYTHON_INCLUDE_PATH as input
2db092b1 FindPython{Interp,Libs}: Add versions 3.5 and 3.6
Classify .manifest sources separately, add dependencies on them, and
pass them to the MS manifest tool to merge with linker-generated
manifest files.
Inspired-by: Gilles Khouzam <gillesk@microsoft.com>
Add a helper class private to "cmcmd.cxx" to contain the implementation.
Update the link logic to use the intermediate files directory for each
target to hold manifest and resource files before embedding into the
binary. Preserve the old behavior of placing the .manifest file next
to the binary when not linking incrementally even though it will be
embedded.
We use PATH_SUFFIXES to append "python<v>" to each candidate path. Do
not append it to the constructed list of python framework include
directories. Otherwise the combined path will never exist. Note that
the code doesn't yet try to match the suffixes "m" and "u" between the
executable, library, and include directory.
This cmake variable has been deprecated for over a decade, and using it
as an input could potentially cause unexpected results. We still need
to keep it as an output variable for compatibility though.
The calls to find_program now use NAMES_PER_DIR so that the first executable
(e.g. h5pcc) appearing on their PATH will get chosen. The HDF5_PREFER_PARALLEL
variable swaps the search order when it is set to true in the event that a
directory being search contains both h5cc and h5pcc.
When compiling with
LDFLAGS='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld'
the compiler output includes a line like
COLLECT_GCC_OPTIONS='-specs=/usr/lib/rpm/redhat/redhat-hardened-ld' ...
that our link line regex matches due to an argument ending in "-ld".
Since it is not really the link line no implicit link information is
dectected. Exclude "VAR=..." lines from consideration as link lines to
fix this.
Since commit v3.1.0-rc1~635^2~7 (project: Add infrastructure for
recording CXX compiler features, 2013-10-17) we compile a test source to
a binary and then extract "<LANG>_FEATURES:..." strings from the binary
with the file(STRINGS) command. Add a newline at the beginning of the
string literal to be sure file(STRINGS) can extract the first entry as a
string independent of whatever else the compiler may put before the
storage it allocates for the literal within the binary.
04de9007 GHS: Fix generated file path slashes and quoting for 6.1.6
fbe0de92 GHS: Tell MULTI to delete .elf.ael file
63591b94 GHS: Find latest 'int' directory
Mangling is prevented by using a function instead of a macro for setting
default value of some CPack variables. Function is meant for internal use
in CPack.cmake only.
Old macro is deprecated but kept for backwards compatibility - was
intended for internal use only as it can't be used for CPack after
CPack.cmake script is included.
Patch removes local workarounds that were required by old macro,
fixes default setting of variables that by default inherit value from
another variable that already went through old default setting macro
(e.g. value of CPACK_PACKAGE_INSTALL_REGISTRY_KEY caused error for
wrong escapes if CPACK_PACKAGE_INSTALL_DIRECTORY contained escaped
back slashes) and provides a test for correct escaping of characters.
9cdf6ef4 Swift: Add proper Swift compiler test
1aa29f0d Swift: Remove positive Swift language tests
d778a1c2 Swift: Require Xcode 6.1 and for MacOS X at least SDK 10.10
4da60024 Swift: Fix Compiler-Id detection for Swift 2
874a265c Swift: Make SwiftMix compatible with Swift 2
The documetnation of binutils:
https://sourceware.org/binutils/docs/binutils/ar-cmdline.html
suggests to use the parameters "q" and "c" in this order ("q" is
operation, and "c" is the modifier).
Suggested-by: Дилян Палаузов <dilyan.palauzov@aegee.org>
Generally for a module foo, SWIG generates (in Python mode)
an extension module _foo.so and a proxy Python module foo.py.
However, if -noproxy is specified, instead it builds only foo.so
(without the leading underscore). The custom command generated
by CMake correctly handles the removal of this underscore when
-noproxy is given; however, it still adds foo.py to the expected
outputs. This upsets build tools that expect foo.py to be generated
(for example, 'make' will run the SWIG command twice). Fix this
by removing foo.py from the set of extra generated files when
-noproxy is specified.
Add an OPENSSL_USE_STATIC_LIBS option to enable it. Adjust
CMAKE_FIND_LIBRARY_SUFFIXES to only look for .a and .lib files. Also
adjust the search paths on Windows for installer locations of static
libraries.
Provide each variant in ZLIB_LIBRARIES and ZLIB::ZLIB imported location
properties when one is found, while maintaining support for manually
setting the library via ZLIB_LIBRARY.
When the Fortran_HL component is specified, the hdf5_hl library is not included
in HDF5_LIBRARIES which causes a bunch of undefined references at link
time. This commit adds hdf5_hl to the list of libraries to search for when the
Fortran_HL component is specified.
Define HDF5_{Fortran_,}HL_COMPILE_LINE so that HDF5_{Fortran_,}HL_INCLUDE_DIR
and HDF5_{Fortran_,}HL_LIBRARIES are found when the macro is invoked for HL and
Fortran_HL components. (Use patch from debian cmake-data package.)
Starting with Xcode 7 the OSX and iOS SDKs contain only stub
files for dynamic system libraries. These stub files contain
some meta data and a list of exported sysbols in plain text.
They are handled by the toolchain like regular dylibs.
The handling of multilevel dependencies has been fixed in Visual Studio 2013.
The work around used for VS 2010 and VS 2012 does not work for VS 2013 any more.
Switch to normal object build rules for VS 2013 and newer.
Exposed by a CMP0054 warning with code like:
cmake_minimum_required(VERSION 2.8.9 FATAL_ERROR)
project(MyProj NONE)
enable_language(C)
enable_language(CXX)
While at it, use STREQUAL for testing the compiler id against "GNU".
Suggested-by: Rolf Eike Beer <eike@sf-mail.de>
If CMAKE_MINIMUM_REQUIRED_VERSION is not set because no
cmake_minimum_required() call is present this line can lead to an error as that
string is empty so too few arguments are passed to if():
See also "/var/tmp/paludis/build/kde-krdc-15.08.0/work/build/CMakeFiles/CMakeOutput.log".
See also "/var/tmp/paludis/build/kde-krdc-15.08.0/work/build/CMakeFiles/CMakeError.log".
CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake:112 (elseif):
given arguments:
"VERSION_LESS" "3.1"
Unknown arguments specified
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPkgConfig.cmake:501 (_pkgconfig_parse_options)
/usr/share/cmake/Modules/FindOpenSSL.cmake:43 (pkg_check_modules)
This version is generated by the Windows Visual Studio
project files for unknown reasons, but is required to
pick up the debug version of the library created by
current versions of Xerces-C.
Since commit v2.8.7~31^2 (HP: Drive shared library linking with compiler
front end, 2011-12-12) the C compiler is used to link shared libraries
instead of calling the linker directly, so linker options need to be
wrapped as -Wl,-foo instead of -foo.
The compiler version reported since commit v2.8.2~1018 (CTest-side
support for compiler name and compiler version, 2009-10-12) only
reported the version of the compiler used to build CMake, and only
if it defined "_COMPILER_VERSION". Instead use the version of
the compiler used to build the project CTest is testing.
By default Mercurial command "clone" will implicitly call "update" with
the "default" branch after downloading the cloned repository. However
ExternalProject_Add() always generates a second "update" command after
cloning with a tag which is either specified or "tip" (equivalent to
"default" by default). Therefore ExternalProject will first clone then
update to default branch then update to another specified branch if
provided. This leads to potentially very long clone operation (in
particular when the repository default branch contain subrepos) which
can lead to transaction abort triggered by the server.
Simply use "hg clone -U" to avoid the implicit update during clone.
Our following call to "hg update" will take care of updating anyway.
Protobuf 2.6.x and lower do not use CMake (cmake is usable in Protobuf
3.x) but provide legacy Visual Studio projects files. Search their
output directories in 64-bit builds.
The Fortran compiler version detection infrastructure added by commit
v3.3.0-rc1~436^2~9 (Fortran: Add infrastructure to detect compiler
version, 2015-02-17) forgot to update CMakeFortranCompiler.cmake.in to
save the compiler version persistently as we do already in
"CMake{C,CXX}Compiler.cmake.in". Add the missing line now.
As dumpbin.exe is no longer reliable for gcc libraries on MinGW because
it crashes on many common libraries like libgcc_s and libgfortran it is
now necessary too resort to using objdump for DLL dependency walking.
Using objdump has a secondary problem in that it generates a lot of
output for large libraries and causes fixup_bundle() to take many
minutes to process what took fractions of a second with
"dumpbin.exe /dependents".
Add a 'grep' pre-filter in the execute_process() command pipeline to
reduce this output to a minimum for a several orders of magnitude speed
up. If grep is not available just use the full output.
As there does not seem to be a reliable way of detecting MinGW, callers
of fixup_bundle() may have to set the variable gp_tool to "objdump" if
dumpbin.exe is installed on the build machine to stop it using the
broken MS dumpbin.exe for library dependency walking.
Since commit v2.8.5~121^2~2 (FindMPI: Handle multiple languages,
2010-12-29) we called the GetPrerequisites is_file_executable function
but passed the name of a CMake variable instead of its value. Therefore
the function has always failed and caused the search for the compiler
name to run even with an absolute path. Switch to using if(IS_ABSOLUTE)
instead and drop use of GetPrerequisites.
Since commit v2.4.0~4325 (...use gcc -shared, even for C++ libraries,
2003-03-13) we use the C compiler "gcc" to link C++ shared libraries
compiled with "g++". At the time "g++" did not know how to link shared
libraries correctly. This has long since been fixed so simply drop the
special case.
Since commit v3.1.0-rc1~564^2 (OS X: Use -iframework for system
framework directories, 2014-05-05) we test the version of Clang to see
if it supports -iframework. Fix the version test used for AppleClang
since it uses a different version scheme than upstream Clang.
Run our check for the '_' prefix using a bzip2 API function as declared
with a prototype in the real header file. This is needed in case the
function is provided in a DLL import library where the symbol name may
not match without proper markup from the header.
If someone in KDE wants to port away from OLD policies, they might want to do
so one policy at a time. This patch will allow them to use
find_package(KDE4 NO_POLICY_SCOPE)
in callers to get around the CMP0011 warning, while still getting the policy
settings contained within.
The module is not needed anymore for try_compile or try_run. It cannot
be used with CMP0022 NEW behavior due to generator expressions in
INTERFACE_LINK_LIBRARIES, so document it as deprecated. Whatever
problems other than try_compile and try_run anyone tried to solve with
this module will have to be addressed another way.
3e6b2ab6 CPack/DEB: component version of PACKAGE_CONTROL_EXTRA
506f6bc0 CPack/DEB: Remove duplicate string(TOUPPER) calls
32e9276a Tests/RunCMake/CPack/DEB: add verifyDebControl
47d1f118 Tests/RunCMake/CPack: found files should be preserved
Add a TARGET_MESSAGES property to control whether Makefile targets print
the "Built target " completion messages. Default to ON to preserve
existing behavior.