This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: DJGPP stage 2 C++ makefile failure
- To: "Eli Zaretskii" <eliz at is dot elta dot co dot il>, gcc-bugs at gcc dot gnu dot org
- Subject: Re: DJGPP stage 2 C++ makefile failure
- From: "Mark E." <snowball3 at bigfoot dot com>
- Date: Sat, 15 Jul 2000 16:07:25 -0400
- References: <396FC014.5376.46301F@localhost> (snowball3@bigfoot.com)
> Add "SHELL = /bin/sh" to the Makefile and then try @echo "\$(CC)"
> (with the quotes) instead. Did it work now?
Adding SHELL or adding double quotes to my simplified Makefile made no difference.
The part of the Makefile in question is generated from from <top_dir>/gcc/Makefile.in> and looks like this:
# Flags to pass to recursive makes.
# CC is set by configure. Hosts without symlinks need special handling
# because we need CC="stage1/xgcc -Bstage1/" to work in the language
# subdirectories.
# ??? The choices here will need some experimenting with.
ORDINARY_FLAGS_TO_PASS = \
"AR_FLAGS_FOR_TARGET=$(AR_FLAGS_FOR_TARGET)" \
"AR_CREATE_FOR_TARGET=$(AR_CREATE_FOR_TARGET)" \
"AR_EXTRACT_FOR_TARGET=$(AR_EXTRACT_FOR_TARGET)" \
"AR_FOR_TARGET=$(AR_FOR_TARGET)" \
"BISON=$(BISON)" \
"BISONFLAGS=$(BISONFLAGS)" \
"CFLAGS=$(CFLAGS)" \
"CLIB=$(CLIB)" \
"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
"LDFLAGS=$(LDFLAGS)" \
"LEX=$(LEX)" \
"LEXFLAGS=$(LEXFLAGS)" \
"LN=$(LN)" \
"LN_S=$(LN_S)" \
"MAKEINFO=$(MAKEINFO)" \
"MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \
"RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \
"RANLIB_TEST_FOR_TARGET=$(RANLIB_TEST_FOR_TARGET)" \
"SHELL=$(SHELL)" \
"STAGE_PREFIX=`case '$(STAGE_PREFIX)' in stage*) echo '$(STAGE_PREFIX)' | sed -e 's|stage|../stage|g';; *) echo '$(STAGE_PREFIX)';; esac`" \
"exeext=$(exeext)" \
"build_exeext=$(build_exeext)" \
"objext=$(objext)" \
"exec_prefix=$(exec_prefix)" \
"prefix=$(prefix)" \
"local_prefix=$(local_prefix)" \
"gxx_include_dir=$(gcc_gxx_include_dir)" \
"tooldir=$(tooldir)" \
"gcc_tooldir=$(gcc_tooldir)" \
"bindir=$(bindir)" \
"libsubdir=$(libsubdir)" \
"datadir=$(datadir)" \
"distdir=../tmp/\$$(subdir)" \
"localedir=$(localedir)"
FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) "CC=`case '$(CC)' in stage*) echo
'$(CC)' | sed -e 's|stage|../stage|g';; *) echo '$(CC)';; esac`"
PREPEND_DOTDOT_TO_RELATIVE_PATHS = sed \
-e 's|^ *[^ /][^ /]*/|%&|' \
-e 's| -B| -B%|g' \
-e 's|% *[^- /]|%&|g' \
-e 's|%% *|../|g' \
-e 's|%||g'
SUBDIR_FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) \
"CC=`echo \`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e
's|stage|../stage|g';; *) echo '\$(CC)';; esac\` |
$(PREPEND_DOTDOT_TO_RELATIVE_PATHS)`"
# Flags to pass when recursing into a frontend subdirectory.
LANG_FLAGS_TO_PASS = $(SUBDIR_FLAGS_TO_PASS) \
"CFLAGS=$(LOOSE_CFLAGS)"
it expands to this (in stage 1 when CC=gcc):
cd cp; c:/djgpp/bin/make.exe "AR_FLAGS_FOR_TARGET=" "AR_CREATE_FOR_TARGET=ar
rc" "AR_EXTRACT_FOR_TARGET=ar x" "AR_FOR_TARGET=ar" "BISON=bison"
"BISONFLAGS=" "CFLAGS=-g" "CLIB="
"GCC_FOR_TARGET=c:/djgpp/cvs/gcc/build/gcc/xgcc -Bc:/djgpp/cvs/gcc/build/gcc/
-B/dev/env/DJDIR/i586-pc-msdosdjgpp/bin/ -I/dev/env/DJDIR/i586-pc-
msdosdjgpp/include" "LDFLAGS=" "LEX=flex" "LEXFLAGS=" "LN=cp -p" "LN_S=cp -p"
"MAKEINFO=makeinfo " "MAKEINFOFLAGS=" "RANLIB_FOR_TARGET=ranlib"
"RANLIB_TEST_FOR_TARGET=[ -f ranlib ] || ( [ "i586-pc-msdosdjgpp" = "i586-pc-
msdosdjgpp" ] && [ -f /usr/bin/ranlib -o -f /bin/ranlib ] )"
"SHELL=c:/djgpp/bin/bash.exe" "STAGE_PREFIX=`case '' in stage*) echo '' | sed
-e 's|stage|../stage|g';; *) echo '';; esac`" "exeext=.exe"
"build_exeext=.exe" "objext=.o" "exec_prefix=/dev/env/DJDIR"
"prefix=/dev/env/DJDIR" "local_prefix=/usr/local"
"gxx_include_dir=/dev/env/DJDIR/include/cxx" "tooldir=/dev/env/DJDIR/i586-pc-
msdosdjgpp" "gcc_tooldir=/dev/env/DJDIR/lib/gcc-
lib/djgpp/2.96/../../../../djgpp" "bindir=/dev/env/DJDIR/bin"
"libsubdir=/dev/env/DJDIR/lib/gcc-lib/djgpp/2.96"
"datadir=/dev/env/DJDIR/share" "distdir=../tmp/\$(subdir)"
"localedir=/dev/env/DJDIR/share/locale" "CC=`echo \`case '\gcc' in stage*)
echo '\gcc' | sed -e 's|stage|../stage|g';; *) echo '\gcc';; esac\` | sed -e
's|^ *[^ /][^ /]*/|%&|' -e 's| -B| -B%|g' -e 's|% *[^- /]|%&|g' -e 's|%%
*|../|g' -e 's|%||g'`" "CFLAGS=`echo -g|sed -e 's/-pedantic//g' -e 's/-
Wtraditional//g'`" "CXX_FOR_BUILD=gpp" "CXXFLAGS=-O2" "CXX_FOR_TARGET=gpp"
../cc1plus.exe
make.exe[2]: Entering directory `c:/djgpp/cvs/gcc/build/gcc/cp'
\gcc -c -DIN_GCC -g -W -Wall -I. -I.. -I/djgpp/cvs/gcc/gcc/cp -
I/djgpp/cvs/gcc/gcc/cp/.. -I/djgpp/cvs/gcc/gcc/cp/../config -
I/djgpp/cvs/gcc/gcc/cp/../../include /djgpp/cvs/gcc/gcc/cp/call.c
make.exe[2]: *** [call.o] Error -1
make.exe[2]: Leaving directory `c:/djgpp/cvs/gcc/build/gcc/cp'
You can see that the '\' makes it in to g++'s CC.
The problem to me still seems to be that '\'. I've modifed the simplified
Makefile as requested with some changes of my own:
SHELL=/bin/sh
CC=/foo/gcc
CC_DBL_QUOTED="\$(CC)"
CC_SNGL_QUOTED='\$(CC)'
all:
echo "CC #1 = '\$(CC)'"
echo "CC #2 = "\$(CC)""
echo 'CC_DBL_QUOTED #1 = $(CC_DBL_QUOTED)'
echo "CC_DBL_QUOTED #2 = $(CC_DBL_QUOTED)"
echo 'CC_SNGL_QUOTED #1 = $(CC_SNGL_QUOTED)'
echo "CC_SNGL_QUOTED #2 = $(CC_SNGL_QUOTED)"
and the output:
echo "CC #1 = '\/foo/gcc'"
CC #1 = '\/foo/gcc'
echo "CC #2 = "\/foo/gcc""
CC #2 = /foo/gcc
echo 'CC_DBL_QUOTED #1 = "\/foo/gcc"'
CC_DBL_QUOTED #1 = "\/foo/gcc"
echo "CC_DBL_QUOTED #2 = "\/foo/gcc""
CC_DBL_QUOTED #2 = /foo/gcc
echo 'CC_SNGL_QUOTED #1 = '\/foo/gcc''
CC_SNGL_QUOTED #1 = /foo/gcc
echo "CC_SNGL_QUOTED #2 = '\/foo/gcc'"
CC_SNGL_QUOTED #2 = '\/foo/gcc'
CC #1 closely matches what the Makefile in question is doing. It works when
modified to CC #2.
It seems that when the same quote characters are used, GNU Make removes the
backslash escape and when different quote characters are used, GNU Make
doesn't remove the backslash escape. Eli, is the Makefile correct in assuming
the escape should be removed or does it need to be changed?
Mark