On 08/11/2011 07:48 PM, Michael Hertling wrote: > On 08/11/2011 05:20 PM, Michael Wild wrote: >> On Thu 11 Aug 2011 04:46:44 PM CEST, David Cole wrote: >>> On Thu, Aug 11, 2011 at 7:29 AM, Glenn Coombs <glenn.coo...@gmail.com >>> <mailto:glenn.coo...@gmail.com>> wrote: >>> >>> The problem is that we currently already have 2 parallel systems. >>> Some of the variables like CMAKE_EXE_LINKER_FLAGS are passed through >>> as-is to the compiler or linker. So, by definition, these variables >>> are space separated lists of options. Attempting to use >>> list(APPEND) on them adds semicolon characters which causes breakage >>> unless you manually remove them. >>> >>> Using list(APPEND), followed by string(REGEX REPLACE) is even more >>> verbose than just using the set(foo "${foo} ...") approach. I see >>> an append() command as just the equivalent of the += operator in >>> C/C++ and don't think that adding it would necessarily require >>> adding any more space separated list functionality. And I agree >>> that you wouldn't really want >>> >>> An alternative approach (but harder to implement) would be to >>> abandon space separated lists altogether. Variables like >>> CMAKE_EXE_LINKER_FLAGS would be stored as lists and then cmake would >>> format them internally as space separated strings before passing >>> them to the native build tools. You might have to change the way >>> cmake internally represents lists if you ever wanted to be able to >>> pass options with semicolons through to the build tools. >>> >>> -- >>> Glenn >>> >>> >>> >>> On 9 August 2011 20:34, Alan W. Irwin <ir...@beluga.phys.uvic.ca >>> <mailto:ir...@beluga.phys.uvic.ca>> wrote: >>> >>> On 2011-08-09 17:19+0100 Glenn Coombs wrote: >>> >>> Probably too late now and there isn't a bug filed so far as >>> I know, but one thing I would love to see added to cmake is >>> an append command >>> so that lines like this: >>> >>> set(CMAKE_EXE_LINKER_FLAGS_ RELEASE >>> "${CMAKE_EXE_LINKER_FLAGS_ RELEASE} /INCREMENTAL:NO") >>> >>> become shorter and easier to understand: >>> >>> append(CMAKE_EXE_LINKER_FLAGS_ RELEASE "/INCREMENTAL:NO") >>> >>> The existing syntax for the set command is just ugly when >>> appending. I know you can define a macro or function to do >>> this but I just >>> feel that it should be supported out of the box as it would >>> make CMakeLists.txt files more readable. >>> >>> >>> Hi Glenn: >>> >>> I am changing the subject line to keep discussion out of the >>> bugfix thread as requested by Dave. >>> >>> It appears what you want is the list APPEND command for >>> blank-delimited strings. But then later someone will want to add >>> other parts of the list functionality to blank-delimited strings as >>> well such as removing items from the blank-delimited list. >>> Until you >>> have two parallel list systems, one for blank delimited strings and >>> one for semicolon-delimited strings (i.e., the current lists). >>> >>> I think most would reject the idea of having two parallel list >>> systems >>> with different delimiters so here is one possibility. >>> >>> For now just stick to list functionality, e.g., >>> >>> list(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO") >>> >>> and then change the semicolon delimiters to blanks using >>> >>> strings(REGEX REPLACE ...) >>> >>> once you have the list completely assembled. Of course, that >>> will not >>> work for the corner case where the strings contain semicolons. So in >>> the long term, the right thing to do with lists might be to allow a >>> choice of delimiter if you could do that in such a way as to >>> preserve >>> backwards compatibility. >>> >>> Alan >>> __________________________ >>> Alan W. Irwin >>> >>> Astronomical research affiliation with Department of Physics and >>> Astronomy, >>> University of Victoria (astrowww.phys.uvic.ca >>> <http://astrowww.phys.uvic.ca>). >>> >>> Programming affiliations with the FreeEOS equation-of-state >>> implementation >>> for stellar interiors (freeeos.sf.net <http://freeeos.sf.net>); >>> PLplot scientific plotting software >>> package (plplot.org <http://plplot.org>); the libLASi project >>> (unifont.org/lasi <http://unifont.org/lasi>); the Loads of >>> Linux Links project (loll.sf.net <http://loll.sf.net>); and the >>> Linux Brochure Project >>> (lbproject.sf.net <http://lbproject.sf.net>). >>> __________________________ >>> >>> Linux-powered Science >>> __________________________ >>> >>> >>> >>> Until somebody comes up with an approach that is reasonably acceptable >>> by consensus, we will keep things as they are. Please use the (verbose, >>> but easily understandable) current form for the foreseeable future: >>> >>> set(xyz "${xyz} /newstuff") >>> >>> (I am personally adamantly opposed to an actual "append" command because >>> of the existence of the "list(APPEND" feature... I think "append" will >>> cause even more confusion...) >>> >>> >>> Thanks, >>> David Cole >>> Kitware, Inc. >> >> How about >> >> string(APPEND " /newstuff" xyz) >> >> It is not satisfactory in that it doesn't follow the semantics of all >> the other string(...) commands which never modify their input. >> >> Michael > > As David has implied, "APPEND" is usually associated with lists, cf. > LIST(APPEND ...) and SET_PROPERTY(... APPEND ...), so I'd prefer to > name this subcommand "CONCAT", e.g. > > STRING(CONCAT <output variable> [SEP <sep>] <input> ...) > > which is to be equivalent to > > SET(<output variable> "${<output variable>}<sep><input>...") > > with <sep> defaulting to a single space if it's unspecified. > > Alternatively, one might consider to introduce a new, say, > modifier "CONCAT" for the SET() command, e.g. > > SET(<variable> <value> ... CONCAT [SEP <sep>]) > > equivalent to > > SET(<variable> "${<variable>}<sep><value>...") > > again with <sep> defaulting to a space. This would preserve the > STRING() command's strict distinction between input and output > variables. Anyway, I agree that this whole APPEND/CONCAT issue > isn't a serious problem but just a convenience feature. > > Besides, David, due to the same reasons as mentioned above, the new > APPEND_STRING subcommand of SET_PROPERTY() is quite misnamed, IMO - > and quite long. Would it be possible to rename it to CONCAT before > it is released officially? In this way, we would consistently have > APPEND subcommands for list-style variables/properties and CONCAT > subcommands for string-style ones. > > Regards, > > Michael
Just one concern: CONCAT does not imply "+=" for me, so the name could possibly also be confusing. 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