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