[CMake] error executing script with cmake -P

Edoardo Pasca edo.paskino at gmail.com
Thu Oct 17 05:13:53 EDT 2019


Hi Tom,

I thought ${testdata} was going to be filled in by the actual
patch_script.cmake at this line.

file (STRINGS TestData.py testdata NEWLINE_CONSUME)

 So it appears that this command doesn't quite work.

I'll try also Alan's suggestion.

Thanks

Edo

On Tue, Oct 15, 2019 at 7:00 PM Tom Finegan <tomfinegan at google.com> wrote:

> 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
>>
>

-- 
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20191017/8fbf1216/attachment.html>


More information about the CMake mailing list