libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FYI: allow running libtool tests at configure time [libtool--gary--1


From: Ralf Wildenhues
Subject: Re: FYI: allow running libtool tests at configure time [libtool--gary--1.0--patch-26]
Date: Fri, 13 May 2005 15:47:32 +0200
User-agent: Mutt/1.4.1i

Hi Gary,

* Gary V. Vaughan wrote on Mon, May 02, 2005 at 09:56:23PM CEST:
> Ralf Wildenhues wrote:
> > * Gary V. Vaughan wrote on Sat, Apr 30, 2005 at 04:06:19PM CEST:
> >
> >>This may not apply cleanly to HEAD, as I developed it on my own branch
> >>which still has the pending standalone libtool patch awaiting.

> > I promise to test it after I get back.
> > Slight nits from reading are below.
> 
> Okay, thanks!  We also need -patch-23, and your forward ports from
> branch-1-5 before we are good to roll the next 2.0 alpha...

Here is my review for that patch.  I believe it is ok after the nits are
addressed.

Depending on how the other big patch is backported to branch-2-0, this
one might need a couple of modifications, though, I believe.

Also we need to use
 : ${ACLOCAL-aclocal}
and stuff in the test suite, as well as make installcheck use the
installed libtoolize.  Both is orthogonal to your patch, though,
so we might as well do that later.

Regards,
Ralf

>   Index: Changelog
>   from  Gary V. Vaughan  <address@hidden>
> 
>       * tests/early-libtool.at: Forgot to add this file.
>       * libltdl/m4/libtool.m4 (CONFIG_LT): Shell quoted.
>       (LT_OUTPUT): tabified.
> 
>       * libltdl/m4/libtool.m4 (LT_OUTPUT): New macro to generate libtool
>       before config.status.
>       (_LT_CONFIG_COMMANDS): If LT_OUTPUT has been invoked, then
>       generate code in config.status to call config.lt instead of
>       generating libtool directly.
>       * tests/early-libtool.at: New test.
>       * Makefile.am (TESTSUITE_AT): Add tests/early-libtool.at.
>       * doc/libtool.texi (LT_INIT): Document LT_OUTPUT.
> 
> --- orig/doc/libtool.texi
> +++ mod/doc/libtool.texi

*snip*

> --- orig/libltdl/m4/libtool.m4
> +++ mod/libltdl/m4/libtool.m4
> @@ -189,8 +189,7 @@
>  RM="rm -f"
> 
>  # Global variables:
> -default_ofile=libtool
> -ofile="$default_ofile"
> +ofile=libtool
>  can_build_shared=yes
> 
>  # All known linkers require a `.a' archive for static linking (except M$VC,
> @@ -461,7 +460,23 @@
>  # for loops in `config.status'.  Finally, any additional code accumulated
>  # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
>  m4_defun([_LT_CONFIG_COMMANDS],
> -[AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [
> +[AC_PROVIDE_IFELSE([LT_OUTPUT],
> +     dnl If the libtool generation code has been placed in $CONFIG_LT,
> +     dnl instead of duplicating it all over again into config.status,
> +     dnl then we will have config.status run $CONFIG_LT later, so it
> +     dnl needs to know what name is stored there:
> +        [AC_CONFIG_COMMANDS([libtool],
> +            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
> +    dnl If the libtool generation code is destined for config.status,
> +    dnl expand the accumulated commands and init code now:
> +    [AC_CONFIG_COMMANDS([libtool],
> +        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
> +])#_LT_CONFIG_COMMANDS
> +
> +
> +# Initialize.
> +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
> +[
> 
>  # The HP-UX ksh and POSIX shell print the target directory to stdout
>  # if CDPATH is set.
> @@ -508,11 +523,124 @@
> 
>  _LT_OUTPUT_LIBTOOL_INIT
>  ])
> -])#_LT_CONFIG_COMMANDS
> +
> +
> +# LT_OUTPUT
> +# ---------
> +# This macro allows early generation of the libtool script (before
> +# AC_OUTPUT is called), incase it is used in configure for compilation
> +# tests.
> +AC_DEFUN([LT_OUTPUT],
> +[dnl This macro can only work once all the language testing is completed
> +AC_BEFORE([LT_INIT], [LT_OUTPUT])
> +AC_BEFORE([LT_LANG], [LT_OUTPUT])
> +
> +: ${CONFIG_LT=./config.lt}
> +AC_MSG_NOTICE([creating $CONFIG_LT])
> +cat >"$CONFIG_LT" <<_LTEOF
> +#! $SHELL
> +# Generated by $as_me.
> +# Run this file to recreate a libtool stub with the current configuration.
> +
> +lt_cl_silent=false
> +SHELL=\${CONFIG_SHELL-$SHELL}
> +_LTEOF
> +
> +cat >>"$CONFIG_LT" <<\_LTEOF
> +AS_SHELL_SANITIZE
> +_AS_PREPARE
> +
> +exec AS_MESSAGE_FD>&1
> +exec AS_MESSAGE_LOG_FD>>config.log
> +{
> +  echo
> +  AS_BOX([Running $as_me.])
> +} >&AS_MESSAGE_LOG_FD
> +_LTEOF

Why not merge these two cat commands?

> +cat >>"$CONFIG_LT" <<\_LTEOF
> +
> +lt_cl_usage="\
> +\`$as_me' creates a local libtool stub from the current configuration,
> +for use in further configure time tests before the real libtool is
> +generated.
> +
> +Usage: $[0] [[OPTIONS]]
> +
> +  -h, --help      print this help, then exit

--help prints empty output.

> +  -V, --version   print version number, then exit
> +  -q, --quiet     do not print progress messages
> +  -d, --debug     don't remove temporary files
> +
> +Report bugs to <address@hidden>."
> +
> +lt_cl_version="\
> +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
> +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
> +configured by $[0], generated by m4_PACKAGE_STRING.
> +
> +Copyright (C) 2005 Free Software Foundation, Inc.
> +This config.lt script is free software; the Free Software Foundation
> +gives unlimited permision to copy, distribute and modify it."
> +
> +_LTEOF

Ditto.

> +cat >>"$CONFIG_LT" <<\_LTEOF
> +while test $[#] != 0
> +do
> +  case $[1] in
> +    --version | --v* | -V )
> +      echo "$lt_cl_version"; exit 0 ;;
> +    --help | --h* | -h )
> +      echo "$lt_cl_help"; exit 0 ;;
> +    --debug | --d* | -d )
> +      debug=: ;;
> +    --quiet | --q* | --silent | --s* | -q )
> +      lt_cl_silent=: ;;
> +
> +    -*) AC_MSG_ERROR([unrecognized option: $[1]
> +Try `$[0] --help' for more information.]) ;;
> +
> +    *) AC_MSG_ERROR([unrecognised argument: $[1]
> +Try `$[0] --help for more information.]) ;;
> +  esac
> +  shift
> +done
> +
> +if $lt_cl_silent; then
> +  exec AS_MESSAGE_FD>/dev/null
> +fi
> +_LTEOF
> +
> +cat >>"$CONFIG_LT" <<_LTEOF
> +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
> +_LTEOF
> +
> +cat >>"$CONFIG_LT" <<\_LTEOF
> +AC_MSG_NOTICE([creating $ofile])
> +_LT_OUTPUT_LIBTOOL_COMMANDS
> +AS_EXIT(0)
> +_LTEOF
> +chmod +x "$CONFIG_LT"
> +
> +# configure is writing to config.log, but config.lt does its own redirection,
> +# appending to config.log, which fails on DOS, as config.log is still kept
> +# open by configure.  Here we exec the FD to /dev/null, effectively closing
> +# config.log, so it can be properly (re)opened and appended to by config.lt.
> +if test "$no_create" != yes; then
> +  lt_cl_success=:
> +  test "$silent" = yes &&
> +    lt_config_lt_args="$lt_config_lt_args --quiet"
> +  exec AS_MESSAGE_LOG_FD>/dev/null
> +  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
> +  exec AS_MESSAGE_LOG_FD>>config.log
> +  $lt_cl_success || AS_EXIT(1)
> +fi
> +])# LT_OUTPUT
> 
> 
>  # _LT_CONFIG(TAG)
> -# ----------------------------
> +# ---------------
>  # If TAG is the built-in tag, create an initial libtool script with a
>  # default configuration from the untagged config vars.  Otherwise add code
>  # to config.status for appending the configuration named by TAG from the
> @@ -535,7 +663,7 @@
>  #! $SHELL
> 
>  # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building 
> support services.
> -# Generated automatically by config.status (GNU $PACKAGE$TIMESTAMP) $VERSION
> +# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION
>  # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 
> 1q`:
>  # NOTE: Changes made to this file will be lost: look at ltmain.sh.
>  #

The next two hunks are bogus (null changes) and caused a needless
conflict.

> @@ -1204,7 +1332,7 @@
>      # nice to cause kernel panics so lets avoid the loop below.
>      # First set a reasonable default.
>      lt_cv_sys_max_cmd_len=16384
> -    #
> +    #
>      if test -x /sbin/sysconfig; then
>        case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
>          *1*) lt_cv_sys_max_cmd_len=-1 ;;
> @@ -3616,7 +3744,7 @@
>    if test "$with_gnu_ld" = yes; then
>      # If archive_cmds runs LD, not CC, wlarc should be empty
>      wlarc='${wl}'
> -
> +
>      # Set some defaults for GNU ld with shared library support. These
>      # are reset later if shared libraries are not supported. Putting them
>      # here allows them to be overridden if necessary.
> --- orig/Makefile.am
> +++ mod/Makefile.am
> @@ -443,13 +443,14 @@
>  TESTSUITE    = tests/testsuite
>  TESTSUITE_AT = tests/testsuite.at \
>                 tests/am-subdir.at \
> +               tests/convenience.at \
>                 tests/duplicate_members.at \
> +               tests/early-libtool.at \
>                 tests/inherited_flags.at \
>                 tests/libtoolize.at \
> +               tests/link-order.at \
>                 tests/standalone.at \
>                 tests/stresstest.at \
> -               tests/link-order.at \
> -               tests/convenience.at \
>                 tests/template.at
> 
>  EXTRA_DIST     += $(TESTSUITE) $(TESTSUITE_AT) tests/package.m4
> --- orig/tests/testsuite.at
> +++ mod/tests/testsuite.at
> @@ -99,5 +99,7 @@
>  m4_include([am-subdir.at])
>  # C++ templates tests
>  m4_include([template.at])
> +# Behaviour of LT_OUTPUT
> +m4_include([early-libtool.at])
>  # stress test
>  m4_include([stresstest.at])

If you did not add this by hand: patch strip prefix depth is different
here than above.

> --- /dev/null 2005-05-02 20:50:19.000000000 +0100
> +++ tests/early-libtool.at    2005-05-02 20:45:06.000000000 +0100
> @@ -0,0 +1,213 @@
> +# Hand crafted tests for GNU Libtool.                         -*- Autotest 
> -*-
> +# Copyright 2005 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 2, or (at your option)
> +# any later version.
> +
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> +# 02110-1301, USA.
> +
> +
> +AT_BANNER([libtool script generation.])
> +
> +
> +## --------------------------------------------- ##
> +## Building libtool normally from config.status. ##
> +## --------------------------------------------- ##
> +
> +AT_SETUP([config.status])
> +
> +AT_DATA([configure.ac],
> +[[AC_INIT([libtool-demo], ]]AT_PACKAGE_VERSION[[, ]]AT_PACKAGE_BUGREPORT[[)
> +AC_CONFIG_MACRO_DIR([m4])
> +AM_INIT_AUTOMAKE
> +LT_INIT
> +AC_CONFIG_FILES([Makefile])
> +AC_OUTPUT
> +]])
> +
> +AT_DATA([Makefile.in],
> +[[prefix = @prefix@
> +libdir = @libdir@
> +top_builddir = .
> +DEFAULT_INCLUDES = -I. address@hidden@
> +EXEEXT = @EXEEXT@
> +LIBTOOL = @LIBTOOL@
> +
> +COMPILE = $(CC) $(DEFAULT_INCLUDES)
> +LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFAULT_INCLUDES)
> +LINK = $(LIBTOOL) --mode=link --tag=CC $(CC) -o $@
> +
> +all: hell
> +
> +libhello.la: hello.lo
> +     $(LINK) -rpath $(libdir) hello.lo
> +hell$(EXEEXT): main.o libhello.la
> +     $(LINK) main.o libhello.la
> +
> +.SUFFIXES:
> +.SUFFIXES: .c .o .lo
> +
> +.c.o:
> +     $(COMPILE) -c -o $@ $<
> +.c.lo:
> +     $(LTCOMPILE) -c -o $@ $<
> +]])
> +
> +AT_DATA([hello.c],
> +[[#include <stdio.h>
> +
> +void
> +hello (void)
> +{
> +  printf ("** This is not GNU Hello.  There is no built-in mail reader. 
> **\n");
> +}
> +]])
> +
> +AT_DATA([main.c],
> +[[#include <stdio.h>
> +
> +extern void hello (void);
> +
> +int
> +main (int argc, char *argv[])
> +{
> +  printf ("Welcome to GNU Hell!\n");
> +
> +  hello ();
> +
> +  return 0;
> +}
> +]])
> +
> +AT_DATA(expout,
> +[[Welcome to GNU Hell!
> +** This is not GNU Hello.  There is no built-in mail reader. **
> +]])
> +
> +cat > missing <<_EOF
> +#! /bin/sh
> +exit 0
> +_EOF
> +chmod a+x missing
> +
> +test -f ltmain.sh  || LT_AT_LIBTOOLIZE([--copy --verbose --install])
> +test -f aclocal.m4 || aclocal -I m4              || exit 1
> +test -f configure  || autoconf --force           || exit 1
> +test -f Makefile   || ./configure                || exit 1
> +${MAKE-make}
> +
> +LT_AT_EXEC_CHECK([./hell], [0], [expout])
> +
> +AT_CLEANUP
> +
> +
> +## ------------------------------------------ ##
> +## Building and using libtool from config.lt. ##
> +## ------------------------------------------ ##
> +
> +AT_SETUP([config.lt])
> +
> +AT_DATA([configure.ac],
> +[[AC_INIT([libtool-demo], ]]AT_PACKAGE_VERSION[[, ]]AT_PACKAGE_BUGREPORT[[)
> +AC_CONFIG_MACRO_DIR([m4])
> +AM_INIT_AUTOMAKE
> +LT_INIT
> +LT_OUTPUT
> +
> +cat >hello.c <<\_LTEOF
> +#include <stdio.h>
> +
> +void
> +hello (void)
> +{
> +  printf ("** This is not GNU Hello.  There is no built-in mail reader. 
> **\n");
> +}
> +_LTEOF
> +
> +# Prove that we can run libtool from inside configure:
> +$SHELL ./libtool --mode=compile --tag=CC "$CC" -I. -I$srcdir \
> +    -c -o hello.lo hello.c  || exit 1
> +$SHELL ./libtool --mode=link --tag=CC "$CC" -o libhello.la \
> +    -rpath "$prefix/lib" hello.lo || exit 1

Not good.  $prefix is `NONE' at this time, over here.  Better use
/nonexistent or such.  Another bug: the test still reports success.
Wonder who is wrong here.

> +
> +AC_CONFIG_FILES([Makefile])
> +AC_OUTPUT
> +]])
> +
> +AT_DATA([Makefile.in],
> +[[prefix = @prefix@
> +libdir = @libdir@
> +top_builddir = .
> +DEFAULT_INCLUDES = -I. address@hidden@
> +EXEEXT = @EXEEXT@
> +LIBTOOL = @LIBTOOL@
> +
> +COMPILE = $(CC) $(DEFAULT_INCLUDES)
> +LINK = $(LIBTOOL) --mode=link --tag=CC $(CC) -o $@
> +
> +hell$(EXEEXT): main.o libhello.la
> +     $(LINK) main.o libhello.la
> +
> +.SUFFIXES:
> +.SUFFIXES: .c .o
> +
> +.c.o:
> +     $(COMPILE) -c -o $@ $<
> +]])
> +
> +AT_DATA([hello.c],
> +[[#include <stdio.h>
> +
> +void
> +hello (void)
> +{
> +  printf ("** This is not GNU Hello.  There is no built-in mail reader. 
> **\n");
> +}
> +]])
> +
> +AT_DATA([main.c],
> +[[#include <stdio.h>
> +
> +extern void hello (void);
> +
> +int
> +main (int argc, char *argv[])
> +{
> +  printf ("Welcome to GNU Hell!\n");
> +
> +  hello ();
> +
> +  return 0;
> +}
> +]])
> +
> +AT_DATA(expout,
> +[[Welcome to GNU Hell!
> +** This is not GNU Hello.  There is no built-in mail reader. **
> +]])
> +
> +cat > missing <<_EOF
> +#! /bin/sh
> +exit 0
> +_EOF
> +chmod a+x missing
> +
> +test -f ltmain.sh  || LT_AT_LIBTOOLIZE([--copy --verbose --install])
> +test -f aclocal.m4 || aclocal -I m4              || exit 1
> +test -f configure  || autoconf --force           || exit 1
> +test -f Makefile   || ./configure                || exit 1
> +${MAKE-make}
> +
> +LT_AT_EXEC_CHECK([./hell], [0], [expout])
> +
> +AT_CLEANUP




reply via email to

[Prev in Thread] Current Thread [Next in Thread]