Instead of always adding CMAKE_SHARED_LIBRARY_LINK_<LANG>_FLAGS to
executables, or just when the ENABLE_EXPORTS property is set (CMP0065),
make sure that the target platform also actually supports shared
libraries. If not, then the executable cannot possibly provide symbols
to them anyway.
On Solaris there is a global typedef called 'single':
/usr/include/floatingpoint.h:77:15: note: shadowed declaration is here
typedef float single;
Avoid shadowing it by using a different name.
1fe39020 QtAutogen: Port away from cmLocalGenerator.
59a729b2 QtAutogen: Split initializer class into separate file.
1e83a963 QtAutogen: Split initializer methods into separate class.
12f0e13c QtAutogen: Simplify generator initialization API.
65ff75d3 QtAutogen: Remove unnecessary dereference.
64b78c14 QtAutogen: Move Source initialization to prior loop.
c3c20d3c QtAutogen: Add _automoc.cpp sources before initializing.
8b6ec29d QtAutogen: Move initialization condition to caller.
9470b056 QtAutogen: Move condition to prior loop.
b7491b1c QtAutogen: Move condition to prior loop.
e791c854 QtAutogen: Make some methods static.
6210ec64 QtAutogen: Make internal method private.
a3ceb998 QtAutogen: Don't use members to initialize automoc targets.
dced2fe1 QtAutogen: Rename variable.
f9a77e76 QtAutogen: Don't use a member to store skipped uic files.
c3633e7a QtAutogen: Add missing includes and forward declarations.
9298f56d CPack: allow packaging of empty directories
ecd71c9c SystemTools: time operations on directories
19c6f4ee SystemTools: set time file permissions
749a140a CPackDeb: allow empty directories in component packages
The Ninja generator and Visual Studio generators are special-cased for the
QtAutogen feature. In order to reduce the number of custom targets, the Visual
Studio generators prefer to create custom commands instead, and in order to
create appropriate Ninja files, generated rcc files are listed as byproducts.
This requires the use of the GetConfigCommonSourceFiles API of the
cmGeneratorTarget for those generators when initializing the autogen target.
The initializer method is called from Compute() after the cmGeneratorTarget
objects are created, however the initialization of the object directory occurs
later in the InitGeneratorTargets method. That means that the resulting object
locations are computed incorrectly and cached before the object directory is
determined, so the generated buildsystem can not find the object files.
The initialization of the object directory was split from the creation of
cmGeneratorTarget instances in commit 0e0258c8 (cmGlobalGenerator: Split
creation of generator object from initialization., 2015-07-25). The motivation
for the split was to do only what is essential to do early in cases where
cmGeneratorTargets need to be created at configure-time. That is required for
the purpose of implementing policies CMP0024 and CMP0026, and for
try_compile(LINK_LIBRARIES). However, the split was not really necessary.
Compute the object directory in the cmGeneratorTarget constructor instead.
The QtAutogen unit test already tests the use of TARGET_OBJECTS with AUTOMOC,
and that test already passes on Ninja. The reason it already passes is that
the QtAutogen target also uses the AUTORCC feature, and specifies several qrc
files in its SOURCES. Later in the Compute algorithm (after the
InitGeneratorTargets call), the rcc files are determined and target->AddSource
is called. The AddSource call clears the previously mentioned cache of source
files, causing it to be regenerated when next queried, this time taking account
of the object directory.
Extend the test suite with a new target which does not make use of AUTORCC with
qrc files so that the test added alone would break without the fix in this
commit.
When we generate a ".rule" file to attach a custom command in a VS IDE
project, set the file timestamp to be old enough to prevent the rule
from re-running due to its timestamp.
Some commands on Windows do not understand forward slash paths and
require backslashes. In order to help projects generate shell
invocations of such commands, provide a generator expression to convert
paths to the shell-preferred path format for the current generator.
This will allow custom commands to generate paths the same way CMake
does for compiler command invocations.
Ensure that all targets have their _automoc.cpp before attempting
to initialize the autogen target. The initialization evaluates
generator expressions for target sources, and must include the
_automoc.cpp of object library dependents in order for TARGET_OBJECTS
to include the object file for the corresponding _automoc.cpp file.
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'
In the Ninja generator we run all build rules from the top of the build
tree rather than changing into each subdirectory. Therefore we convert
all paths relative to the HOME_OUTPUT directory. However, the Convert
method on cmLocalGenerator restricts relative path conversions to avoid
leaving the build tree with a "../" sequence. Therefore conversions
performed for "subdirectories" that are outside the top of the build
tree always use full paths while conversions performed for
subdirectories that are inside the top of the build tree may use
relative paths to refer to the same files.
Since Ninja always runs rules from the top of the build tree we should
convert them using only the top-level cmLocalGenerator in order to
remain consistent. Also extend the test suite with a case that fails
without this fix.
The changes in commit 47b060ae (CPackDeb: allow empty directories in
component packages, 2015-09-21), commit b58de9fe (CPack: allow packaging
of empty directories, 2015-09-21), and commit b761e90d (CPack: remove
accidental changes, 2015-09-22) regressed packaging of CMake itself.
Revert the changes until they can be revised and rebased on other
changes that make additional fixes.
8bfff686 cmLocalGenerator: Compute object max path on construction.
2c2479fb cmGlobalGenerator: Create all local generators after Configure().
194bb068 cmGlobalGenerator: Remove unused method.
c5f07e05 cmGlobalGenerator: Create local generators after all makefiles configured.
dd408de4 cmGlobalGenerator: Create local generator after configuring the makefile.
8a88089b cmMakefile: Create the local generator after configuring the makefile.
934aa454 Makefiles: Remove need to create local generator at configure time.
61b48e70 Makefiles: Port to cmOutputConverter.
In TryCompileCode we construct an internal argv[] vector that needs to
have a fake argv[0] so our internal cmake command line looks like a real
command line. Fix construction of the fake argv[0] when try_compile is
called without the CMAKE_FLAGS argument. Otherwise the first internal
-DVAR=val argument that we use to pass information like
CMAKE_OSX_SYSROOT is ignored.
The changes in commit c96fe0b4 (cmake: Add -W options to control
deprecation warnings and errors, 2015-07-28) fail to account for
-Wdev warnings produced by places in CMake other than message().
This causes a regression in which -Wno-dev fails to suppress such
warnings. Revert the feature until it can be revised accordingly.
When using "cmake --build ." or "MSBuild ALL_BUILD.vcxproj" to drive the
build the dependencies in the .sln file are not considered. This means
that ProjectReference elements in .vcxproj files are used to order
targets. We must ensure that the ZERO_CHECK target is listed as the
first dependency of every target so that when it causes regeneration of
the build files then MSBuild has not yet loaded the updated files.
Refactor cmGlobalVisualStudioGenerator::TargetCompare to store the name of
the target that should come first instead of hard-coding "ALL_BUILD".
Update client sites to specify "ALL_BUILD" when ordering for .sln files
and an empty string otherwise (in cases when "ALL_BUILD" should not be
encountered anyway).
Set policy CMP0065 to the value used in the calling project.
Set the the value of CMAKE_ENABLE_EXPORTS if set in the calling
project to initialize the target property appropriately.
2514e426 CMP0026: Use compatibility codepath until configure is finished (#15748)
b98f7712 cmGlobalGenerator: Add API for the configure step being finished.
b5de2bd9 cmLocalGenerator: Simplify condition.
Use it instead of the similar cmMakefile API. It is necessary to
know that the Configure step is completely done, not just that one
particular cmMakefile is finished configuring.
Prior to commit 611220f7 (cmTarget: Use reliable test for CMP0024 and CMP0026
OLD., 2015-07-25), this was determined by checking whether cmGeneratorTargets
exist yet, which happens after the Configure step.
Add ctest command-line options:
--test-output-size-passed <n>
--test-output-size-failed <n>
to set the amount of test output to store in Test.xml as a command-line
dashboard client.
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
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
Fixes#15685, where the right Qt5 dlls on Windows were not packaged because
they were not found when relying on the PATH environment variable.
Also some cleanup of code introduced in 8120e13f, but no longer needed with 678aaad1.
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.
7a6e5f06 Tests: Cover find_program when the environment duplicate some HINTS
40122975 Merge branch 'fix-bad-search-ordering' into test-search-ordering
02440154 find_*: Fix search order when the environment duplicates some HINTS
7046eedd ccmake: Use more-portable call to set_field_buffer (#15740)
da1a02f7 ccmake: Avoid using non-portable 'curcol' field (#15739)
6c442e5a ccmake: Pass format string to 'printw' (#15738)
'curcol' is an implementation detail of ncurses so other implementations
of 'form' may not have it. The switch-to-previous-field logic only
exists for overloaded requests of REQ_DEL_PREV, so no need to check for
REQ_DEL_CHAR. For REQ_DEL_PREV, check if the field changed and if it
did, change it back.
Support for C11's _Thread_local was introduced in GCC in the 4.9 series,
even though we make the C11 compiler flags available in CMake with GCC
>= 4.6.
FreeBSD's runetype.h uses _Thread_local, which causes CMake's own build
to fail when using GCC < 4.9 and -std=gnu11:
/usr/include/runetype.h:92:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
extern _Thread_local const _RuneLocale *_ThreadRuneLocale;
Add a test for _Thread_local support and only build CMake itself with
C11 support if it works.
Bug: http://www.cmake.org/Bug/view.php?id=15741
Refactoring in the topic merged by commit v3.2.0-rc1~400 (Merge topic
'refactor-search-path-construction', 2014-11-13) introduced a bug that
filters out duplicate paths in an incorrect order. Restore the search
path to its documented order even when duplicate paths are present.
Reported-by: Marc CHEVRIER <marc.chevrier@sap.com>
5d6aa364 cmLocalGenerator: Always return the end snapshot state of a directory.
3f4e5e8c cmState: Return end snapshot for GetBuildsystemDirectoryParent.
With 64-bit Windows builds, there is no need to remove the leading
underscore from all the symbols. This is because it does not have one
in the .obj file unless it is really in the name. This did not cause
any trouble until VS 2015 which has some system functions that have a
leading underscore that end up in the .def file.
This is needed for proper makefile progress tracking.
The cmLocalGenerator is constructed at configure-time, but only used
at generate time. The StateSnapshot member is currently populated
before configuring, so use the Makefile to get the end snapshot.
This is the appropriate snapshot for future use. Existing users
of this method are mostly just calling GetDirectory on the result,
but the progress tracking of the Makefile generator needs a consistent
snapshot to be used, so the end snapshot should be consistently used.
This is a change in behavior from CMake 3.3, but there is no semantic meaning
to empty entries in buildsystem properties. This also restores behavior to
that of CMake 2.8.10.
This is a change in behavior from CMake 3.3, but there is no semantic meaning
to empty entries in buildsystem properties. This also restores behavior to
that of CMake 2.8.10.
This reverts commit d4736d53cd.
RtlGetVersion is a private API not meant for public use. Another
solution to detecting the Windows version will be needed.
Reported-by: Gilles Khouzam <Gilles.Khouzam@microsoft.com>
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
Since commit v2.8.11~59^2 (cmSystemTools: Generalize TrimWhitespace to
all whitespace, 2013-03-27) we incorrectly use `c <= ' '` to determine
if `c` is a whitespace character. With a signed `char` type UTF-8
encoded strings may be truncated because values above 0x7f appear
negative and therefore less than 0x20. Use `isspace(c)` instead.
Extract the logic added by commit v3.1.0-rc1~386^2 (Encoding: Fix debug
asserts ... with non-ascii chars, 2014-06-16) into a helper function so
we can re-use it.
b9856862 Tests: Cover set_property for buildsystem target properties
407ff47e cmTarget: Fix memory leak when SOURCES property is cleared
cf74fc24 cmTarget: Fix buildsystem property empty value set and append operations
8ea7611b find_program: Optionally consider all names in each directory
fc1990c9 cmFindProgramCommand: Re-implement search using more flexible approach
fdbfc9f6 Tests: Add explicit testing for find_program
907a919b cmSystemTools: Drop unused StringEndsWith method
ed4de3c9 cmFindProgramCommand: Use Names member instead of passing it
bf32b95e cmFindLibraryCommand: Avoid repeating search for the same name
Refactoring in commit 1f54bc1c (cmTarget: Split storage of include
directories from genexes, 2015-08-04), commit 772ecef4 (cmTarget: Split
storage of compile options from genexes, 2015-08-04), commit 44e071ae
(cmTarget: Split storage of compile features from genexes, 2015-08-04),
and commit 197f4de1 (cmTarget: Split storage of compile definitions from
genexes, 2015-08-04) failed to account for value==NULL in SetProperty
and AppendProperty methods.
When more than one value is given to the NAMES option this command by
default will consider one name at a time and search every directory for
it. Add a NAMES_PER_DIR option to tell this command to consider one
directory at a time and search for all names in it.
Avoid using KWSys SystemTools::FindProgram because it does much more
than we actually need for find_program and does not allow us to control
the order of preference between directories and names. Create our own
cmFindProgramHelper much like cmFindLibraryHelper but without all the
find_library-specific parts.
In FindNormalLibraryDirsPerName we consider one name at a time and
search the entire path. Avoid repeated consideration of names by
removing each one from the list of candidates before considering the
next one. This will not change behavior because we already know the
earlier candidates were not found on repeated considering anyway.
Determine the Desktop SDK for Windows Phone and Windows Store from the
generator instead of the version of the targeted app. This allows to
build a Windows Phone 8.1 app on VS 2015 for example.
ad262917 Xcode: Add unit test for iOS project install (#12506)
48fe617e Fix installation of iOS targets (#12506)
d2c2319d Replace CMAKE_XCODE_EFFECTIVE_PLATFORMS with call to PlatformIsAppleIos
Instead of searching for source files in a couple hard-coded
locations, we now search the source and binary directory for files
matching both the name of the covered file and its package
directory structure.
The call to CreateFile added by commit ac0bb433 (VS: Windows Store/Phone
package cert thumbprint, 2015-08-21) passes a wide character path
explicitly so we should call CreateFileW directly. Otherwise it does
not build without -DUNICODE (e.g. in bootstrap on MSYS).
The changes to cmComputeLinkInformation.cxx in commit 675ef165 (Allow
LINK_SEARCH_{START,END}_STATIC props to have default values, 2015-08-07)
are unrelated to the feature added by that change and are incorrect.
They lead to cases of extra -Bdynamic flags. Revert them.
616d8f02 cmGeneratorTarget: Rename method to match operation.
ec56d244 cmGlobalGenerator: Process evaluation files after target depends.
1e5349a5 cmGlobalGenerator: Access makefile from makefiles container.
2b9a25d7 cmGlobalGenerator: Create global targets directly after Configure.
3e08b4df cmMakefile: Skip Global targets for CMP0019 evaluation.
357bf469 cmGlobalGenerator: Fill the project map at compute time.
ebf8d0a9 cmGlobalGenerator: Rename method.
bd096d30 cmGlobalGenerator: Avoid cmLocalGenerator until after Configure.
ff8ac8ee cmLocalGenerator: Create from already-constructed cmMakefile.
0bd7279f Ninja: Remove some incorrect comments adding no value.
2f2d4da9 cmCTestScriptHandler: Simplify deletes.
7fdc9a8b QtAutogen: Use a smart pointer.
92041eec cmGlobalGenerator: Remove MakeLocalGenerator method.
acb00622 cmGlobalGenerator: Require a snapshot to create a local generator.
83b8a927 cmMakefile: Remove cmLocalGenerator member.
9b6a743b cmLocalGenerator: Remove Parent pointer.