From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26977 invoked by alias); 15 Apr 2012 16:49:52 -0000 Received: (qmail 26967 invoked by uid 22791); 15 Apr 2012 16:49:49 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,KAM_MX3,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,SPF_HELO_PASS,TW_AV,TW_BJ,TW_DF,T_RP_MATCHES_RCVD,URIBL_BLACK X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 15 Apr 2012 16:49:30 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q3FGnQRv023724 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sun, 15 Apr 2012 12:49:26 -0400 Received: from host2.jankratochvil.net (ovpn-116-17.ams2.redhat.com [10.36.116.17]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q3FGnIur024646 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Sun, 15 Apr 2012 12:49:21 -0400 Date: Sun, 15 Apr 2012 19:42:00 -0000 From: Jan Kratochvil To: Yao Qi Cc: gdb-patches@sourceware.org, Pedro Alves Subject: [patch] Fix in-src-tree builds by gdbserver/gnulib/ copy [Re: [PATCH] Link gnulib in gdbserver.] Message-ID: <20120415164917.GA2861@host2.jankratochvil.net> References: <1334127046-27627-1-git-send-email-yao@codesourcery.com> <20120413212559.GA5867@host2.jankratochvil.net> <4F88F188.1050401@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F88F188.1050401@codesourcery.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-04/txt/msg00395.txt.bz2 On Sat, 14 Apr 2012 05:39:52 +0200, Yao Qi wrote: > On 04/14/2012 05:25 AM, Jan Kratochvil wrote: This broke in-src-tree build: [...] > > gcc: error: gnulib/libgnu.a: No such file or directory > > make[4]: *** [gdbserver] Error 1 > > make[4]: Leaving directory `/home/jkratoch/redhat/gdb-clean/gdb/gdbserver' > > It is wired. I don't see such failure in in-source-tree (CVS trunk) build. I do, on {x86_64,i686}-fedora{15,16,17,rawhide}-linux-gnu, not sure why it is not reproducible for you - I also see it logical why it fails - using VPATH make finds gnulib/libgnu.a in the gnulib source directory (gdb/gnulib/) and therefore it does not rebuild libgnu.a in gdbserver/gnulib/ . I also tried to force some phony dependency for libgnu.a in gdbserver/gnulib/ to force its rebuild there but it had other disadvantages. Also one could not do make -C gdb/gdbserver/gnulib as the command-line variables overrides would not apply, as was stated here. * Using libgnu.a from gdb/gnulib/ for gdbserver is not good as they may have different compilation options, also gdb/ may not be compilable for that host etc. * Copyting gdb/gnulib/ into gdbserver/gnulib/ in the CVS repository itself would be possible but it would be just too much work to maintain etc. AFAIK the GNU tools do not provide good enough support for the exact problem here, therefore for building in-source-tree and having another build directory of the source directory already containing pre-build binaries. Therefore proposing to: * Have single copy gdb/gnulib/ in CVS repository. * Have two copies in the .tar distribution, it does not cost much: 225280 uncompressed 40970 gzip 32676 xz * For direct build from repository in-source-tree do a clean binaries-less copy from gdb/gnulib/ into gdbserver/gnulib/ . * For direct build from repository out-of-source-tree do a clean binaries-less copy from srcdir-gdb/gnulib/ into objdir-gdbserver/gnulib/ patching there @*srcdir*@ variables so that it does not try to access srcdir-gdbserver/gnulib/ which does not exist and where we must not write anything. Tested the combinations by the script below. As the gnulib/*.h files are not yet in use in gdbserver/ it may not be well tested but I hope GNULIB_INCLUDE_CFLAGS is right there. OK to check it in? Thanks, Jan ------------------------------------------------------------------------------ set -ex make -j1 -f src-release gdb.tar cd .. rm -rf gdb-test-rel?* mkdir gdb-test-rel-treeout cd gdb-test-rel-treeout tar xf ../gdb-test-rel/gdb-7.4.50.20120414-cvs.tar;mv gdb-7.4.50.20120414-cvs/* .;rmdir gdb-7.4.50.20120414-cvs/ cd .. mkdir gdb-test-rel-treein cd gdb-test-rel-treein tar xf ../gdb-test-rel/gdb-7.4.50.20120414-cvs.tar;mv gdb-7.4.50.20120414-cvs/* .;rmdir gdb-7.4.50.20120414-cvs/ cd .. cd gdb-test-rel git clean -dfx git status cd .. cp -a gdb-test-rel gdb-test-rel-out mkdir gdb-test-rel-out-build cd gdb-test-rel-out-build CFLAGS=-s ../gdb-test-rel-out/configure;make -j1 2>&1|tee log cd .. cp -a gdb-test-rel gdb-test-rel-in cd gdb-test-rel-in CFLAGS=-s ./configure;make -j1 2>&1|tee log cd .. mkdir gdb-test-rel-treeout-build cd gdb-test-rel-treeout-build CFLAGS=-s ../gdb-test-rel-treeout/configure;make -j1 2>&1|tee log cd .. cd gdb-test-rel-treein/ CFLAGS=-s ./configure;make -j1 2>&1|tee log cd .. echo OK ------------------------------------------------------------------------------ gdb/ 2012-04-15 Jan Kratochvil Fix builds in source tree. * Makefile.in (diststuff): Recurse also into gdbserver. gdb/gdbserver/ 2012-04-15 Jan Kratochvil Fix builds in source tree. * Makefile.in (top_srcdir): New. (GNULIB_INCLUDE_DIR): Change to ... (GNULIB_INCLUDE_CFLAGS): ... here, include also local gnulib. (GNULIB_FLAGS_TO_PASS): Remove. (DISTSTUFF): New. (all, install-only, uninstall, clean-info with others, all-lib, clean) (distclean with others): Remove $(GNULIB_FLAGS_TO_PASS). (diststuff, gnulib, gnulib-copy): New. * configure: Regenerate. * configure.ac: Test for gnulib/Makefile.in and create $GNULIB_SRC. Call AC_CHECK_TOOL for AR. (AC_OUTPUT) : Use $GNULIB_SRC. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index b8b7109..5fb8418 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1249,6 +1249,7 @@ do-maintainer-clean: diststuff: $(DISTSTUFF) $(PACKAGE).pot $(CATALOGS) cd doc; $(MAKE) $(MFLAGS) diststuff + cd gdbserver; $(MAKE) $(MFLAGS) diststuff subdir_do: force @for i in $(DODIRS); do \ diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 6225e65..33219da 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -54,6 +54,7 @@ CC = @CC@ # Directory containing source files. Don't clean up the spacing, # this exact string is matched for by the "configure" script. srcdir = @srcdir@ +top_srcdir = @top_srcdir@ abs_top_srcdir=@abs_top_srcdir@ abs_srcdir=@abs_srcdir@ VPATH = @srcdir@ @@ -75,18 +76,10 @@ INCLUDE_DEP = $$(INCLUDE_DIR) ustlibs = @ustlibs@ ustinc = @ustinc@ -# gnulib -GNULIB_INCLUDE_DIR = $(srcdir)/../gnulib +# gnulib; see gnulib-copy as it may be placed both in srcdir or objdir. +GNULIB_INCLUDE_CFLAGS = -Ignulib -I$(srcdir)/../gnulib GNULIB_LIB = gnulib/libgnu.a -# We build gnulib directly under the gdbserver build directory, but -# its sources don't live directly under gdbserver's source directory. -# Tweak $srcdir and VPATH to make that work. -GNULIB_FLAGS_TO_PASS = \ - "top_srcdir=$(abs_top_srcdir)/.." \ - "srcdir=$(abs_srcdir)/../gnulib" \ - "VPATH=$(abs_top_srcdir)/../gnulib:$(abs_top_srcdir)" - # Generated headers in the gnulib directory. These must be listed # so that they are generated before other files are compiled. GNULIB_H = gnulib/string.h @GNULIB_STDINT_H@ @@ -97,7 +90,7 @@ GNULIB_H = gnulib/string.h @GNULIB_STDINT_H@ # -I$(srcdir)/../regformats for regdef.h. INCLUDE_CFLAGS = -I. -I${srcdir} -I$(srcdir)/../common \ -I$(srcdir)/../regformats -I$(INCLUDE_DIR) \ - -I$(GNULIB_INCLUDE_DIR) + $(GNULIB_INCLUDE_CFLAGS) # M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS # from the config/ directory. @@ -122,6 +115,9 @@ INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) LDFLAGS = @LDFLAGS@ INTERNAL_LDFLAGS = $(LDFLAGS) @RDYNAMIC@ +# Things which need to be built when making a distribution. +DISTSTUFF = gnulib + # All source files that go into linking GDB remote server. SFILES= $(srcdir)/gdbreplay.c $(srcdir)/inferiors.c $(srcdir)/dll.c \ @@ -212,7 +208,7 @@ FLAGS_TO_PASS = \ ${CC} -c ${INTERNAL_CFLAGS} $< all: gdbserver$(EXEEXT) gdbreplay$(EXEEXT) $(extra_libraries) - @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) $(GNULIB_FLAGS_TO_PASS) all + @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) all # Traditionally "install" depends on "all". But it may be useful # not to; for example, if the user has made some trivial change to a @@ -233,13 +229,13 @@ install-only: $(INSTALL_PROGRAM) gdbserver$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT); \ $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(man1dir); \ $(INSTALL_DATA) $(srcdir)/gdbserver.1 $(DESTDIR)$(man1dir)/$$n.1 - @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) $(GNULIB_FLAGS_TO_PASS) install + @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) install uninstall: force n=`echo gdbserver | sed '$(program_transform_name)'`; \ if [ x$$n = x ]; then n=gdbserver; else true; fi; \ rm -f $(DESTDIR)/$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(man1dir)/$$n.1 - @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) $(GNULIB_FLAGS_TO_PASS) uninstall + @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) uninstall installcheck: check: @@ -249,7 +245,7 @@ install-pdf: html: install-html: clean-info: force - @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) $(GNULIB_FLAGS_TO_PASS) $@ + @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) $@ gdbserver$(EXEEXT): $(OBS) ${ADD_DEPS} ${CDEPS} $(GNULIB_LIB) rm -f gdbserver$(EXEEXT) @@ -258,7 +254,7 @@ gdbserver$(EXEEXT): $(OBS) ${ADD_DEPS} ${CDEPS} $(GNULIB_LIB) $(GNULIB_LIB) $(GNULIB_H): all-lib all-lib: gnulib/Makefile - @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) $(GNULIB_FLAGS_TO_PASS) all + @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) all .PHONY: all-lib @@ -316,13 +312,39 @@ clean: rm -f i386-mmx.c i386-mmx-linux.c rm -f x32.c x32-linux.c rm -f x32-avx.c x32-avx-linux.c - @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) $(GNULIB_FLAGS_TO_PASS) clean + @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) clean maintainer-clean realclean distclean: clean rm -f nm.h tm.h xm.h config.h stamp-h config.log - @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) $(GNULIB_FLAGS_TO_PASS) $@ + @cd gnulib; $(MAKE) $(FLAGS_TO_PASS) $@ rm -f Makefile config.status +diststuff: $(DISTSTUFF) + +# gnulib is normally included in distributed tar. If we build from repository +# and outside of the source tree put the gdbserver/gnulib copy into objdir. + +.PHONY: gnulib +gnulib: + rm -rf gnulib.new + $(MAKE) -C ../gnulib distdir=../gdbserver/gnulib.new distdir + for src in `find gnulib.new -type d` ; do \ + dst=`echo $$src | sed 's/gnulib\.new/gnulib/'`; \ + mkdir -p $$dst; \ + done + for src in `find gnulib.new -type f` ; do \ + dst=`echo $$src | sed 's/gnulib\.new/gnulib/'`; \ + rm -f $$dst; \ + cp $$src $$dst; \ + done + sed -e "s&\(@\)srcdir@&.&" \ + -e "s&\(@\)top_srcdir@&..&" \ + -e "s&\(@\)abs_srcdir@&$$PWD/gnulib&" \ + -e "s&\(@\)abs_top_srcdir@&$$PWD&" \ + < gnulib.new/Makefile.in > gnulib/Makefile.in + rm -rf gnulib.new + $(SHELL) ./config.status gnulib/Makefile + config.h: stamp-h ; @true stamp-h: config.in config.status CONFIG_FILES="" CONFIG_HEADERS=config.h:config.in $(SHELL) ./config.status diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index 2ff44ce..eca6532 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -597,6 +597,7 @@ gltests_LIBOBJS gl_LTLIBOBJS gl_LIBOBJS LTLIBOBJS +AR GNULIB_STDINT_H am__fastdepCC_FALSE am__fastdepCC_TRUE @@ -9981,7 +9982,109 @@ if test x"$STDINT_H" != x; then fi -ac_config_files="$ac_config_files Makefile gnulib/Makefile:${srcdir}/../gnulib/Makefile.in" +# gnulib is normally included in distributed tar. If we build from repository +# and outside of the source tree put the gdbserver/gnulib copy into objdir. +if ! test -e ${srcdir}/gnulib/Makefile.in ; then + GNULIB_SRC=:${srcdir}/../gnulib/Makefile.in + ac_config_commands="$ac_config_commands gnulib" + +else + GNULIB_SRC= +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + +ac_config_files="$ac_config_files Makefile gnulib/Makefile$GNULIB_SRC" ac_config_commands="$ac_config_commands default" @@ -10733,8 +10836,9 @@ do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "gnulib") CONFIG_COMMANDS="$CONFIG_COMMANDS gnulib" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "gnulib/Makefile") CONFIG_FILES="$CONFIG_FILES gnulib/Makefile:${srcdir}/../gnulib/Makefile.in" ;; + "gnulib/Makefile$GNULIB_SRC") CONFIG_FILES="$CONFIG_FILES gnulib/Makefile$GNULIB_SRC" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; @@ -11415,6 +11519,7 @@ $as_echo X"$file" | done } ;; + "gnulib":C) make gnulib ;; "default":C) case x$CONFIG_HEADERS in xconfig.h:config.in) echo > stamp-h ;; diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac index ac8223a..33e82a5 100644 --- a/gdb/gdbserver/configure.ac +++ b/gdb/gdbserver/configure.ac @@ -450,7 +450,17 @@ if test x"$STDINT_H" != x; then fi AC_SUBST(GNULIB_STDINT_H) -AC_OUTPUT(Makefile gnulib/Makefile:${srcdir}/../gnulib/Makefile.in, +# gnulib is normally included in distributed tar. If we build from repository +# and outside of the source tree put the gdbserver/gnulib copy into objdir. +if ! test -e ${srcdir}/gnulib/Makefile.in ; then + GNULIB_SRC=:${srcdir}/../gnulib/Makefile.in + AC_CONFIG_COMMANDS([gnulib], [make gnulib]) +else + GNULIB_SRC= +fi +AC_CHECK_TOOL(AR, ar) + +AC_OUTPUT(Makefile gnulib/Makefile$GNULIB_SRC, [case x$CONFIG_HEADERS in xconfig.h:config.in) echo > stamp-h ;;