123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504 |
- 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
- 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 ]
- * 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
- ** LIBOBJS shouldn't be used when there are per-exe flags (?)
- * 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.
- * 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 ]
- * `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 ]
- * 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 ]
- [ We now have an 'inner_expand' option to traverse_recursively,
- but it is not yet used. ]
- * 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 ]
- * 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.
- * 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
- 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 other variables similar to pkglibexecdir?
- requests for pkg-dirs with version included
- Avoid loops when installing; instead unroll them in automake
- [ Impossible when @AC_SUBST@ values are used. ]
- 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.]
- 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.
- 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.
- 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.
- 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 ]
- 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)
- Add support for html via an option. Use texi2html. Use
- "html_TEXINFOS", and htmldir = .../html. Include html files in
- distribution. Also allow "html_DATA", for raw .html files.
- [ when will texinfo directly support html? ]
- See also Karl Berry's message on a roadmap for a "info -> html"
- transition:
- <http://lists.gnu.org/archive/html/texinfo-devel/2012-03/msg00018.html>
- uninstall and pkg-dirs should rm -rf the dir.
- In general most .am files should be merged into automake. For
- instance all the "clean" targets could be merged by keeping lists of
- things to be removed. This would be a lot nicer looking. Note that
- the install targets probably should not be merged; it is sometimes
- useful to only install a small part.
- * Lex, yacc support:
- ** It would be nice to automatically support using bison's better features
- to rename the output files. This requires autoconf support
- ** Consider supporting syntax from autoconf "derived:source", eg:
- y.tab.c:perly.y
- for yacc and lex source
- ** what if you use flex and the option to avoid -lfl?
- should support this?
- * Multi-language support:
- ** should have mapping of file extensions to languages
- ** should automatically handle the linking issue (special-case C++)
- ** must get compile rules for various languages; FORTRAN probably
- most important unimplemented language
- This should be integrated in some way with Per's idea.
- Eg .f.o rules should be recognized & auto-handled in _SOURCES
- That way any random language can be treated with C/C++ on a first-class
- basis (maybe)
- It might be cool to generate .texi dependencies by grepping for
- @include. (If done, it should be done the same way C dependencies are
- done)
- [ Ask Karl Berry for a -M option to makeinfo and texi2dvi? ]
- It would be good to check some parts of GNU standards. Already check
- for install-sh and mkinstalldirs. What else is required to be in
- package by GNU standards or by automake?
- Some things for --strictness=gnits:
- * "cd $(foo); something" is an error in a rule. Should be:
- "cd $(foo) && something"
- * Look for 'ln -s' and warn about using $(LN_S) and AC_PROG_LN_S
- * Look for $(LN_S) and require AC_PROG_LN_S
- Auto-distribute "ChangeLog.[0-9]+"? "ChangeLog.[a-z]+"?
- Check all source files to make sure that FSF address is up-to-date.
- --gnits or --gnu only.
- Merge each -vars.am file with corresponding ".am" file. Can do this
- because of changes to &file_contents.
- Should libexec programs have the name transform done on them?
- Order the output rules sensibly, so FOO_SOURCES and FOO_OBJECTS are
- together and rules are in the usual order.
- djm says:
- David> To avoid comments like the one about subdirs getting buried in
- David> the middle of a Makefile.in, how about pushing comments that
- David> start with ### to the top of the Makefile.in (in order)? Sort
- David> of like how Autoconf uses diversions to force initialization
- David> code to the top of configure.
- ================================================================
- Stuff for aclocal:
- probably should put each group of m4 files into a subdir owned by the
- containing application.
- ================================================================
- Document:
- AM_MISSING_PROG
- how to use the generated makefiles
- - standard targets
- - required targets
- - NORMAL_INSTALL junk
- rationale for avoiding
- make CFLAGS="$CFLAGS" ...
- in subdirs make rule
- write example of using automake with dejagnu
- follow calc example in dejagnu docs
- document which variables are actually scanned and which are not.
- Document customary ordering of Makefile.am. From François.
- Should include extended version of diagram from Autoconf (suggested by
- Greg Woods)
- Make a definition of the term "source"
- document how to use Automake with CVS. Idea from Mark Galassi. Also
- include Greg Woods' more sophisticated "cvs-dist" target.
- -- must document all variables that are supposed
- to be public knowledge
- must document the targets required for integration with
- non-automake-using subdirs
- document the "make SHELL='/bin/sh -x'" trick for debugging
- section on relationship to GNU make. include notes on parallel makes
- add a concept index
- move discussion of cygwin32, etags, mkid under other gnu tools
- CCLD, CXXLD, FLD
- ================================================================
- Libraries:
- * Should support standalone library along with subdir library in same
- Makefile.am. Maybe: turn off "standalone" mode if library's Makefile.am
- is not only one specd? [ add an option for this ]
- ================================================================
- Longer term:
- Would it be useful to integrate in some way with the Debian package
- building utility? Must check. maybe it would be possible to deal
- with all the different package utilities somehow. Lately I've been
- hearing good things about the RedHat packaging utilities. Why are
- there so many of these? Are they fun to write or something?
- The RedHat package utility is called RPM; see
- ftp://ftp.redhat.com/pub/code/rpm
- It actually has problems, like no configure script and no documentation.
- For Cygnus it would probably be good to be able to handle the native
- package utility on each platform. There are probably 3 or 4 of these
- (sysv, solaris?, aix?)
- tcl/unix/Makefile.in has some code to generate a Solaris package.
- Automake probably can't do all of this on its own. A new tool might
- be a better idea
- I have some notes from a Debian developer on how the integration
- should work
- ================================================================
- A tool to guess what the local Makefile.am should look like:
- (see Gord's Maint program!)
- * Probably integrate with autoscan
- * Use various simple rules to determine what to do:
- * get name of top directory, sans version info
- * search for .c files with 'main' in them
- * if in main.c, use directory name for program
- * if in more than one, generate multiple programs
- * if not found, generate a library named after directory
- * order subdir searches correctly: lib first, src last
- * assume 'testsuite' dir means we are using dejagnu
- * maybe be smart about reading existing Makefile.am, so tool
- can be run for incremental changes? You could imagine:
- Makefile.am:
- autoproject --incremental
- ================================================================
- Stuff NOT to do, and why:
- consider auto-including any file that matches "*.in".
- [ no: po/Makefile.in shouldn't be included ]
- must look at mkid to see how it works (for subdir usage)
- [ right now, it doesn't. i don't see a simple fix right now ]
- if configure.in not found, move up a directory and try again? This
- could eliminate a common source of problems.
- [ this is just a bad idea ]
- * scripts are installed in $exec_prefix/bin, not $prefix/bin
- Bug or feature?
- [ the consensus on Gnits is that this isn't required.
- doubters can work around it anyway ]
- Scan source directories and warn about missing files, eg .c/.h files
- that aren't mentioned?
- [ distcheck makes this less useful ]
- * quoting bugs
- - how to install file with a space in its name?
- [ don't bother with this -- make is just too losing ]
- * notice when a .c file is a target somewhere, and auto-add it to
- BUILT_SOURCES
- [ BUILT_SOURCES are for files that need to be built before anything
- else because of hidden dependencies (something .c files are
- unlikely to be) ]
- * 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 ]
- * Should be a way to have "nobuild_PROGRAMS" which aren't even built,
- but which could be by running the magic make command.
- [ We already have EXTRA_PROGRAMS for this. ]
- * copyright notice
- Copyright 1994-2017 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, see <http://www.gnu.org/licenses/>.
- Local Variables:
- mode: outline
- End:
|