[cmake-developers] [PATCH] ExternalProject_Add: Allow generator expressions in CMAKE_CACHE_ARGS
Andrey Pokrovskiy
wonder.mice at gmail.com
Tue Apr 21 02:58:39 EDT 2015
Thanks for your comments, Brad.
I added a patch to convert the file(WRITE) calls in
_ep_write_log_script to file(GENERATE) calls. It works OK in my tests,
but honestly I'm not confident enough in those changes. Any test
recommendations?
I also added a patch to write init and log scripts to "xxx-$<CONFIG>".
Also works, but I don't think my tests covered all cases.
Full patch set attached.
---
>From cedeaaa4a285eab4b233e8a34be1e468e917e092 Mon Sep 17 00:00:00 2001
From: Pokrovskiy <pokroa at amazon.com>
Date: Thu, 16 Apr 2015 21:42:19 -0700
Subject: [PATCH 1/3] ExternalProject_Add: Allow generator expressions in
CMAKE_CACHE_ARGS
---
Modules/ExternalProject.cmake | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index 0c73d41..1c7cf51 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -1126,10 +1126,7 @@ function(_ep_write_initial_cache target_name
script_filename script_initial_cach
# Replace location tags.
_ep_replace_location_tags(${target_name} script_initial_cache)
# Write out the initial cache file to the location specified.
- if(NOT EXISTS "${script_filename}.in")
- file(WRITE "${script_filename}.in" "\@script_initial_cache\@\n")
- endif()
- configure_file("${script_filename}.in" "${script_filename}")
+ file(GENERATE OUTPUT "${script_filename}" CONTENT "${script_initial_cache}")
endfunction()
--
2.3.2 (Apple Git-55)
>From ef7f2279ccc4c8b557bb61310283c64f3901b7d8 Mon Sep 17 00:00:00 2001
From: Pokrovskiy <pokroa at amazon.com>
Date: Mon, 20 Apr 2015 23:28:21 -0700
Subject: [PATCH 2/3] ExternalProject_Add: Allow generator expressions in
CMAKE_ARGS when LOG_BUILD is set
---
Modules/ExternalProject.cmake | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index 1c7cf51..c238d60 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -1299,14 +1299,14 @@ endif()
endif()
endforeach()
set(code "${code}set(command \"${cmd}\")${code_execute_process}")
- file(WRITE ${stamp_dir}/${name}-${step}-impl.cmake "${code}")
+ file(GENERATE OUTPUT "${stamp_dir}/${name}-${step}-impl.cmake"
CONTENT "${code}")
set(command ${CMAKE_COMMAND} "-Dmake=\${make}"
"-Dconfig=\${config}" -P ${stamp_dir}/${name}-${step}-impl.cmake)
endif()
# Wrap the command in a script to log output to files.
set(script ${stamp_dir}/${name}-${step}.cmake)
set(logbase ${stamp_dir}/${name}-${step})
- file(WRITE ${script} "
+ set(code "
${code_cygpath_make}
set(command \"${command}\")
execute_process(
@@ -1327,6 +1327,7 @@ else()
message(STATUS \"\${msg}\")
endif()
")
+ file(GENERATE OUTPUT "${script}" CONTENT "${code}")
set(command ${CMAKE_COMMAND} ${make} ${config} -P ${script})
set(${cmd_var} "${command}" PARENT_SCOPE)
endfunction()
--
2.3.2 (Apple Git-55)
>From 722d2d93d41a8a9aa406485a903a2813a620a1e8 Mon Sep 17 00:00:00 2001
From: Pokrovskiy <pokroa at amazon.com>
Date: Mon, 20 Apr 2015 23:51:28 -0700
Subject: [PATCH 3/3] ExternalProject_Add: per-configuration init and log
scripts
---
Modules/ExternalProject.cmake | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index c238d60..03d6b82 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -1299,12 +1299,12 @@ endif()
endif()
endforeach()
set(code "${code}set(command \"${cmd}\")${code_execute_process}")
- file(GENERATE OUTPUT "${stamp_dir}/${name}-${step}-impl.cmake"
CONTENT "${code}")
+ file(GENERATE OUTPUT
"${stamp_dir}/${name}-${step}-$<CONFIG>-impl.cmake" CONTENT "${code}")
set(command ${CMAKE_COMMAND} "-Dmake=\${make}"
"-Dconfig=\${config}" -P ${stamp_dir}/${name}-${step}-impl.cmake)
endif()
# Wrap the command in a script to log output to files.
- set(script ${stamp_dir}/${name}-${step}.cmake)
+ set(script ${stamp_dir}/${name}-${step}-$<CONFIG>.cmake)
set(logbase ${stamp_dir}/${name}-${step})
set(code "
${code_cygpath_make}
@@ -2052,7 +2052,7 @@ function(_ep_add_configure_command name)
get_property(cmake_cache_default_args TARGET ${name} PROPERTY
_EP_CMAKE_CACHE_DEFAULT_ARGS)
if(cmake_cache_args OR cmake_cache_default_args)
- set(_ep_cache_args_script "${tmp_dir}/${name}-cache.cmake")
+ set(_ep_cache_args_script "${tmp_dir}/${name}-cache-$<CONFIG>.cmake")
if(cmake_cache_args)
_ep_command_line_to_initial_cache(script_initial_cache_force
"${cmake_cache_args}" 1)
endif()
--
2.3.2 (Apple Git-55)
On Mon, Apr 20, 2015 at 6:26 PM, Andrey Pokrovskiy
<wonder.mice at gmail.com> wrote:
> Please disregard my previous email, didn't notice Brad's reply.
>
> On Mon, Apr 20, 2015 at 6:25 PM, Andrey Pokrovskiy
> <wonder.mice at gmail.com> wrote:
>> Will it go to mainline? Is there any formal code review process?
>>
>> On Fri, Apr 17, 2015 at 10:58 AM, David Cole <DLRdave at aol.com> wrote:
>>> Great -- thanks for checking. This proposed change looks reasonable to me...
>>>
>>> On Fri, Apr 17, 2015 at 12:27 PM, Andrey Pokrovskiy
>>> <wonder.mice at gmail.com> wrote:
>>>>> does the external project's configure step re-run when you edit only the CMAKE_CACHE_ARGS for it?
>>>>
>>>> Yes. Verified with the following example:
>>>>
>>>> ----
>>>> cmake_minimum_required(VERSION 3.2)
>>>>
>>>> project(CMakeExternalProjectGenExpr)
>>>>
>>>> include(ExternalProject)
>>>>
>>>> set(ZF_QUEUE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zf_queue.install")
>>>>
>>>> ExternalProject_Add(zf_queue_ep
>>>> GIT_REPOSITORY https://github.com/wonder-mice/zf_queue.git
>>>> UPDATE_COMMAND ""
>>>> INSTALL_DIR ${ZF_QUEUE_INSTALL_PREFIX}
>>>> CMAKE_CACHE_ARGS
>>>> -DCMAKE_INSTALL_PREFIX:string=<INSTALL_DIR>)
>>>>
>>>> On Fri, Apr 17, 2015 at 4:19 AM, David Cole <DLRdave at aol.com> wrote:
>>>>> With this change, does the external project's configure step re-run
>>>>> when you edit only the CMAKE_CACHE_ARGS for it?
>>>>>
>>>>> (It did with the *.in / configure_file approach...)
>>>>>
>>>>>
>>>>> On Fri, Apr 17, 2015 at 12:55 AM, Andrey Pokrovskiy
>>>>> <wonder.mice at gmail.com> wrote:
>>>>>> In current implementation of ExternalProject_Add generator expressions
>>>>>> are supported in CMAKE_ARGS (probably by coincidence), but not in
>>>>>> CMAKE_CACHE_ARGS. This patch will enable generators expressions in
>>>>>> CMAKE_CACHE_ARGS.
>>>>>>
>>>>>> Use case:
>>>>>> set(LIBEV_LIBRARIES $<TARGET_FILE:ev>)
>>>>>> ExternalProject_Add(
>>>>>> ...
>>>>>> CMAKE_CACHE_ARGS
>>>>>> -DLIBEV_LIBRARIES=${LIBEV_LIBRARIES}
>>>>>> ...)
>>>>>>
>>>>>> ---
>>>>>> Modules/ExternalProject.cmake | 5 +----
>>>>>> 1 file changed, 1 insertion(+), 4 deletions(-)
>>>>>>
>>>>>> diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
>>>>>> index 0c73d41..1c7cf51 100644
>>>>>> --- a/Modules/ExternalProject.cmake
>>>>>> +++ b/Modules/ExternalProject.cmake
>>>>>> @@ -1126,10 +1126,7 @@ function(_ep_write_initial_cache target_name
>>>>>> script_filename script_initial_cach
>>>>>> # Replace location tags.
>>>>>> _ep_replace_location_tags(${target_name} script_initial_cache)
>>>>>> # Write out the initial cache file to the location specified.
>>>>>> - if(NOT EXISTS "${script_filename}.in")
>>>>>> - file(WRITE "${script_filename}.in" "\@script_initial_cache\@\n")
>>>>>> - endif()
>>>>>> - configure_file("${script_filename}.in" "${script_filename}")
>>>>>> + file(GENERATE OUTPUT "${script_filename}" CONTENT "${script_initial_cache}")
>>>>>> endfunction()
>>>>>>
>>>>>>
>>>>>> --
>>>>>> 2.3.2 (Apple Git-55)
>>>>>>
>>>>>> --
>>>>>>
>>>>>> 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-developers
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-ExternalProject_Add-per-configuration-init-and-log-s.patch
Type: application/octet-stream
Size: 1726 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20150420/a4460da1/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-ExternalProject_Add-Allow-generator-expressions-in-C.patch
Type: application/octet-stream
Size: 1488 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20150420/a4460da1/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-ExternalProject_Add-Allow-generator-expressions-in-C.patch
Type: application/octet-stream
Size: 1084 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20150420/a4460da1/attachment-0002.obj>
More information about the cmake-developers
mailing list