This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
BenoÃt, All, [Note: Please, wrap long line to <80 columns.] On Friday 13 May 2011 21:57:45 BenoÃt THÃBAUDEAU wrote: > > So, when using the *_EXTRA_CONFIG variables, crosstool-NG does not > > enclose > > expansion between double quotes. > > Indeed, but there may have a solution without having to make a choice. Yes, I should have used past in these sentences. We indeed have to support both. But at the time I introduced this options (on the very beginnings), I did not really have time to do both, and I was not aware of any real-life use-case for spaces in arguments. Now, it appears there *are* valid real-life use-cases, and that we must support them. We just have to find a convenient way to do: - convenient for the end user - conveient for the maintenance > In CT-NG 1.11.1, kconfig leaves single quotes as is when saving menuconfig > to .config, and it escapes double quotes, so there is no limitation on this > side for *_EXTRA_CONFIG variables stored as strings. > > However, there is an issue with bash word splitting for instance when > ${CT_BINUTILS_EXTRA_CONFIG} is expanded when do_binutils() invokes > CT_DoExecLog(). Indeed. That's inherent to how the shell is expected to behave. > > The first, relatively easy one: > > Â- use a character as a separator between args. The pipe '|' seems [--SNIp--] > Reserving special characters for that might cause trouble, especially > if there is no escape sequence built for it. > > Anyway, the pipe '|' may already be used, e.g.: > '--with-specs=%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}' Hmm, OK. No pipe, then. > > The second, relatively complex, but maybe more easy to use from an > > end-user perspective (or maybe not): > > Â- allow for bash-style arrays assignments in the menuconfig, such as [--SNIP--] > > Â- much more impact on the infrastructure code, and not very robust. > Indeed. I've done a few experiments here, and in the end it turns out to be not so complex, after all. > Well, I propose the patch below. I have tested it on a full build, and it > works nicely. It addresses the bash word splitting issue without disturbing > much the infrastructure or the menuconfig. Feel free to improve it and to > integrate it. eval may be moved to CT_DoExecLog() and a function may be > created to automatically add a double quoting level to each entry of an > variable array like extra_config[@]. I don't know if it would be cleaner. I really don't like this patch. It can become a nightmare to maintain, and I am not even sure it is 100% correct (but I did not test it at all so far, only read parts of it; I will look more thoroughly tomorrow.). Using eval means we have to be very carefull on double quoting and/or escaping, both of which I really don't like. See my comments below. > --- > diff -Nrdup crosstool-ng-1.11.1.orig/scripts/build/binutils/binutils.sh crosstool-ng-1.11.1/scripts/build/binutils/binutils.sh > --- crosstool-ng-1.11.1.orig/scripts/build/binutils/binutils.sh 2011-05-02 18:11:24.000000000 +0200 > +++ crosstool-ng-1.11.1/scripts/build/binutils/binutils.sh 2011-05-13 16:25:27.944984290 +0200 > @@ -58,19 +58,20 @@ do_binutils() { > > CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'" > > - CT_DoExecLog CFG \ > - CFLAGS="${CT_CFLAGS_FOR_HOST}" \ > - "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure" \ > - --build=${CT_BUILD} \ > - --host=${CT_HOST} \ > - --target=${CT_TARGET} \ > - --prefix=${CT_PREFIX_DIR} \ > - --disable-nls \ > - --disable-multilib \ > - --disable-werror \ > - "${extra_config[@]}" \ > - ${CT_ARCH_WITH_FLOAT} \ > - ${CT_BINUTILS_EXTRA_CONFIG} \ > + CT_DoExecLog CFG \ > + CFLAGS="${CT_CFLAGS_FOR_HOST}" \ > + eval \ > + "\"${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure\"" \ > + --build=${CT_BUILD} \ > + --host=${CT_HOST} \ > + --target=${CT_TARGET} \ > + --prefix=${CT_PREFIX_DIR} \ > + --disable-nls \ > + --disable-multilib \ > + --disable-werror \ > + ${extra_config[@]} \ I have to check, but what if any of the extra_config item has spaces in them? Double quotes? Single quotes? A $ sign? A combination of these? Really, I am changing my mind, and I think my second suggestion would be the best (instead if the first one). Basically, the plan is: - in the config.in files, suffix all variables than can be an array with _ARRAY, such as: CT_BINUTILS_EXTRA_CONFIG_ARRAY, - before using .config (easy to do a Makefiel rule!), sed it into .config.2 so as to transform assignments to these variables into real array assignments. I have some sed magic here that does the trick very nicely, - build scripts that can use an array should handle it natively, with the standard bash syntax, eg: "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}", - from crosstool-ng.sh, use .config.2 instead of .config, et voilÃ! This has a huge advantage in my opinion: - it works for many arguments, a single element, and even none at all, - easy assignement in the menuconfig for end-users, - clean and lean code, easy maintenance, - .config is still includable from the ct-ng frontend. The drawback is we can't include .config.2 from the ct-ng frontend, as that is a Makefile script, and I have to check if we need to handle arrays inside the frontend (not that I can think of, so this is a minor limitation). Anyway, thanks BenoÃt for your suggestion! ;-) Regards, Yann E. MORIN. -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------' -- For unsubscribe information see http://sourceware.org/lists.html#faq
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |