qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alan Conway <acon...@redhat.com>
Subject Re: better bootstrap and gen/* dependencies
Date Fri, 01 Dec 2006 21:11:03 GMT
Jim I had problems with this - where are $JAVA and $JAVAC supposed to be
set? I've got to go, I'll apply the patch tomorrow unless Gordon beats
me to it.

On Fri, 2006-12-01 at 21:32 +0100, Jim Meyering wrote:
> This changes gives qpid improved dependency tracking: Now, if someone
> modifies one of the gentools/... .java or .tmpl files, the source files
> in gen/ will be regenerated.  But only if java and javac are available
> and this is not a stand-alone qpid-cpp directory.
> 
> Also with this change, you should be able to "svn remove" the
> generated file, gen/gen-src.mk, since the modified bootstrap
> script generates it up front.
> 
> 2006-12-01  Jim Meyering  <meyering@redhat.com>
> 
> 	* configure.ac: Use an automake conditional to indicate when we
> 	have access to files outside of the current hierarchy, and when
> 	we have the tools (java and javac) to build some generated files.
> 	* gen/Makefile.am: Don't use $(abs_srcdir); not needed.
> 	(timestamp): Depend on java sources and C++ template files,
> 	if we're building in a qpid tree.
> 	Use $(JAVA) and $(JAVAC), rather than hard-coding those names.
> 	(gen-src.mk) [$(java_sources), $(cxx_templates)]: New rules to
> 	generate these lists of file names.
> 
> 	* bootstrap: Also generate gen/gen-src.mk.
> 	But do that only if we're in a qpid hierarchy.
> 	Redirect make's stdout to /dev/null.
> 
> Index: configure.ac
> ===================================================================
> --- configure.ac	(revision 481343)
> +++ configure.ac	(working copy)
> @@ -33,6 +33,19 @@
>   esac],
>   [enableval=yes])
> 
> +# Turn on this automake conditional if we are in a qpid
> +# hierarchy (i.e. with gentools/ and specs/ sibling directories),
> +# and if we have working java + javac.
> +build=yes
> +AC_CHECK_PROGS([JAVA],  [java],  [no])
> +AC_CHECK_PROGS([JAVAC], [javac], [no])
> +build=yes
> +test x$JAVA  = xno && build=no
> +test x$JAVAC = xno && build=no
> +test -d $srcdir/../gentools || build=no
> +test -d $srcdir/../specs    || build=no
> +AM_CONDITIONAL([BUILD_IN_MESSAGE_TREE], [test x$build = xyes])
> +
>  # Warnings: Enable as many as possible, keep the code clean. Please
>  # do not disable warnings or remove -Werror without discussing on
>  # qpid-dev list.
> Index: gen/Makefile.am
> ===================================================================
> --- gen/Makefile.am	(revision 481343)
> +++ gen/Makefile.am	(working copy)
> @@ -1,6 +1,3 @@
> -# TODO aconway 2006-11-30: nasty hack, should be done by automake?
> -abs_srcdir = @abs_srcdir@
> -
>  include gen-src.mk
> 
>  BUILT_SOURCES = $(generated_sources)
> @@ -10,21 +7,20 @@
>  EXTRA_DIST = $(BUILT_SOURCES)
>  MAINTAINERCLEANFILES = $(BUILT_SOURCES)
> 
> -gentools_dir = $(abs_srcdir)/../../gentools
> -spec_dir = $(abs_srcdir)/../../specs
> +gentools_dir = $(srcdir)/../../gentools
> +spec_dir = $(srcdir)/../../specs
>  spec = $(spec_dir)/amqp-8.0.xml
> +gentools_srcdir = $(gentools_dir)/src/org/apache/qpid/gentools
> 
> -# FIXME: add dependencies?
> -timestamp: $(spec)
> -	if test -d $(gentools_dir); then			\
> -	  rm -f $(generated_sources);				\
> -	  (cd $(gentools_dir)/src/org/apache/qpid/gentools &&	\
> -	   rm -f *.class && javac *.java);			\
> -	  java -cp $(gentools_dir)/src org.apache.qpid.gentools.Main \
> -	    -c -o . -t $(gentools_dir)/templ.cpp $(spec);	\
> -	else							\
> -	  echo "warning: failed to regenerate gen/*.{cpp,h}" 1>&2;	\
> -	fi
> +timestamp: $(spec) $(java_sources) $(cxx_templates)
> +if BUILD_IN_MESSAGE_TREE
> +	rm -f $(generated_sources)
> +	(cd $(gentools_srcdir) && rm -f *.class && $(JAVAC) *.java);	\
> +	$(JAVA) -cp $(gentools_dir)/src org.apache.qpid.gentools.Main	\
> +	  -c -o . -t $(gentools_dir)/templ.cpp $(spec)
> +else
> +	echo "warning: failed to regenerate gen/*.{cpp,h}" 1>&2
> +endif
>  	touch timestamp
> 
>  EXTRA_DIST += timestamp
> @@ -35,4 +31,14 @@
>  	( echo 'generated_sources = \'					\
>  	  && ls *.cpp *.h | sort -u | sed 's/.*/  & \\/;$$s/ \\//'	\
>  	) > $@-t
> +if BUILD_IN_MESSAGE_TREE
> +	( echo 'java_sources = \'					\
> +	    && find $(gentools_srcdir) -name '*.java'			\
> +		| sort -u | sed 's/.*/  & \\/;$$s/ \\//'		\
> +	) >> $@-t
> +	( echo 'cxx_templates = \'					\
> +	    && find $(gentools_dir)/templ.cpp -name '*.tmpl'		\
> +		| sort -u | sed 's/.*/  & \\/;$$s/ \\//'		\
> +	) >> $@-t
> +endif
>  	mv $@-t $@
> Index: bootstrap
> ===================================================================
> --- bootstrap	(revision 481343)
> +++ bootstrap	(working copy)
> @@ -4,10 +4,19 @@
>  autoheader
>  libtoolize --automake
> 
> +# If we're building in the qpid tree, we can generate
> +# some Makefile snippets:
> +
> +if test -d ../gentools && test -d ../specs; then
> +  (cd gen && rm -f gen-src.mk
> +    perl -ne '/^(abs_srcdir|if|else|endif|include)\b/ or print' Makefile.am \
> +	| make -f - abs_srcdir=`pwd` srcdir=. gen-src.mk > /dev/null )
> +fi
> +
>  # Generate (for automake) lots of repetitive parts of tests/Makefile.am.
>  (cd tests && rm -f gen.mk
>    perl -ne '/^include / or print' Makefile.am \
> -      | make -f - abs_srcdir=`dirname $(pwd)` gen.mk )
> +      | make -f - abs_srcdir=`dirname $(pwd)` gen.mk > /dev/null )
> 
>  automake
>  autoconf


Mime
View raw message