--94eb2c1cc0222ef47a05588c67fc Content-Type: multipart/alternative; boundary="94eb2c1cc0222ef47505588c67fa" --94eb2c1cc0222ef47505588c67fa Content-Type: text/plain; charset="UTF-8" In my projects I always, have external dependencies with finder module providing exported (imported in my project) targets, so my targets (one per file) always have a list of `Vendor::target`. Some of them are mine (i.e. your type 2 -- built by the same project). I wrote a helper module and a function to write an additional `blah-blah-target-depedencies.cmake`. And this is a little bit subtle thing... Normally, generated `blah-blah-target.cmake` (where the `blah-blah-target` is the export name used in call to `install(EXPORT)`) to load all installed configurations do the following: file(GLOB CONFIG_FILES "${_DIR}/blah-blah-target-*.cmake") so my additional file would be loaded "automatically" :) My helper function accepts a target name as the only parameter. First of all, it collects all dependencies of the given target and classifies them as internal (same project) and external. It prepares some variables and finally, render a `blah-blah-target-dependencies.cmake` which is a result of the combination of 3 templates: 0) a base, header+footer and conditionally "include" the next two 1) import internal dependencies 2) import external dependencies Note templates have random string in final names, so being running (loading) by the same script (`blah-blah-config.cmake`) won't interfere... As for "prepared variables" there are the following: * "internal dependencies" is just a list of target names... having a name is enough to form a `blah-blah-target.cmake` name to be `include()`d, cuz we really know where this file is installed * for external dependencies the most important a list of packages, assuming that the initial external (imported) target had the form of `Vendor::target`, and `Vendor` in fact is a package name suitable as the first argument to `find_package()`. * other variables related to external targets have a variadic part based on upcased name of the vendor. Example: set(_blah_blah_PACKAGES ACE;Boost) set(_blah_blah_ACE_VENDOR ACE) set(_blah_blah_ACE_COMPONENTS ace;ssl) set(_blah_blah_ACE_VERSION 5.7.5) set(_blah_blah_BOOST_VENDOR Boost) set(_blah_blah_BOOST_COMPONENTS chrono;filesystem;program_options;thread) set(_blah_blah_BOOST_VERSION 1.65.0) Now about generated `*-config.cmake`. As one may guess it handle targets to import as `COMPONENTS` of `find_package()`, where every component is an exported target name. So this module just `include()` it and check if target appeared: # Find components if requested set(blah_FOUND_COMPONENTS) foreach(_module ${blah_FIND_COMPONENTS}) # TODO Avoid more than once find? (But be aware that is not a trivial `if` and skip %-) # TODO Make sure component is supported (exists) include( "${CMAKE_CURRENT_LIST_DIR}/blah-${_module}-targets.cmake" OPTIONAL RESULT_VARIABLE blah_${_module}_FOUND ) if(blah_${_module}_FOUND AND TARGET Blah::${_module}) list(APPEND blah_FOUND_COMPONENTS ${_module}) # Add some interface properties to all found components string(TOUPPER "${_module}" _module_id) string(MAKE_C_IDENTIFIER "${_module_id}" _module_id) set_target_properties( Blah::${_module} PROPERTIES # Set compatible version usage requirement INTERFACE_BLAH_VERSION_MAJOR "${BLAH_VERSION_MAJOR}" # What package to find INTERFACE_BLAH_${_module_id}_PACKAGE_NAME "blah" ) set_property( TARGET Blah::${_module} APPEND PROPERTY COMPATIBLE_INTERFACE_STRING BLAH_VERSION_MAJOR ) unset(_module_id) else() set(blah_${_module}_FOUND NOTFOUND) if (blah_FIND_REQUIRED_${_module}) list(APPEND blah_NOT_FOUND_REQUIRED_COMPONENTS ${_module}) else() list(APPEND blah_NOT_FOUND_COMPONENTS ${_module}) endif() endif() endforeach() unset(_module) When all components checked call the final package found/not-found checker: check_required_components(blah) Yes, this particular implementation have obvious limitations to be named "universal and generic", but it works few years for me w/o problems... (however, I do some improvements from time to time %) It do not handle "plain old library names"... and as I said, all my external packages provide imported targets, where the Vendor name is the package name in fact... so I don't care (while having no reason to improve it for this case... maybe later %). I'll attach my module (stripping not related and vendor specific parts) for further inspiration... Feel free to ask for details (or more code, if attached doesn't work... probably I miss some functions (from other parts of my framework)). Have fun! :) On Tue, Sep 5, 2017 at 10:33 PM, Robert Dailey wrote: > In the case where I'm exporting 1 target.cmake script per component > for a single package, could someone provide an example on how to > manage dependencies? There are 2 types of dependencies: > > 1. Dependencies on external packages > 2. Cross-dependencies within the same package (i.e. on other > components in the same package) > > The cmake-packages doc kind of goes over #1, but #2 doesn't seem to > have examples. > > On Fri, Sep 1, 2017 at 1:21 PM, Robert Dailey > wrote: > > First of all, I want to apologize for including the developer list. > > Maybe I'm not being patient enough, but it seems like every post I've > > made on the normal users list doesn't get any attention. > > > > Secondly, the cmake-packages portion of the cmake documentation > > doesn't go into a ton of detail about components, but it does give an > > example towards the bottom of how you export targets for components. > > This leads to my questions: > > > > When defining the target exports via install(TARGET foo EXPORT > > foo-export), is it recommended for all components to collectively > > export as 1 target.cmake script? Or is it better to have 1 > > target.cmake script per component? If we use Boost as an example, the > > latter would mean having: > > > > boost-config.cmake > > boost-target-filesystem.cmake > > boost-target-thread.cmake > > ...etc... > > > > This means that boost-config.cmake would "include()" only the relevant > > target cmake scripts based on the provided COMPONENTS list, I assume? > > > > Which is the better approach here and why? > > > > One problem I thought of with the former (one big target.cmake with > > all import targets in there) is that if you only ask for a subset of > > components in find_package(), you will still get all of them since all > > imports are defined in a single file. Does this go against any design > > principles? Assuming this really happens, are there any negative side > > effects? > -- > > 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 > --94eb2c1cc0222ef47505588c67fa Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
In my projects I always, have ext= ernal dependencies with finder module providing exported (imported in my pr= oject) targets, so my targets (one per file) always have a list of `Vendor:= :target`. Some of them are mine (i.e. your type 2 -- built by the same proj= ect).

I wrote a helper module and a function to write an addit= ional `blah-blah-target-depedencies.cmake`. And this is a little bit subtle= thing...
Normally, generated `blah-blah-target.cmake` (where the = `blah-blah-target` is the export name used in call to `install(EXPORT)`) to= load all installed configurations do the following:

=C2=A0 file(GLO= B CONFIG_FILES "${_DIR}/blah-blah-target-*.cmake")


so my additional file would be loaded "automatically" :)
My helper function accepts a target name as the only parameter. Fir= st of all, it collects all dependencies of the given target and classifies = them as internal (same project) and external. It prepares some variables an= d finally, render a `blah-blah-target-dependencies.cmake` which is a result= of the combination of 3 templates:
0) a base, header+footer and = conditionally "include" the next two
1) import internal= dependencies
2) import external dependencies

Note templates have random string in final names, so being running (l= oading) by the same script (`blah-blah-config.cmake`) won't interfere..= .

As for "prepared variables" there = are the following:
* "internal dependencies" is just a = list of target names... having a name is enough to form a `blah-blah-target= .cmake` name to be `include()`d, cuz we really know where this file is inst= alled
* for external dependencies the most important a list of pa= ckages, assuming that the initial external (imported) target had the form o= f `Vendor::target`, and `Vendor` in fact is a package name suitable as the = first argument to `find_package()`.
* other variables related to = external targets have a variadic part based on upcased name of the vendor. = Example:

=C2=A0=C2=A0=C2=A0 set(_blah_blah_PAC= KAGES ACE;Boost)
=C2=A0=C2=A0=C2=A0 set(_blah_blah_ACE_VENDOR ACE)
= =C2=A0=C2=A0=C2=A0 set(_blah_blah_ACE_COMPONENTS ace;ssl)
=C2=A0=C2=A0= =C2=A0 set(_blah_blah_ACE_VERSION 5.7.5)
=C2=A0=C2=A0=C2=A0 set(_blah_bl= ah_BOOST_VENDOR Boost)
=C2=A0=C2=A0=C2=A0 set(_blah_blah_BOOST_COMPONENT= S chrono;filesystem;program_options;thread)
=C2=A0=C2=A0=C2=A0 set(_blah= _blah_BOOST_VERSION 1.65.0)

Now about generated `*-config= .cmake`. As one may guess it handle targets to import as `COMPONENTS` of `f= ind_package()`, where every component is an exported target name. So this m= odule just `include()` it and check if target appeared:

=C2=A0=C2=A0=C2=A0 # Find components if requested
=C2=A0=C2=A0=C2= =A0 set(blah_FOUND_COMPONENTS)
=C2=A0=C2=A0=C2=A0 foreach(_module ${blah= _FIND_COMPONENTS})
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # TODO Avo= id more than once find? (But be aware that is not a trivial `if` and skip %= -)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # TODO Make sure component= is supported (exists)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 includ= e(
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &q= uot;${CMAKE_CURRENT_LIST_DIR}/blah-${_module}-targets.cmake"
=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 OPTIONAL
= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 RESULT_V= ARIABLE blah_${_module}_FOUND
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= )

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if(blah_${_module}_FOU= ND AND TARGET Blah::${_module})
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 list(APPEND blah_FOUND_COMPONENTS ${_module})
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # = Add some interface properties to all found components
=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 string(TOUPPER "${_mo= dule}" _module_id)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 string(MAKE_C_IDENTIFIER "${_module_id}" _modu= le_id)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 set_target_properties(
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Blah::${_module}
=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 PROPERTIES
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # Set compatib= le version usage requirement
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 IN= TERFACE_BLAH_VERSION_MAJOR "${BLAH_VERSION_MAJOR}"
=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # What package to find
=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 INTERFACE_BLAH_${_module_id}_PACKAGE_NAME "blah&= quot;
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 )
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 set_property(
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 TARGET Blah::${_modu= le}
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 APPEND PROPERTY
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 COMPATIBLE_INTERFACE_STRING BLAH_VERSION_MAJOR
=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= )
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 un= set(_module_id)

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 else()=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 set(bla= h_${_module}_FOUND NOTFOUND)

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 if (blah_FIND_REQUIRED_${_module})
=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 list(APPEND blah_NOT_FOUND_REQUIRED_COMPONENTS ${_module})
=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 else()
=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 list(APPEND blah_NOT_FOUND_COMPONENTS ${_module})
=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 endif()

= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 endif()
=C2=A0=C2=A0=C2=A0 en= dforeach()
=C2=A0=C2=A0=C2=A0 unset(_module)

When all components checked call the final package found/not-found checke= r:

=C2=A0=C2=A0=C2=A0 check_required_components(bl= ah)

Yes, this particular implementation have obvio= us limitations to be named "universal and generic", but it works = few years for me w/o problems... (however, I do some improvements from time= to time %) It do not handle "plain old library names"... and as = I said, all my external packages provide imported targets, where the Vendor= name is the package name in fact... so I don't care (while having no r= eason to improve it for this case... maybe later %).

I'll attach my module (stripping not related and vendor specific= parts) for further inspiration... Feel free to ask for details (or more co= de, if attached doesn't work... probably I miss some functions (from ot= her parts of my framework)).

Have fun! :)


On Tue, Sep 5, 2017 at 10:33 PM, Robert Dailey <<= a href=3D"mailto:rcdailey.lists@gmail.com" target=3D"_blank">rcdailey.lists= @gmail.com> wrote:
In the c= ase where I'm exporting 1 target.cmake script per component
for a single package, could someone provide an example on how to
manage dependencies? There are 2 types of dependencies:

1. Dependencies on external packages
2. Cross-dependencies within the same package (i.e. on other
components in the same package)

The cmake-packages doc kind of goes over #1, but #2 doesn't seem to
have examples.

On Fri, Sep 1, 2017 at 1:21 PM, Robert Dailey <rcdailey.lists@gmail.com> wrote:
> First of all, I want to apologize for including the developer list. > Maybe I'm not being patient enough, but it seems like every post I= 've
> made on the normal users list doesn't get any attention.
>
> Secondly, the cmake-packages portion of the cmake documentation
> doesn't go into a ton of detail about components, but it does give= an
> example towards the bottom of how you export targets for components. > This leads to my questions:
>
> When defining the target exports via install(TARGET foo EXPORT
> foo-export), is it recommended for all components to collectively
> export as 1 target.cmake script? Or is it better to have 1
> target.cmake script per component? If we use Boost as an example, the<= br> > latter would mean having:
>
> boost-config.cmake
> boost-target-filesystem.cmake
> boost-target-thread.cmake
> ...etc...
>
> This means that boost-config.cmake would "include()" only th= e relevant
> target cmake scripts based on the provided COMPONENTS list, I assume?<= br> >
> Which is the better approach here and why?
>
> One problem I thought of with the former (one big target.cmake with > all import targets in there) is that if you only ask for a subset of > components in find_package(), you will still get all of them since all=
> imports are defined in a single file. Does this go against any design<= br> > principles? Assuming this really happens, are there any negative side<= br> > effects?
--

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 in= formation on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html=
CMake Consulting: http://cmake.org/cmake/help/consul= ting.html
CMake Training Courses: http://cmake.org/cmake/help/tr= aining.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/li= stinfo/cmake-developers

--94eb2c1cc0222ef47505588c67fa-- --94eb2c1cc0222ef47a05588c67fc Content-Type: application/x-bzip2; name="cmake-export-dependencies.tar.bz2" Content-Disposition: attachment; filename="cmake-export-dependencies.tar.bz2" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j79k25g60 QlpoOTFBWSZTWf0JGg0AFPh/hP/UCIB+///f/+//7/////oAAQAIYBkPvA1t0q6ADW0Ojg76MvTq 22kiVJ7YpSRlt3dy46uR4m7apNgapvd1dtVGnQdNedrtuWkDvN7wkiCEYhNMmk9MmTQpp5TNGmkG m0TGkzU0HojQPKZNMjQaaBAQREynqZqZTan6Rk0E0yaegARhHoAjAmI9JhwANAaBoAGmmQAGjTIA NGTBAYgAASaSRJiKPUzIU09NNDJNNpAGgNAAYhoaADIBoIkop5NMjU9SntNU2oepsk09INMgNAAA AAAAGQESQhNARoBNTATTQ9U9UeQ9KeoyaYh6jagAaAABUeoX7LoIZ/joRvPQJpMgTUiEluybeYgY 0EnNAcJl7fdVE0LY6vmodA1gxRJFAIoCVZ5aBUkkPfTWWEJ5u55D6PXLCeuqoQWSskPaT31w8Pmh p+H4i56frXEfisFnTxnroYRX02sFVihDe/rwKPtt6Lvkp+7VyMRFAWRYLPt/qz2vpXZEzf/ztom0 RVWLIsRiwei19B2ZDv6LHpaKLAWcT3jv5NchsBPQbFAXz0WBU4e8O5gTYNabdXffp8sm7uST4CrT 2aYFemmJBkG423sPiBglY9DJ1Sot2vg6vtZ6PEqLCth6ob/Hl8Dt3+PHXK9Hj4NuSB83uGgVByGC iLuARCBO2Pjcv+w5rbZXqDrMEQjI3RsIRuTEzFREhqic+04+oAFfl/3pnwjKdgSKApija6Yngq7e K7cCKMRqqilqloYLHeT4qpV3LcpErBrayrXwZEfgrtlvW8kbKMoZ44cO/gOm7P/MtqydGM1sYXWL bfmrvX8L5fTMqHba4krc8NaRWDBHSPJ3H3tdI/g/PrbZh1/L0wbwiS807WgwOnjERRhdB4epJ1mj 1XjWlNlmhN8dl3YkYWgUUXHUVVkwmKPwfJhyZSaTKcE4cw6OpQI5wYiY4RERMs0Kijg4DJIeGcA4 wowzWel3Ts7xR9NlKnhx7noZ/zx8fn8hXtp3dSGz2bN/2glg2qs7A/m4s0NAkdzZx6L+ZUUhWV2V JGOnXXSD36VHrl8X8pG6wGQKkBuGMmAS+Q7XHnjfm3mr90+huouRmcKOZ6043erPWvBP1HCpQZdK TTnt0B1Nq8juMixUpDixIJTsKFasuQzO7UUKoimsQSIVQaKaDtYazryfrpXY7ru3P4turTdlnRgp 5SzRyOwHNHA1dacqivQIDYIV137lkg2gnHFKykCVlSw8ZRrzCIPnPSDkRfG8B7KdyzYVrnQuvPiz itVCtRWKjgWkb1nFlE6qrC8q1tHzEQaK24qHQaVmcddKVqj1UCnHxuxfEacK2fyF5dbb1TYGzPId U9krmcBl63IeN3oyzFdl5NrRWuWUULhVGQdgsU5dHiRgNLxpcvregNlcEior2tw+zzXs8IsY7019 TK0qnZadrAZ7a2J29eLUrjLNdpm8adSCppMKYwjNy4vrYEgpRwmvTlGvzIsbM2v0KDxv7DgHq+az gZuEcVYOH0XBO51dcOfwNBBCtWT4EFJYKnuBhifX2BxnYYj8XgpSJSjKEQCDERhVrxN76hceBOlM GUv0DUsmhsCy+o6z/k3ugZiXdNORXAz5NfhTYFimrtN5TSCJZCpvhhdVcglSzaU2Idup5/b4p2Xx e0WMIeDHKVnW7TyB5mYijaKKb60OMtWXVXHLlQvEKCjCfcHHTRTYBpDQ0LX+RmAMAYXRoENBknXt tIboLtaSoNsZeHOutpjcbitlu1lwg75mrXTQdyyqO+7GxJePlfPZnDrz9njzJ7fCm6a+nrIVhtbr r2xW+lvVkCLOtVJUh/7t3+1DCT7FF88pyTtxKuQq+uWPeChTcKOC/J1mWBW6ePesKuFDCXBBabuH htKL0yMtlW5mUdUNZ7ux7ywScmRp+LNQjQRSkDnIg0unBmSejwDigcCEpvowIxlpEFiAbu3dL0WW UaXswS1lHuj8lt+UC/ZKwfI8VGF1OlML7ysB7IG5I7qoK+s4VG4ImG6HCdmYQUI7NML2i59PytSP N5l0uZWc8cIUQsPT+zVg9+s2fLT82QVxcKGZVDaNiHTU2Ezww+Z7sWxzplqhNo8XK8aEDcLaBEMa CWK7Qyyl1hhiEMDTj67fJYI/0UaMEjuwMSlRCDMzcGHg5tnQj1guRCyQ3GOeICz+Q6un3cIgmC+1 2cE6K/30odmrT71cQEn7SwcgFQie4gom/gclL0rgf6pZK1McWrYQEtpmvqOGEoJ0LAVFBKCrS8Ra 6BJFUJUgM05TYLUQlQDzuRdChKPnfb5N8Xpbd4zhRttybtSW8kP3olsfEMw+b1ptfJ1MBsPBGwFQ ctt/1fVzt2BeYXQe0QjsXPHXj4cXgDlazMxroBfQn9HAgFyQ8VvfSA7SB14xeHvFvhF6gR7z3JYb GQXGSBzmLWrqqfRAkDqffwpgAv0PdUDBDvcFZGwN+7RH4K+q25Ux3G/hKkN/pHGSA2hEsp6dEQkg wVoVIXbgfnpXBepMRo5kv12hcHjA0t+iw0Z2aEzZsgpWZqWXVY2AeloCmCdR0Pxd22xW7WudDlTC v5cyk6izEJQgnlXQfmXIc9d8iloVAaE5cCl8OB4WaJwrtSua8XU4LqQsBjvuhCEIQ6MhHgOqmuBO kH1p1bNGqJd3a7lyRLhzvExJIIRYC6dQzK7FGjp11NQU2DYBqZs8h4UpZ280Nma6GwOY4YsryHGw 83vz9QbUNsVSnWzmF3aZ2POnV4dQ98AwYPWZbFA5i59K+5boWWjw2YXupbFhLjmpnwHNlRTcteBR WTixJHwdIusTpyrgClvd8ScTvg7wShIJr0RboOwTc2FEnDCHdqxYb9y4YImtKELnjnX2JyLELE1g UXNl6A7wyXaBffmj+qAfXkGUixfBA2qWNeG0KghYSqBoJDJe+F7KUnhw0OC6ZRb6BKQKgMq8Lpow 5XqLi1mt4O5aOx14cOwMnsM805ibjhQ7TwtWQECVsW+9fb6w0W4w2DQ0HnTWiwTTe6l5IBhuFLV7 JiuIm8NZElYXLXJzXNxyULS69pRhqy5hL8TgN2TrsW4aBqnSZZshAkg/TDVDCoMQNBMxzXXEDCBA m61CUtMOGtbpBwZSScB408djmEVMlbKKlmc4ed3uPwnXM6Zuu0Mr81cnbc4ai1bUIibQYMsOUIfO FjdDcazbarbbbrBxnmuZEkJdxvNoQh6/RXJH1yuxbRQ00R38XaJ3QJGEkku88WE7LavBdiGHjSwo iMk0aWaCZ3zhkQyAwtJyollO7pl5ywkxlyh3jlJyZIm/qsXvl6DnkBar69qgcwj6CBwgGA5e3vfR sOcMV5W2xepCh7eInbVd1NHqLHBeY+Q7/1/roG454G90hn0vrZvbqSEJA3idgDrPG2QgSimFUySh plUVCRmWQdBmNlN50oYW2PAlDzPkMomQ/m5rv4vgcN4memPyyrP1Ibx7+JSEhFtLdL4Fq7ecGFJc visw0CQkJVqvPxkSJKHBTKPbV5PTAhtNwcbWMhJRRC0LZxMlQ/E6dQVIkkWMJMxcj4fTKseNakGS yz47HYYLzEl/iOAo/ofeZhYJJM6mZyP6uKxYJsOR0ZmTpUmlrja16yKD87LQl1yxOk21KbYYcpzE VGEiya1rYKURNzlj0GtG+yudEzk6aURHRFBSKiTU3JLBcxHSSqyPzgrsNhmGjuPtaHA6hc1NYa8h yzmwqmEohRCipQJ6jAjtBW82ycQ4yVfkUR0aNVWWoauZi4uLlQxoM3cjCKAURFJumy19wdtItLhm nixZo0UuTo7dWOvGBOCDdKPbb9DFkl2j+E7cz5LktT6IZZ0SoVyDFeLweUkGzwJ9tOQhyUgdaD2P uOHPCnVfR9RYiwZBRSdQep8Z1buKQ5wRSSIkPj93uRKWAG6FnMuI9BJSc2EJgGEToiYAdot7+y04 u5kFw4grsLPiOH8JcPRBXvJKlKxE7qHRTX3XHZEcJ39pGAnMe29cfYcMUjLgHI1FHUhZoF3YGvMK FFOs15LKts9lDMbLby5VqkFLIzBlshESPawVvfSEXR9ySgMjPRQRV4OKeNIeFgogd5Qhm8sC4iDu xqEAaSyZOIA/kcGWnZ8fw9H9Y6BFIayDgWJRUUsQDkgKU9l+diiKTSae6u77KefP5zroCERsKd9Y Z5tfKjo8r5zpNZzyhlTatFrtQopcswEQZxaY3w0lVFFBBRSEjCBAyKGggq3/gyjNuj4tECabiChp lfYYgiEMQkUnQIVUIBCKGmRh3WmDhcAaDfRRTSjIbQbZ6CXU0aD3nn9RysBPUO91aazJcGRLJ203 Dx49ofl6tAbYlbBjQSwOYfBRhK9bVZlSkZo+h7eiitk0th7sMw4YdxlqJQsc7V1Nqq6rR9nVRQtk XOYQIzOCBMEBkDgZL78X5emYE0u7daLi2CZg3d92bTINxoOg3BesbG+Xc1TO/wiDIryCjrA7vL9r 1E+31FC4rZhmzNbbmtTWvNtIHR8nT1VpRAX0h7cWLKNjaLA0XQ7Kl3FDG+fVMISpQgYGAA+Svxzw muZQd0K3WOsese4kN1yPaVuzWtNUIdwJCnI5CPsEKFGR5pUEtodEP0sgQXPxDzhqaxeXLO5cS/Kl kOsqwUxLJph4EkEQi/gywkSHoHDLHpGnFs1q0k0DXB7Lihn1ReMdih2dyZeBT6Ic3prfMRvA5kta kJBYM59JnGKemuddVgDLPWAfYlb8uzFUABH3LJYyTiwPL0GdthxDvgefo8Ah7vtVFF9knrTJ36XJ ZOyHQrOXsgjJmAh5ngABCzVoi+TAyFfCxKvSOGpoDAM+68LWns2fDF0DVDdsNlMLur8GtoQh+Dos OwDYBTwNA4ymBESIEgHm8rXgHsESLtdqpbQKB5gNzicZJZ98s2pDq127B/LMA+UcHDze4ZEIRDgF dOi8SxQ0UJ+KA/pzawQ/kiGDC4+gLtwgSfLnRtotLY06Ab/H3WyHk+mBAdYI0wf0h8wUHLznwyzb uOgQ0MBYRNg6g9Mknh9bwnpCjG2VFMwuEkdnI2QrvfQdl0fvYcULdQZScD55ieMSvSN2llsvR1b+ TfRPVZOlDj6yAqoiybDDCjD9Hh2eHUo6HUGlixvsfO2BOfmkIgwJIMiSLDs3hod24unHU4SBCRgS QmoVvEiZ2c8VFtYc2a0iLOtNN6U7/YmwxaT1xXuvUaDnIGbAGzwgOmID2xEllr2nHzbdWl5lCoSH EtJy7ZYQwEmGBzNvBx2KDstvZ2XS76zBMYoLUUMKDLYDa1z40eDtTwDRkIRMqqjFVWHPsB0ZEnln lR9tL45abzbny5SBqDQaYfBnAN7h46WQLbFTpGhcPVj0bywzqLydykABhiyzQoACftgNx1Pvjjlo uthycYQMp1zCndOwUpkDcDvYMFFlA8dKUqh+uDTYb/o8+Z9VqLnHQM4a0/LbWxWagmK0bDFoz3Sw OsQmMGMmklYq6gcgvRqmoEZFWEQvmAnDIJYkMMF6BPSoaxo0qNvQzIFgEuAhhRIgFUgOzBQLcwJc dkUuGRQYPvggWGDbxyTa/OFDQeOF2Bw2SQhIjZ2RupRN0Voi2jKEeBVlbxL5JYImnSGZkmbGPxwF CHBAkwOyw6HFSaUtZu0wdzS0DT1KZAG/6j24HcGekQlmiGVIhzTSMInCAnKKcmmtncemHpspsDZk tt17MYeRva0pQxDUazGGOvDJhdVDJzxwmqFqSCbNxzLgnwjyyyQS2Vhtl8OISDuffPSa+12gVZ+g x7DlRLfdDXc9oT2K+v0Nl7/F2hUgEYNo0X3n2nVoCniYBMxE7TZtJ8Nxc03Zt8lJNoSSIkWRkx7/ b3aZQPKB9jE1F5VsFN0eIQOmjaFUO95VGiJGKEwJ9V6yGnO1LAVm9ttEYcKFUVWKqM2CSKw7e5C1 0y9MrJuSUUVaCHXuPA1WuHp2WNz010BByl56LXGzF8vwXuGnFRel2Unmso/mz4nc6CSMDvh4zFEM wVuvXo8SNCm2G3U4YEs2sp1/jG+GQUMMwCcbpamEgW7YaHevkvMIDAPdgs6y1cMVWaKHKEkgULl3 H7FiDIZ5Lw4hUYdFHcJPbxT0HEoWmqqd8IsIo0DLOeOjOqNraDseAHoTYZDpZWBss0Ycyi671O8q +pDoo2I23svnKDNwExng7Kv4fX4ZzIeRxhjKrTS5bbWyW5lM1cWcN6WdBZfnDFdsDfwdEzmUNvOb SgDiww0CwLaoQuOthv05h12rN6DmfhIQo6o2hRGodORxOmcQDtB52d84Csw7dXRw36sfF3sGdd9i 9muGwduBkDEBhRQyiByqhnuUxHSwr6ODjBaKyZOhy6gVdruFZ7B6rWcirip2OhCNIAsgAZECJRg+ 2Gk5VOhklN14EuEdQWOjkCFgDIGhfK3HG7TA9POJ8sPNAtGPxgUF2jQ3dJFOS2sjyzqyYG2HPCbO 3E7eAnqvDjruIisRBYosirLu+LomTxIE7pzjKHWzhOwdodO0650NbqEI0ls72vVJlx6tUThE5jj6 NbBncAKIbeyR21tmcW6ddby0v387luyxlHQgu0ljpjOo3mvqywuUxAfN91uCPWinrum/cG1ThoGk E7xhq8Q6skT5dgHa4HknqPBnpiXVy4ZWUbG38M3Hg33u56p8Tok845GLaU20CczQ3AIQPImLriBP HxGZhkwD3QbYL2GQqwOzfVkY1wGMblQeXfYnZ56dUXo/SsUNrHgdxI86YEar1414LVzNHNjzxjHe HojTVEVKZIjLiAlLyxL9zXB0VG/vg/XDeF8RdvHf/QASKbMexCBtPf29Eothys4/u7dL6GaFdGkG ENTcZY+NP3z6eb38D48EbAbRjTKH/FtjvmMvqs8VIacXFhRglq0AEjBA0g5zN9uOGG1nSbThcNu+ QD/4u5IpwoSH6EjQaA== --94eb2c1cc0222ef47a05588c67fc Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline -- 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 --94eb2c1cc0222ef47a05588c67fc--