[CMake] error executing script with cmake -P

Tom Finegan tomfinegan at google.com
Tue Oct 15 14:00:28 EDT 2019


It looks like you aren't passing the $testdata variable down to the script.
>From your message it looks like you need to add the following to your
PATCH_COMMAND:

-Dtestdata=${testdata}

You must explicitly pass $testdata (and any other variables defined in the
calling script) to patch_script.cmake via -D parameters on the command
line. Also note that the -Dvar=value args must precede the -P <script>
argument for the arguments to be defined in the script.

Note: I'm not certain about the rules for ExternalProject_Add. The above is
based on the behavior of execute_process(), but the error message you've
sent leads me to believe that the problem here is the same: Variables from
the calling CMake scope are not automatically passed along to the scope of
child CMake instances.



On Mon, Oct 14, 2019 at 4:01 AM Edoardo Pasca <edo.paskino at gmail.com> wrote:

> Dear all,
>
> I am using external project. I would like to patch a source file. I came
> out with a cmake script that does the string replacement I'm interested in.
>
> I tested in a standalone project, with the following CMakeLists.txt
>
> cmake_minimum_required(VERSION 3.4)
> project(patching_string)
> file (STRINGS TestData.py testdata NEWLINE_CONSUME)
> string(REPLACE "sys.prefix" "os.environ[\'SIRF_INSTALL_PATH\']" patched
> ${testdata})
> file( WRITE ${CMAKE_CURRENT_SOURCE_DIR}/TestData.py ${patched} )
>
> and as a matter of facts this does the string replacement I'm interested
> in.
>
> Good, now I would like to use this to the project I'm really interested in
> which uses the ExternalProject_Add machinery. I added the patch step:
>
> <code>
>
> file (WRITE ${CMAKE_BINARY_DIR}/patch_script.cmake "
> file (STRINGS
> ${${proj}_SOURCE_DIR}/Wrappers/Python/ccpi/framework/TestData.py testdata
> NEWLINE_CONSUME)
> string(REPLACE \"sys.prefix\" \"os.environ[\\\'SIRF_INSTALL_PATH\\\']\"
> patched \${testdata})
> file( WRITE
> ${${proj}_SOURCE_DIR}/Wrappers/Python/ccpi/framework/TestData.py
> \${patched} ) ")
> ExternalProject_Add(
> ...
>
> PATCH_COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/patch_script.cmake
>
> ... )
>
> </code>
>
> Notice that I write the patch_script.cmake before the ExternalProject_Add
>
>
> Now, all of this WORKS. Or at least I get the patch_script.cmake file in
> the proper directoty, with the content I want. However, execution with
> cmake -P patch_script.cmake doesn't work as expected.
>
> I get
> CMake Error at build/patch_script.cmake:3 (string):
>   string sub-command REPLACE requires at least four arguments.
>
> Given that the patch_script.cmake has the same content of the standalone
> CMakeLists.txt above (without the first 2 lines), I don't know where things
> don't go well, except that I execute the script with cmake -P
>
> cmake version 3.15.2
>
> Thanks for any help.
>
> Edo
>
>
> --
> Edo
> I know you think you understand what you thought I said, but I'm not sure
> you realize that what you heard is not what I meant (prob. Alan Greenspan)
> :wq
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20191015/000ae3e2/attachment.html>


More information about the CMake mailing list