Commit Graph

194 Commits

Author SHA1 Message Date
Nils Gladitz 15a8af21e8 Add an "installed file" property scope
Teach set_property and get_property an "INSTALL" property type to be
associated with install-tree file paths.  Make the properties available
to CPack for use during packaging.  Add a "prop_inst" Sphinx domain
object type for documentation of such properties.
2014-05-28 12:28:18 -04:00
Rolf Eike Beer be53734d3c CompileFlags: Add -AA +hpxstd98 on HP-UX 11.11 with aCC
These flags are needed to enable support for C++98.  Also teach the
'bootstrap' script to add them if necessary.
2014-04-04 13:31:28 -04:00
Clinton Stimpson 98383f802a Unicode: check encoding of files given to configure_file.
UTF-16 and UTF-32 files are rejected.
2014-03-17 14:01:55 -06:00
Brad King 7cbab17871 Change version scheme to use only two components for feature levels
Historically CMake used three version components for the feature level.
We released new features while incrementing only the third version
component.  Since commit v2.8.2~105^2~4 (New version scheme to support
branchy workflow, 2010-04-23) we used the fourth version component for
bug-fix releases and the development date:

 <major>.<minor>.<patch>[.<tweak>][-rc<n>] = Release
 <major>.<minor>.<patch>.<date>[-<id>]     = Development

This solidified use of three components for the feature level, and was
necessary to continue releasing 2.x versions because:

* Some existing projects performed floating-point comparisons of
  ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} to 2.x numbers
  so ``x`` could never be higher than 9.

* Version 2.9.<date> was used briefly in post-2.8.0 development in
  CVS prior to the transition to Git, so using it in releases may
  have caused confusion.

Now that we are moving to 3.x versions, these two restrictions go away.
Therefore we now change to use only two components for the feature
level and use the scheme:

 <major>.<minor>.<patch>[-rc<n>] = Release
 <major>.<minor>.<date>[-<id>]   = Development
2014-02-19 09:30:13 -05:00
Brad King 418a155be7 Merge topic 'cmake-devel-version-macro'
9bcc1b21 Export: Fix internal CMake version test logic
d2059d25 cmVersion: Fix CMake_VERSION_ENCODE for date in patch level
28805109 cmStandardIncludes: Include cmIML/INT.h for portable integer types
2014-02-11 09:16:09 -05:00
Brad King 28805109bc cmStandardIncludes: Include cmIML/INT.h for portable integer types
Also teach the bootstrap script to configure the needed headers.
2014-02-10 15:31:40 -05:00
Stephen Kelly 23d3d38a31 CMakeLists: Generate the cmCommands.cxx file.
Define the list of commands in the CMakeLists.txt file. List the
sources in the CMakeLib target, but mark them as HEADER_FILE_ONLY.
This has the effect that IDEs will show the files, though they
will not be built again.

Add a cmCommandsForBootstrap.cxx file for bootstrapping purposes.

Rename the cmExportLibraryDependencies file to match the common
pattern.
2014-02-09 22:02:37 +01:00
Rolf Eike Beer b22a0f15de bootstrap: improve ld flag for Linux/HPPA builds
Follow up commit ca63bb10 (bootstrap: try better workaround for builds
on Linux/HPPA, 2013-09-12) with an improved ld flag.

Suggested-by: Guy Martin
2014-01-15 10:06:07 -05:00
Brad King 2ba2c435f6 bootstrap: Add KWSys Encoding and FStream
Run the KWSYS_STL_HAS_WSTRING platform test and configure the result.
Configure the Encoding and FStream header files and build the sources.
On Windows, build EncodingC.c with KWSYS_ENCODING_DEFAULT_CODEPAGE=CP_ACP.
2013-11-25 12:46:09 -05:00
Brad King 993b685676 bootstrap: Parse Copyright.txt instead of duplicating notice
Use 'grep' to extract the copyright notice from Copyright.txt instead of
duplicating it in the bootstrap script.
2013-11-12 16:22:52 -05:00
Brad King 1093deebd0 Shorten CMake version used in install destinations
Since commit c9a5f34b (Cleanup use of CMake version in install
destinations, 2013-09-26) we use the full CMake version in default
install destinations.  For rapidly changing versions of the form

 <major>.<minor>.<patch>.<date>-g<commit>[-dirty]

used by developers this is too granular.  Instead use just

 <major>.<minor>.<patch>

as the version for default install destinations.  This will still
be granular enough for unique directories in releases.

On Cygwin continue to use the full ${CMake_VERSION} as was the case
prior to the above-mentioned commit.
2013-10-25 09:01:37 -04:00
Brad King 6384f1683a Merge topic 'remove-cmake-i-wizard'
a8226e9 cmake: Drop support for "-i" wizard mode
2013-10-22 09:07:14 -04:00
Brad King 765d783972 cmSystemTools: Drop old RunCommand method
All calls to this method have been replaced by newer infrastructure.
Remove it and the supporting cmWin32ProcessExecution class.
2013-10-19 07:25:43 -04:00
Brad King a8226e91d7 cmake: Drop support for "-i" wizard mode
Tell users to pass cache values with the -D option on the command line
or use cmake-gui or ccmake.
2013-10-18 13:32:39 -04:00
Brad King bfe07aa97e Build Help documentation during CMake build using Sphinx
Add a Utilities/Sphinx directory to hold CMake build code to run the
Sphinx (sphinx-doc.org) documentation generation tool.  Create a
CMakeLists.txt file there capable of building either as a subdirectory
of the main CMake build, or as a standalone documentation build.

Add cache options SPHINX_MAN and SPHINX_HTML to select output formats
and SPHINX_EXECUTABLE to specify the sphinx-build executable.  Add
bootstrap options --sphix-man and --sphinx-html to select output formats
and --sphinx-build=<sb> to specify the sphinx-build executable.

Create a "conf.py.in" file to configure_file into "conf.py" to tell
sphinx-build how to build our documents.  Create a "cmake.py" Sphinx
extension module defining:

* The "cmake-module" directive used in Help/module/*.rst files to
  scan .rst markup from the corresponding Modules/*.cmake file.

* A Sphinx domain called "cmake" defining documentation object types
  for CMake Help/<type> directories: command, generator, manual,
  module, policy, prop_*, and variable.  Add a "role" for each type
  to perform cross-references.  Teach the roles to treat "<XYZ>"
  as placeholders instead of explicit targets if not preceded by
  a space.  Add cmake domain directives to define command and
  variable objects explicitly in .rst file content.  This will
  allow modules to define their own commands and variables and
  have them indexed and linkable.

* A Sphinx document transform that converts Help/<type>/*.rst documents
  into cmake domain objects of the corresponding <type> and adds index
  entries for them.  This will automatically index all CMake documentation
  objects and provide cross-reference targets for them with no special
  markup in the .rst files.
2013-10-16 09:22:37 -04:00
Brad King 399e9c46d8 Drop builtin property documentation
Drop all DefineProperty calls for non-chained properties.  Drop the
documentation from the chained ones.  The documentation for all
properties is now in Help/prop_*/*.rst files.
2013-10-16 09:22:36 -04:00
Brad King 80a3273b5e Drop all documentation formatters except Usage
We now need only the Usage formatter to support command-line options
that print basic usage, and the supporting indented=>preformatted markup
processor to support CMake message formatting.  Drop all other
documentation formatters and move the remaining code up into the top
cmDocumentationFormatter class.
2013-10-16 09:22:35 -04:00
Brad King c9a5f34bd7 Cleanup use of CMake version in install destinations
Factor the CMAKE_DATA_DIR, CMAKE_DOC_DIR, and CMAKE_MAN_DIR selection
out of CMakeLists.txt and into a Source/CMakeInstallDestinations.cmake
script.  Load the script from the original location of the code.

Cache the destination values as empty strings so we know if the user
sets them explicitly.  If not, then compute defaults based on the
platform and full CMake version string.  By not caching the versioned
defaults, we can change them in a single build tree as the version
changes.

Remove duplication of the install destination defaults from the
bootstrap script.  Cache empty defaults there too.  Parse from the CMake
code the default values to report in the help output.  Keep the CMake
code in a structured format to make this reliable.
2013-10-15 10:46:54 -04:00
Brad King 82578d995a bootstrap: Report -rc# in --version output 2013-10-15 10:46:53 -04:00
Brad King c04995b46e cmake: Split -E command implementation into separate source file
Move the cmake::ExecuteCMakeCommand static method and all the static
methods it calls out of the 'cmake' class to a separate 'cmcmd' class.
Build the latter as part of the main cmake executable with cmakemain.cxx
and not in CMakeLib.  Drop unused header includes from "cmake.cxx".

By moving this implementation out of cmake.cxx we avoid carrying it
around in all the executables that use class 'cmake'.  It is needed only
for the main "cmake -E" functionality.
2013-10-03 17:30:28 -04:00
Rolf Eike Beer ca63bb1001 bootstrap: try better workaround for builds on Linux/HPPA
The workaround currently present works fine without -O or with -O1, but fails
with -Os or -O2 and higher. Using -O2 is common e.g. in Gentoo, as resulting in
bugs like this:

https://bugs.gentoo.org/473276

Prevent the workaround for higher optimization levels to make bootstrapping
more likely to succeed.

This is still a workaround as ld still keeps crashing in some situations.
2013-09-12 20:59:11 +02:00
Brad King df62f64db7 Clean up install rules of CMake itself (#14371)
Ensure CMAKE_DATA_DIR, CMAKE_DOC_DIR, and CMAKE_MAN_DIR are always
relative paths in CMake code, and set defaults accordingly.  Use the
install() command instead of install_files() and install_targets().
This is more modern and also avoids stripping of the first character
from user-specified destinations.

While at it, fix the default destinations reported in the bootstrap
help.
2013-08-26 11:54:07 -04:00
Brad King bf5a5bc8b4 bootstrap: Do not suppress CMAKE_OSX_SYSROOT if CFLAGS have -isysroot (#14324)
Revert commit a1c032b9 (bootstrap: Suppress CMAKE_OSX_SYSROOT if CFLAGS
have -isysroot, 2012-09-21).  If MACOSX_DEPLOYMENT_TARGET is set then
CMAKE_OSX_DEPLOYMENT_TARGET will be set and Darwin.cmake will complain
if no CMAKE_OSX_SYSROOT is set.  Just allow both -isysroot flags to
appear.  The one generated by CMAKE_OSX_SYSROOT appears after and
overrides the one from CFLAGS/CXXFLAGS.
2013-08-02 16:01:01 -04:00
Brad King b9f4383f69 Split cmBootstrapCommands.cxx into two sources
The single translation unit has grown too large for some compilers.
Split it into cmBootstrapCommands1.cxx and cmBootstrapCommands2.cxx.
2013-06-14 08:35:52 -04:00
Brad King 9d38db531d bootstrap: Compile KWSys SystemTools with UTIME(S|NSAT) values
The parent commit merged a change to KWSys that adds preprocessor
definitions for KWSYS_CXX_HAS_UTIMENSAT and KWSYS_CXX_HAS_UTIMES to the
command line for compiling SystemTools.  For bootstrapping we do not
need sub-1s timestamps so just define them to 0 for now.
2013-06-03 10:36:00 -04:00
Stephen Kelly 1c0597c25b Add a new Export generator for IMPORTED targets.
This is to be used during try_compile using LINK_LIBRARIES in the
srcfile signature and, in the future, TARGETS in the binary dir
signature.
2013-02-22 08:35:38 -05:00
Rolf Eike Beer ed96d9a605 bootstrap: use better defaults for Haiku
These values are patched into that file by Haiku since 2.8.1.
2013-01-07 21:09:18 +01:00
Brad King 2c24ca9219 Remove references to KWSys Process Win9x support
The KWSys "EncodeExecutable" and "ProcessFwd9x" executables were dropped
from KWSys along with Win9x Process support.  Drop references from the
rest of the CMake build rules.
2012-12-19 09:07:41 -05:00
Brad King 43d3a6d49e Merge topic 'copyright-year'
a4ae88b Update programmatically-reported copyright year (#13638)
2012-11-06 14:13:05 -05:00
Brad King a4ae88bdb2 Update programmatically-reported copyright year (#13638)
Update the copyright year reported by 'bootstrap' and in the generated
documentation to report 2012.
2012-11-05 08:44:03 -05:00
Rolf Eike Beer e496c54021 Linux/PA-RISC: Link with --unique=.text.* to help binutils
There is a binutils bug that leads to errors like this:

/usr/lib/gcc/hppa2.0-unknown-linux-gnu/4.6.3/../../../../hppa2.0-unknown-linux-gnu/bin/ld: libCMakeLib.a(cmTarget.cxx.o)(.text+0x12084): cannot reach 00001d28__ZNSspLEPKc@@GLIBCXX_3.4+0, recompile with -ffunction-sections
/usr/lib/gcc/hppa2.0-unknown-linux-gnu/4.6.3/../../../../hppa2.0-unknown-linux-gnu/bin/ld: libCMakeLib.a(cmTarget.cxx.o)(.text+0x12084): cannot handle R_PARISC_PCREL17F for std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char const*)@@GLIBCXX_3.4
/usr/lib/gcc/hppa2.0-unknown-linux-gnu/4.6.3/../../../../hppa2.0-unknown-linux-gnu/bin/ld: final link failed: Bad value

Until someone finds out what needs to be fixed in binutils this allows anyone
to compile a working CMake even in debug mode.
2012-10-31 16:28:51 -04:00
Brad King 49c7b649f9 Merge topic 'export-sets'
80112da Merge topic 'AutomocUseTargetProperties' into export-sets
955b966 exports: add a test for exporting dependent targets
6f50a04 exports: define a CMAKE_FIND_PACKAGE_NAME var set by find_package()
0cfd055 exports: move the handling of missing targets into subclasses
190f2c8 exports: fix build with MSVC6
8b5f448 exports: first try at error handling if a target is missing
87f4c01 exports: accept a missing target if it is exported exactly once
999061a exports: store pointers to all installations of each export set
64b3a6c exports: cmGlobalGenerator::ExportSets destructor will clear it
81cdab5 exports: Hold an ExportSet pointer in cm*Export*Generator
5c898fb exports: Add cmExportSetMap class
d13ec1a exports: Create class cmExportSet
4e2347c exports: Rename cmGlobalGenerator::AddTargetToExport{s,}
e846e70 exports: Remove cmTargetExport constructor
81c66c8 exports: Move cmTargetExport to a dedicated header file
ae4ab62 find_package: add support for a <package>_NOT_FOUND_MESSAGE variable
...
2012-10-01 14:05:35 -04:00
Alex Neundorf 80112da54e Merge topic 'AutomocUseTargetProperties' into export-sets
Conflicts:
	Source/cmGlobalGenerator.h
2012-09-30 10:27:44 -04:00
Brad King 103d99338a Merge topic 'generator-expression-target-properties'
083de7e Process generator expressions in the COMPILE_DEFINITIONS target property.
08cb4fa Process generator expressions in the INCLUDE_DIRECTORIES property.
0ef091d Early return if there is no target.
eb250cd Add a self-reference check for target properties.
7e80747 Add API to check that dependent target properties form a DAG.
239ac84 Add a generator expression for target properties.
e028381 Extend the generator expression language with more logic.
b8e61d6 Refactor GetCompileDefinitions a bit.
2c2b25b Return a std::string from GetCompileDefinitions.
b7e48e0 Add an AppendDefines std::string overload.
9a16087 Convert paths in INCLUDE_DIRECTORIES property to Unix slashes.
4557c8d Don't prepend a path before generator expressions in include_directories.
c6abc41 Add include guard for cmGeneratorExpression.
0ff4e3f Port remaining code to GetCompileDefinitions().
f178d53 Fix indentation in the code blocks generator.
2012-09-28 17:15:03 -04:00
Yury G. Kudryashov 5c898fbd99 exports: Add cmExportSetMap class
This is a map<string, cmExportSet *> with overloaded operator[] and destructor.
2012-09-28 09:21:39 -04:00
Yury G. Kudryashov d13ec1ac31 exports: Create class cmExportSet
Replace direct use of 'std::vector<cmTargetExport const*>' with a
dedicated class.
2012-09-28 09:21:39 -04:00
Stephen Kelly 7e807472d2 Add API to check that dependent target properties form a DAG.
Initially this will only be used to check for self-references, but
can be extended to check for cycles when chaining properties of other
targets.
2012-09-28 08:49:21 -04:00
Brad King a1c032b994 bootstrap: Suppress CMAKE_OSX_SYSROOT if CFLAGS have -isysroot
In order to bootstrap on OS X with Xcode without the command line tools
one must add -isysroot to CFLAGS and CXXFLAGS.  In this case the flags
will make it into the configured CMake.  Set CMAKE_OSX_SYSROOT to empty
in the initial cache to prevent CMake from adding -isysroot again.
2012-09-21 10:06:00 -04:00
Stephen Kelly f1eacf0e07 cmGeneratorExpression: Re-write for multi-stage evaluation
The expressions may be parsed and then cached and evaluated multiple
times.  They are evaluated lazily so that literals such as ',' can be
treated as universal parameter separators, and can be processed from
results without appearing literally, and without interfering with the
parsing/evaluation of the entire expression.
2012-09-18 17:02:23 -04:00
Brad King 7195aca54f Make platform information files specific to the CMake version
At the top of a build tree we configure inside the CMakeFiles directory
files such as "CMakeSystem.cmake" and "CMake<lang>Compiler.cmake" to
save information detected about the system and compilers in use.  The
method of detection and the exact results store varies across CMake
versions as things improve.  This leads to problems when loading files
configured by a different version of CMake.  Previously we ignored such
existing files only if the major.minor part of the CMake version
component changed, and depended on the CMakeCache.txt to tell us the
last version of CMake that wrote the files.  This led to problems if the
user deletes the CMakeCache.txt or we add required information to the
files in a patch-level release of CMake (still a "feature point" release
by modern CMake versioning convention).

Ensure that we always have version-consistent platform information files
by storing them in a subdirectory named with the CMake version.  Every
version of CMake will do its own system and compiler identification
checks even when a build tree has already been configured by another
version of CMake.  Stored results will not clobber those from other
versions of CMake which may be run again on the same tree in the future.
Loaded results will match what the system and language modules expect.

Rename the undocumented variable CMAKE_PLATFORM_ROOT_BIN to
CMAKE_PLATFORM_INFO_DIR to clarify its purpose.  The new variable points
at the version-specific directory while the old variable did not.
2012-08-24 10:52:23 -04:00
Kitware Robot 77543bde41 Convert CMake-language commands to lower case
Ancient CMake versions required upper-case commands.  Later command
names became case-insensitive.  Now the preferred style is lower-case.

Run the following shell code:

cmake --help-command-list |
grep -v "cmake version" |
while read c; do
    echo 's/\b'"$(echo $c | tr '[:lower:]' '[:upper:]')"'\(\s*\)(/'"$c"'\1(/g'
done >convert.sed &&
git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' |
egrep -z -v '^(Utilities/cm|Source/kwsys/)' |
xargs -0 sed -i -f convert.sed &&
rm convert.sed
2012-08-13 14:19:16 -04:00
Peter Kümmel 9f7dc83917 Ninja: also bootstrap ninja files 2012-07-20 11:08:36 +02:00
Nicolas Despres a1b803349b Re-factor OS X bundle and framework generation. 2012-07-17 14:03:07 +02:00
Nicolas Despres 3ba74ad9d5 Remove trailing white-spaces. 2012-07-17 14:03:06 +02:00
David Cole 73cb20187c Merge topic 'bootstrap-old-sh'
e5dc768 bootstrap: Port back to old shells (#13199)
2012-05-29 15:36:47 -04:00
Brad King e5dc76894a bootstrap: Port back to old shells (#13199)
Since commit f39e82c9 (bootstrap: Re-implement command line option
processing, 2011-12-16) bootstrap uses POSIX shell expressions of the
form "${x#y}" to remove prefix pattern 'y' from the vaule of 'x'.
Although this is allowed by POSIX old shells on some platforms do not
support it.  Revert to using 'sed' to work with old shells.
2012-05-08 09:52:39 -04:00
Brad King e48796b26b KWSys: Fix SystemTools environment memory handling (#13156)
The SystemTools::PutEnv function tries to provide the "putenv" API
without leaking memory.  However, the kwsysDeletingCharVector singleton
frees memory that may still be referenced by the environment table,
having been placed there by putenv.  If any static destruction or
processing by an external tool happens after the singleton is destroyed
and accesses the environment it will read invalid memory.

Replace use of putenv with setenv/unsetenv when available.  The latter
manage internal copies of the values passed instead of referencing the
original memory.  When setenv/unsetenv are not available use putenv with
a singleton that removes its values from the environment before freeing
their memory.  This requires an "unputenv" implementation.  On at least
some platforms it must be written in terms of "putenv" because other
APIs are not available and direct modification of the "environ" global
is not safe (e.g. on Windows there is interaction with "wenviron").
Fortunately either putenv("A=") or putenv("A") will remove "A" from the
environment on these platforms.  On other platforms fall back to direct
manipulation of "environ".

Also add UnPutEnv to the API and add a test for the behavior of both.
2012-04-27 08:13:52 -04:00
Brad King 0c7029c642 Refactor CMake version handling
Move the CMake version number components out of "CMakeLists.txt" into
dedicated file "Source/CMakeVersion.cmake".  Set the TWEAK level to the
date explicitly.  Add a "Source/CMakeVersion.bash" script to update the
date, thus replacing KWSys DateStamp for CMake.  Teach the bootstrap
script to extract the version components from their new location.
2012-04-20 11:25:55 -04:00
Brad King 11d9b21126 Add cmGeneratorTarget to represent a target during generation
Some per-target information and logic is common to all generators.
Some of that information is currently stored in cmTarget but that
should be reserved for the configure step.  Create a class to hold
per-target information for generators.  On construction classify
sources from the target and store them in separate members.  This
classification is already implemented separately in each generator.
2012-03-09 15:16:02 -05:00
Brad King 5cd879c4e7 bootstrap: Convert MSYS paths to Windows format (#13001)
We set CMAKE_PREFIX_PATH from the --prefix= option.  The calling shell
might not translate "/c/..." to "c:/..." paths but we need to store
Windows paths in CMake cache variables.  Pass the specified path through
the MSYS shell in a form it will convert to a Windows path using the
MSYS fstab.

Some MSYS bash implementations leave trailing space on the command line
to 'cmd /c echo ...' after quoting the message.  The Windows echo tool
preserves both the quotes and the trailing space.  Use a sed expression
that strips quotes and trailing spaces after the end quote.
2012-03-01 10:09:05 -05:00