qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
	Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [Qemu-ppc] [PATCH] PPC: Fail configure when libfdt is not available
Date: Mon, 24 Oct 2011 13:22:04 +1100	[thread overview]
Message-ID: <20111024022204.GB4157@truffala.fritz.box> (raw)
In-Reply-To: <1319182462-20771-1-git-send-email-pbonzini@redhat.com>

On Fri, Oct 21, 2011 at 09:34:22AM +0200, Paolo Bonzini wrote:
> On 10/20/2011 08:35 PM, Gerd Hoffmann wrote:
> >    Hi,
> > 
> >> If there are build problems with libfdt on any platform let me know
> >> about them.  I would like it to build clean as widely as possible, but
> >> I don't have that great a diversity of build environments, so I have
> >> to reply on bug reports.
> > 
> > Fails to build on RHEL-5:
> > 
> >           CC convert-dtsv0-lexer.lex.o
> > cc1: warnings being treated as errors
> > convert-dtsv0-lexer.lex.c:693: warning: no previous prototype for 'yylex'
> > make: *** [convert-dtsv0-lexer.lex.o] Error 1
> > 
> > Removing -Werror from the Makefile gets me a bit further:
> > 
> >           CC dtc-lexer.lex.o
> > dtc-lexer.lex.c:683: warning: no previous prototype for 'yylex'
> > dtc-lexer.l: In function 'push_input_file':
> > dtc-lexer.l:192: warning: implicit declaration of function 'yypush_buffer_state'
> > dtc-lexer.l:192: warning: nested extern declaration of 'yypush_buffer_state'
> > dtc-lexer.l: In function 'pop_input_file':
> > dtc-lexer.l:201: warning: implicit declaration of function 'yypop_buffer_state'
> > dtc-lexer.l:201: warning: nested extern declaration of 'yypop_buffer_state'
> >           CC dtc-parser.tab.o
> >           LD dtc
> > dtc-lexer.lex.o: In function `push_input_file':
> > /home/buildbot/git/dtc/dtc-lexer.l:192: undefined reference to
> > `yypush_buffer_state'
> > dtc-lexer.lex.o: In function `pop_input_file':
> > /home/buildbot/git/dtc/dtc-lexer.l:201: undefined reference to
> > `yypop_buffer_state'
> > collect2: ld returned 1 exit status
> > make: *** [dtc] Error 1
> > 
> > I guess the flex version shipped with RHEL-5 is too old.
> > 
> > $ rpm -qf $(which lex)
> > flex-2.5.4a-41.fc6
> 
> flex is only used by dtc, not libfdt, so you can probably patch it
> out.

Well, you can just "make libfdt" instead of "make all".

> However, the usual convention is that lex- and yacc-generated files
> are shipped in the tarball, with a "make dist" that wraps tar and/or
> git-archive.  See the following patch.

Well, it's _a_ convention that's used sometimes.  Particularly for
projects where the lex/yacc based parser is some little side thing,
rather than the core component.  That said, a "make dist" target for
dtc is probably not a bad idea.  Even though we don't really build
tarballs with the frequency we probably should.

[snip]
> diff --git a/Makefile b/Makefile
> index b32409b..edfdb9c 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -246,4 +246,27 @@ $(LIBFDT_lib):
>  	@$(VECHO) BISON $@
>  	$(BISON) -d $<
>  
> +.PHONY: distdir dist-gz dist-xz dist
> +
> +distdir = dtc-$(dtc_version)/
> +distdir: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS)
> +	mkdir $(distdir)
> +	@$(VECHO) DISTDIR $@
> +	git archive --format=tar HEAD --prefix=$(distdir) | tar -xf -

I'm a little uncomfortable with this, since it means you can only make
dist from a git tree; you can't make dist to recreate a tarball from
itself.

> +	@for i in $^; do \
> +		$(if $(V),echo cp $$i $(distdir),:); \
> +		cp $$i $(distdir); \
> +	done
> +	chmod -R ug+w $(distdir)
> +
> +dist-gz: distdir
> +	@$(VECHO) TAR dtc-$(dtc_version).tar.gz
> +	tar -chozf dtc-$(dtc_version).tar.gz $(distdir)
> +dist-xz: distdir
> +	@$(VECHO) TAR dtc-$(dtc_version).tar.xz
> +	tar -Ixz -chof dtc-$(dtc_version).tar.xz $(distdir)
> +
> +dist: dist-gz dist-xz
> +	rm -rf $(distdir)
> +
>  FORCE:
> diff --git a/Makefile.dtc b/Makefile.dtc
> index bece49b..0b2c869 100644
> --- a/Makefile.dtc
> +++ b/Makefile.dtc
> @@ -14,5 +14,5 @@ DTC_SRCS = \
>  	treesource.c \
>  	util.c
>  
> -DTC_GEN_SRCS = dtc-lexer.lex.c dtc-parser.tab.c
> -DTC_OBJS = $(DTC_SRCS:%.c=%.o) $(DTC_GEN_SRCS:%.c=%.o)
> +DTC_GEN_SRCS = dtc-lexer.lex.c dtc-parser.tab.c dtc-parser.tab.h
> +DTC_OBJS = $(patsubst %.c,%.o,$(DTC_SRCS) $(filter %.c, $(DTC_GEN_SRCS)))

This is wrong though.  The Makefile.* fragments are designed to be
usable from other make systems, when libfdt or whatever is embedded in
other projects.  Therefore, I don't want to change the semantics of
this variable from the present meaning of "generated files which need
to be compiled with a C compiler and linked into the dtc binary".
Instead you should create a new variable to cover other generated
files which you can also use from the make dist target.

With that fixed, you can send this to jdl@jdl.com (dtc maintainer) and
devicetree-discuss@lists.ozlabs.org which is the usual forum for
dtc patches.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

  reply	other threads:[~2011-10-24  2:22 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-18  0:18 [Qemu-devel] [PATCH] PPC: Fail configure when libfdt is not available Alexander Graf
2011-10-18  6:45 ` Paolo Bonzini
2011-10-18 19:26   ` Richard Henderson
2011-10-19  6:09     ` Paolo Bonzini
2011-10-18  8:55 ` Andreas Färber
2011-10-18  9:02   ` Alexander Graf
2011-10-18 18:30     ` Blue Swirl
2011-10-19  2:08       ` Alexander Graf
2011-10-18 11:37   ` [Qemu-devel] [Qemu-ppc] " David Gibson
2011-10-20 18:35     ` Gerd Hoffmann
2011-10-21  3:34       ` David Gibson
2011-10-21  7:11         ` Gerd Hoffmann
2011-10-21  7:34       ` Paolo Bonzini
2011-10-24  2:22         ` David Gibson [this message]
2011-10-18  9:47 ` [Qemu-devel] " Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111024022204.GB4157@truffala.fritz.box \
    --to=david@gibson.dropbear.id.au \
    --cc=kraxel@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).