Patrick
2008-Feb-10 02:23 UTC
[LLVMdev] semicolon breaking builds on llvm-gcc4.2 cygwin build for arm target 2.2prerelease2
Since we are fast approaching the 10th, I thought it appropriate to report this "bug" with the build despite not having worked around it. Build environment is *Summary:* When building llvm-gcc with a arm-apple-darwin target on i686-pc-cygwin, make fails because child calls to configure have an errant semicolon that causes the --srcdir parameter to be ignored by the configure script. This causes the builds in the host-i686-pc-cygwin directory to fail unnecessarily. Removing said semicolon from the configure calls and running 'make' manually succeeds. *Configure Parameters for **llvm-gcc:* (from /cygdrive/e/llvm-gcc4.2-2.2.source/config.status) config.status:# ./configure --enable-llvm=/cygdrive/e/llvm-2.2--target=arm-ap ple-darwin --enable-sjlj-exceptions --with-heavenly=/usr/local/share/iphone-file system --with-gcc=/usr/bin/gcc --program-prefix=arm-apple-darwin --with-as=/usr/ local/bin/llvm-as --with-ld=/usr/local/bin/llvm-ld --enable-languages=c,c++,objc ,obj-c++ *Root Cause?:* I believe this problem is caused by --srcdir appearing after the program_transform_name substitutions. This problem was likely introduced within this change +if test "$program_transform_name" = s,x,x,; then Revision *43990*<http://llvm.org/viewvc/llvm-project?view=rev&revision=43990>- ( view<http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/release_22/configure?revision=43990&view=markup>) (download<http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/release_22/configure?revision=43990>) (annotate<http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/release_22/configure?annotate=43990>) - [select for diffs]<http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/release_22/configure?r1=43990&view=log> Modified *Sat Nov 10 22:32:06 2007 CST* (2 months, 4 weeks ago) by *void* Original Path: *llvm-gcc-4.2/trunk/configure*<http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/configure?view=log&pathrev=43990> File length: 244731 byte(s) Diff to previous 43921<http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/release_22/configure?r1=43921&r2=43990>( colored<http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/release_22/configure?r1=43921&r2=43990&diff_format=h>) Update configure scripts to build the Apple Way *Fix:* To maintain computability with the 'Apple way of building', while also enabling compatability for Apple platforms, I suggest moving the } ${ml_srcdiroption} options prior to the ${ac_configure_args} when generating calls to ./configure from 'make' *Closing Comments:* I've yet to complete an entire build, but wanted to report this bug now in case the llvm-gcc team would like to address this problem on Cygwin builds prior to the release. It seems easy enough to fix. I will report back further after I complete the build, and may also install these sources on a clean install of Cygwin to see if I can reproduce the problem. It appears this bug can be corrected rather easily by moving --srcdir as I have suggested. -- Patrick Hennessey -- Dallas, TX *Problem Description* For each host- subdir, the --srcdir parameter follows a semicolon, which to my bash shell means that --srcdir is a second command to execute, rather than a parameter to the configure. I believe this problem would be mitigated by --srcdir appearing before --program-transform-name in the generated invocations of configure. It might to be related these lines in the top level configure which contain said semicolon: - if test "$program_transform_name" = s,x,x,; then - program_transform_name="*s,^,${program_prefix},; * $program_transform_name" - program_transform_name="*s,\$\$,${program_suffix},;*$program_transform_name" Here is an example from *config.log * for* llvm-gcc4.2-2.2.source/** host-i686-pc-cygwin/gcc* (fixincludes, libiberty and intl already were 'fixed' per my 'solution') $ grep configure config.log |head -3 running configure, to aid debugging if configure makes a mistake. It was created by configure, which was $ /cygdrive/e/llvm-gcc4.2-2.2.source/gcc/configure --cache-file=./config.cac --build=i686-pc-cygwin --host=i686-pc-cygwin --target=arm-apple-darwin --enab -llvm=/cygdrive/e/llvm-2.2 --enable-sjlj-exceptions --with-gcc=/usr/bin/gcc --with-as=/usr/local/bin/llvm-as --with-ld=/usr/local/bin/llvm-ld --enable-languages=c,c++,objc,obj-c++ --program-transform-name=s,^,arm-apple-darwin,; --srcdir=../.././gcc Its an easy fix to get these to compile, though: - cd host-i686-pc-cygwin/gcc/ - grep configure config.log|head -3|tail -1 | perl -pe 's/\;//;s/^\s+\$//;' > newonfig.sh - bash newconfig.sh - make $ cat newconfig.sh /cygdrive/e/llvm-gcc4.2-2.2.source/gcc/configure --cache-file=./config.cache -- build=i686-pc-cygwin --host=i686-pc-cygwin --target=arm-apple-darwin --enable-ll vm=/cygdrive/e/llvm-2.2 --enable-sjlj-exceptions --with-gcc=/usr/bin/gcc --with-as=/usr/local/bin/llvm-as --w ith-ld=/usr/local/bin/llvm-ld --enable-languages=c,c++,objc,obj-c++ --program-tr ansform-name=s,^,arm-apple-darwin, --srcdir=../.././gcc Below is the first top-level error generated by 'make' after configure (for fixincludes) This sort of error is generated for each subdirectory target under ./llvm-gcc4.2-2.2.source/host-i686-pc-cygwin. Each time I get the error, I can correct the invocation of configure and build using the Perl rewrite appearing above. $ make make[1]: Entering directory `/cygdrive/e/llvm-gcc4.2-2.2.source' make[2]: Entering directory `/cygdrive/e/llvm-gcc4.2-2.2.source /host-i686-pc-cyg win/libiberty' make[3]: Entering directory `/cygdrive/e/llvm-gcc4.2-2.2.source /host-i686-pc-cyg win/libiberty/testsuite' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/cygdrive/e/llvm-gcc4.2-2.2.source /host-i686-pc-cygw in/libiberty/testsuite' make[2]: Leaving directory `/cygdrive/e/llvm-gcc4.2-2.2.source /host-i686-pc-cygw in/libiberty' make[2]: Entering directory `/cygdrive/e/llvm-gcc4.2-2.2.source /host-i686-pc-cyg win/fixincludes' make[2]: *** No rule to make target `/cygdrive/e/llvm-gcc4.2-2.2.source /fixinclu des/Makefile.in', needed by `Makefile'. Stop. make[2]: Leaving directory `/cygdrive/e/llvm-gcc4.2-2.2.source /host-i686-pc-cygw in/fixincludes' make[1]: *** [all-fixincludes] Error 2 make[1]: Leaving directory `/cygdrive/e/llvm-gcc4.2-2.2.source' make: *** [all] Error 2 $ cd /cygdrive/e/llvm-gcc4.2-2.2.source/host-i686-pc-cygwin/fixincldes $ grep configure config.log |head -20 running configure, to aid debugging if configure makes a mistake. It was created by fixincludes configure , which was $ /cygdrive/e/llvm-gcc4.2-2.2.source/fixincludes/configure --cache-file=./con ig.cache --build=i686-pc-cygwin --host=i686-pc-cygwin --target=arm-apple-darwin --enable-llvm=/cygdrive/e/llvm-2.2 --enable-sjlj-exceptions --with-gcc=/usr/bin/gc c --enable-languages=c,c++ objc,obj-c++ --program-transform-name=s,^,arm-apple-darwin, --srcdir=/cygdrive/ /llvm-gcc4.2-2.2.source/fixincludes -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080209/c1c1d1c2/attachment.html>