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>
Rather than using the CXXFLAGS environment variable in the make-only
build, copy the CMAKE_CXX_FLAGS used to build the files on the CMake
side. This will account for any changes made by CompileFlags.cmake
or cache-provided flags.
The all target was depending on the clean and pngtest targets, but
when running the tests with -jN, those can be executed out of order.
Make the main.o target depend on the clean target instead to fix
this.
The final location and name of a build-target is not determined
until generate-time. However, reading the LOCATION property from
a target is currently allowed at configure time. Apart from creating
possibly-erroneous results, this has an impact on the implementation
of cmake itself, and prevents some major cleanups from being made.
Disallow reading LOCATION from build-targets with a policy. Port some
existing uses of it in CMake itself to use the TARGET_FILE generator
expression.
Use CXXFLAGS in the makefile's link rule since it invokes the C++
compiler front-end. Retool the makefile not to require GNU Make. Using
backticks instead of $(shell ...) is safe so long as one guards against
the possibility of backslashes getting inside the backticks, so use
temporary files and shell variables to avoid them.
BSD make doesn't use -v for printing its name and version, and so
complains on stderr that this is a bad command line option, used
in Tests/FindPackageModeMakefileTest/CMakeLists.txt .
Silence stderr to make that ugly output go away.
Patch by David Coppy.
Alex
The makefile used in the test uses $(shell ...), which is
AFAIK a GNU extension, and will probably not work e.g. with OpenBSD make.
According to the FreeBSD make manpage their make has a != assignment,
which seems to do something similar, but I don't have such a system
around for testing.
Also, the point of this test is not to write a portable makefile,
but to check whether cmake --find-package prints a correct string.
Alex
The commit message for the previous commit was wrong, it should
have been: fix the test by using $(shell ...) syntax instead
of backticks in the Makefile.
With backticks I couldn't get the quoting right.
Printing -I"/some/path with space" did not work, the compiler
complained that there is not file "with". Also backslashes in
different numbers did not make it work.
Alex
Instead of relying on that some development package is installed on the
system, now a tiny library is built, which is the searched and used
during the test.
Alex
BSD make doesn't seem to support -C, so do not use it,
According to the documentation the working directory is set
to CMAKE_CURRENT_BINARY_DIR anyway, so it should work just the same.
Alex