On 07/22/2010 08:33 AM, Michael Wild wrote:
> 
> On 22. Jul, 2010, at 3:09 , Michael Hertling wrote:
> 
>> On 07/21/2010 10:26 AM, Michael Wild wrote:
>>>
>>> On 21. Jul, 2010, at 9:56 , Marcel Loose wrote:
>>>
>>>> On Tue, 2010-07-20 at 09:18 -0700, Alan W. Irwin wrote:
>>>>> On 2010-07-20 17:12+0200 Michael Hertling wrote:
>>>>>
>>>>>> On 07/20/2010 03:26 AM, Alan W. Irwin wrote:
>>>>>>> On 2010-07-20 00:51+0200 Michael Hertling wrote:
>>>>>>>
>>>>>>>> On 07/18/2010 10:14 PM, Alan W. Irwin wrote:
>>>>>>>>> (1) http://public.kitware.com/Bug/view.php?id=10718 is fixed.  In
>>>> my
>>>>>>>>> view this bug has been the source of much CMake find trouble for
>>>> a long
>>>>>>>>> time, and I hope the CMake developers make it a high priority to
>>>> fix
>>>>>>>>> it for CMake-2.8.3.
>>>>>
>>>>>> If I understand correctly, the intention of 10718 is to denote
>>>> possibly
>>>>>> non-equivalent alternatives after NAMES and use the super-path to
>>>> pick
>>>>>> out one of them.
>>>>>
>>>>> Correct.  This issue has come up several times on the PLplot developer
>>>>> list in several contexts (not only Python).  Without the fix, it
>>>>> proves impossible to manipulate the super-PATH to allow CMake to find
>>>>> anything later in the NAMES list (normally a lower version) if
>>>>> something earlier (normally a higher version) exists anywhere in the
>>>>> super-PATH on your system. The fix to 10718 is to swap the inner and
>>>>> outer loops in the CMake code so super-PATH order takes precedence
>>>>> over NAMES order.
>>>>>
>>>>> I believe that solution of 10718 will make life easier for Find module
>>>>> maintainers and developers.  Which is why I brought it up in
>>>>> connection with this thread.  However, I don't want to
>>>>> over-concentrate on this one matter at the expense of the rest of this
>>>>> important topic which is how to improve the Python Find module.  So
>>>>> that is probably enough about 10718 for now.
>>>>>
>>>>> Alan
>>>>> __________________________
>>>>> Alan W. Irwin
>>>>>
>>>>> Astronomical research affiliation with Department of Physics and
>>>> Astronomy,
>>>>> University of Victoria (astrowww.phys.uvic.ca).
>>>>>
>>>>> Programming affiliations with the FreeEOS equation-of-state
>>>> implementation
>>>>> for stellar interiors (freeeos.sf.net); PLplot scientific plotting
>>>> software
>>>>> package (plplot.org); the libLASi project (unifont.org/lasi); the
>>>> Loads of
>>>>> Linux Links project (loll.sf.net); and the Linux Brochure Project
>>>>> (lbproject.sf.net).
>>>>> __________________________
>>>>>
>>>>> Linux-powered Science
>>>>> __________________________
>>>>
>>>> I fully agree with Alan. I brought this up on the mailing list as well a
>>>> couple of months ago -- see
>>>> http://www.mail-archive.com/cmake@cmake.org/msg27838.html -- but didn't
>>>> open a bug for it. From that mail it should be clear that it's not only
>>>> FindPython suffering from this problem, but FindBoost as well. 
>>>>
>>>> Re-reading that thread I saw all kinds of suggested solutions to the
>>>> "problem" that sounded much more elaborate and difficult to implement
>>>> than the solution you and some other have already suggested: turn the
>>>> loop inside-out.
>>>>
>>>> If people a Kitware fear this might cause problems with some people's
>>>> builds I would suggest to add a policy for this, which defaults to the
>>>> proposed IMHO preferred behaviour: put the paths in the outer loop and
>>>> the names in the inner loop.
>>>>
>>>> Just my 2cts,
>>>> Marcel Loose.
>>>
>>> +1 from me.
>>>
>>> Michael
>>
>> Hi Marcel,
>> Hi Michael,
>>
>> in my latest reply to Alan,
>>
>> <http://www.mail-archive.com/cmake@cmake.org/msg30112.html>,
>>
>> I presented a consideration that either searching names-before-paths or
>> paths-before-names doesn't matter because all NAMES are equivalent, or
>> there can be be situations which let a paths-before-names search fail,
>> and these situations are not pathological. E.g., it's perfectly legal
>> - for development or testing - to have several python installations in
>> /opt/python, i.e. one has, say, /opt/python/bin/python{2.4,2.5,2.6}.
>> Now, FIND_PROGRAM(... NAMES python python2.6 python2.5 python2.4 ...)
>> will never find python2.5 even if the search goes paths-before-names.
>> The reason is that the alternatives reside in the same directory which
>> is possible right due to their different names, so the super-path, as
>> it is named in 10718, is no suitable mean to pick out one of them.
>>
>> Reading <http://www.mail-archive.com/cmake@cmake.org/msg28912.html> and
>> regarding the concerned SystemTools::FindProgram() methods implemented
>> in Source/kwsys/SystemTools.cxx, I'm in doubt if swapping the loops in
>> question is really less elaborate and difficult than fixing the find
>> modules to use the NAMES option in a correct manner. E.g., what's
>> wrong with, roughly,
>>
>> IF(Python_FIND_VERSION_COUNT EQUAL 0)
>>    SET(v "")
>> ELSEIF(Python_FIND_VERSION_COUNT GREATER 1)
>>    SET(v "${Python_FIND_VERSION_MAJOR}.${Python_FIND_VERSION_MINOR}")
>> ELSE()
>>    # Look for a suitable python installation, e.g. supported by
>>    # PYTHON_ROOT, cf. BOOST_ROOT, and extract the minor version.
>> ENDIF()
>> FIND_PROGRAM(PYTHON_EXECUTABLE "python${v}" ...)
>>
>> in a FindPython.cmake? The key is to predict the interpreter's name
>> from the version passed in by FIND_PACKAGE(). Of course, invocations
>> like FIND_PACKAGE(Python 2) are difficult since the minor version is
>> needed, so the module must probably look for a suitable installation
>> by itself, but a PYTHON_ROOT variable might help as BOOST_ROOT does
>> with FindBoost.cmake. Moreover, this approach would allow to request
>> a specific version reliably which is not guaranteed by FIND_PROGRAM()
>> with a hardcoded version list after the NAMES option - with or without
>> a solution to 10718.
>>
>> In summary, my point is: Even if the loops are swapped, we wouldn't get
>> a solution that works well in real-world scenarios, so I doubt if it's
>> worth the effort, and the effort won't be trivial. Instead, one should
>> prefer to improve the find modules and get rid of those non-equivalent
>> alternatives after the NAMES option, in particular hardcoded version
>> lists, and freshly developed modules should use FIND_PACKAGES()'s
>> version interface right from the beginning.
>>
>> Regards,
>>
>> Michael
>>
>> P.S.: Adding wildcard support to the find commands would probably ease
>>      the situation significantly as, e.g., FIND_PACKAGE(Python 2 ...)
>>      would lead to FIND_PROGRAM(PYTHON_EXECUTABLE python2.* ...), so
>>      there's no need to figure out the minor version in a tricky way.
> 
> I agree with you partially, however: More often than not, I don't care what 
> exact version of Python I get, as long as it's e.g. 2.3 < version < 3.0. But 
> what I would REALLY like, is to get the newest version that is installed and 
> fits in the range. Of course, the user could simply set PYTHON_EXECUTABLE 
> himself...
> 
> Which brings me to another problem of find_XXX. Assume you found a way to 
> ensure that your FindPython.cmake finds a consistent set of interpreter, 
> libraries and headers. Now, after running CMake your user doesn't like the 
> interpreter you picked up and changes its path in the cache, however doesn't 
> bother with the libraries and headers. Should we treat this as a user-error, 
> or should such a change cause the libraries and include path to be 
> rediscovered?

IMO, caching XXX_EXECUTABLE et al. manually means bypassing the find
module in a certain way, so it's the user's responsibility to ensure
the consistency of the results. Perhaps, it's sometimes even required
or desired to combine executables/libraries/headers with inconsistent
versions why I wouldn't prohibit such a configuration from the first.
Nevertheless, a check which issues a warning if the versions differ -
respecting XXX_FIND_QUIETLY, of course - would surely be welcome.
Apart from that, I wouldn't take further measures in this case.

Regards,

Michael
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to