| GNU m4 TODO - Tasks that need implementing. -*- outline -*- | |
| Copyright (C) 2000-2001, 2006-2008, 2010, 2013-2014 Free Software | |
| Foundation, Inc. | |
| Tell the maintainers at <bug-m4@gnu.org> if you feel like volunteering | |
| for any of these ideas or if you have others to add. | |
| * KNOWN BUGS | |
| + The following patch needs to be ported from the branch: | |
| http://lists.gnu.org/archive/html/m4-patches/2007-03/msg00005.html | |
| May be a couple of issues in that thread. | |
| + The format builtin needs more power to be like printf(1): | |
| http://lists.gnu.org/archive/html/m4-discuss/2007-05/msg00015.html | |
| But be aware of compatibility issues in making too many changes. | |
| + The test case `other-tests/stackovf.test' does not work. | |
| + stack overflow is basically broken | |
| The routines to detect stack overflow throuh segv are basically | |
| broken. The idea may be fine, but it ends up calling a sigv handler | |
| that uses gettext, printf, stdout... all of which are definitely NOT | |
| sig-safe. Pity, because the hardcode routine is basically very careful | |
| to use write(2), to avoid this. | |
| I haven't checked that translation magic is signal-safe. | |
| - I doubt it; | |
| - stdio is not signal-safe in any kind of portable setting anyways. | |
| -- | |
| Marc Espie | |
| espie@schutzenberger.liafa.jussieu.fr | |
| Perhaps the gnulib c-stack module or libsigsegv would be useful: | |
| http://lists.gnu.org/archive/html/bug-gnu-utils/2008-01/msg00042.html | |
| * FEATURES OR PROBLEMS | |
| + m4 should keep an ``execution stack'' of macros, which applications could | |
| use in their error messages. | |
| + Implement discarding comment delimiters with the syntax table. | |
| + Implement qindir. Like indir, except that the result of the macro call | |
| is not expanded. Because the input stack might contain a file or a | |
| string, it is probably best achieved by making note that the TOS input | |
| should be copied rather than rescanned. | |
| $ echo "a'b" > f | |
| $ m4 | |
| define(a,z)dnl | |
| include(f)dnl | |
| z'b | |
| indir(`include', f)dnl | |
| z'b | |
| qindir(`include', f)dnl | |
| a'b | |
| define(b,NONO)dnl | |
| patsubst(qindir(`include', f), `b', x) | |
| z'x | |
| + Use the TOS input quoting for qindir to fix this undesirable POSIX | |
| behavior: | |
| define(`x', -'-) | |
| define(y, defn(`x')) | |
| y | |
| --' | |
| -- | |
| Stepan Kasal <kasal@ucw.cz> | |
| + If configured --with-gmp for multiple precision arithmetic there are | |
| some warnings, but it passes the tests. | |
| + Make m4 show include dependencies like gcc so Makefile targets are | |
| updated when their (included) input files are updated (Erick B). | |
| + Add support for wide character sets. | |
| * OPTIMIZATION AND CLEAN UP | |
| + Have NULs go really undisturbed through GNU m4 | |
| GNU m4 is lousy regarding NULs in streams (this would require | |
| maintaining the string lengths, and avoiding strlen, strcpy, | |
| etc.). (Almost there, once argv_ref is ported). | |
| + The argument count limits are handled for all tokens passed around by | |
| the internals: we should enable attaching these values to text macros | |
| too. | |
| + The context parameter is just a placeholder for formerly global state. | |
| We should be making the library reentrant so that multiple instances | |
| of m4 can be run in the same process at the same time. | |
| + The path management stuff (in path.c/m4private.h) is reinventing the | |
| wheel. There are a bunch of fast path management and search functions | |
| in ltdl.c: These need to be sanitized, exported through ltdl.h, and | |
| then wrapped by the m4module.h path api. path.c can probably be removed | |
| entirely at that point. | |
| * MODULE SPECIFIC ISSUES | |
| + Some way of linking a module statically is needed, for systems | |
| without support for dynamic loading. | |
| + Some sort of module interface versioning system needs to be implemented | |
| in the module loader and the freezer so that m4 can tell if it is being | |
| asked to load a frozen file that requires versions of modules with | |
| interface versions unsupported by the current release. | |
| + The module API should probably use functions, not data exports: | |
| http://lists.gnu.org/archive/html/m4-patches/2007-09/msg00012.html | |
| Actually, there are several good ideas for module in that thread. | |
| + Setting of the module search path within m4 scripts: | |
| append(__modulepath__, `/some/modules/live/here') | |
| + Module autoloader. This would allow an m4 core with no builtins except | |
| for loadmodule(). A default startup script would mark the recognised | |
| set of builtins for autoload from the installed module directory on first | |
| use. A new cli parameter would inhibit initialisation from this script, | |
| so that customised m4 interpreters could be built on the fly! | |
| + The module loader needs to differentiate between modules that are in | |
| memory and modules that are loaded (i.e. visible) from various context | |
| structures. | |
| + The perl module should only be built if a suitable perl interpreter | |
| is found on the build machine. For that matter, it has been a | |
| while since the perl module has even been built, and perl has had | |
| new releases in the meantime. | |
| Local Variables: | |
| mode: outline | |
| outline-regexp: " *[-+*.] \\|" | |
| End: | |
| Copyright (C) 2000, 2006, 2007, 2009, 2010 Free Software Foundation, | |
| Inc. | |
| Permission is granted to copy, distribute and/or modify this document | |
| under the terms of the GNU Free Documentation License, Version 1.3 or | |
| any later version published by the Free Software Foundation; with no | |
| Invariant Sections, with no Front-Cover Texts, and with no Back-Cover | |
| Texts. A copy of the license is included in the ``GNU Free | |
| Documentation License'' file as part of this distribution. |