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