Hi Jean-christophe, On [email protected]], Jean-Christophe Fillion-Robin wrote: > Hi, > > You also need to add the "if" statement into the "CODE" parameter, for > example something like this ... > > install(CODE "If (NOT \${_res} EQUAL "0") > message( FATAL_ERROR \"out: \${_out}, err: \${_err}, res: > \${_res}\") > > endif() > ")
Perfect, thx (just fixed up the double-quote escaping a bit and things worked fine). > To keep things simpler, you could also look at "INSTALL(SCRIPT ...)" > it would allow you to avoid escaping. You would just need to configure > the script using "configure_file". Hmmm, OK, I'll look into reviewing this to see how things differ. Thanks, -David > Hth > Jc > > On Wed, Nov 13, 2013 at 2:57 PM, David Hauck <[email protected]> > wrote: > On Wednesday, November 13, 2013 11:42 AM, David Hauck wrote: > Hi > Jean-christophe, > > On [email protected]], > Jean-Christophe > Fillion-Robin wrote: > > >> Hi David, >> >> You need to escape the "$" sign otherwise the > "_err", "_out" and "_res" >> variables are resolved to an empty string. > >> >> Here is an example of what you could do: >> > -------------8<-----------8<---------- >> > cmake_minimum_required(VERSION 2.8.9) >> >> install(CODE > "execute_process ( >> COMMAND ${CMAKE_COMMAND} -E echo \"Hello\" > >> OUTPUT_VARIABLE _out >> ERROR_VARIABLE _err >> > RESULT_VARIABLE _res >> )" >> ) >> install(CODE > "message( > STATUS \"out: \${_out}, err: \${_err}, res: >> \${_res}...\")") > -------------8<-----------8<---------- > > > > Aha! This was probably obvious to you and Kornel, but it "escaped" > me ;). > > Brilliant, this is working fine now. > > One last item here: I'm now able to see the resulting variable values > in the message command output, but I'd now like to enclose this in an 'if' > command. Something like: > > install(CODE "execute_process ( > COMMAND ${CMAKE_COMMAND} -E echo \"Hello\" > OUTPUT_VARIABLE _out > ERROR_VARIABLE _err > RESULT_VARIABLE _res > )" > ) > > If (NOT \${_res} EQUAL "0") # escaping here has not effect one way or > the other... > install(CODE "message( FATAL_ERROR \"out: \${_out}, err: > \${_err}, res: \${_res}\")") > endif () > > However, the resulting cmake_install.cmake has the following (meaning > the fatal error message will always be executed regardless of the > value of '_res"): > > IF(NOT CMAKE_INSTALL_COMPONENT OR > "${CMAKE_INSTALL_COMPONENT}" > STREQUAL "Unspecified") > > MESSAGE( FATAL_ERROR "out: ${_out}, err: ${_err}, res: ${_res}...") > > ENDIF(NOT CMAKE_INSTALL_COMPONENT OR > "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") > > Is there a way to do this? > > -David > > > Thanks to both of you for your help, > > -David > > > >> Hth >> Jc >> >> On Wed, Nov 13, 2013 at 2:29 PM, David Hauck > <[email protected]> >> wrote: >> Hi Kornel, >> > > >> On Wednesday, November 13, 2013 11:08 AM, cmake- > [email protected] >> wrote: > Am Mittwoch, 13. November 2013 um > 18:41:03, schrieb David > > >> Hauck > <[email protected]> >> Hi Kornel, >>>>> On Wednesday, > >> November 13, 2013 10:26 AM, cmake- > [email protected] > wrote: >>> Am > >> Mittwoch, 13. November 2013 um 18:12:26, schrieb David Hauck >>>> > >> <[email protected]> >>>> Hello, >>>> >>>> > I've been using > >> several "install (CODE "EXECUTE_PROCESS ...")" >>>> > constructs >>> in > >> my top-level CMakeLists.txt file. However, I've been unable > to >>> > >> capture/operate on any exit status of the embedded command. >>>> > >> Unfortunately, documentation/searches haven't turned up any useful > >>> >> pointers. The closest I've come is a pointer in the following > thread: >> >>>> http://www.cmake.org/pipermail/cmake/2011- > July/045475.html >> However, >>>> I've not been able to > sufficiently read between the >> lines to get >>>> this > working. >>>> >>>> Does anyone have any >> thoughts on how to > get something like the >>>> following working: >> >>>> >>>> > install (CODE "EXECUTE_PROCESS ( >>>> COMMAND ant >> ... >>>> > WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/java >>>>> > >> ERROR_VARIABLE _err >>> >>> Didn't you mean 'RESULT_VARIABLE' > here? >> >> >> No, I really do mean ERROR_VARIABLE (unless, > of course, this >> variable >> does > not include the > non-zero exit status of the >> EXECUTE_PROCESS command?). > > > If you run 'cmake --help-command >> execute_process', you see: ... If > > RESULT_VARIABLE is given the >> variable will be set to contain the > > result of running the processes. >> This will be an integer return > code > from the last child or a string >> describing an error > condition. ... So, > if this is not "0", then you >> have an > error condition. >> >> Yes, I see this. I also assumed that the > ERROR_VARIABLE would be >> returning non-zero text as well in this > case. I will change to using >> RESULT_VARIABLE, but, in both cases, it > seems that I'm referencing >> the variable incorrectly (either > syntactically or in the incorrect >> context) since this/these is/are > always <empty>. >> >> >> BTW, I'm still curious about the > (dual > 'code') construct generally. >> >> Specifically, if I do the > following I never see the fatal error >> >> message (so I'm > wondering if there's still something wrong regarding >> >> the > scoping of the message command)? >> >>> install (CODE > >> "EXECUTE_PROCESS ( >> COMMAND ant ... >> > WORKING_DIRECTORY >> ${PROJECT_SOURCE_DIR}/java >> > ERROR_VARIABLE _err >>> ) >> > >> MESSAGE( FATAL_ERROR \"err: ${_err}\") > > Never did > this. When do >> you want to see the message? >> >> > Ideally, I > want to be able to test for the result of this variable >> (either > ERROR_VARIABLE or RESULT_VARIABLE) after the execute_process >> command > completes (during 'make install') to determine its result >> and to > terminate (with error message) when the command fails. >> >> > Thanks, >> -David >> >> > As I understand your code, > only > in call of cmake, e.g. at >> configuration time. >> > >> > > > Kornel -- 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: http://www.cmake.org/mailman/listinfo/cmake
