Hi People,

There is an active debate which started in autoconf-patches, and moved
into private messages between Alexandre and I.

We agreed we should have this thread public, and it is included below.

The first message tries to summarize the issues, but it also includes
my own opinion, which is not quite fair.  For your information:

    <<-
    Akim> Alexandre, I think our debate is interesting enough to be make
    Akim> public.  Would you mind if we send all this thread to autoconf@?
    
    Alexandre> Absolutely. (no, I wouldn't :-)
    
    OK, I'm sending the digest this message being included.
    
    
    Alexandre> Except for the minor issue that it starts with a message
    Alexandre> that presents the two proposals with a clear favoring of
    Alexandre> yours.  But I can live with that.
    
    I'll send the digest with the <<-lines->> included as a prologue.
    ->>

Akim

Subject: Topics

Topics:
   Autoconf Extension Files
   Re: Autoconf Extension Files
   Re: Autoconf Extension Files
   Re: Autoconf Extension Files
   Re: Autoconf Extension Files
   Re: Autoconf Extension Files
   Re: Autoconf Extension Files




Hi Alexandre,

Well, I believe this time we might need a referendum on this issue?

Below is a draft of a message I intend to send to autoconf@ to try to
see what people think about it.  

Personally I can change my mind, but if I'm convinced.  Up to now,
although I think I can feel what you feel, I am still not convinced
1. my scheme is hard to learn, 2. yours is easier.

What do you think of this:

Subject: Autoconf Extension Files Handling

Hi People,

We are revamping autoreconf.

autoreconf addresses several issues.  One of its tasks is in general
addressed by the Makefile: update files which dependencies have been
updated.  Another task it addresses is what scripts like `compgen.sh'
or `bootstrap' do: starting from a hand written files only, run
aclocal, autoconf, automake, libtoolize, gettextize, autoheader etc.

We are in the process of replacing aclocal.  As a first sketch,
autoreconf handles by itself what used to be done by aclocal.  We can
still debate whether the processing should be done within autoreconf,
or if autoreconf should delegate the task to another tool, but there
is another point, more important, where there are two different
proposals:

      how to handle the Autoconf extension files (aka m4/*.m4).



The Separate Files Approach
---------------------------

  All the extension files are automatically imported into an m4/ (or
  whatever the name) directory, and aclocal.m4 is merely a set of
  m4_include of these files: there is no dependency upon non Autoconf
  macros which are not in the local tree.

  Of course this means that the maintainer must ship these files.  It
  can be totally automated by Automake, but it's not written yet.

  The maintainer has nothing to do at all to ensure the completeness
  of the local copies/symlinks of the extensions files, but if she
  disagrees, she just has to rm, cp or ln what ever version she wants.
  In particular the maintainer need never modify aclocal.m4 manually.



The All Mighty Aclocal Approach
-------------------------------

  Aclocal.m4 is controlled by the maintainer either by hand, or via a
  new tool à la aclocal.  This file has well defined sections via tags
  (BEGINNING OF.../END OF...), which makes it possible to have
  1. sections written by hand, 2. definition of macros coming from
  library extensions files, 3. some m4_include just as in the previous
  scheme.

  The maintainer has to maintain aclocal.m4 manually (either via
  editing, or thanks to options such as --update-inner-m4-file init.m4
  etc.), and the local extension files too.  But if she doesn't use
  m4_include at all, the dist rule just needs to ship aclocal.m4,
  which is what Automake does.




I am opposed to the second approach.  Before criticizing, let's
present the pros:

1 Some young developers such as Joe D. Velopper, will probably shoot
  himself in the foot and forget to ship the extensions files because
  Automake does not support it yet.  Even more likely if he doesn't
  use Automake.

2 Why the heck should I see so many little extension files pollute my
  local directory where a single file will do?


My cons:

Answering 1., I just don't want to consider the limitations of the
other tools as a real argument.  Let's work on Automake instead.  And
if those people are not using Automake, then they will be able to use
the samples we provide in the docs.  In addition, frankly, anybody
using Autoconf and Automake is not just Joe D.  IMHO, he'll be smart
enough to know what to do.  And after all shipping one broken package
is no big deal, someone will just tell him what happened, and he'll
fix his package.

Answering 2., there is AC_CONFIG_AUX_DIRS, which can (and should) be
used to hide those files.  Maintainability is much more important than
the number of files.




Why do I want the separate files approach?

Well, first of all because there are already too many tools, and too
many options to learn to have the Autotools work properly, we just
don't need another choice.  IMHO there are places where additional
choices are just additional entropy: packages will start being
different uselessly, you'll have to study the configure set up to find
the proper options to pass to the tools etc.  Here, cp, mv and ln is
the only interface I want to deal with, I see no reason for
introducing another tool which mimics this via options.

I really don't think I am being Mike X. Pert here, think of Joe who
will have to learn all this too!  Just imagine the learning curve for
another tool with several options, as opposed to cp, mv, ln.  I do
think Mike and Joe will agree this is much simpler.

Since I want a single unified approach, the separate files approach
seems the natural answer: that's basically what everybody does.  And
people do this because these files are actually very alive, and often
need editing.  Since, in addition, these files can come from a lot of
different places, it is important to keep them separate.


But after all, I mainly explained why I think the multiple files
scheme should be possible.  You could imagine some flags set once for
all that tell this new tool that you wish to stick to the multiple
files scheme, then why prevent people from using the other scheme if
they wish?

Because I really don't think we need two answers to a single need.
That makes the tool(s) more complex.  It means more documentation to
write, more software to write and maintain for us, and for the user it
means more documentation to read, and additional means to misuse a
tool.  We shouldn't provide choices when they are not needed.  Making
the choice for the user means we asked ourselves the questions, and
answered them.  We are probably more knowledgeable than he is, we have
some experience he doesn't have.  One way to help him is to make
choices for him.  One way to help him is to have him read a limited
amount of documentation, use a single tool, and still have a set up
like the grownups.






Thanks for taking the trouble of summarizing the points, and for
running them through me first.  It made it clear that part of my
suggestion didn't make it to you.


On Jul 31, 2000, Akim Demaille <[EMAIL PROTECTED]> wrote:

> 1. my scheme is hard to learn, 2. yours is easier.

I don't think your scheme is harder to learn.  It's just easier to
make mistakes using it.  It doesn't help ensure that starters do The
Right Thing, which is to ship all the m4 sources.  That's the main
advantage of the scheme I propose.  I understand it's a little bit of
additional work for advanced users, but they can afford it, starters
can't, and will probably blame autoconf for the mistake, and I'll
agree with them.

> We are in the process of replacing aclocal.  As a first sketch,
> autoreconf handles by itself what used to be done by aclocal.

I don't think this is a good idea.  IMO, we should do aclocal.m4
maintenance in a separate program, that autoreconf would run.  Where's
that argument for keeping things separate again? :-) :-)

>   All the extension files are automatically imported into an m4/ (or
>   whatever the name) directory, and aclocal.m4 is merely a set of
>   m4_include of these files: there is no dependency upon non Autoconf
>   macros which are not in the local tree.

So the user can no longer write code in aclocal.m4?  How about
existing packages that already have m4 code in aclocal.m4?  How about
those using automake, that have the extension code in acinclude.m4
copied to aclocal.m4?  These are issues we have to consider when
proposing the change, under the principle of backward-compatibility
we've all sworn to abide to :-)

>   The maintainer has nothing to do at all to ensure the completeness
>   of the local copies/symlinks of the extensions files

He has to run autoreconf or the new aclocal, just like in the ``All
Might Aclocal'' approach.  This can't be used as an argument in favor
of your proposal.

>   In particular the maintainer need never modify aclocal.m4 manually.

Ditto.  s/need/needs/

>   The maintainer has to maintain aclocal.m4 manually

Nope.  It's just like autoreconf, but, instead of copying files and
inserting m4_include statements, the tool will insert the files
inline.  From the point of view of the user, there's no difference at
all, except that he won't have to worry about including additional m4
files in the distribution (i.e., no difference at all, if using
automake).

> I am opposed to the second approach.

I'd prefer that personal positions didn't show up in neutral
expositions.

> 2 Why the heck should I see so many little extension files pollute my
>   local directory where a single file will do?

I'd rephrase this as: most of the times, the maintainer only cares
about the macros as a user, i.e., he only needs their definitions, he
doesn't really care about how they're defined, what other macros in
what other files they depend upon, whether definitions are given in
different files on different releases of the packages that supply the
macro definitions.  He often doesn't intend to to modify them locally.
Having all the needed definitions centralized in a single aclocal.m4
means he won't have to have files he doesn't understand or really care
about in his distribution.  Not a big deal, but new users might be
frightened by the amount of ``junk'' in his package.

> In addition, frankly, anybody using Autoconf and Automake is not
> just Joe D.

All of us have, at some point, been a Joe D. when we started using
autoconf.  We've all struggled to understand its assumptions.  Why
should we make it any harder by telling them not to forget to include
any extension files besides aclocal.m4, if they happen to use any
extension macro?

If you were a starter, using autoconf 2.13, wouldn't you just copy the
macro file you want to use to aclocal.m4 and be done with it?  If you
were given the ability to m4_include files, would you still create
aclocal.m4 with a sole m4_include statement, and keep the m4 file
separate?  I think I wouldn't.  I'd rather keep it simple.

> And after all shipping one broken package is no big deal, someone
> will just tell him what happened, and he'll fix his package.

Or say he doesn't care, the macros can be downloaded from the macro
repository and from this and that packages.  Or blame autoconf and
become resistant to use it for other projects.

I've had enough trouble with people of the Kaffe team finding issues I
considered very minor to be major annoyances, to the point of the team
being strongly inclined to drop libtool, automake and possibly
autoconf from the Kaffe building engine.  I'm *very* concerned about
introducing one more minor issue.

> Answering 2., there is AC_CONFIG_AUX_DIRS, which can (and should) be
> used to hide those files.  Maintainability is much more important than
> the number of files.

For people who care about maintaining the files, I agree completely.
But abstraction is also a very important issue that you're failing to
consider.

> Well, first of all because there are already too many tools, and too
> many options to learn to have the Autotools work properly, we just
> don't need another choice.

This is no argument in favor of your choice.  We will need another
tool, the difference is on what this tool is going to do.

> packages will start being different uselessly

Isn't this an argument in favor of having a single aclocal.m4 per
package?  Then, they'll be more similar.

> you'll have to study the configure set up to find the proper options
> to pass to the tools etc.

Again, this is an argument in favor of the all-mighty aclocal.m4.

> Here, cp, mv and ln is
> the only interface I want to deal with, I see no reason for
> introducing another tool which mimics this via options.

The point you're missing is that most users *won't* be using cp, mv
and ln, they'll be using whatever aclocal tool we provide them with.
cp, mv and ln to modify m4 extension files are for Mike X. Pert.

> I really don't think I am being Mike X. Pert here, think of Joe who
> will have to learn all this too!

But he shouldn't have to learn all this to start using autoconf.

> Just imagine the learning curve for another tool with several
> options, as opposed to cp, mv, ln.

Precisely.

> Since I want a single unified approach, the separate files approach
> seems the natural answer: that's basically what everybody does.

Which everybody are you talking about?  What research have you done to
conclude this?  I'll give you a very simple example.  I've just
started helping a Russian user use autoconf for the GNU marst package.
He'd never had any previous experience with autoconf.  He's not even
using automake.  Go figure the way GNU marst's build environment is
structured.  You may even want to ask him what he'd prefer.

> And people do this because these files are actually very alive, and
> often need editing.

For those people who maintain them.  Those that don't are just users,
and we shouldn't require them to become maintainers of those files
too.  Abstraction is the key.

> Since, in addition, these files can come from a lot of different
> places, it is important to keep them separate.

They'll be separate, just in a single file.  Are you arguing for us to
stop shipping tarballs and instead post every file in separate in
ftp.gnu.org?  What's your point?

> Because I really don't think we need two answers to a single need.

It's not a single need.  What you're failing to see is that there are
different kinds of autoconf users.  There are those that maintain
their own set of m4 extensions, who *want* their macros to be in
separate files, and those that just use them, who care about the
macros, and would rather abstract the very existence of files away.

> for the user it means more documentation to read

Which solution are you arguing for, again?  Previously, you said that,
in order to have multiple m4 files, the user would just have to follow
our example in the documentation, and he might well miss that point.
With the all-mighty aclocal.m4, that wouldn't be necessary.

> and additional means to misuse a tool

Ditto.

> We are probably more knowledgeable than he is, we have some
> experience he doesn't have.

But we shouldn't force him to become as knowledgeable as we in his
first project.  Let's give him time to learn why it's better to have
separate m4 extension files when he maintains his own set of extension
macros.  Meanwhile, he'll live with a solution that abstracts away
this issue for him.

> One way to help him is to make choices for him.

If they're the right choices.  I don't think they are, for a beginner.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                  aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist    *Please* write to mailing lists, not to me








| Thanks for taking the trouble of summarizing the points, and for
| running them through me first.  

You're welcome :) I like working with you.  In fact, if we go to the
referendum, I'd like that we have a common document, or at least
something ``objective'', and then our comments.

| It made it clear that part of my suggestion didn't make it to you.

Hm, I'm not sure I understand this :(  Is it

        it made it clear that there are arguments for my suggestion
        that you don't know/don't consider.

or something like this?


| On Jul 31, 2000, Akim Demaille <[EMAIL PROTECTED]> wrote:
| 
| > 1. my scheme is hard to learn, 2. yours is easier.
| 
| I don't think your scheme is harder to learn.  It's just easier to
| make mistakes using it.  It doesn't help ensure that starters do The
| Right Thing, which is to ship all the m4 sources.  That's the main
| advantage of the scheme I propose.  I understand it's a little bit of
| additional work for advanced users, but they can afford it, starters
| can't, and will probably blame autoconf for the mistake, and I'll
| agree with them.

Personally I don't think it is so likely, but it is, definitely, but I
really can't imagine something big happen because of this.  I don't
see much difference with `forgetting' to distribute the Bison sources,
or acconfig.h etc.  All this are common errors, and I'm somewhat
against a Fisher Price Autoconf just for this :)

| > We are in the process of replacing aclocal.  As a first sketch,
| > autoreconf handles by itself what used to be done by aclocal.
| 
| I don't think this is a good idea.  IMO, we should do aclocal.m4
| maintenance in a separate program, that autoreconf would run.  Where's
| that argument for keeping things separate again? :-) :-)

There is none.  I don't see much point in having a separate program,
but I don't see much against it either.  From the point of view of the
documentation it just means moving some of autoreconf elsewhere.  I'm
really fine with it, and I also agree it's more open.  It'd be stupid
to have autoreconf have special options just for these part.

What I want to avoid is extra options to handle the different cases
where I think a single behavior is enough.

In the long run, even Joe will be tired to pass options to acimport
(we need a name, but that's for later :), not to mention Mike :)


| >   All the extension files are automatically imported into an m4/ (or
| >   whatever the name) directory, and aclocal.m4 is merely a set of
| >   m4_include of these files: there is no dependency upon non Autoconf
| >   macros which are not in the local tree.
| 
| So the user can no longer write code in aclocal.m4?  How about
| existing packages that already have m4 code in aclocal.m4?  How about
| those using automake, that have the extension code in acinclude.m4
| copied to aclocal.m4?  These are issues we have to consider when
| proposing the change, under the principle of backward-compatibility
| we've all sworn to abide to :-)

My view on backward compatibility here is simple: either you obey the
old scheme, in which case autoreconf does nothing, or aclocal
(recognized via its comment) in which case autoreconf runs, or
finally, using m4_includes, also recognized by some signature.

We can easily have tons of guards to protect the innocents from
override their hand written code.


| >   The maintainer has nothing to do at all to ensure the completeness
| >   of the local copies/symlinks of the extensions files
| 
| He has to run autoreconf or the new aclocal, just like in the ``All
| Might Aclocal'' approach.  This can't be used as an argument in favor
| of your proposal.

In the AMA you have to pass options to specify what's the behavior you
want, that's what I meant.

| >   In particular the maintainer need never modify aclocal.m4 manually.
| 
| Ditto.  s/need/needs/

Thanks :)

By manually I meant `has to pass options'.  I was referring to a brand
stupid `autoreconf' with no flags.


| >   The maintainer has to maintain aclocal.m4 manually
| 
| Nope.  It's just like autoreconf, but, instead of copying files and
| inserting m4_include statements, the tool will insert the files
| inline.  From the point of view of the user, there's no difference at
| all, except that he won't have to worry about including additional m4
| files in the distribution (i.e., no difference at all, if using
| automake).
| 
| > I am opposed to the second approach.
| 
| I'd prefer that personal positions didn't show up in neutral
| expositions.

Agreed.

| > 2 Why the heck should I see so many little extension files pollute my
| >   local directory where a single file will do?
| 
| I'd rephrase this as: most of the times, the maintainer only cares
| about the macros as a user, i.e., he only needs their definitions, he
| doesn't really care about how they're defined, what other macros in
| what other files they depend upon, whether definitions are given in
| different files on different releases of the packages that supply the
| macro definitions.  He often doesn't intend to to modify them locally.
| Having all the needed definitions centralized in a single aclocal.m4
| means he won't have to have files he doesn't understand or really care
| about in his distribution.  Not a big deal, but new users might be
| frightened by the amount of ``junk'' in his package.

You know, really, I wonder what kind of Joes you have in mind.  This
is an endless debate.  Some people might complain Automake distribute
INSTALL, since now the procedure is well known.  Who care ABOUT-NLS?
Why the heck do I need install-sh while my platform has a perfect
install?  Why should I need config.guess and config.sub?

People have to understand we're fighting a war for them.  Let them
excuse our suits!

Moreover, they are fighting with us, they will probably have to take a
look at those &^£$ files.  Then, the separated approach is more
natural.  But they'll need something like `acimport --split' :(



| > In addition, frankly, anybody using Autoconf and Automake is not
| > just Joe D.
| 
| All of us have, at some point, been a Joe D. when we started using
| autoconf.  We've all struggled to understand its assumptions.  Why
| should we make it any harder by telling them not to forget to include
| any extension files besides aclocal.m4, if they happen to use any
| extension macro?

:)

I agree with the prologue, but not with the conclusions.  We all made
mistakes, we all shipped some oldish config.guess, or forgot some
file.  I use Autoconf for a2ps before the existence of Automake.  But
none of my users complained.  Some drew my attention on some problems,
right, but that's nothing as opposed to the bugs there are in a2ps :)
Nothing happened.  I was just learning.

Today I think I learned it right, and really I don't think I needed a
baby park in which I learned the Autotools using Babyconf, Babymake
etc.  I just needed some time to learn, and learning one scheme or the
other would have taken the same amount of time, but the fact I would
have learned a second once I realize the limitations of the first
approach.


| If you were a starter, using autoconf 2.13, wouldn't you just copy the
| macro file you want to use to aclocal.m4 and be done with it?  If you
| were given the ability to m4_include files, would you still create
| aclocal.m4 with a sole m4_include statement, and keep the m4 file
| separate?  I think I wouldn't.  I'd rather keep it simple.

In your exposure you show you already know the extension of Autoconf
goes via aclocal.m4.

It's, IMHO, equally simple to teach acimport and nothing more.

And, to be honest, I really believe people's first extensions of
Autoconf are AC_DEFUN inside configure.in itself :)



| I've had enough trouble with people of the Kaffe team finding issues I
| considered very minor to be major annoyances, to the point of the team
| being strongly inclined to drop libtool, automake and possibly
| autoconf from the Kaffe building engine.  I'm *very* concerned about
| introducing one more minor issue.

Wow!  I didn't know.  But today, don't they have a collection of m4
files already?

My concerns goes also to the people who are used to walk in the
packages, those free lancers you never heard of who sometimes send a
patch against your package.  I'm concerned by the homogeneity of all
the packages because of all these people.  We have to keep it uniform
so that there is no wondering on how the package configuration works.

We all are this kind of users.  Several times (not many, agreed), I
ran a couple of diffs upon some m4 files to check whether they were up
to date, to check whether I could trust their gettext.m4 for
instance.  You can't do that with AMA.  Or you need `acimport --diff'
something?

There are just way too many tools you no longer can use.  Again, think
of libtoolize!  You'd have to acimport afterwards, or have libtoolize
acimport?

All I can see is additional complications just to have Joe learn his
first HelloWorld, while as soon as he'll want to do HelloWorld 0.2,
he'll be using something more open to extensions.



| > Answering 2., there is AC_CONFIG_AUX_DIRS, which can (and should) be
| > used to hide those files.  Maintainability is much more important than
| > the number of files.
| 
| For people who care about maintaining the files, I agree completely.
| But abstraction is also a very important issue that you're failing to
| consider.

What abstraction are you referring too?



| > Well, first of all because there are already too many tools, and too
| > many options to learn to have the Autotools work properly, we just
| > don't need another choice.
| 
| This is no argument in favor of your choice.  We will need another
| tool, the difference is on what this tool is going to do.

Let's agree for the tool, having acimport is sane.  I'm referring to
the options.  I'm referring to the bizarre status of aclocal.m4, half
hand written, half generated.


| > packages will start being different uselessly
| 
| Isn't this an argument in favor of having a single aclocal.m4 per
| package?  Then, they'll be more similar.

:) :) :)

Well, you're definitely right.  My point was ``extendable packages
will be different uselessly''.


| > you'll have to study the configure set up to find the proper options
| > to pass to the tools etc.
| 
| Again, this is an argument in favor of the all-mighty aclocal.m4.

Nope, it's an argument for the single approach.

Let me put it this way: I agree the ``always everything in
aclocal.m4'' (as is actually the case currently) is also an approach
that I like for its qualities: it's predictable, it's simple, and
that's a single thing to learn: running aclocal.

The fact is nobody likes this.  You can't really depend upon
aclocal.m4 to make or submit a patch etc. so people are shipping their
sources to this end.

So, seeking for another uniform solution, let's just make this the
official way.

You know, maybe some day your Joe using Babyacimport will receive
mails from people telling him he should really use the m4_include
approach, because it's really inconvenient to fix his macros when they
are in the middle of automake stuff.

Maybe Mike has a superb macro will checks for bell 0.3 and whistle
1.3, but someone will have to edit his aclocal to extract it.

Sometime, somehow, Joe will regret his decision, the very decision we
left over him, and maybe will complain we didn't guide him on the
maintainability-extandability road.



| > Here, cp, mv and ln is
| > the only interface I want to deal with, I see no reason for
| > introducing another tool which mimics this via options.
| 
| The point you're missing is that most users *won't* be using cp, mv
| and ln, they'll be using whatever aclocal tool we provide them with.
| cp, mv and ln to modify m4 extension files are for Mike X. Pert.

No, I don't think I'm missing this.  Joe, who wants to know nothing,
will just run acimport as he used to run aclocal.  And indeed, Mike
will play with cp, mv, ln.

But Joe, you know how smart Joe can be :), will quickly see his
configure depends upon the files which are in m4/, and his intuition
will tell him things about ln, cp and mv, while his intuition has
probably little to tell about acimport --inline-file, acimport
--replace-inner-file etc.



| > I really don't think I am being Mike X. Pert here, think of Joe who
| > will have to learn all this too!
| 
| But he shouldn't have to learn all this to start using autoconf.

Hm, them this is valid for both sides, isn't it?  Or I missed your
point.



| > Just imagine the learning curve for another tool with several
| > options, as opposed to cp, mv, ln.
| 
| Precisely.

Aaaaah :)

We'll never manage to make it :)



| > Since I want a single unified approach, the separate files approach
| > seems the natural answer: that's basically what everybody does.
| 
| Which everybody are you talking about?  What research have you done to
| conclude this?  I'll give you a very simple example.  I've just
| started helping a Russian user use autoconf for the GNU marst package.
| He'd never had any previous experience with autoconf.  He's not even
| using automake.  Go figure the way GNU marst's build environment is
| structured.  You may even want to ask him what he'd prefer.

OK, everybody is too wide.

You know, even those people who know nothing at all, but are using
Autoconf with the set up I propose, even if they miss to ship some of
the macros, then these macros are likely to be widespread macros, say
Automake's.  Then, again, maybe nothing big happens, since the guy who
wants to touch the package certainly has Automake.

I'm trying to make Autoconf easier.  I really do.  I do think about Mr
marst in as many ways as I can.  I tried to include much of the
autowisdom I learned the hard way in the documentation.  I simplify
the interface as much as I can.  I try to awake dead bodies such as
autoreconf because they have a role to play in the simplified unified
interface.  I am really concerned by these people, I've been one of
them, and if today I'm an Autoconf maintainer, it is precisely because
of the failures of Autoconf: I *had* to become an expert to have a2ps
configure as I wanted it to.

One of my main motivation in Autoconf is precisely to help all the
Akimitos who are suffering now.  In some way, I do want Babyconf.

But here, I don't think we are really hitting a sharp corner.



| > And people do this because these files are actually very alive, and
| > often need editing.
| 
| For those people who maintain them.  Those that don't are just users,
| and we shouldn't require them to become maintainers of those files
| too.  Abstraction is the key.

Agreed, but not at the expense of complications.

In fact, this is why I agreed to have only two behaviors: either
acimport is just another aclocal (but I'd prefer to still copy the m4
files locally, but this is debatable), or the behavior I suggest.

It's that thing in between that makes the interface explodes in a
variety of options.

We can leave with `acimport --inline' and `acimport --include' (Hm,
bad names :), but not with `acimport --update-inner-file gettext.m4'.

This time we really have the abstract Babyconf, and the Autoconf for
grownups, and neither camp is paying the price of the other.

But the solution in between is expensive in terms of needed knowledge.


| > Since, in addition, these files can come from a lot of different
| > places, it is important to keep them separate.
| 
| They'll be separate, just in a single file.  Are you arguing for us to
| stop shipping tarballs and instead post every file in separate in
| ftp.gnu.org?  What's your point?

I was trying to explain why m4 files deserve a different approach than
the all mighty missing.  All mighty missing can exist, Automake or
Autoconf can centralize its ``modules''.  But m4 files do not fit this
picture: there are way too many.

So they have to remain independent entities so that you can look for
them, change them, include them etc.

Yes, I'm saying that having to look into aclocal.m4 is a limitation in
this case.


| > Because I really don't think we need two answers to a single need.
| 
| It's not a single need.  What you're failing to see is that there are
| different kinds of autoconf users.  There are those that maintain
| their own set of m4 extensions, who *want* their macros to be in
| separate files, and those that just use them, who care about the
| macros, and would rather abstract the very existence of files away.

But why then did you refuse the `only one of the two pure approaches'
proposal?



| > for the user it means more documentation to read
| 
| Which solution are you arguing for, again?  Previously, you said that,
| in order to have multiple m4 files, the user would just have to follow
| our example in the documentation, and he might well miss that point.

This was just for make dist, but granted :)

| With the all-mighty aclocal.m4, that wouldn't be necessary.

I'm precisely referring to its all-mightism.  If it had not this
double nature of m4_include and inlined sections, I agree it would be
simple too.


| > We are probably more knowledgeable than he is, we have some
| > experience he doesn't have.
| 
| But we shouldn't force him to become as knowledgeable as we in his
| first project.  Let's give him time to learn why it's better to have
| separate m4 extension files when he maintains his own set of extension
| macros.  Meanwhile, he'll live with a solution that abstracts away
| this issue for him.

I hear you :)

| > One way to help him is to make choices for him.
| 
| If they're the right choices.  I don't think they are, for a beginner.

I hear you well :)

Well, really, why not the `one of the two pure approaches'?

        Akim

PS/ Well, if we don't consider the patches, I think we're exchanging
the longest messages ever between us :)






On Jul 31, 2000, Akim Demaille <[EMAIL PROTECTED]> wrote:

> | Thanks for taking the trouble of summarizing the points, and for
> | running them through me first.  

> You're welcome :) I like working with you.  In fact, if we go to the
> referendum, I'd like that we have a common document, or at least
> something ``objective'', and then our comments.

> | It made it clear that part of my suggestion didn't make it to you.

> Hm, I'm not sure I understand this :(  Is it

>         it made it clear that there are arguments for my suggestion
>         that you don't know/don't consider.

> or something like this?

Yep.  You hadn't fully understood the way my suggestion would work.

> Personally I don't think it is so likely, but it is, definitely, but I
> really can't imagine something big happen because of this.  I don't
> see much difference with `forgetting' to distribute the Bison sources,
> or acconfig.h etc.

Nobody forgets acconfig.h because it's only used in the presence of
automake, and automake takes care of it.  In the case of m4 macro
files, one may easily forget about it because they aren't needed to
build the package, just to hack on it.  So most people won't even
notice they're missing.

> What I want to avoid is extra options to handle the different cases
> where I think a single behavior is enough.

That's where we disagree.  There are two kinds of wanted behaviors:
that of a newbie autoconf user and that of an expert user.  I'm fine
with arranging for this tool to support only the newbie by default, as
long as it doesn't prevent the expert from having his macro files
separated.  I'm not fine with forcing a newbie to care about that.

> In the long run, even Joe will be tired to pass options to acimport
> (we need a name, but that's for later :), not to mention Mike :)

How about aclocal?

I intend to built it upon GNU art (ARchiver of Text), which I'm
designing.

GNU art (which would probably be part of autoconf) would be a tool to
add/remove/extract sections from text files.  Autoconf would use it to
manage not only aclocal.m4, but also missing.  It will have to have
lots of options, to allow for this and other kinds of uses, but we'd
provide aclocal and acmissing as front-ends to art.  Even if we choose
to support only the m4_include solution in aclocal.m4, we'd probably
still use some form of `art' :-) to add the m4_include statements.

> My view on backward compatibility here is simple: either you obey the
> old scheme, in which case autoreconf does nothing, or aclocal
> (recognized via its comment) in which case autoreconf runs, or
> finally, using m4_includes, also recognized by some signature.

And you claim this to be simpler than allowing for guarded
m4_include/whole files in aclocal.m4?  Where's the single-choice
decision?  The solution I propose is fully backward-compatible, while
still supporting the advanced uses Mike X. Pert wants.  The one you
propose requires not only Mike X. Pert to re-work a little bit his own
aclocal.m4 (since he certainly already uses some form of include), but
also all poor Joe D. Vellopers to do so in order to start benefitting
from the new way of managing stuff.

> We can easily have tons of guards to protect the innocents from
> override their hand written code.

My point is that we just shouldn't overwrite aclocal.m4.  We should
append to it, or update guarded sections of it, never generate it from
scratch.

> | >   The maintainer has nothing to do at all to ensure the completeness
> | >   of the local copies/symlinks of the extensions files
> | 
> | He has to run autoreconf or the new aclocal, just like in the ``All
> | Might Aclocal'' approach.  This can't be used as an argument in favor
> | of your proposal.

> In the AMA you have to pass options to specify what's the behavior you
> want, that's what I meant.

You don't have to pass any options.  You *may* pass them, to change
the default.  Same difference.

> By manually I meant `has to pass options'.  I was referring to a brand
> stupid `autoreconf' with no flags.

You're assuming (i) autoreconf is the tool that manages aclocal.m4 and
(ii) the default is not the one you want.  (i) is certainly not the
way to go, and I think we can agree on that in advance.  (ii) means
you feel the battle is already lost.  Come on, man, fight! :-) :-)

> Why the heck do I need install-sh while my platform has a perfect
> install?  Why should I need config.guess and config.sub?

If you only care about *your* platform, you probably won't even be
distributing your package, so there's little point in caring about
what gets distributed.

In fact, you don't need those files.  automake doesn't force you to
have them, it just warns you if you don't.

> I agree with the prologue, but not with the conclusions.  We all made
> mistakes, we all shipped some oldish config.guess, or forgot some
> file.

My point is: why should we make yet another mistake easier for one to
make?  And bear in mind that it's not just about packaging
distributions.  It's also about maintaining CVS trees.  I've had
enough trouble with other maintainers of Kaffe failing to understand
how the pieces fall together that I'd rather have some very simple
default that hopefully would get them satisfied.

> In your exposure you show you already know the extension of Autoconf
> goes via aclocal.m4.

Yup.  Anybody who wants to use extensions will certainly stumble
across this fact.

> It's, IMHO, equally simple to teach acimport and nothing more.

Yup.  The nothing more is precisely what I've been arguing for.  No
need to look at what files acimport has installed and go fix
Makefile.in to get them distributed, and cvs add them.

> And, to be honest, I really believe people's first extensions of
> Autoconf are AC_DEFUN inside configure.in itself :)

Indeed.  But then, there's the autoconf macro archive.

> Wow!  I didn't know.  But today, don't they have a collection of m4
> files already?

No.  Just the small collection of files needed by libtool, and all
those Makefile.am files whose syntax they don't understand (even
though it's just a Makefile!), plus the dependencies between
acinclude.m4, configure.in, aclocal.m4, configure, Makefile.ins,
acconfig.h, config.h.in, config.h, etc.

> My concerns goes also to the people who are used to walk in the
> packages, those free lancers you never heard of who sometimes send a
> patch against your package.  I'm concerned by the homogeneity of all
> the packages because of all these people.  We have to keep it uniform
> so that there is no wondering on how the package configuration works.

What could be more uniform than a single aclocal.m4 per package?
That's where anybody would look at first.  Granted, if it m4_includes
other macro files, ok, anybody can figure what m4_include means.  But
Mr. Rand M. Hacker will certainly look at aclocal.m4 first.  And he'll
probably be glad to be able to type C-s and find the macro he's
looking for in there, instead of having to figure out in which file
the macro is defined.

> We all are this kind of users.  Several times (not many, agreed), I
> ran a couple of diffs upon some m4 files to check whether they were up
> to date, to check whether I could trust their gettext.m4 for
> instance.  You can't do that with AMA.  Or you need `acimport --diff'
> something?

You'd `aclocal --extract foo.m4' then run plain diff.

> There are just way too many tools you no longer can use.  Again, think
> of libtoolize!  You'd have to acimport afterwards, or have libtoolize
> acimport?

libtoolize would aclocal in the macro.

> All I can see is additional complications just to have Joe learn his
> first HelloWorld, while as soon as he'll want to do HelloWorld 0.2,
> he'll be using something more open to extensions.

The point is precisely to keep Joe willing to use autoconf.  If we
keep it simple for the starter, he'll remain with us and eventually
know enough to want to manage separate m4 files.  Then, he'll add
AC_MACRO_DIR(m4) to the beginning of aclocal.m4 and the new aclocal
will start to get m4 extensions installed in m4 for him.  Until then,
he'd be able to use autoconf without worrying about it.

> What abstraction are you referring too?

Abstracting away the fact that m4 extensions are defined in separate
files, provided by different sources, that may change over time.

> I'm referring to the bizarre status of aclocal.m4, half hand
> written, half generated.

I don't see anything wrong with that.  There's part of it that is
hard-written (in the automake world, that's acinclude.m4, duplicated
in aclocal.m4), and there's part of it that is either a couple of
m4_include statements or a couple of guarded files.  No big deal.

> | > packages will start being different uselessly
> | 
> | Isn't this an argument in favor of having a single aclocal.m4 per
> | package?  Then, they'll be more similar.

> :) :) :)

> Well, you're definitely right.  My point was ``extendable packages
> will be different uselessly''.

What's an extendable package?

> The fact is nobody likes this.

Ask beginners.  Unfortunately, the autoconf mailing list is full of
Mike X. Perts that want, with all their forces, to keep their ability
to split their macros across multiple files, that don't consider it a
big deal that some newbies may make a couple of additional mistakes as
they start using autoconf.  I'm *very* worried about introducing yet
another element of complexity in autoconf, because of my unfortunate
with Kaffe.  I agree it's not a major complexity, and it's something
every user would eventually figure out, but I'd rather avoid the
mistake at first, and let the user learn.

> You can't really depend upon aclocal.m4 to make or submit a patch
> etc. so people are shipping their sources to this end.

m4 files are sources only for people who maintain them.  For plain
users (I mean, the developers that want to use the macros in their
configure.ins), those need not be faced as sources.  They probably
wouldn't care if we shipped a frozen m4 file.  But we won't, because
there's no way (AFAIK) to extract the sources from a frozen m4 file.
In the case of the all-mighty aclocal.m4, there is, and it's so easy
that you don't even need GNU art or aclocal --extract.  You can
cut&paste it as well.  However you prefer.

> You know, maybe some day your Joe using Babyacimport will receive
> mails from people telling him he should really use the m4_include
> approach, because it's really inconvenient to fix his macros when they
> are in the middle of automake stuff.

Good.  Then he'll learn about this great feature without having made
any mistake.  And he'll like it, and start using it.  It will cost him
just the addition of a line in aclocal.m4, and a little bit of
additional complexity in aclocal.  I think it's worth it.

> Maybe Mike has a superb macro will checks for bell 0.3 and whistle
> 1.3, but someone will have to edit his aclocal to extract it.

Mike will ship them separately, for sure.  And then, extracting files
is no big deal.

> Sometime, somehow, Joe will regret his decision, the very decision
> we left over him, and maybe will complain we didn't guide him on the
> maintainability-extandability road.

You may be right.  Then I'll ask him whether he'd have liked to have
to care about all those files in the beginning.  He may even say he
would, but I won't believe him, because, by then, he'll already be an
X. Pert, and will are more about his convenience than about
difficulties that other new users may have to face.

> No, I don't think I'm missing this.  Joe, who wants to know nothing,
> will just run acimport as he used to run aclocal.

He'll have to adjust the Makefiles and cvs add the files.  This may
become *very* annoying.

> But Joe, you know how smart Joe can be :), will quickly see his
> configure depends upon the files which are in m4/, and his intuition
> will tell him things about ln, cp and mv, while his intuition has
> probably little to tell about acimport --inline-file, acimport
> --replace-inner-file etc.

You're mixing the interface of aclocal with its implementation.  The
fact that it stores macros in separate files instead of in-lining them
in aclocal.m4 is an implementation detail.  Even if we decide that the
way to go is to have macros separated, it's still an implementation
detail, and we're still going to have to offer options for the user to
update macro files and stuff.  The point is that the default of having
separate files is an implementation detail that isn't hidden from the
user.  He still has to take care of each individual file.  No big
deal, but it prevents us from changing the implementation without
modifying the interface.  That's important for maintainability.

People would be free to play with cp/mv/ln, but they'll be breaking
the abstraction layers, and they shouldn't blame us if we eventually
change the implementation.  They should be using the public interface
or accepting the risk.

> | > I really don't think I am being Mike X. Pert here, think of Joe who
> | > will have to learn all this too!
> | 
> | But he shouldn't have to learn all this to start using autoconf.

> Hm, them this is valid for both sides, isn't it?  Or I missed your
> point.

He shouldn't be forced to learn about the separation of macro files.

> I'm trying to make Autoconf easier.  I really do.

So am I.

> Agreed, but not at the expense of complications.

What complications?  Why do you think having an m4_include statement
in aclocal.m4 and a separate .m4 file any simpler than a single
aclocal.m4?  I fail to find it simpler.  I find it unneeded
complication.

> I was trying to explain why m4 files deserve a different approach than
> the all mighty missing.  All mighty missing can exist, Automake or
> Autoconf can centralize its ``modules''.

We're already seeing signs that it can't.  People keep asking for
additional `missing' features, and we shouldn't impose them upon every
developer that uses automake.

> But m4 files do not fit this picture: there are way too many.

> So they have to remain independent entities so that you can look for
> them, change them, include them etc.

Same difference.

> | > Because I really don't think we need two answers to a single need.
> | 
> | It's not a single need.  What you're failing to see is that there are
> | different kinds of autoconf users.  There are those that maintain
> | their own set of m4 extensions, who *want* their macros to be in
> | separate files, and those that just use them, who care about the
> | macros, and would rather abstract the very existence of files away.

> But why then did you refuse the `only one of the two pure approaches'
> proposal?

Precisely because I don't believe one size fits all in this case.  I
want to help users evolve, not force them into quantum leaps.  Nobody
is either a Joe D. Velloper or a Mike X. Pert.  People are in
between.  Why shouldn't autoconf go along with them, allowing them to
adopt the macro files they wish to make changes to, while still
letting them not care about those they don't want to care about yet?

> I'm precisely referring to its all-mightism.  If it had not this
> double nature of m4_include and inlined sections, I agree it would be
> simple too.

The all-mighty only approach is certainly the wrong way to go.  We
*must* support m4_include, hand-written or auto-generated, to allow
people to separate macro files.  What I want is a no-mistake default
for beginners and the choice for masters.

> PS/ Well, if we don't consider the patches, I think we're exchanging
> the longest messages ever between us :)

Most definitely :-)

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                  aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist    *Please* write to mailing lists, not to me









| > Personally I don't think it is so likely, but it is, definitely, but I
| > really can't imagine something big happen because of this.  I don't
| > see much difference with `forgetting' to distribute the Bison sources,
| > or acconfig.h etc.
| 
| Nobody forgets acconfig.h because it's only used in the presence of
| automake, and automake takes care of it.  

Well, what is the difference here?

If I understand correctly your argument you're saying that only
Automake puts the proper rules for config.h regeneration via
autoheader.  Then I'd answer without Automake there are as little
risks to see autoconf run.

| In the case of m4 macro
| files, one may easily forget about it because they aren't needed to
| build the package, just to hack on it.  So most people won't even
| notice they're missing.

Very same with acconfig.h and even configure.in actually, and with
higher-order sources such as gperf, Bison, Flex, IDL etc.


| > What I want to avoid is extra options to handle the different cases
| > where I think a single behavior is enough.
| 
| That's where we disagree.  There are two kinds of wanted behaviors:
| that of a newbie autoconf user and that of an expert user.  I'm fine
| with arranging for this tool to support only the newbie by default, as
| long as it doesn't prevent the expert from having his macro files
| separated.  I'm not fine with forcing a newbie to care about that.

I understand you are against forcing, and I'm certainly always of
pushing things onto the user like this, but in the case we are
debating about, I fail to see what makes it so harder.  It seems very
straight to me, and I'm saying this thinking about Joe, not Mike.


| > In the long run, even Joe will be tired to pass options to acimport
| > (we need a name, but that's for later :), not to mention Mike :)
| 
| How about aclocal?
| 
| I intend to built it upon GNU art (ARchiver of Text), which I'm
| designing.
| 
| GNU art (which would probably be part of autoconf) would be a tool to
| add/remove/extract sections from text files.  Autoconf would use it to
| manage not only aclocal.m4, but also missing.  It will have to have
| lots of options, to allow for this and other kinds of uses, but we'd
| provide aclocal and acmissing as front-ends to art.  Even if we choose
| to support only the m4_include solution in aclocal.m4, we'd probably
| still use some form of `art' :-) to add the m4_include statements.

This is getting even bigger!  That's precisely what I wish to avoid.

Let me make it clear, GNU art is certainly a good idea, and I do think
of a couple of places where I would use it.  Also, it is clear that if
GNU art exists, that's the natural base layer for what you want to do.

But I still don't think we need such an artillery for that very issue.



| > My view on backward compatibility here is simple: either you obey the
| > old scheme, in which case autoreconf does nothing, or aclocal
| > (recognized via its comment) in which case autoreconf runs, or
| > finally, using m4_includes, also recognized by some signature.
| 
| And you claim this to be simpler than allowing for guarded
| m4_include/whole files in aclocal.m4?  Where's the single-choice
| decision?  

There is a single promoted approach, all the rest is here for backward
compatibility only.  I would even -W obsolete other uses.



| The solution I propose is fully backward-compatible, while
| still supporting the advanced uses Mike X. Pert wants.  

To the expense of additional complexity.  I really mean that!  You
seem to say that I'm lacking of abstraction here, and I hear your
point, but I disagree that relying on the file system is lacking
abstraction.

In fact there is nothing more important than reusing known scheme.
Putting a new wonderful interface extremely powerful will never be
justified if there was an existing means to reach the same goals.

For instance, GNU art would make a major mistake, IMHO, if it was not
using the same options as GNU tar.  And in fact, I wonder whether it
would not be better to try to teach tar or cpio or whatever, a
different streaming method.

Here there is an *abstract* interface well known by each of our users:
the file system.  I see no reason to reject it.

There is an example I like: the Eiffel programming language.  They
have very simple rules: a class is one file, and vice versa, a module
is one directory, and vice versa.

That's *perfect*!  It's clear, gives a natural trend to structure the
projects in similar manners etc.

In addition, it allows them to simplify the code, and suddenly gives
an extraordinary power to the users via all the classical commands!


The file system is itself is a wonderful interface.  It is so natural
that there are even things like /proc now!  See proc/?  Something
extraordinary with it is that all the good old tools we are used to
can be used here.

I do think using the file system does provide some abstract, and a
well understood one.



| > We can easily have tons of guards to protect the innocents from
| > override their hand written code.
| 
| My point is that we just shouldn't overwrite aclocal.m4.  We should
| append to it, or update guarded sections of it, never generate it from
| scratch.

My point is that since we can release Mike and Joe from maintaining
it, there is no reason to have to!



| > | >   The maintainer has nothing to do at all to ensure the completeness
| > | >   of the local copies/symlinks of the extensions files
| > | 
| > | He has to run autoreconf or the new aclocal, just like in the ``All
| > | Might Aclocal'' approach.  This can't be used as an argument in favor
| > | of your proposal.
| 
| > In the AMA you have to pass options to specify what's the behavior you
| > want, that's what I meant.
| 
| You don't have to pass any options.  You *may* pass them, to change
| the default.  Same difference.

Sorry, I fail to see how, for instance, when you suddenly depend upon
another m4 file, you may not have to specify via an option whether it
should be inlined, or included.


| > By manually I meant `has to pass options'.  I was referring to a brand
| > stupid `autoreconf' with no flags.
| 
| You're assuming (i) autoreconf is the tool that manages aclocal.m4 and

autoreconf or whatever.  The point is that the tool must know what to
do, and must not expect input from us.

But we agree that anyway here, we can have an envvar for instance
which tells the tool once for all to use one or the other scheme.

But then when you import an existing project which used a different
strategy, things can go bad.


| (ii) the default is not the one you want.  (i) is certainly not the
| way to go, and I think we can agree on that in advance.  

Agreed :)

| (ii) means
| you feel the battle is already lost.  Come on, man, fight! :-) :-)

No :)  It means that given your motivation (helping Joe), it is
obvious that you want the default to be Babyconf.


| > I agree with the prologue, but not with the conclusions.  We all made
| > mistakes, we all shipped some oldish config.guess, or forgot some
| > file.
| 
| My point is: why should we make yet another mistake easier for one to
| make?  And bear in mind that it's not just about packaging
| distributions.  It's also about maintaining CVS trees.  I've had
| enough trouble with other maintainers of Kaffe failing to understand
| how the pieces fall together that I'd rather have some very simple
| default that hopefully would get them satisfied.

As you have said, but it was more like a joke, we *can* imagine a tool
that checks the conformance between the CVS archive, and the local
copy.

Really, why not?  Automake knows a great deal about the package: it
can check that the higher order sources are included, it can check
configure is in the tree (or not depending the policy used in the CVS
archive wrt generated files) etc.  It can even just check you didn't
forget to cvs add your new foo.c.

Nothing new with the extension files.



| > It's, IMHO, equally simple to teach acimport and nothing more.
| 
| Yup.  The nothing more is precisely what I've been arguing for.  No
| need to look at what files acimport has installed and go fix
| Makefile.in to get them distributed, and cvs add them.

The differences between you and me can basically be summarized by the
fact you seem to pay great attention to what I'd call the transitory
state.

Yes, it is possible for someone to forget to update Makefile.in (are
there really many people who use Autoconf but not Automake?  I really
don't know, on gnu.org I know no non Automake package, but there are
probably others).

But I can't see this as a sufficient reason to compromise the stable
state.



| No.  Just the small collection of files needed by libtool, and all
| those Makefile.am files whose syntax they don't understand (even
| though it's just a Makefile!), plus the dependencies between
| acinclude.m4, configure.in, aclocal.m4, configure, Makefile.ins,
| acconfig.h, config.h.in, config.h, etc.

Yes, I know this ugly stuff :( This is also why I'm struggling with
autoreconf.



| > My concerns goes also to the people who are used to walk in the
| > packages, those free lancers you never heard of who sometimes send a
| > patch against your package.  I'm concerned by the homogeneity of all
| > the packages because of all these people.  We have to keep it uniform
| > so that there is no wondering on how the package configuration works.
| 
| What could be more uniform than a single aclocal.m4 per package?

One point, but that was stabbing my back :)

Yes, of course.  Again I was talking about the possibility that there
are several methods, and you answer on the other side.  You know we
cannot continue with aclocal.m4 as it is, we need an m4_include
approach.  I'm saying it should be the only one, you're saying, no, we
need several.



| That's where anybody would look at first.  Granted, if it m4_includes
| other macro files, ok, anybody can figure what m4_include means.  But
| Mr. Rand M. Hacker will certainly look at aclocal.m4 first.  And he'll
| probably be glad to be able to type C-s and find the macro he's
| looking for in there, instead of having to figure out in which file
| the macro is defined.

I disagree.  He'll be much happier to find a file dedicated to this
issue, see what are the local macro that relate together, and send a
patch against this only.  He'll be much happier to be able to use his
old knowledge of Unix tools than to have to juggle either with Emacs,
or with ac-mini-tar.


| > We all are this kind of users.  Several times (not many, agreed), I
| > ran a couple of diffs upon some m4 files to check whether they were up
| > to date, to check whether I could trust their gettext.m4 for
| > instance.  You can't do that with AMA.  Or you need `acimport --diff'
| > something?
| 
| You'd `aclocal --extract foo.m4' then run plain diff.

Grosssssssssss!

*That*'s what I'm talking about!!!  

What is the semantics of your `aclocal --extract foo.m4'?  It extracts
foo.m4 but leaves in there too, or replaces the foo.m4 inside with an
include of foo.m4?

More questions, more wondering, more asking oneself what the tool is
going to do, while you know so well what diff, cp etc. mean!



| > There are just way too many tools you no longer can use.  Again, think
| > of libtoolize!  You'd have to acimport afterwards, or have libtoolize
| > acimport?
| 
| libtoolize would aclocal in the macro.

This is not sane!  1. it means waiting for all the maintainers tools
to catch up, 2. it considerably increases the coupling between the
packages!  

And what when you want to update libtool.m4 and the maintainers knows
you must not?  Instead of just cp in any case and let the rights do
their job, you'll have to provide some complex option which will
specify under what conditions you should update, that if it was an
include, keep it as an include, if it was inlined, keep it inlined,
but if it was not present then what: inline or include?  Yet another
option to libtoolize.  In addition to the option which says that if it
is an include which is wanting, is it an include of a link, or of a
copied libtool.m4?

Anyway, I think it's the converse that must happen: libtoolize is the
low level tool, and it's autoreconf --install that must take care of
completing the installation.



| > All I can see is additional complications just to have Joe learn his
| > first HelloWorld, while as soon as he'll want to do HelloWorld 0.2,
| > he'll be using something more open to extensions.
| 
| The point is precisely to keep Joe willing to use autoconf.  

Frankly, I just don't care.  I'm not here to sell Autoconf.

I'm doing my best to have Autoconf make its job the best possible, and
the hard part is in the long run, not in the first steps.  Yes, I
agree the first steps are not easy, and actually we should promote
tutorials that explain Autoconf and Automake together.

But Autoconf is not a tutorial.  There shall be no autoconf
--i-m-a-novice.

You know, we can also imagine that aclocal will check *by default*
that the names of the files it includes are in the local Makefile.
That would very address your issue!

We can provide plenty of new --warnings to assists beginners.  That's
the sane approach, that's what compilers do!  But they don't provide
Babyfeatures!  They look over your shoulder if you're doing it right,
but they are not trying to present a different interface for novices.

I see no reason for autoconf to be innovative on this issue.


| If we
| keep it simple for the starter, he'll remain with us and eventually
| know enough to want to manage separate m4 files.  Then, he'll add
| AC_MACRO_DIR(m4) to the beginning of aclocal.m4 and the new aclocal
| will start to get m4 extensions installed in m4 for him.  Until then,
| he'd be able to use autoconf without worrying about it.

How do you handle the transition between the two states?  The next run
of aclocal will `explode' aclocal.m4?  And then, what will you do of
the foo.m4 that might already be there?

And where's the transitional state where you can have handwritten,
inlined and included macros?  You must not use AC_MACRO_DIR?

More rules to learn, more matrices with crosses that explain how
things inter-operate.


| > Well, you're definitely right.  My point was ``extendable packages
| > will be different uselessly''.
| 
| What's an extendable package?

Something which presents its source form, not its configuration form.

You know, after all we could tar configure.in, aclocal.m4, cccp.y
etc. together in the package we ship.  That's a means to deliver
something clean from all the stuff which is useless for regular
installers.

I'm referring to exactly this.

We do not want to tar configure.in and the Makefile.am together.

We do not want to tar the extension files together.


| > The fact is nobody likes this.
| 
| Ask beginners.  Unfortunately, the autoconf mailing list is full of
| Mike X. Perts that want, with all their forces, to keep their ability
| to split their macros across multiple files, that don't consider it a
| big deal that some newbies may make a couple of additional mistakes as
| they start using autoconf.  I'm *very* worried about introducing yet
| another element of complexity in autoconf, because of my unfortunate
| with Kaffe.  I agree it's not a major complexity, and it's something
| every user would eventually figure out, but I'd rather avoid the
| mistake at first, and let the user learn.

I think I'm sensitive to your argument, but somewhere I rank the level
of the users and of the ``difficulty'' differently.  I'm doing lots of
efforts to Joeize myself, and I still fail to see why your scheme is
easier for me.

        1. Well, yes, there is that `make dist' concerns.  OK, I
        missed my tarball the first time, but now I understand and did
        something great.  Where is my slashdot?

        2. Well, yes, I use Automake, and it rocks!  (Well, it works,
        since it seems `it rocks' isn't proper English :)

        3. Well, I was about to shoot myself in the foot, but thanks
        to -W novice, aclocal warned me.  I love these tools.


| m4 files are sources only for people who maintain them.  For plain
| users (I mean, the developers that want to use the macros in their
| configure.ins), those need not be faced as sources.  They probably
| wouldn't care if we shipped a frozen m4 file.  

As an aside, running autoconf on the fileutils's configure with or
without a frozen aclocal.m4 makes no difference: it's about as long!
I was surprised.


| > Sometime, somehow, Joe will regret his decision, the very decision
| > we left over him, and maybe will complain we didn't guide him on the
| > maintainability-extandability road.
| 
| You may be right.  Then I'll ask him whether he'd have liked to have
| to care about all those files in the beginning.  He may even say he
| would, but I won't believe him, because, by then, he'll already be an
| X. Pert, and will are more about his convenience than about
| difficulties that other new users may have to face.

:) :) :)



| > No, I don't think I'm missing this.  Joe, who wants to know nothing,
| > will just run acimport as he used to run aclocal.
| 
| He'll have to adjust the Makefiles and cvs add the files.  This may
| become *very* annoying.

Just as for the rest of the source files, such as Makefile.am.  Too
bad Automake does not have `make cvs-check with an AUTOMAKE_OPTION
stating if all-the-package-in-the-archive,
only-sources-into-the-archive, or shut-the-heck-:-)-up-let-me-do.


| > I'm trying to make Autoconf easier.  I really do.
| 
| So am I.

Yep.  That's terrible: I think we want the same things, but we have
different views on the means.  It would have been so simpler to
completely disagree on the goals, and simply despise each other :)



| What complications?  Why do you think having an m4_include statement
| in aclocal.m4 and a separate .m4 file any simpler than a single
| aclocal.m4?  I fail to find it simpler.  I find it unneeded
| complication.

The static is simpler, the dynamic is much more complex.



| > I'm precisely referring to its all-mightism.  If it had not this
| > double nature of m4_include and inlined sections, I agree it would be
| > simple too.
| 
| The all-mighty only approach is certainly the wrong way to go.  We
| *must* support m4_include, hand-written or auto-generated, to allow
| people to separate macro files.  What I want is a no-mistake default
| for beginners and the choice for masters.

The whole complexity of your proposal lies in this in between.  That's
what I am still against.  The two extremes is something that keeps
both simplicities.  That stuff in the middle of it if what I think is
unreasonable.


| > PS/ Well, if we don't consider the patches, I think we're exchanging
| > the longest messages ever between us :)
| 
| Most definitely :-)

And it is still not over :)


Alexandre, I think our debate is interesting enough to be make
public.  Would you mind if we send all this thread to autoconf@?

I fear lengthy threads, which would be a bad thing, but if we expose
our points of view, maybe we could try to see a consensus emerge.

But then ``autoconf is full of Mikes :)''.






On Aug  1, 2000, Akim Demaille <[EMAIL PROTECTED]> wrote:

> | Nobody forgets acconfig.h because it's only used in the presence of
> | automake, and automake takes care of it.  

> Well, what is the difference here?

For some reason, I was thinking acconfig.h only existed when automake
was in use.  This is obviously wrong, since autoheader uses it
regardless of automake.

> Very same with acconfig.h and even configure.in actually, and with
> higher-order sources such as gperf, Bison, Flex, IDL etc.

Agreed.

> Let me make it clear, GNU art is certainly a good idea, and I do think
> of a couple of places where I would use it.  Also, it is clear that if
> GNU art exists, that's the natural base layer for what you want to do.

> But I still don't think we need such an artillery for that very issue.

Hadn't we agreed this was the way to go for `missing'.  So we need the
tool, why not use it for something else too?

> | The solution I propose is fully backward-compatible, while
> | still supporting the advanced uses Mike X. Pert wants.  

> To the expense of additional complexity.  I really mean that!

I worry more about additional complexity for the user than for us.

> You seem to say that I'm lacking of abstraction here, and I hear
> your point, but I disagree that relying on the file system is
> lacking abstraction.

What if the next Akim decides that files are not the right level of
abstraction for splitting m4 macros, and pushes for a macro-per-file
solution?  Anyone relying upon files would lose.  That's why I say
using files is just an implementation detail, that the user shouldn't
have to care about.

> In fact there is nothing more important than reusing known scheme.
> Putting a new wonderful interface extremely powerful will never be
> justified if there was an existing means to reach the same goals.

Agreed.  Let's use a single aclocal.m4 :-) :-) :-)

> For instance, GNU art would make a major mistake, IMHO, if it was not
> using the same options as GNU tar

It needs options to specify separators, headers and trailers.  The
rest can be kept pretty much like tar.

> In addition, it allows them to simplify the code, and suddenly gives
> an extraordinary power to the users via all the classical commands!

Except that, if someone ever decides to change the internal
representation, all their extraordinary power becomes a source of
trouble.

> The file system is itself is a wonderful interface.  It is so natural
> that there are even things like /proc now!  See proc/?

Do you really think it's wonderful that the kernel code must have code
to convert data structures from an internal format to a text
representation and vice-versa, and to deal with errors when dealing
with input?  I find the FreeBSD approach far saner: it's an external,
user-level tool that maps the kernel memory and does the encoding and
decoding of information.

> I do think using the file system does provide some abstract, and a
> well understood one.

I agree it does provide some amount of abstraction, but it's not the
abstraction our users care about.  Our Joe users care about *macros*,
not m4 files developed by someone else!  That's the abstraction we
should provide him with.  We shouldn't push any further abstractions
upon him if we can help it.

> Sorry, I fail to see how, for instance, when you suddenly depend upon
> another m4 file, you may not have to specify via an option whether it
> should be inlined, or included.

Whatever the default we choose, you won't have to pass an option to
enable that default, because it will be the default.  Only if you want
to change the default will you have to give an option.

> But we agree that anyway here, we can have an envvar for instance
> which tells the tool once for all to use one or the other scheme.

Not an env var.  We'd have aclocal.m4.  That's the file we'd look at
to see which option the user wants, which files he already
m4_includes, etc.

> As you have said, but it was more like a joke, we *can* imagine a tool
> that checks the conformance between the CVS archive, and the local
> copy.

The newbie would still have to learn about this tool to be able to use
it.  And since it would be part of autoconf, it would know very little
about Makefile structure or even about the distribution mechanism
chosen by the user.

> Yes, it is possible for someone to forget to update Makefile.in (are
> there really many people who use Autoconf but not Automake?

Yes, lots of them.

> I really don't know, on gnu.org I know no non Automake package, but
> there are probably others).

How about GCC, for a start?

> Yes, of course.  Again I was talking about the possibility that there
> are several methods, and you answer on the other side.  You know we
> cannot continue with aclocal.m4 as it is, we need an m4_include
> approach.

I know we need it for advanced users, who maintain their own sets of
macros.  I wouldn't ever recommend it for newbies.  Never! :-)

> What is the semantics of your `aclocal --extract foo.m4'?  It
> extracts foo.m4 but leaves in there too, or replaces the foo.m4
> inside with an include of foo.m4?

Whatever we decide it to be.  It's clear to me that we should have
both possibilities.

> | > There are just way too many tools you no longer can use.  Again, think
> | > of libtoolize!  You'd have to acimport afterwards, or have libtoolize
> | > acimport?

> | libtoolize would aclocal in the macro.

> This is not sane!  1. it means waiting for all the maintainers tools
> to catch up, 2. it considerably increases the coupling between the
> packages!  

I don't understand.  That's precisely what aclocal does now.  What's
there to catch up?  What coupling are you talking about?

> And what when you want to update libtool.m4 and the maintainers knows
> you must not?

aclocal --force aclocal.m4 [/path/to/libtool.m4]

You wouldn't have to know whether libtool.m4 was inlined or not at
first, it would keep the inline/include status of each file unchanged.

> but if it was not present then what: inline or include?

The default, that may have been changed in aclocal.m4 itself.

> Anyway, I think it's the converse that must happen: libtoolize is the
> low level tool, and it's autoreconf --install that must take care of
> completing the installation.

Whatever.  Both would use aclocal to install libtool.m4 in the
package's tree, either inline or m4_included in aclocal.m4

> | The point is precisely to keep Joe willing to use autoconf.  

> Frankly, I just don't care.  I'm not here to sell Autoconf.

Great.  We don't need users.  Who cares about users?  What's the point
of having users, if all the fun is in writing the software?

> You know, we can also imagine that aclocal will check *by default*
> that the names of the files it includes are in the local Makefile.

What local Makefile?  There's no such thing as a local Makefile, from
the point of view of autoconf.  autoconf just AC_SUBST data in generic
files.  It knows nothing about Makefiles in particular.  There's
nothing it can (or should) do.

> We can provide plenty of new --warnings to assists beginners.  That's
> the sane approach, that's what compilers do!  But they don't provide
> Babyfeatures!  They look over your shoulder if you're doing it right,
> but they are not trying to present a different interface for novices.

Sure they do.  Think of `-g'.  Real programmers don't use `-g' :-) :-)

> How do you handle the transition between the two states?

He'll ask aclocal to extract some of the included m4 files into a
separate file, so that he could manage it separately.

> And where's the transitional state where you can have handwritten,
> inlined and included macros?  You must not use AC_MACRO_DIR?

AC_MACRO_DIR would apply to newly imported m4 files.  You'd have to
export the ones that were already inline.

> More rules to learn, more matrices with crosses that explain how
> things inter-operate.

???

> | You may be right.  Then I'll ask him whether he'd have liked to have
> | to care about all those files in the beginning.  He may even say he
> | would, but I won't believe him, because, by then, he'll already be an
> | X. Pert, and will are more about his convenience than about
> | difficulties that other new users may have to face.

> :) :) :)

I'm not kidding.  I'm very serious about this.

> | He'll have to adjust the Makefiles and cvs add the files.  This may
> | become *very* annoying.

> Just as for the rest of the source files, such as Makefile.am.

Which *is* annoying already.  Why add more annoyance?

> | > I'm trying to make Autoconf easier.  I really do.
> | 
> | So am I.

> Yep.  That's terrible: I think we want the same things, but we have
> different views on the means.  It would have been so simpler to
> completely disagree on the goals, and simply despise each other :)

:-)

> | What complications?  Why do you think having an m4_include statement
> | in aclocal.m4 and a separate .m4 file any simpler than a single
> | aclocal.m4?  I fail to find it simpler.  I find it unneeded
> | complication.

> The static is simpler, the dynamic is much more complex.

Who cares about the dynamic?  The user cares about the static, that's
what he sees.

> The whole complexity of your proposal lies in this in between.  That's
> what I am still against.  The two extremes is something that keeps
> both simplicities.  That stuff in the middle of it if what I think is
> unreasonable.

It's a little bit of complexity for us, maintainers, but it's a great
deal of flexibility for our users.  I'm pretty sure they'll appreciate
it.

> Alexandre, I think our debate is interesting enough to be make
> public.  Would you mind if we send all this thread to autoconf@?

Absolutely. (no, I wouldn't :-)

Except for the minor issue that it starts with a message that presents
the two proposals with a clear favoring of yours.  But I can live with
that.

> I fear lengthy threads, which would be a bad thing, but if we expose
> our points of view, maybe we could try to see a consensus emerge.

> But then ``autoconf is full of Mikes :)''.

That's been a problem :-(

I wish we had a list of autoconf newbies to poll...

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                  aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist    *Please* write to mailing lists, not to me







>>>>> "Alexandre" == Alexandre Oliva <[EMAIL PROTECTED]> writes:

>> Let me make it clear, GNU art is certainly a good idea, and I do
>> think of a couple of places where I would use it.  Also, it is
>> clear that if GNU art exists, that's the natural base layer for
>> what you want to do.

>> But I still don't think we need such an artillery for that very
>> issue.

Alexandre> Hadn't we agreed this was the way to go for `missing'.  

Yep, certainly we agree `missing' should be built.  But I'm not sure
something like GNU art would give us all the power we need.  It might,
I just have no idea, but we might need to put glue between the section
of subtools, and maybe GNU art will not ne enough.  Or we will have to
write a template for it to work on, and in this case, maybe the
templater will be able to do what we were expecting GNU art to.

In addition, I think we should study shtool first, before deciding we
don't want to use it.

There are a few things I don't like in shtool, but maybe his author
would agree to include some changes from us, which would save a lot of
time for everybody.


Alexandre1> The solution I propose is fully backward-compatible, while
Alexandre1> still supporting the advanced uses Mike X. Pert wants.

Akim> To the expense of additional complexity.  I really mean that!

Alexandre> I worry more about additional complexity for the user than
Alexandre> for us.

:)  You know I mean additional complexity for everybody :)  This
includes, Joe, Mike, and Otto M. Tainner.



Akim> You seem to say that I'm lacking of abstraction here, and I hear
Akim> your point, but I disagree that relying on the file system is
Akim> lacking abstraction.

Alexandre> What if the next Akim decides that files are not the right
Alexandre> level of abstraction for splitting m4 macros, and pushes
Alexandre> for a macro-per-file solution?  Anyone relying upon files
Alexandre> would lose.  That's why I say using files is just an
Alexandre> implementation detail, that the user shouldn't have to care
Alexandre> about.

But this Akim is *wrong*.  A tool must never decide to split macros
apart, just as you can just pull a function out of a file.

Files are our modules.  You can automatically deal with modules.  You
cannot get into them and play arbitrary games.

These modules have properties the macro don't have: they can
AC_PREREQ, they can AC_PROVIDE_IFELSE etc.

The right abstraction is definitely at the level of modules, not of
macros.

(And, BTW, I don't see well what differentiates your approach from
mine here: you were thinking about --add foo.m4, not --add MY_AC_FOO,
weren't you?).



>> In fact there is nothing more important than reusing known scheme.
>> Putting a new wonderful interface extremely powerful will never be
>> justified if there was an existing means to reach the same goals.

Alexandre> Agreed.  Let's use a single aclocal.m4 :-) :-) :-)

:) :)



>> In addition, it allows them to simplify the code, and suddenly
>> gives an extraordinary power to the users via all the classical
>> commands!

Alexandre> Except that, if someone ever decides to change the internal
Alexandre> representation, all their extraordinary power becomes a
Alexandre> source of trouble.

I agree with this.  But that's our contract with the users to maintain
all the needed backward compatibility they need, maybe indeed, as a
transition step to another solution.

But really, I see no reason for the scheme I promote to be more likely
to be limited than yours.  Both may someday be proved complete
inadequate to address this or that issue.

Nevertheless, I trust the two solutions to be generic enough to
address all the issues we might face for a least a few years.



>> The file system is itself is a wonderful interface.  It is so
>> natural that there are even things like /proc now!  See proc/?

Alexandre> Do you really think it's wonderful that the kernel code
Alexandre> must have code to convert data structures from an internal
Alexandre> format to a text representation and vice-versa, and to deal
Alexandre> with errors when dealing with input?  I find the FreeBSD
Alexandre> approach far saner: it's an external, user-level tool that
Alexandre> maps the kernel memory and does the encoding and decoding
Alexandre> of information.

I don't have a clue on how this is done, this is implementation
details :P

I'm just referring to the extraordinary power this gives to the user,
while remaining incredibly simple to use.


>> I do think using the file system does provide some abstract, and a
>> well understood one.

Alexandre> I agree it does provide some amount of abstraction, but
Alexandre> it's not the abstraction our users care about.  Our Joe
Alexandre> users care about *macros*, not m4 files developed by
Alexandre> someone else!  That's the abstraction we should provide him
Alexandre> with.  We shouldn't push any further abstractions upon him
Alexandre> if we can help it.

Hey, again I don't see your point here.  Both your and my approach are
basically importing m4 modules.  They cannot be finer grained.

And this is still irrelevant anyway, since we can have a tool that
automatically adjusts the modules required by a configure.in.  Joe and
Mike have nothing to know about AC_PROG_LIBTOOL, they just need to
know that when autoconf complains, then it probably means they
suddenly depend upon a module they have not imported yet.

They actually don't need to know that modules blah blah, just that
something's missing, and your or my tool will provide it.




>> I really don't know, on gnu.org I know no non Automake package, but
>> there are probably others).

Alexandre> How about GCC, for a start?

Good catch :)

Hm, they ship a single aclocal.m4 with plenty of stuff in there.  Hm,
gross.  They really need m4_include :)



>> What is the semantics of your `aclocal --extract foo.m4'?  It
>> extracts foo.m4 but leaves in there too, or replaces the foo.m4
>> inside with an include of foo.m4?

Alexandre> Whatever we decide it to be.  It's clear to me that we
Alexandre> should have both possibilities.

That's the complications I am continuously referring to: there are
zillions of possibilities, which means zillions of if/fi, zillions of
--options, and zillions of lines of documentation.

I agree that with zillions I might be exaggerating.  Let's make it
billions :)


>> | > There are just way too many tools you no longer can use.
>> Again, think | > of libtoolize!  You'd have to acimport afterwards,
>> or have libtoolize | > acimport?

>> | libtoolize would aclocal in the macro.

>> This is not sane!  1. it means waiting for all the maintainers
>> tools to catch up, 2. it considerably increases the coupling
>> between the packages!

Alexandre> I don't understand.  That's precisely what aclocal does
Alexandre> now.  What's there to catch up?  What coupling are you
Alexandre> talking about?

I'm afraid to see circular dependencies between tools like libtoolize,
and autoreconf for instance.  I think updating the package is a work
for autoreconf, not libtoolize.

But I think I don't understand what you mean here.  I understood your
sentence as ``libtoolize runs aclocal'', which it doesn't appear to
do:

/tmp % libtoolize                                                nostromo 14:33
Remember to add `AM_PROG_LIBTOOL' to `configure.in'.
You should add the contents of `/usr/share/aclocal/libtool.m4' to `aclocal.m4'.

This seems the good thing to me.  I understand `fooize' as `import
everything needed to use foo', not `import and setup my package to use
foo'.

Anyway: these are just fears.  Maybe it's a sane approach, I can't
tell, I have not thought enough about it.  It's just a feeling: fooize
tools should not try to be too smart.



>> And what when you want to update libtool.m4 and the maintainers
>> knows you must not?

Alexandre> aclocal --force aclocal.m4 [/path/to/libtool.m4]

Alexandre> You wouldn't have to know whether libtool.m4 was inlined or
Alexandre> not at first, it would keep the inline/include status of
Alexandre> each file unchanged.

If you don't know, it's even worse wrt shipping included modules.
That's another useless trap.  Better know for sure the behavior than
wondering.




>> Anyway, I think it's the converse that must happen: libtoolize is
>> the low level tool, and it's autoreconf --install that must take
>> care of completing the installation.

Alexandre> Whatever.  Both would use aclocal to install libtool.m4 in
Alexandre> the package's tree, either inline or m4_included in
Alexandre> aclocal.m4

This, I'm not sure libtoolize should.  The coupling I'm referring too
is precisely having Libtool depend heavily on the interface of
aclocal.  It means that libtoolize will need to have the glue code for
Automake's aclocal, then Autoconf's etc.

IMHO, it should address a simple task, installing files in the src
tree, and no more (but displaying further instructions as 1.3.5 does).
But I'm not sure yet, again, this is just a feeling.



>> | The point is precisely to keep Joe willing to use autoconf.

>> Frankly, I just don't care.  I'm not here to sell Autoconf.

Alexandre> Great.  We don't need users.  Who cares about users?
Alexandre> What's the point of having users, if all the fun is in
Alexandre> writing the software?

My sentence is probably too strong and distorts my thoughts.  I mean,
I am willing to write a good, an excellent, tool that addresses its
mission.  I don't think babizing the tool to catch a wider audience is
its mission.

It is in that sense that I don't care: I'm not here to sell Autoconf
thanks to better colors on the cover, I'm here to have people enjoy a
tool perfectly suited for their problems.

(Yeah, I know your answer, your proposal is even better suited :)



>> You know, we can also imagine that aclocal will check *by default*
>> that the names of the files it includes are in the local Makefile.

Alexandre> What local Makefile?  There's no such thing as a local
Alexandre> Makefile, from the point of view of autoconf.  autoconf
Alexandre> just AC_SUBST data in generic files.  It knows nothing
Alexandre> about Makefiles in particular.  There's nothing it can (or
Alexandre> should) do.

I have mixed feelings about this.  Please, note I'm only referring to
*checking*, not performing anything.

I agree theoretically with your point.  But from a more practical
point of view, our goal is to watch our users, and I doubt there is
more than 1% of configure.in which are not meant to be `make dist'ed.
Hence, it might be good to optimize the warnings for the common cases.

Some kind of aclint.



>> We can provide plenty of new --warnings to assists beginners.
>> That's the sane approach, that's what compilers do!  But they don't
>> provide Babyfeatures!  They look over your shoulder if you're doing
>> it right, but they are not trying to present a different interface
>> for novices.

Alexandre> Sure they do.  Think of `-g'.  Real programmers don't use
Alexandre> `-g' :-) :-)

Tss, don't laugh about this: my students are *really* believing in
this.  And they -O4...  And of course, when I try their project, it
dumps core :(



>> More rules to learn, more matrices with crosses that explain how
>> things inter-operate.

Alexandre> ???

I'm referring to 1. replace unconditionally, 2. don't, a. inline,
b. include, etc.  Actually much of the questions I asked, and to which
you gave an answer (sometimes answering: ``Whatever we decide it to
be.  It's clear to me that we should have both possibilities.'').





>> | You may be right.  Then I'll ask him whether he'd have liked to
>> have | to care about all those files in the beginning.  He may even
>> say he | would, but I won't believe him, because, by then, he'll
>> already be an | X. Pert, and will are more about his convenience
>> than about | difficulties that other new users may have to face.

>> :) :) :)

Alexandre> I'm not kidding.  I'm very serious about this.

I understand.   I mean I *understand*, and do feel this too.  But I
was smileying because that's a killer argument which means that *if*
we ask autoconf@ and they are in favor of my scheme, then their answer
is related to their X Pertization.  But *if* they favor yours, then
that's even a clearer sign you're dead right, and I'm dead dead.

In other words, the only answer that you leave me here is :) :) :)



>> | He'll have to adjust the Makefiles and cvs add the files.  This
>> may | become *very* annoying.

>> Just as for the rest of the source files, such as Makefile.am.

Alexandre> Which *is* annoying already.  Why add more annoyance?

Alexandre, again I agree we can have a --baby-option to just have
aclocal.m4.  Granted.  But I'm against the middle state, because I
think the cure is worse than the disease.




>> | What complications?  Why do you think having an m4_include
>> statement | in aclocal.m4 and a separate .m4 file any simpler than
>> a single | aclocal.m4?  I fail to find it simpler.  I find it
>> unneeded | complication.

>> The static is simpler, the dynamic is much more complex.

Alexandre> Who cares about the dynamic?  The user cares about the
Alexandre> static, that's what he sees.

I don't totally agree, just as I don't need a dictionary with just one
page with the words I recently looked for (it's more convenient
though, a perfect babyctionary :).  We need them because of the
potential they provide.  Just like most of the time shipping
Makefile.am is useless.  But it's there because of the non
impossibility we might need it.



>> The whole complexity of your proposal lies in this in between.
>> That's what I am still against.  The two extremes is something that
>> keeps both simplicities.  That stuff in the middle of it if what I
>> think is unreasonable.

Alexandre> It's a little bit of complexity for us, maintainers, but
Alexandre> it's a great deal of flexibility for our users.  I'm pretty
Alexandre> sure they'll appreciate it.

I really don't think they need this additional flexibility.

Really, I'm convinced there are places where you don't want choices,
which are questions, you just need answers.


<<-
>> Alexandre, I think our debate is interesting enough to be make
>> public.  Would you mind if we send all this thread to autoconf@?

Alexandre> Absolutely. (no, I wouldn't :-)

OK, I'm sending the digest this message being included.


Alexandre> Except for the minor issue that it starts with a message
Alexandre> that presents the two proposals with a clear favoring of
Alexandre> yours.  But I can live with that.

I'll send the digest with the <<-lines->> included as a prologue.
->>



Alexandre> I wish we had a list of autoconf newbies to poll...

[EMAIL PROTECTED] :)





Reply via email to