[CMake] download file, modify, add test from it

David Cole DLRdave at aol.com
Mon Nov 23 06:45:49 EST 2015


You're welcome.

I see you have ${file}-2.h5m in only one place, though... Is that a
leftover, or is the other reference to -2 just omitted from your example...?


Cheers,
David C.



On Monday, November 23, 2015, Nico Schlömer <nico.schloemer at gmail.com>
wrote:

> Thanks David for your explanations. I've now reached a good solution:
>
> Fetch the data:
> ```
> INCLUDE(ExternalData)
> set(
>   ExternalData_URL_TEMPLATES
>   "https://downloads.sourceforge.net/project/noshdata/%(algo)/%(hash)"
>   )
> foreach(file ${input_files})
>   ExternalData_Expand_Arguments(
>     noshTestFetchData
>     OUT_DATA DATA{${CMAKE_SOURCE_DIR}/test/data/${file}.e}
>     )
> endforeach()
> ExternalData_Add_Target(noshTestFetchData)
> ```
> Define conversion commands:
> ```
> foreach(file ${input_files})
>   LIST(APPEND FILES2 ${file}-2.h5m)
>   add_custom_command(
>     DEPENDS ${file}.e
>     COMMAND convert ${file}.e ${file}.h5m
>     OUTPUT ${file}.h5m
>     )
> endforeach()
> ```
> Add a custom target with ALL:
> ```
> add_custom_target(split2 ALL
>   SOURCES ${FILES2}
>   )
> ```
> Adding the output files to the SOURCES makes the target do what's its
> supposed to do.
>
> Cheers,
> Nico
>
> On Sun, Nov 22, 2015 at 11:59 PM David Cole <DLRdave at aol.com
> <javascript:_e(%7B%7D,'cvml','DLRdave at aol.com');>> wrote:
>
>> You don't. You just assume all relevant targets have already been built
>> by the time you run the tests... There's no such thing as a test from
>> an add_test call depending on a target.
>>
>> There **is** a dependency, of course, if you are using one of the build
>> products in your test, but it's assumed that everything is already built at
>> test time.
>>
>> There is not yet a notion of connecting certain tests to certain build
>> targets.
>>
>> So, for example, there is no way to re-run only the tests affected by
>> things which have changed since the last build, because there is no
>> connection between targets and tests.
>>
>> People have artificially created such connections using test labels, and
>> running subsets of tests by label, but there is no official dependency from
>> tests back to targets.
>>
>>
>> D
>>
>>
>>
>> On Sunday, November 22, 2015, Nico Schlömer <nico.schloemer at gmail.com
>> <javascript:_e(%7B%7D,'cvml','nico.schloemer at gmail.com');>> wrote:
>>
>>> Aha, this was a misunderstanding of me then. Thanks!
>>> How do I make a test depend on a target then?
>>>
>>> Cheers,
>>> Nico
>>>
>>>
>>> On Sun, Nov 22, 2015 at 8:58 PM David Cole <DLRdave at aol.com> wrote:
>>>
>>>> The DEPENDS property of a test is meant to ensure test running order in
>>>> the case of parallel testing... It simply ensures that one test runs before
>>>> another. It is not connected to the build system at all. It's different
>>>> than target dependencies.
>>>>
>>>>
>>>> D
>>>>
>>>>
>>>>
>>>> On Sunday, November 22, 2015, David Cole <DLRdave at aol.com> wrote:
>>>>
>>>>> What do you mean by "depend" in this case? All libs and exes should be
>>>>> built during a "make" or "make all" or "make install" ... And all that
>>>>> should be done before any tests get run.
>>>>>
>>>>> Simply typing "ctest" to execute all the tests never does any
>>>>> building. The assumed workflow is that you build stuff first and then run
>>>>> the tests.
>>>>>
>>>>> If you want, you can add a custom target that runs a test, and make
>>>>> that custom target depend on any other targets, but ctest still won't know
>>>>> about it. Only "make custom_test_target" will...
>>>>>
>>>>>
>>>>> D
>>>>>
>>>>>
>>>>>
>>>>> On Sunday, November 22, 2015, Nico Schlömer <nico.schloemer at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Thanks for the hints!
>>>>>> I'm almost there now, the only thing missing is to have my test
>>>>>> depend on the custom_target. This
>>>>>> ```
>>>>>> SET_TESTS_PROPERTIES(testname PROPERTIES DEPENDS convert)
>>>>>> ```
>>>>>> doesn't do the trick: The target `convert` isn't executed before
>>>>>> `ctest`.
>>>>>>
>>>>>> Any hints?
>>>>>>
>>>>>> Cheers,
>>>>>> Nico
>>>>>>
>>>>>>
>>>>>> On Sun, Nov 22, 2015 at 3:18 AM David Cole <DLRdave at aol.com> wrote:
>>>>>>
>>>>>>> Did you try using full path names for the add_custom_command file
>>>>>>> names?
>>>>>>>
>>>>>>> And the NAME/COMMAND form of the add_test command?
>>>>>>>
>>>>>>> Also, I've always found custom commands to work best when they're
>>>>>>> associated with a target. And if it was part of a target you could make the
>>>>>>> target depend on the external data target with add_dependencies if
>>>>>>> necessary.
>>>>>>>
>>>>>>>
>>>>>>> HTH,
>>>>>>> David C.
>>>>>>>
>>>>>>>
>>>>>>> On Saturday, November 21, 2015, Nico Schlömer <
>>>>>>> nico.schloemer at gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi everyone,
>>>>>>>>
>>>>>>>> I would like to create a CMake test that does the following:
>>>>>>>>  * Download a file from an external resource
>>>>>>>>  * Do something with the file
>>>>>>>>  * compile an executable myTest
>>>>>>>>  * execute myTest outputfile
>>>>>>>>
>>>>>>>> Using ExternalData for downloading the file works well, but the
>>>>>>>> second step (file conversion, in this example cp for simplicity) does not
>>>>>>>> work:
>>>>>>>> ```
>>>>>>>> cmake_minimum_required(VERSION 3.2)
>>>>>>>>
>>>>>>>> project(mytest)
>>>>>>>>
>>>>>>>> # Download the files
>>>>>>>> INCLUDE(ExternalData)
>>>>>>>> set(
>>>>>>>>   ExternalData_URL_TEMPLATES
>>>>>>>>   "
>>>>>>>> https://downloads.sourceforge.net/project/noshdata/%(algo)/%(hash)"
>>>>>>>>   )
>>>>>>>> ExternalData_Expand_Arguments(
>>>>>>>>   testFetchData
>>>>>>>>   OUT_DATA DATA{${CMAKE_SOURCE_DIR}/test.e}
>>>>>>>>   )
>>>>>>>> ExternalData_Add_Target(testFetchData)
>>>>>>>>
>>>>>>>> add_custom_command(
>>>>>>>>   OUTPUT test.g
>>>>>>>>   COMMAND cp test.e test.g
>>>>>>>>   DEPENDS test.e
>>>>>>>>   )
>>>>>>>>
>>>>>>>> ADD_EXECUTABLE("myTest" main.cpp)
>>>>>>>>
>>>>>>>> add_test(myTest test.g)
>>>>>>>> ```
>>>>>>>> I suppose I'm missing something about the dependencies here; after
>>>>>>>> all, the `add_custom_command` has to wait for `testFetchData` to complete.
>>>>>>>> Likewise, `add_test` has to wait for `add_custom_command` to complete.
>>>>>>>>
>>>>>>>> Hints appreciated.
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> Nico
>>>>>>>>
>>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20151123/20c89c53/attachment.html>


More information about the CMake mailing list