Edit

kc3-lang/automake/TODO

Branch :

  • Show log

    Commit

  • Author : Alexandre Duret-Lutz
    Date : 2002-07-06 10:21:36
    Hash : c037f202
    Message : * lib/Automake/Channels.pm: New file. * lib/Automake/Makefile.am (dist_perllib_DATA): Add Channels.pm. * automake.in: Use Automake::Channels and register some channels for errors and warnings. ($exit_status): Remove, replaced by Channels::$exit_code. (%required_variables): Remove, Channels will filter-out duplicates itself. (initialize_per_input): Call reset_local_duplicates. (prog_error): Adjust to all `msg'. (setup_warnings): New functions. (parse_arguments): Accept -W CATEGORY and --warnings=CATEGORY, call setup_warnings. (usage): Update usage text accordingly. (macro_dump, macros_dump): Return the dump as a string instead of printing it. (am_install_var) <$warned_about_extra>: Remove, Channels will filter-out duplicates itself. (set_strictness): Turn on/off channels for each stricness. (err, fatal, err_var, err_target, err_am, err_ac, msg_var, msg_target, msg_am, msg_ac, reject_var, reject_target, verb): New functions, to replace ... (print_error, am_error, file_error, macro_error, target_error, conf_error, file_warning): ... these functions. Remove them. Update all the code to use the new functions. The rough correspondance is am_error -> err_am file_error -> err macro_error -> err_var target_error -> err_target conf_error -> err_ac die -> fatal macro_error if defined -> reject_var target_error if defined -> reject_target verbose -> verb * automake.texi (Invoking Automake): Document -W and --warnings. Remove the documentation for --Werror and --Wno-error. * tests/defs: Use -Werror, no --Werror. * tests/exeext2.test: Test that the error message is enabled with -Wobsolete. * tests/output5.test: Rewrite to test that Automake complains when there is no Makefile specified. (The original test was succeeding for the wrong reason.) * tests/seenc.test: Don't use --Wno-error, there is no reason now that -Werror doesn't stop after the first error. * tests/subobj.test: Use --add-missing, and check that `compile' is installed and that Automake says so. * tests/subobj2.test: Don't create `compile'.

  • TODO
  • we can't seem to AC_SUBST(pkgdatadir)
    the version from header-vars overrides
    why is that?
    
    check should depend on all
      from ben elliston
    
    the new YFLAGS code doesn't correctly handle srcdir
    
    allow foo_NAME to rename an object (library or program)
    at build/install time
    
    remove _LTLIBRARIES and just use _LIBRARIES
    then use this for zip/jar as well
    
    for 1.5
    investigate problems with conditionally defined libraries
    
    add an error if the user makefile.am violates our
       namespace rules
    
    we need a document describing automake from the end user's point of view
    eg describe INSTALL_HEADER there, among other things
    
    * maintainer-clean
    
    Akim:
    > @@ -31,5 +31,9 @@
    >  DISTCLEAN	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
    >
    >  maintainer-clean-generic:
    > +## FIXME: shouldn't we really print these messages before running
    > +## the dependencies?
    > +	@echo "This command is intended for maintainers to use"
    > +	@echo "it deletes files that may require special tools to rebuild."
    > 	  -rm -f Makefile.in
    
    Tom:
    > I'd like to eventually fix the FIXME comment by having
    > maintainer-clean look like:
    >
    >     maintainer-clean:
    > 	  @echo ...
    > 	  $(MAKE) whatever
    >
    > We're left with the question of whether we should repeat them in every
    > subdir.
    
    *
    Alexandre Oliva:
    > Hmm...  Interesting.  It must have been a side effect of the enabling
    > of forced `relink' on GNU/Linux/x86.  Anyway, on platforms that
    > actually require relinking, this problem remains, and I see no way to
    > overcome it other than arranging for automake to install libraries
    > before executables, as you suggest.  This shouldn't be a big problem,
    > anyway.
    >
    > A bigger problem could show up if two libraries in the same directory,
    > one dependent on the other, are installed concurrently.  If relinking
    > is needed for the dependent library, we have a problem.  It appears to
    > me that user will have to live without `make -j install', in this
    > case.
    
    Alex Hornby
    > Here's an Automake patch and changelog entry allow make -j install on
    > such degenerate systems (and Linux with buggy libtool <g>)
    >
    > If you install to locations other that bin_ and lib_ then a larger fix
    > is necessary, but this should fix the 90% case.
    
    * think about how per-object flags should work.  in particular:
      * how should they be specified?
        using the object name is confusing when .lo/.obj in use
        however, the object name provides a nice interaction with
        per-exe flags
      * how should they interact with per-executable flags?
      [ this is probably a feature in search of a problem ]
    
    * cross-compilation support:
      programs built and used by the build process need to be
      built for CC_FOR_BUILD
      introduce a new prefxi for this, e.g. `build_PROGRAMS'
      [ we can do this in an automatic way I think.
        unfortunately it isn't that useful until autoconf has support
        for this sort of thing as well ]
    
    * distcheck should make sure that each file that uses _() is
      listed in POTFILES.in
      From Jim Meyering:
        # Verify that all source files using _() are listed in po/POTFILES.in.
        po-check:
    	    grep -E -v '^(#|$$)' po/POTFILES.in | sort > $@-1
    	    grep -E -l '\b_\(' lib/*.c src/*.c | sort > $@-2
    	    diff -u $@-1 $@-2
    	    rm -f $@-1 $@-2
    
    * one performance enhancement would be to have autoconf write
      a single file containing all the macro assignments.
      then read this file via `include'
      unfortunately this can't be done because of conditionals
      -- but it could be made to work if we also changed:
        * automake to rewrite @FOO@ to $(FOO), and
        * the implementation of conditionals to rely on some new
          config.status magic
    
    * support prog_LIBS as override for LIBS
    
    * Test subdir-objects option with yacc, lex, ansi2knr
      Our locking scheme won't prevent a parallel make from losing
      if there are two `bar.o' files and the timing is just right
      This only happens with parallel make and no-`-c -o' compiler,
      so it probably isn't very important
      `-c -o' when doing libtool
      try to find a losing compiler and see if it really works.
      (actually: hack config.cache and do it)
    
    * per-exe flags
    ** We're using `$<' in explicit rules when using per-exe flags
    ** per-exe flags don't work for CPPFLAGS/YFLAGS/LFLAGS.  Fix.
    ** LIBOBJS shouldn't be used when there are per-exe flags (?)
    
    * Test nodist_SOURCES with lex, yacc, etc.
    
    * Support subdir-objects with fortran
    
    * Allow creation of Java .zip/.jar files in natural way
      If you are building a compiled Java library, then the .zip/.jar
      ought to be made automatically.
    
    * Run automake before libtool.  It will report an error but
      still won't put the file into the disty.  This is wrong.
      From Mark H Wilkinson <mhw@kremvax.demon.co.uk>
    
    * in gnu/gnits mode, give error if Makefile.am overrides a user
      variable like CFLAGS.
      [ this is low priority because the package author can always
        circumvent our check by redefining in configure.in
        plus it is probably better to encourage good behavior than to
        punish bad ]
    
    * examine possibility of using any character in a macro name
      and rewriting names automatically.  this means we must rewrite
      all references as well.
      [ this is a 2.0-style feature ]
    
    * AM_CONFIG_HEADER might generate the wrong stamp file names
      when given multiple headers.  Write a test.
    
    * Currently don't correctly handle multiple inputs to a config header.
      [ this should no matter in the future as acconfig.h and so on are
        obsoleted by the AH series of macros.]
    
    * `distcheck' and `dist' should depend on `all'
    
    * Add code to generate foo-config script like gnome, gtk
    
    * document user namespace for macro/target names
      adopt some conventions and use uniformly
        [ this is a good thing for the rewrite ]
    
    * make distcheck uses directories like `=build'.
      Some (very rare) POSIX systems don't support `=' in filenames.
      If this ever becomes a problem, fix it
    
    * distclean must remove config.status
      can't this cause problems for maintainer-clean?
      shouldn't maintainer-clean print the message before running
      any part of the make?  (just to slow things down long enough
      for the user to stop it)
      (maybe doesn't matter since people who even know about
      maintainer-clean already have a clue)
    
    * reintroduce AM_FUNC_FNMATCH which sets LIBOBJS
      Then have automake know about fnmatch.h.
        [ probably should wait for autoconf to get right functionality ]
    
    * "make diff" capability
      look at gcc's Makefile.in to see what to do
      or look at maint program
    
    * in --cygnus, clean-info not generated at top level
    
    * what if an element of a scanned variable looks like
    	$(FOO).$(BAR)  ?
      or some other arbitrary thing?
      right now we try to cope, but not very well
        [ this is only of theoretical interest for now ]
    
    * make sure every variable that is used is also defined
        [ we don't really look at variable uses in detail.
          2.0 thing ]
    
    * make sure `missing' defines are generated
    
    * missing should handle install -d and rmdir -p (for uninstall)
    
    * NORMAL_INSTALL / NORMAL_UNINSTALL -vs- recursive rules
      [ requires changes to the standard ]
    
    * copyrights on m4 files, aclocal output
    
    * should not put texiname_TEXINFOS into distribution
      should rename this macro anyway, to foo_texi_DEPENDENCIES
    
    * For now I guess I'll just have automake give an error if it encounters
    non-C source in a libtool library specification.
    
    * must split $obj into two parts: one for libtool and one for
      deansification.  Otherwise .S files will be deansified!
    
    * ansi2knr must currently appear in a directory that has some source
    
    * if program has the same name as a target, do something sensible:
      - if the target is internal, rename it
      - if the target is mandated (eg, "info"), tell the user
        consider auto-modifying the program name to work around this
    
    * should separate actual options from strictness levels
      strictness should only cover requirements
      You should be able to pick and choose options
    
    * rewrite in guile (RMS request)
    at the same time, consider adding a GUI
    could use the same parsing code for the GUI and the standalone version
    that means figuring out a better representation of internal state
    [ that's easy -- anything is better than what we have now ]
    
    having just one Makefile for a project would give a big speed increase
    for a project with many directories, eg glibc.  ideally (?) you'd
    still be able to have a Makefile.am in each directory somehow; this
    might make editing conceptually easier.
    
    * finish up TAGS work
    
    * only remove libtool at top level?
    
    * clean up source directory by moving stuff into subdirs
    
    * consider adding pkglibexecdir, maybe others?
      requests for pkg-dirs with version included
    
    Avoid loops when installing; instead unroll them in automake
    [ Impossible when @AC_SUBST@ values are used. ]
    
    * for new autoconf:
      * completely handle multi-":" mode for AC_CONFIG_HEADER
      * Scan multiple input files when Makefile is generated?
        This would provide flexibility for large projects; subsumes
        the "Makefile.tmpl" idea
    
       [ can't do this.  must explain why in manual.
         basically, solving all the problems is too hard
         like: how to remove redundancies between generated .in files
         instead should implement `include' directive for Makefile.am ]
    * for multi-":" mode and AC_OUTPUT, it might be good to pick the
      first input file that has a corresponding .am file.
    
    Some long-term projects:
    * if $(FOO) is used somewhere, ensure FOO is defined, either by
      user or by automake if possible
    
    [ include, += support ]
    * even better would be allowing targets in different included
      fragments to be merged.  e.g., `install-local'.
    
    consider putting all check-* targets onto @check?
    
    take diff-n-query code from libit
    
    Per Bothner says:
    Per> 1) Being able to build a set of non-source programs
    Per> from source programs, without necessarily linking them together.
    Per> I.e. one should be able to say something like:
    Per> 	dummy_SOURCES=foo.c bar.c
    Per> and automake should realize that it needs to build foo.o and bar.o.
    Per> 2) Being intelligent about new kinds of suffixes.
    Per> If it sees:
    Per> 	SUFFIXES = .class .java
    Per> and a suffix rule of the form:
    Per> 	.java.class:
    Per> then it should be able to realize it can build .class files from
    Per> .java files, and thus be able to generate a list of
    Per> .class files from a list of .java source files.
    [What Per wanted here was a way to have automate automatically follow
    suffix rules.  So for instance if you had a `.x.y:' rule, and automake
    saw a `.x' file, it would automatically build and install the
    corresponding `.y' file.]
    
    !! Must fix require_file stuff.  It is really gross, and I don't
       understand it any more.
    
    Jim's idea: should look for @setfilename and warn if filenames too long
    * guess split size
    
    from joerg-martin schwarz:
     -- If Makefile.am contains $(CC), $(COMPILE), $(YLWRAP), ....
        in an explicitly written rule,  you should emit the corresponding
        Makefile variables automatically.
    
    Configuring in the large:
    * allow hierarchy of dirs to share one aclocal.m4
      How?
    
    consider printing full file name of Makefile.am or configure.in when
    giving error.  This would help for very large trees with many
    configure.in scripts
    
    From the GNU Standards.  These things could be checked, and probably
    should be if --gnu.
    *    Make sure that the directory into which the distribution unpacks (as
    well as any subdirectories) are all world-writable (octal mode 777).
    *   Make sure that no file name in the distribution is more than 14
    characters long.
    *    Don't include any symbolic links in the distribution itself.
         (ditto hard links)
    *    Make sure that all the files in the distribution are world-readable.
    * standards no longer prohibit ANSI C.  What does this imply
      for the de-ansi-fication feature? [ must keep it -- some users rely on it ]
    
    should be able to determine what is built by looking at rules (and
    configure.in).  Then built man pages (eg) could automatically be
    omitted from the distribution.
    
    Consider: "cvs" option adds some cvs-specific rules?
    
    Right now, targets generated internally (eg "install") are not
    overridable by user code.  This should probably be possible, even
    though it isn't very important.  This could be done by generating all
    internal rules via a function call instead of just appending to
    $output_rules.
     [ this will be harder to implement when scanning a rule like all-recursive
       from subdirs.am ]
    
    * Should be a way to have "nobuild_PROGRAMS" which aren't even built,
      but which could be by running the magic make command.
      [ How does it differ from EXTRA_PROGRAMS? ]
    
    Other priorities:
    * Must rewrite am_install_var.  Should break into multiple functions.
      This will allow the callers to be a little smarter.
    * Rewrite clean targets.
    * Fix up require_file junk.
    
    djm wants ``LINKS'' variable; list of things to link together after
    install.  In BSD environment, use:
    	LINKS = from1 to1 from2 to2 ...
    
    Need way to say there are no suffixes in a Makefile (Franc,ois'
    "override" idea suffices here)
    
    Check to make sure various scripts are executable (IE when looking for
    them in a directory)
    
    Handle dist-zoo.  Generally add more DOS support.  Maybe run "doschk"
    (why isn't this merged with "pathchk"?) when doing a dist.  Do
    whatever else Fran