From patchwork Fri Nov 18 18:26:59 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Myers X-Patchwork-Id: 17571 Received: (qmail 9108 invoked by alias); 18 Nov 2016 18:27:20 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 9088 invoked by uid 89); 18 Nov 2016 18:27:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_PASS, URIBL_RED autolearn=ham version=3.3.2 spammy=quoting, sk:b0e0f5e, 423, 17, U*0-9 X-HELO: relay1.mentorg.com Date: Fri, 18 Nov 2016 18:26:59 +0000 From: Joseph Myers To: Zack Weinberg CC: GNU C Library Subject: Re: Add script to build many glibc configurations In-Reply-To: Message-ID: References: User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 X-ClientProxiedBy: svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) On Fri, 18 Nov 2016, Zack Weinberg wrote: > * Please don't delete the build tree unless configure, build, and > check all succeed, so that one can dig into a failure beyond what's That's --keep=failed. > visible in the logs. Add an option to preserve the build tree even if > all three succeeded, to facilitate additional testing (for instance, > an "installed stripped libraries are unchanged" test - if that fails > one will want to go look at the object files). That's --keep=all. There's the question of what the best default is. The current --keep=none default is oriented to the idea of a buildbot that may not want disk usage to explode after a commit that causes all builds to fail, and will need to delete the build directories anyway when starting the next build. > * Please find some way of not needing to make a copy of the glibc > source tree for each build configuration, so that one can make edits > to .../src/glibc and immediately do incremental rebuilds in all > failing configurations. You'd need to fix bug 14121, then see if builds and testing with a read-only source directory work (and try to find any cases where Makefile dependencies mean something could get regenerated in the source directory and the checkout step doesn't currently fix the timestamps to avoid that). > * Please make sure that command lines written to logfiles are properly > quoted, so that they can be copied and pasted directly into a shell. > (The problem case I know about is CC="x-y-z-gcc -mthis -mthat" on a > configure command line, which currently gets written to the logfile > without any quotes.) (Python stdlib has a function `shlex.quote` that > will help.) Patch below committed. Quote shell commands in logs from build-many-glibcs.py. As requested in , this patch makes the commands recorded in build-many-glibcs.py quote words so they can be cut-and-pasted back into a shell. (Note that these logs are generated by the wrapper script generated to run commands with logs, hence the needs for quoting logic to be implemented in that shell script.) 2016-11-18 Joseph Myers * scripts/build-many-glibcs.py (Context.write_files): Make wrapper script quote words in command output to log suitably for input to the shell. diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py index b0e0f5e..517dec4 100755 --- a/scripts/build-many-glibcs.py +++ b/scripts/build-many-glibcs.py @@ -423,7 +423,17 @@ class Context(object): 'date > "$this_log"\n' 'echo >> "$this_log"\n' 'echo "Description: $desc" >> "$this_log"\n' - 'echo "Command: $*" >> "$this_log"\n' + 'printf "%s" "Command:" >> "$this_log"\n' + 'for word in "$@"; do\n' + ' if expr "$word" : "[]+,./0-9@A-Z_a-z-]\\\\{1,\\\\}\\$" > /dev/null; then\n' + ' printf " %s" "$word"\n' + ' else\n' + ' printf " \'"\n' + ' printf "%s" "$word" | sed -e "s/\'/\'\\\\\\\\\'\'/"\n' + ' printf "\'"\n' + ' fi\n' + 'done >> "$this_log"\n' + 'echo >> "$this_log"\n' 'echo "Directory: $dir" >> "$this_log"\n' 'echo "Path addition: $path" >> "$this_log"\n' 'echo >> "$this_log"\n'