Commit Graph

76 Commits

Author SHA1 Message Date
Alexander Grund
08be74bfd7 GetPrerequisites: Fix handling of executable scripts
Fixes: #18667
2019-01-05 09:09:39 +11:00
Alexander Grund
52445300d6 GetPrerequisites: Allow prefixed tools
e.g. for cross-compilation with e.g. x86_64-pc-linux-gnu-ldd
2018-12-31 11:56:40 +11:00
Alexander Grund
1bac4678ea GetPrerequisites: Add GET_PREREQUISITES_VERBOSE to set verbose 2018-12-31 11:56:40 +11:00
Alexander Grund
428680da92 GetPrerequisites: Don't use hardcoded name for otool 2018-12-30 15:08:49 +01:00
Kitware Robot
df4ed1e9ff Help: Convert remaining modules to block-style comments 2018-10-22 11:09:34 -04:00
Harry Mallon
dce77d9ad9 GetPrerequisites: Move dylibs from MacOS to Frameworks folder in bundle
Fixes: #16828
2018-07-24 14:07:22 -04:00
Christian Pfeiffer
f88ef9a9b8 Modules: Remove paths set as global Unix prefixes
This commit removes hardcoded paths that are already given in the
platform files or in `UnixPath` on a global level.
2017-11-20 16:21:49 +01:00
Brad King
1a7b8c8321 GetPrerequisites: Restore behavior on missing binary of not clearing list
Prior to commit v3.4.0-rc1~264^2~1 (GetPrerequisites: Add error checks
for execute_process() calls, 2015-07-29), `get_prerequisites` would
simply warn on a missing binary and not update the result list at all.
That commit accidentally made the case an error.  This was fixed by
commit v3.8.0-rc1~110^2 (GetPrerequisites: Do not fail on files we
cannot find, 2017-01-10), but the fix also cleared the result list.
Clearing the list is incorrect because it is supposed to be able to
accumulate results over multiple calls.

Remove the list clearing behavior to restore the original behavior on a
missing binary.

Fixes: #17306
2017-09-26 07:31:33 -04:00
Brad King
23451a66ac GetPrerequisites: Do not warn about non-absolute UCRT system libraries
Issue: #17007
2017-06-26 10:33:16 -04:00
Guillaume Dumont
e0e414d659 GetPrerequisites: Only recurse on resolved unseen prerequisites
I encountered an issue where not all prerequisites would be listed by
`get_prerequisites` since some of the prerequisites cannot be resolved
and are added to the list of unseen prerequisites.  This has the side
effect of clearing the list of `prerequisites_var` and thus removes some
prerequisites from the list.  Fix it.
2017-05-11 16:12:38 -04:00
Steven Newbury
bed9c73dec Modules: Add x32-abi support to hard-coded paths
Update hard-coded library paths in bundled CMake Modules for libx32 as
used with x32-abi.
2017-03-07 15:22:55 -05:00
Michael Maltese
eacf7decbf GetPrerequisites: also try to resolve just the basename
Fixes #16625.
2017-02-22 12:27:39 -08:00
Brad King
bc09abd7d0 Merge topic 'get_prerequisites_delayload'
a7c5d5fb GetPrerequisites: Exclude delay load dependencies on Windows
2017-01-12 10:21:30 -05:00
Martin Koegler
17a0703d20 GetPrerequisites: Do not fail on files we cannot find
Historically we have always warned and skipped missing files.  Since
commit v3.4.0-rc1~264^2~1 (GetPrerequisites: Add error checks for
execute_process() calls, 2015-07-29) we fail instead, but this was not
an intentional part of that change.  Restore the warn-only behavior so
that missing system libraries (e.g. during cross-compiling) do not cause
failure.

Closes: #16523
2017-01-11 10:57:04 -05:00
Pascal Thomet
a7c5d5fb0e GetPrerequisites: Exclude delay load dependencies on Windows
With some Windows toolchains we use `objdump` which does not mention
delay load dependencies in its output.  Therefore, to get consistent
behavior we should always ignore them.

Use the `dumpbin` message "Image has the following delay load
dependencies" that precedes the delay load dependencies to recognize and
skip them.  Fortunately, this message is not translated to the current
locale (at least on "Windows 7 French", "Windows 10 French" and "Windows
Server 2008 R2 French").

Fixes: #16241
2017-01-11 10:48:36 -05:00
Martin Koegler
1d1f29f435 GetPrerequisites: Fix call to find_program for ri tool
`find_program` does not work with `${a};${b}` as a search path.
Use separate arguments to `PATHS`.
2016-12-12 14:27:21 -05: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
258b7b2833 GetPrerequisites: Recognize absolute paths to UCRT system libraries
The matching expression added by commit v3.5.0-rc1~33^2
(GetPrerequisites: Define api-ms-win-* files as system libraries,
2016-01-19) did not account for absolute paths to the UCRT libraries.
We already recognize absolute paths to the MSVC runtime libraries.
Do this for UCRT libraries too.

Issue: #16240
2016-09-08 10:24:01 -04:00
Brad King
d47abe40b6 Merge topic 'GetPrerequisites-fix-regression'
a2d5c25a GetPrerequisites: Fix regression in gp_resolved_file_type
2016-08-15 08:59:43 -04:00
Brad King
a2d5c25a7a GetPrerequisites: Fix regression in gp_resolved_file_type
Since commit v3.6.0-rc1~287^2 (GetPrerequisites: Fix
gp_resolved_file_type on non-canonical paths, 2016-03-08) we
accidentally convert relative paths (e.g. system dll file names) to
absolute paths even when we do not know the base directory.  Fix this by
canonicalizing only paths that are already absolute.

Closes: #16240
2016-08-12 10:24:48 -04:00
Alexander Shishenko
5f3c8f6ab2 GetPrerequisites: Always filter objdump output as text
When using `grep` to filter the output, add the `-a` flag to tell
it never to treat the output as binary.  Otherwise when LANG != C
in the environment the non-ascii text may break the filter.
2016-08-08 14:05:21 -04:00
Daniel Pfeifer
5d0d980d99 Use string(APPEND) in Modules
Automate with:

find Modules -type f -print0 | xargs -0 perl -i -0pe \
's/set\(([a-zA-Z0-9_]+)(\s+)"\$\{\1\}([^"])/string(APPEND \1\2"\3/g'
2016-07-28 00:41:13 +02:00
Rolf Eike Beer
8b3ffbe4af GetPrerequisites: fix typo in comment 2016-06-23 08:55:07 -04:00
Rolf Eike Beer
460a589d20 GetPrerequisites: fix typo in comment 2016-06-22 21:38:08 +02:00
Laurent Tarrisse
867b73e275 GetPrerequisites: Optimize on Windows by filtering objdump output
Extend the optimization from commit v3.4.0-rc1~264^2 (GetPrerequisites:
Optionally filter "objdump" output for speed, 2015-07-29) to work
on Windows by using `findstr` in place of `grep`.
2016-06-21 08:48:09 -04:00
Brad King
c9cebed5d8 GetPrerequisites: Look for VS tools using registry entries (#16108) 2016-05-25 09:00:33 -04:00
Brad King
a1c402910c GetPrerequisites: Look for VS tools using environment variables
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.
2016-04-08 08:48:20 -04:00
FARBOS Arnaud
c79f88b019 GetPrerequisites: add path of VS 10,11,12,14 in order to find dumpbin.exe 2016-04-08 08:48:03 -04:00
Brad King
37e8ccee54 GetPrerequisites: Fix gp_resolved_file_type on non-canonical paths
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>
2016-03-08 09:08:54 -05:00
André Klitzing
c8daac3556 GetPrerequisites: Define api-ms-win-* files as system libraries (#15691)
Suggested-by: Gilles Khouzam <gillesk@microsoft.com>
2016-01-19 15:05:31 -05:00
Bill Somerville
5d0a8b1abc GetPrerequisites: Optionally filter "objdump" output for speed
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.
2015-07-31 09:50:32 -04:00
Bill Somerville
afb674ab46 GetPrerequisites: Add error checks for execute_process() calls
Add return status checks to external command invocations so that they do
not fail silently producing incomplete install packages.
2015-07-31 09:50:32 -04:00
Daniele E. Domenichelli
a7631fc4e0 Modules: Check for ARGC before using ARGV#
ARGV# could be defined from a parent scope.
2015-02-27 10:59:23 -05:00
Marcus Meissner
fe558718b3 GetPrerequisites: Update output matching for newer 'file' versions
Detect PIE binaries with newer 'file' (5.22).  It no longer prints
"(uses shared libraries)" but does print "interpreter":

 # file 5.19
 $ file /usr/bin/su
 /usr/bin/su: ... shared object, ..., dynamically linked (uses shared libs), ...

 # file 5.22
 $ file /usr/bin/su
 /usr/bin/su: ... shared object, ..., dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, ...
2015-02-23 11:50:29 -05:00
Rolf Eike Beer
d1903de8c5 GetPrerequisites: join if() clauses
These all test the same variable for different values, so only one of them can
ever be true. This also allows to completely remove one variable that only
flagged if one of the conditions matched.
2014-11-25 10:13:20 -05:00
Rolf Eike Beer
c9e32b0b12 GetPrerequisites: remove needless variable dereferencing 2014-11-25 10:13:20 -05:00
Adam Strzelecki
f7df82acaa BundleUtilities: Resolve & replace @rpath placeholders
This is done by gathering LC_RPATH commands for main bundle executable and
using it for @rpath lookup in dependent frameworks.

All functions that need to carry rpaths to now take optional <rpaths> argument.

This enabled apps using @rpath to be bundled correctly, which will be necessary
for upcoming Qt 5.4 that will use @rpath for all frameworks.

Check that install_name_tool has -delete_rpath before using it.
Otherwise it will fail with Xcode 3.x on 10.5 which has no -delete_rpath
option for install_name_tool command, that was first introduced in 10.6
SDK, even that 10.5 supports LC_RPATH and @rpath.
2014-10-10 10:16:24 -04:00
Adam Strzelecki
14bc686fff GetPrerequisites: Make sure dyld placeholders are prefixes
Mac OS X dyld placeholders should be always prefixes, otherwise this can lead
to some undefined behavior.
2014-10-10 10:16:15 -04:00
Rolf Eike Beer
5bd48ac534 Replace string(REGEX REPLACE) with string(REPLACE) where possible
The simple replacement is much faster.
2014-04-14 18:17:05 +02:00
Clinton Stimpson
e130b9ebaa GetPrerequisites: Preserve search path order from caller. 2013-11-14 11:26:23 -05:00
Kitware Robot
f051814ed0 Convert builtin help to reStructuredText source files
Run the convert-help.bash script to convert documentation:

 ./convert-help.bash "/path/to/CMake-build/bin"

Then remove it.
2013-10-15 14:12:03 -04:00
Brad King
45d2966dcc VS: Avoid leaking child process output back to IDE (#14266)
The VS IDE sets the environment variable VS_UNICODE_OUTPUT when
executing build rules in order to tell MS tools to report output through
a back door instead of through stdout/stderr.  Unset this variable so
that CMake can capture or properly redirect all output from processes it
runs even when running inside a VS IDE build environment.

This generalizes the special cases fixed by commit 80d045b0 (When
GetPrerequisites.cmake runs dumpbin while running inside the VS IDE...,
2008-05-01) and commit 44aff73d (ExternalProject: Avoid bleed-through
output when logging, 2011-01-06), so drop special handling of
VS_UNICODE_OUTPUT in those instances.
2013-07-16 13:48:10 -04:00
Michael Tänzer
12fb50da9f GetPrerequisites: Add documentation for objdump
Signed-off-by: Michael Tänzer <neo@nhng.de>
2013-03-01 16:59:49 +01:00
Michael Tänzer
33c94c82ba GetPrerequisites: Add support for objdump
Make it usable on MinGW without Visual Studio installed.

Signed-off-by: Michael Tänzer <neo@nhng.de>
2013-02-28 09:49:32 -05:00
Michael Tänzer
5260a864f5 GetPrerequisites: Move tool search paths up
Make them usable in the gp_tool selection heuristic.

Signed-off-by: Michael Tänzer <neo@nhng.de>
2013-02-28 09:48:11 -05:00
Brad King
d269984e53 GetPrerequisites: Mark file_cmd as advanced cache entry
This internal implementation detail should not pollute the main
cache view of projects that include GetPrerequisites.
2012-08-14 09:02:08 -04:00
Kitware Robot
9db3116226 Remove CMake-language block-end command arguments
Ancient versions of CMake required else(), endif(), and similar block
termination commands to have arguments matching the command starting the
block.  This is no longer the preferred style.

Run the following shell code:

for c in else endif endforeach endfunction endmacro endwhile; do
    echo 's/\b'"$c"'\(\s*\)(.\+)/'"$c"'\1()/'
done >convert.sed &&
git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' |
egrep -z -v '^(Utilities/cm|Source/kwsys/)' |
egrep -z -v 'Tests/CMakeTests/While-Endwhile-' |
xargs -0 sed -i -f convert.sed &&
rm convert.sed
2012-08-13 14:19:16 -04:00
Clinton Stimpson
ac7a193951 GetPrerequisites.cmake: detect executables built with the -pie linker flag. 2012-07-05 12:49:40 -06:00
Clinton Stimpson
880139a642 GetPrerequisites: Add support for @rpath on Mac OS X.
Change to consider a library embedded if it is found in a subdirectory relative to the
using executable/library.  Previous commit considered them local.
This case is encountered when @rpath is used with framework libraries, which are inside a directory tree.
2012-01-19 18:10:01 -07:00
Clinton Stimpson
9a6b102205 GetPrerequisites: Add support for @rpath on Mac OS X.
Handle @rpath much like other Unixes, by doing a find_file with the given directories.

Also, consider a library to be local if it is found in the same directory or a subdirectory relative to the user
executable/library.  Previously, it was local only if found in the same directory.
This case is encountered when @rpath is used with framework libraries, which are inside a directory tree.
2011-11-21 16:45:49 -07:00