1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-23 12:50:54 +08:00

735 Commits

Author SHA1 Message Date
Aaron Orenstein
af3fd6f22f Performance: Add an index to Change cmLocalGenerator::GeneratorTargets.
Add an index to Change cmLocalGenerator::GeneratorTargets for faster lookup by
name.

Also changed a bunch of uses of cmLocalGenerator::GetGeneratorTargets() to take
const references instead of copying the vector.

Represent generator targets as a map (name -> target) to make name lookups more
efficient instead of looping through the entire vector to find the desired one.
2017-08-16 15:35:38 -07:00
Sebastian Holtermann
362f9bd755 Autogen: Merge and remove redundant function calls 2017-08-10 18:48:15 +02:00
Betsy McPhail
d385962419 Add directory property 'LABELS' and CMAKE_DIRECTORY_LABELS variable
The specified LABELS will be passed down to subdirectories as well as
any targets or tests in the directory.
2017-07-10 16:25:18 -04:00
Brad King
c1f15e1c79 cmGlobalGenerator: Rename member to avoid shadowing
The `CurrentMakefile` member is shadowed by a generate-time member of
the same name in `cmGlobalXCodeGenerator`.  Rename our member to clarify
its configure-time role and avoid the shadow.
2017-06-14 16:24:45 -04:00
Brad King
ae77d9768f cmGlobalGenerator: Remove unused line
Remove an unused line that was left by commit v2.4.0~3946 (set
CMAKE_SYSTEM_VERSION for windows, 2003-07-16).

Fixes: #16956
2017-06-12 10:01:31 -04:00
Daniel Pfeifer
2d1c05c166 cmGlobalGenerator: remove 'return' from void expression 2017-06-08 16:40:11 +02:00
Brad King
c6ea3f01c3 Merge topic 'lint-function-args'
b1ec5dea Pass large types by const&, small types by value

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !927
2017-06-05 09:44:24 -04:00
Daniel Pfeifer
b1ec5deaf1 Pass large types by const&, small types by value 2017-06-04 00:48:21 +02:00
Daniel Pfeifer
8d7b3ef5d4 Provide and use CM_FALLTHROUGH 2017-06-03 08:38:51 +02:00
Pavel Solodovnikov
db2d46e2dd Remove second arg: npos in substr usages 2017-06-01 14:19:52 -04:00
Pavel Solodovnikov
8b6f439ef2 Access string npos without instance 2017-06-01 14:19:51 -04:00
Brad King
b115bc49ff Features: Refactor <LANG>_STANDARD update
In order to support generator expressions in target COMPILE_FEATURES
we apply them at generate time.  Move this step to the beginning of
generation instead of doing it on demand while collecting flags.
This avoids repeating the process unnecessarily, and will then allow
`cmLocalGenerator::AddCompilerRequirementFlag` to be used any time
during generation.
2017-05-01 10:33:05 -04:00
Brad King
8456ec833a Merge topic 'include-style'
1d829c86 Use quotes for non-system includes
26ee9e42 CPack: drop CPack prefix for includes
5afac50f cmConfigure: Ensure separate include block in headers

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !691
2017-04-13 08:12:40 -04:00
Daniel Pfeifer
1d829c862c Use quotes for non-system includes
Automate with:

git grep -l '#include <cm_' -- Source \
  | xargs sed -i 's/#include <\(cm_.*\)>/#include "\1"/g'

git grep -l '#include <cmsys/' -- Source \
  | xargs sed -i 's/#include <\(cmsys\/.*\)>/#include "\1"/g'

git grep -l '#include <cm[A-Z]' -- Source \
  | xargs sed -i 's/#include <\(cm[A-Z].*\)>/#include "\1"/g'
2017-04-11 22:35:21 +02:00
Brad King
b1eb493c11 cmGlobalGenerator: Abort generation earlier on export() error 2017-04-11 11:40:14 -04:00
Bastien Schatt
38fd5866c0 Add GENERATOR_IS_MULTI_CONFIG global property
Fixes: #16768
2017-04-04 09:49:00 -04:00
Gregor Jasny
c51c2cfac6 Apple: Fix Resources location for all generators
Issue: #16680
2017-03-23 16:43:55 +01:00
Daniel Pfeifer
4b49c9a245 fix include order of windows.h
Comments that indicate a special include order is necessary because
GetCurrentDirectory might get redefined are outdated.  Remove those
outdated comments and use the normal ordering of includes.
2017-03-14 22:40:11 +01:00
Ben Boeckel
aba92ffd92 cmWorkingDirectory: use the new class
These functions just need to change the directory for a block of code
and then go back to the caller's expected location. Use
cmWorkingDirectory to ensure that all return paths are handled.
2017-03-06 10:38:58 -05:00
Clinton Stimpson
1ba91291e3 Add policy CMP0068 separate install_name and RPATH settings on macOS
BUILD_WITH_INSTALL_RPATH, SKIP_BUILD_RPATH, CMAKE_SKIP_RPATH and
CMAKE_SKIP_INSTALL_RPATH no longer any effect on the install name
of a target on macOS.

Fixes: #16589
2017-02-14 14:28:07 -07:00
Gregor Jasny
10c9c73d58 Xcode: Control emission of EFFECTIVE_PLATFORM_NAME
When building with multiple SDKs within one project Xcode requires
the usage of ${EFFECTIVE_PLATFORM_NAME} to put temporary and build
outout into separate directories. For example an iOS device and
simulator build use two different SDKs (iphoneos and iphonesimulator).

In the past cmake tries to detect embedded toolchains that could
possibly use simulators and emitted EFFECTIVE_PLATFORM_NAME (EPN)
at the proper locations. In #16253 Mark noticed that if he
uses macosx and iphoneos in combination the necessary EPN is not
emitted. This is because CMake by default assumes macosx SDK which
does not trigger EPN emission.

The fist naive approach - enabling EPN unconditionally revealed that
then the EPN leaks into generator expressions like $<TARGET_FILE:xxx>
which might be a regression and thus is unacceptable.

The next approach was to add an CMake property to enable EPN emission
unconditionally. This solved the reported problem.

But the EPN leakage also happened for the embedded toolchains already
without anyone noticing. So the control property was turned into a
tri-state one:

 * No definition: EPN is activated for embedded toolchains like before
 * ON: EPN is always emitted
 * OFF: EPN is never emitted

That approach gives the user the chance to disable EPN for embedded
toolchains and restores generator expression functionality for those.

Closes: #16253
2017-01-20 13:51:48 -05:00
Brad King
25b6e7b710 Tolerate removed/replaced CMakeCache.txt with old CMakeFiles/
Users or scripts commonly remove or replace `CMakeCache.txt` without
also removing `CMakeFiles/`.  In this case the information saved in the
cache from platform information initialization is missing, so we need to
re-initialize it.  In such a case, remove the platform information
directory so that re-initialization will occur and restore needed
information to the cache.

Closes: #14820
2016-11-17 10:29:58 -05:00
Brad King
de53eb18ab Merge topic 'import-librhash'
cd8a57ae Add option to build CMake against a system librhash
71180fc8 FindLibRHash: Add module to find the librhash package
3216e94c Remove unused cm_sha2 infrastructure
5420278d Port hash computation to cmCryptoHash
9a596b33 cmCryptoHash: Re-implement in terms of librhash
47f91a61 cmCryptoHash: Avoid using subclasses at client sites
d0ff3e70 librhash: Port to KWIML for ABI and integer type information
465a85fb librhash: Avoid signed left-shift overflow
fc2cb74f librhash: Implement bswap_32 as a function even in strict C90 mode
0bd333bc librhash: Implement bswap_64 even in strict C90 mode
7189d62c librhash: Use __builtin_bswap{32,64} on Clang
af7ebf8a librhash: Install COPYING file with CMake documentation
bb01f20e librhash: Disable warnings to avoid changing 3rd party code
31bb727f librhash: Build the library within CMake
53048afa librhash: Remove source fragments not needed for CMake
5cb1b345 Merge branch 'upstream-librhash' into import-librhash
...
2016-11-10 08:34:28 -05:00
Brad King
5420278dc8 Port hash computation to cmCryptoHash
Avoid using KWSys MD5 or `cm_sha2` and use the `cmCryptoHash`
abstraction instead.
2016-11-10 08:29:38 -05:00
Daniel Pfeifer
2e620f0b38 Fix several include-what-you-use findings 2016-11-08 09:42:04 -05:00
Brad King
2d3aa94225 cmGlobalGenerator: Allow FindMakeProgram to fail
Revise its signature to return `bool` so that it can fail and abort
configuration early.
2016-10-20 10:37:27 -04:00
Stephen Kelly
e6eecec761 cmListFileCache: Remove cmState header include
Include it in dependents which have previously relied on it
transitively.
2016-10-19 15:41:00 +02:00
Stephen Kelly
a91eaf3872 cmState: Port dependents to new cmStateTypes header 2016-10-19 15:40:59 +02:00
Stephen Kelly
cde6eb6249 cmState: Port dependent code to new cmStateSnapshot name 2016-10-19 15:40:59 +02:00
Stephen Kelly
17d27893e6 cmState: Port dependent code to new cmStateDirectory name 2016-10-19 15:40:58 +02:00
Stephen Kelly
2fe3e55d53 cmState: Move CacheEntryType enum to separate namespace
Port dependent code to the change.
2016-10-19 15:40:58 +02:00
Stephen Kelly
a49751fb2e cmState: Move TargetType enum to separate namespace 2016-10-19 15:40:58 +02:00
Gregor Jasny
3b6f1587be Factor IDE folder name retrieval out into helper method
Add a `cmGeneratorTarget::GetEffectiveFolderName` helper to abstract
lookup of the `FOLDER` property in combination with checking for
generator support of folders.
2016-10-17 10:06:18 -04:00
Stephen Kelly
0c97806325 cmLinkLineComputer: Move ComputeLinkLibs from cmLocalGenerator
Add a cmOutputConverter to the cmLinkLineComputer and factory methods to
facilitate shell escapes.

Add state to the cmLinkLineComputer to record whether outputting for
response files or for watcom, to satisfy the cmOutputConverter API.
These are constant for the lifetime of the cmLinkLineComputer, even when
its functionality is extended in the future.  This also keeps the
signatures of cmLinkLineComputer relatively simple.

Pass the cmComputeLinkInformation as a method parameter so that
cmLinkLineComputer is free from target-specific state.  An instance
should be usable for all targets in a directory.
2016-10-10 20:38:58 +02:00
Stephen Kelly
5b361fdda0 cmLinkLineComputer: Extract from cmLocalGenerator
CMake has several classes which have too many responsibilities.
cmLocalGenerator is one of them.  Start to extract the link line
computation.  Create generator-specific implementations of the interface
to account for generator-specific behavior.

Unfortunately MSVC60 has different behavior to everything else and CMake
still generates makefiles for it.  Isolate it with MSVC60-specific
names.
2016-10-10 20:38:53 +02:00
Stephen Kelly
f59e877929 cmGlobalGenerator: Add API to get settings from top-level cmMakefile
At generate-time, definitions are sometimes read from a nearby cmMakefile,
making the value directory-specific because they are read once per
directory.  Often however, the intention is more
often to create a 'global' setting, such that the user writes for
example:

 set(CMAKE_IMPORT_LIBRARY_SUFFIX something)

once at the top level of their project.

Many of these are also set by internal platform files, such as
CMAKE_EXTRA_LINK_EXTENSIONS.

The set() definitions are not really suitable for 'global' settings
because they can be different for each directory, and code consuming the
settings must assume they are different for each directory, and read it
freshly each time with new allocations.

CMake has other variable types which are global in scope, such as global
properties, and cache variables.  These are less convenient to populate
for users, so establish a convention and API using the value as it is at
the end of the top-level CMakeLists file.
2016-10-06 18:41:06 +02:00
Brad King
86578eccf2 Simplify CMake per-source license notices
Per-source copyright/license notice headers that spell out copyright holder
names and years are hard to maintain and often out-of-date or plain wrong.
Precise contributor information is already maintained automatically by the
version control tool.  Ultimately it is the receiver of a file who is
responsible for determining its licensing status, and per-source notices are
merely a convenience.  Therefore it is simpler and more accurate for
each source to have a generic notice of the license name and references to
more detailed information on copyright holders and full license terms.

Our `Copyright.txt` file now contains a list of Contributors whose names
appeared source-level copyright notices.  It also references version control
history for more precise information.  Therefore we no longer need to spell
out the list of Contributors in each source file notice.

Replace CMake per-source copyright/license notice headers with a short
description of the license and links to `Copyright.txt` and online information
available from "https://cmake.org/licensing".  The online URL also handles
cases of modules being copied out of our source into other projects, so we
can drop our notices about replacing links with full license text.

Run the `Utilities/Scripts/filter-notices.bash` script to perform the majority
of the replacements mechanically.  Manually fix up shebang lines and trailing
newlines in a few files.  Manually update the notices in a few files that the
script does not handle.
2016-09-27 15:14:44 -04:00
Brad King
cda8c782db cmGlobalGenerator: Optimize FindMakefile method with an index
This method is used by directory get/set APIs.  With the new
`SUBDIRECTORIES` and `BUILDSYSTEM_TARGETS` methods projects may now make
heavy use of these APIs to traverse their directory structure and
process targets.  Make this faster by indexing the directory lookups.
2016-09-26 15:35:39 -04:00
Brad King
f0a23aa3db Ninja: Refactor Fortran rejection logic
Delay rejection of Fortran until after we've determined the version of
the `ninja` tool to be used.  This will later allow us to enable Fortran
support based on the version of ninja.

While at it, make the rejection an immediate fatal error.  Also provide
a stack trace so readers know what code tried to enable Fortran.
2016-09-22 13:51:58 -04:00
Stephen Kelly
34c6e995f9 Convert: Avoid HOME_OUTPUT enum when converting to relative paths 2016-09-19 21:36:13 +02:00
Brad King
b4ea74c5ca Merge topic 'find-package-mode-fixes'
a098ca0d cmake: Fix --find-package mode link line output
d9c600c5 cmGlobalGenerator: Fix use of uninitialized value in --find-package mode
2016-09-19 08:55:03 -04:00
Brad King
d9c600c504 cmGlobalGenerator: Fix use of uninitialized value in --find-package mode 2016-09-16 09:25:41 -04:00
Brad King
fa3897b24e cmGlobalGenerator: Refactor global target construction
Avoid using partially-constructed cmTarget instances.  Collect the
information about how to construct each target in a separate structure
and then actually create each cmTarget with full construction.
2016-09-15 15:56:49 -04:00
Brad King
916d84450d cmGlobalGenerator: Split CreateDefaultGlobalTargets implementation
Divide this long method into multiple helpers each dedicated to one of
the targets.  This also avoids having to clear/re-use local structures.
2016-09-15 15:37:25 -04:00
Brad King
00e78c1990 cmTarget: Construct with basic information up front
Avoid having partially constructed cmTarget instances around,
except for the special case of GLOBAL_TARGET construction.
2016-09-14 14:50:39 -04:00
Brad King
9d11bd5066 Avoid requiring default cmTarget constructor for map indexing
The `std::map<>` index operator requires a default constructor on the
value type.  Avoid requiring a default constructor on `cmTarget` just
for this purpose.
2016-09-14 14:50:39 -04:00
Daniel Pfeifer
efed6468ed fix a load of include-what-you-use violations 2016-09-03 08:04:56 -04:00
Stephen Kelly
563ac22a16 Convert: Replace trivial conversion with new method 2016-08-27 15:26:37 +02:00
Daniel Pfeifer
e7b842e189 Make sure unnused parameters are /*named*/ 2016-08-17 01:49:57 +02:00
Daniel Pfeifer
1d6909a287 use CM_NULLPTR 2016-06-28 09:02:26 -04:00