[CMake] Need suggestions for implementation of new feature in cmake.
Carlo Wood
carlo at alinoe.com
Fri Mar 27 00:53:39 EDT 2020
Hello!
I'm writing a patch for cmake to address
https://gitlab.kitware.com/cmake/cmake/issues/19703
but I need a little help; I'm only familiar with
GNU/Linux and single target generator Makefile.
In terms of a Makefile, if one uses ExternalProject_Add_Step, see
https://cmake.org/cmake/help/latest/module/ExternalProject.html#explicit-step-management
then something like this is generated:
/path/to/stamp_dir/myname-mystep: /path/to/some/dependency
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) \
--blue --bold \
--progress-dir=/path/to/buildir/CMakeFiles \
--progress-num=$(CMAKE_PROGRESS_9) "My Comment"
cd /path/to/workingdir && \
my_COMMAND my_arg1 my_arg2 ... \
cd /path/to/workingdir && \
cmake -E touch /path/to/stamp_dir/myname-mystep
Now, I'm not sure about the portability of the COMMAND that
is passed to ExternalProject_Add_Step. Are we assuming that
every operating system supports a POSIX (unix) shell, like bash?
Otherwise it seems that the only way to be portable is to run
cmake in script mode there.
Note how the last command does this: it runs cmake in order to portably
'touch' the target file (a stamp file).
What I need is way to generate a rule where depending on a
condition (to be decided by the COMMAND (my_COMMAND)) that
touch is or is not done.
In the single target target POSIX Makefile case this could look like
this (I'm leaving out the COMMENT here for brevity),
/path/to/stamp_dir/myname-mystep: /path/to/some/dependency
(cd /path/to/workingdir && \
if my_COMMAND my_arg1 my_arg2 ...; then \
cmake -E touch /path/to/stamp_dir/myname-mystep; \
fi)
which uses the return value of my_COMMAND to decide whether or
not to touch the stamp file.
However, this is pure shell coding: using a '(' to open a sub shell
and then using 'if ...; then ... fi'.
I'm looking for ideas on how to implement this in a portable way.
How can I extract a boolean from a user defined COMMAND and then
use that to conditionally execute the touch?
--
Carlo Wood <carlo at alinoe.com>
More information about the CMake
mailing list