This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA/commit] Work around Solaris bourne shell limitation when building the sim


Hello,

Building the sim on a sparc-solaris 2.8 machine fails when configured
with no extra sim hardware:

> for hw in  ; do \
>         echo "extern const struct hw_descriptor
>         dv_${hw}_descriptor[];" ; \
>       done >> tmp-hw.h
> echo 'const char version[] = "'"`sed q
> /[...]/../../gdb/version.in`"'";'
> >> version.c-tmp
> /bin/sh: -c: line 1: syntax error near unexpected token `;'
> /bin/sh: -c: line 1: `for hw in  ; do \'
> make[3]: *** [hw-config.h] Error 2

The same thing happens with the version of bash that we got from
Sun as well (which is very old: 2.03.0(1)-release).

The problems comes from the fact that both shells are buggy, and
reject the following script:

    for hw in ; do
      [...]
    done

The above is what sim/common/Makefile.in tries to execute when
generating hw-config.h.

In order to allow users to build out of the box on these machines,
this patch works around this bug.  It does rely on the fact that
none of the tokens in SIM_HW contain whitespaces. I don't think
that this is going to be a problem in practice.

sim/common/ChangeLog:

        * Make-common.in (hw-config.h): Work around bug in Solaris 2.8
        system bourne shell.

Tested on sparc-solaris with both /bin/sh and /bin/bash.
Would that be OK?

PS: An alternate approach, which I think might be better (although
    this might depend on taste), is to do use config.h and define
    macros there depending on which hw capability is being configured
    in. Then hw-config.h no longer needs to be generated. It becomes
    a regular source file with #ifdef's in them. I didn't do it
    because it's probably a significant amount of work, and I am
    not convinced that it's that better.


---
 sim/common/Make-common.in |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in
index c12d155..7c76f50 100644
--- a/sim/common/Make-common.in
+++ b/sim/common/Make-common.in
@@ -459,14 +459,17 @@ sim-inline.c: $(srccom)/sim-inline.c
 	$(SHELL) $(srcdir)/../../move-if-change tmp-$@ $@
 
 # FIXME This is one very simple-minded way of generating the file hw-config.h
+# The use of the "`echo $(SIM_HW)`" in the for loops below is to work around
+# bugs in certain system shells (such as the Solaris 2.8 bourne shell)
+# which break when the for list is empty.
 hw-config.h: Makefile.in $(srccom)/Make-common.in config.status Makefile
 	rm -f tmp-hw.h
 	echo "/* generated by Makefile */" > tmp-hw.h
-	for hw in $(SIM_HW) ; do \
+	for hw in `echo $(SIM_HW)` ; do \
 	  echo "extern const struct hw_descriptor dv_$${hw}_descriptor[];" ; \
 	done >> tmp-hw.h
 	echo "const struct hw_descriptor *hw_descriptors[] = {" >> tmp-hw.h
-	for hw in $(SIM_HW) ; do \
+	for hw in `echo $(SIM_HW)` ; do \
 	  echo "  dv_$${hw}_descriptor," ; \
 	done >> tmp-hw.h
 	echo "  NULL," >> tmp-hw.h
-- 
1.7.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]