[cmake-developers] if (FOO == BAR) ...
Clinton Stimpson
clinton at elemtech.com
Thu Mar 21 15:40:20 EDT 2013
Is there a best practices using existing functionality to always avoid
automatic dereference when comparing strings?
Clint
On Thursday, March 21, 2013 02:56:51 PM David Cole wrote:
> Unfortunately, this entire discussion nicely demonstrates and
> reinforces my belief that we ought not to do this == thing...
>
> If Alex, Brad, Matthew and I can't understand each other's meanings
> within the context of this discussion, what chance does a poor user
> reading through the CMake IF documentation have of getting it right?
>
> Adding a new better way to do something without eliminating the old
> not-so-good way of doing the same thing is not necessarily a good
> thing. Multiple ways to do things just make people shake their heads
> and ask "Why?"
>
> I am still voting no on this one.
>
>
> David C.
>
>
> -----Original Message-----
> From: Alexander Neundorf <neundorf at kde.org>
> To: cmake-developers <cmake-developers at cmake.org>
> Sent: Thu, Mar 21, 2013 2:43 pm
> Subject: Re: [cmake-developers] if (FOO == BAR) ...
>
> On Thursday 21 March 2013, Matthew Woehlke wrote:
> > On 2013-03-20 17:42, Alexander Neundorf wrote:
> > > On Wednesday 20 March 2013, Matthew Woehlke wrote:
> > >> On 2013-03-20 17:10, David Cole wrote:
> > >>> Are you proposing that == behaves as STREQUAL, or as EQUAL?
> > >>
> > >> What's the difference?
> > >>
> > >> Okay, for <, >, there is an obvious answer, but for ==, I am
>
> trying and
>
> > >> failing to think of a situation where treating the arguments as
>
> numbers
>
> > >> would give a different result vs. treating them as strings.
> > >
> > > E.g. "0" vs. "0.0"
> >
> > Is "0.0" a floating-point number or a version string? In the context
>
> of
>
> > CMake, I would have rather expected it to be the latter. (Does CMake
> > even understand floating point?) If '==' assumes numbers, how do I
>
> tell
>
> > it I really meant a version string?
>
> EQUAL tries to convert to double:
>
> if (argP1 != newArgs.end() && argP2 != newArgs.end() &&
> (*(argP1) == "LESS" || *(argP1) == "GREATER" ||
> *(argP1) == "EQUAL"))
> {
> def = cmIfCommand::GetVariableOrString(arg->c_str(), makefile);
> def2 = cmIfCommand::GetVariableOrString((argP2)->c_str(),
> makefile);
> double lhs;
> double rhs;
> bool result;
> if(sscanf(def, "%lg", &lhs) != 1 ||
> sscanf(def2, "%lg", &rhs) != 1)
>
>
> My "==" implementation simply compares the strings on both sides in the
> most
> simple and straightforward way.
>
>
> Alex
> --
>
> 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://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers
>
>
> --
>
> 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://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers
--
Clinton Stimpson
Elemental Technologies, Inc
Computational Simulation Software, LLC
www.csimsoft.com
More information about the cmake-developers
mailing list