Re: [CMake] How to set environment variables with spaces in commands

2015-12-12 Thread Qingping Hou
On Thu, Dec 10, 2015 at 4:38 AM, Ruslan Baratov
 wrote:
> This makes writing ExternalProject_Add steps with modification of
> environment quite non-trivial task (at least doing it correctly). This
> feature definitely missing in CMake. I've mentioned it once already:
> https://cmake.org/pipermail/cmake-developers/2015-August/026053.html

Interesting, good to know that it's actually a missing feature instead
of me trying to do something dumb ;)

hunter is a pretty cool project! I will read through the code and see
how it works around this issue.
-- 

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://public.kitware.com/mailman/listinfo/cmake


Re: [CMake] How to set environment variables with spaces in commands

2015-12-12 Thread Qingping Hou
On Wed, Dec 9, 2015 at 9:52 PM, Attila Krasznahorkay
 wrote:
> Probably not the intended solution, but what I’m doing in such cases is that 
> in a patch step I create a shell script that does the configuration for me. 
> With all the environment settings and everything. Like:
>
> PATCH_COMMAND ${CMAKE_COMMAND} -E echo “cd someDir/; CC=\”something\” 
> ./configure” > configure.sh
> CONFIGURE_COMMAND sh configure.sh

Thanks Attila for the tip. In fact, since you are already constructing
the command as a string, why not just run it through sh?

CONFIGURE_COMMAND sh “cd someDir/; CC=\”something\” ./configure”
-- 

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://public.kitware.com/mailman/listinfo/cmake

Re: [CMake] How to set environment variables with spaces in commands

2015-12-10 Thread Ruslan Baratov via CMake

On 10-Dec-15 12:52, Attila Krasznahorkay wrote:

Hi QP,

Probably not the intended solution, but what I’m doing in such cases is that in 
a patch step I create a shell script that does the configuration for me. With 
all the environment settings and everything. Like:

PATCH_COMMAND ${CMAKE_COMMAND} -E echo “cd someDir/; CC=\”something\” ./configure” 
> configure.sh
CONFIGURE_COMMAND sh configure.sh

...


Unfortunately this makes the code quite unportable, as it will only work on 
POSIX platforms like this.
Even on *nix platforms such code will not always works as expected. As 
documentation states 
(https://cmake.org/cmake/help/v3.4/module/ExternalProject.html):


   Behavior of shell operators like |&&| is not defined.

I've hit this on practice by using `LOG_* 1` feature. You can try this 
example (I've moved PATCH_COMMAND to CONFIGURE_COMMAND since there is no 
LOG_PATCH option):


   https://gist.github.com/ruslo/e8c7be03521f167ae8f0


Result:

   [ 62%] Performing configure step for 'Foo'
   cd /.../Foo-prefix/src/Foo-build && /.../cmake -P
   /.../Foo-prefix/src/Foo-stamp/Foo-configure-.cmake
   CMake Error at /.../Foo-prefix/src/Foo-stamp/Foo-configure-.cmake:16
   (message):
  Command failed: 1

The reason of the failure is because CMake collect all arguments into 
one command and run execute_process:


   set(command "/.../cmake;-E;echo;cd ..;>;configure.sh")
   execute_process(COMMAND ${command} RESULT_VARIABLE result)

which of course doesn't make sense.

This makes writing ExternalProject_Add steps with modification of 
environment quite non-trivial task (at least doing it correctly). This 
feature definitely missing in CMake. I've mentioned it once already: 
https://cmake.org/pipermail/cmake-developers/2015-August/026053.html


but I've changed my mind about the approach because of LOG_* issue. Now 
I do the next:


* wrap each step with CMake script, i.e. instead of `CC=something 
./configure` do


   set(ENV{CC} "something")
   execute_process(COMMAND ./configure ...)

* run CMake script in *_COMMAND:

   CONFIGURE_COMMAND
   "${CMAKE_COMMAND}" -P "/path/to/configure.cmake"

This makes it cross-platform and *_LOG friendly but require more tricks. 
Like if you're building in source (non-cmake packages) you have to copy 
script before execution since CMake will remove source directory on 
DOWNLOAD step. Which makes it looks like this:


   CONFIGURE_COMMAND
   "${CMAKE_COMMAND}" -E copy "/path/to/source/configure.cmake"
   "/path/to/unpacked/configure.cmake"
   COMMAND
   "${CMAKE_COMMAND}" -P "/path/to/unpacked/configure.cmake"

PS I'm hitting problems in ExternalProject with environment variables 
all the time. E.g. at this moment fixing MinGW + Boost: 
https://github.com/ruslo/hunter/pull/273


Ruslo


  But I guess that’s the case anyway once you start setting environment 
variables.

Cheers,
Attila

P.S. I often create build.sh and install.sh scripts as well in additional patch 
commands.


On Dec 10, 2015, at 5:35 AM, Qingping Hou  wrote:

Hi all,

I am trying to setup an ExternalProject in cmake but got stuck in the
configuration step. I am using ccache to speed up the compilation:

```
ExternalProject_Add(
  ...
  CONFIGURE_COMMAND CC="ccache arm-linux-gnueabihf-gcc" ./configure
  ...
)
```

However, when cmake generates the Makefile, it moves the quotes around
and breaks the command:

```
"CC=ccache arm-linux-gnueabihf-gcc" ./configure
```

I have tried various escaping method to try to get it work properly
without any luck. Is this a bug or an unintended feature?

Thanks,
QP
--

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://public.kitware.com/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:
http://public.kitware.com/mailman/listinfo/cmake

Re: [CMake] How to set environment variables with spaces in commands

2015-12-10 Thread Attila Krasznahorkay
Hi Ruslan,

Thanks, this is good to know.

I absolutely agree that one needs to avoid using "&&" in the commands 
themselves. As it also causes problems when you try to use 
CTEST_USE_LAUNCHERS=1. (I myself ran into that issue...)

But I did not have any issues so far with putting "whatever" into a shell 
script that I then later execute. This is how I got around not being able to 
use wildcards in some installation commands for instance.

However, I quite like your solution of using a CMake script instead of a *nix 
shell one. As that should be indeed much more portable. Even if my current 
project will not work on Windows for a lot of reasons anyway...

Cheers,
  Attila

> On 10 Dec 2015, at 13:38, Ruslan Baratov  wrote:
> 
> On 10-Dec-15 12:52, Attila Krasznahorkay wrote:
>> Hi QP,
>> 
>> Probably not the intended solution, but what I’m doing in such cases is that 
>> in a patch step I create a shell script that does the configuration for me. 
>> With all the environment settings and everything. Like:
>> 
>> PATCH_COMMAND ${CMAKE_COMMAND} -E echo “cd someDir/; CC=\”something\” 
>> ./configure” > configure.sh
>> CONFIGURE_COMMAND sh configure.sh
>> 
> ...
> 
>> Unfortunately this makes the code quite unportable, as it will only work on 
>> POSIX platforms like this.
> Even on *nix platforms such code will not always works as expected. As 
> documentation states 
> (https://cmake.org/cmake/help/v3.4/module/ExternalProject.html):
> Behavior of shell operators like && is not defined.
> I've hit this on practice by using `LOG_* 1` feature. You can try this 
> example (I've moved PATCH_COMMAND to CONFIGURE_COMMAND since there is no 
> LOG_PATCH option):
> 
> https://gist.github.com/ruslo/e8c7be03521f167ae8f0
> 
> Result:
> [ 62%] Performing configure step for 'Foo'
> cd /.../Foo-prefix/src/Foo-build && /.../cmake -P 
> /.../Foo-prefix/src/Foo-stamp/Foo-configure-.cmake
> CMake Error at /.../Foo-prefix/src/Foo-stamp/Foo-configure-.cmake:16 
> (message):
>   Command failed: 1
> The reason of the failure is because CMake collect all arguments into one 
> command and run execute_process:
> set(command "/.../cmake;-E;echo;cd ..;>;configure.sh")
> execute_process(COMMAND ${command} RESULT_VARIABLE result)
> which of course doesn't make sense.
> 
> This makes writing ExternalProject_Add steps with modification of environment 
> quite non-trivial task (at least doing it correctly). This feature definitely 
> missing in CMake. I've mentioned it once already: 
> https://cmake.org/pipermail/cmake-developers/2015-August/026053.html
> 
> but I've changed my mind about the approach because of LOG_* issue. Now I do 
> the next:
> 
> * wrap each step with CMake script, i.e. instead of `CC=something 
> ./configure` do
> set(ENV{CC} "something")
> execute_process(COMMAND ./configure ...)
> * run CMake script in *_COMMAND:
> 
> CONFIGURE_COMMAND
> "${CMAKE_COMMAND}" -P "/path/to/configure.cmake"
> This makes it cross-platform and *_LOG friendly but require more tricks. Like 
> if you're building in source (non-cmake packages) you have to copy script 
> before execution since CMake will remove source directory on DOWNLOAD step. 
> Which makes it looks like this:
> 
> CONFIGURE_COMMAND
> "${CMAKE_COMMAND}" -E copy "/path/to/source/configure.cmake" 
> "/path/to/unpacked/configure.cmake"
> COMMAND
> "${CMAKE_COMMAND}" -P "/path/to/unpacked/configure.cmake"
> 
> PS I'm hitting problems in ExternalProject with environment variables all the 
> time. E.g. at this moment fixing MinGW + Boost: 
> https://github.com/ruslo/hunter/pull/273
> 
> Ruslo
> 
>>  But I guess that’s the case anyway once you start setting environment 
>> variables.
>> 
>> Cheers,
>>Attila
>> 
>> P.S. I often create build.sh and install.sh scripts as well in additional 
>> patch commands.
>> 
>> 
>>> On Dec 10, 2015, at 5:35 AM, Qingping Hou 
>>>  wrote:
>>> 
>>> Hi all,
>>> 
>>> I am trying to setup an ExternalProject in cmake but got stuck in the
>>> configuration step. I am using ccache to speed up the compilation:
>>> 
>>> ```
>>> ExternalProject_Add(
>>>  ...
>>>  CONFIGURE_COMMAND CC="ccache arm-linux-gnueabihf-gcc" ./configure
>>>  ...
>>> )
>>> ```
>>> 
>>> However, when cmake generates the Makefile, it moves the quotes around
>>> and breaks the command:
>>> 
>>> ```
>>> "CC=ccache arm-linux-gnueabihf-gcc" ./configure
>>> ```
>>> 
>>> I have tried various escaping method to try to get it work properly
>>> without any luck. Is this a bug or an unintended feature?
>>> 
>>> Thanks,
>>> QP
>>> -- 
>>> 
>>> 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: 
>>> 

[CMake] How to set environment variables with spaces in commands

2015-12-09 Thread Qingping Hou
Hi all,

I am trying to setup an ExternalProject in cmake but got stuck in the
configuration step. I am using ccache to speed up the compilation:

```
ExternalProject_Add(
  ...
  CONFIGURE_COMMAND CC="ccache arm-linux-gnueabihf-gcc" ./configure
  ...
)
```

However, when cmake generates the Makefile, it moves the quotes around
and breaks the command:

```
"CC=ccache arm-linux-gnueabihf-gcc" ./configure
```

I have tried various escaping method to try to get it work properly
without any luck. Is this a bug or an unintended feature?

Thanks,
QP
-- 

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://public.kitware.com/mailman/listinfo/cmake


Re: [CMake] How to set environment variables with spaces in commands

2015-12-09 Thread Attila Krasznahorkay
Hi QP,

Probably not the intended solution, but what I’m doing in such cases is that in 
a patch step I create a shell script that does the configuration for me. With 
all the environment settings and everything. Like:

PATCH_COMMAND ${CMAKE_COMMAND} -E echo “cd someDir/; CC=\”something\” 
./configure” > configure.sh
CONFIGURE_COMMAND sh configure.sh

Unfortunately this makes the code quite unportable, as it will only work on 
POSIX platforms like this. But I guess that’s the case anyway once you start 
setting environment variables.

Cheers,
   Attila

P.S. I often create build.sh and install.sh scripts as well in additional patch 
commands.

> On Dec 10, 2015, at 5:35 AM, Qingping Hou  wrote:
> 
> Hi all,
> 
> I am trying to setup an ExternalProject in cmake but got stuck in the
> configuration step. I am using ccache to speed up the compilation:
> 
> ```
> ExternalProject_Add(
>  ...
>  CONFIGURE_COMMAND CC="ccache arm-linux-gnueabihf-gcc" ./configure
>  ...
> )
> ```
> 
> However, when cmake generates the Makefile, it moves the quotes around
> and breaks the command:
> 
> ```
> "CC=ccache arm-linux-gnueabihf-gcc" ./configure
> ```
> 
> I have tried various escaping method to try to get it work properly
> without any luck. Is this a bug or an unintended feature?
> 
> Thanks,
> QP
> -- 
> 
> 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://public.kitware.com/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:
http://public.kitware.com/mailman/listinfo/cmake