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.pask...@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 >
-- 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