bug#11153: change automake branching policy: dispensing with the 'branch-X.Y' branches in the future

2012-04-02 Thread Peter Rosin
On 2012-04-02 21:42, Stefano Lattarini wrote:
> Hi Peter, thanks for the feedback.  But I fear we have a misunderstanding
> here.  See below.
> 
> On 04/02/2012 08:14 PM, Peter Rosin wrote:
>> On 2012-04-02 18:13, Stefano Lattarini wrote:
>>> Severity: wishlist
>>> thanks
>>>
>>> Hello Automakers.
>>>
>>> After some real hand-on experience with the current branching policy
>>> of Automake, I'm convinced the presence of the 'branch-X.Y' branches
>>> is just an annoyance and a source of confusion, and that a better policy
>>> would be to simply have a 'maint' branch (where to cut maintenance
>>>  releases directly from), a master branch (where maint is to be kept
>>> regularly merged into, and from which the next major release is to be
>>> derived at last), and possibly topic branches (only when needed, and
>>> better if they are short-lived).  Maybe we could also re-add the 'next'
>>> branch to serve as common ground for feature merging and testing, but
>>> than can be done in a second time (and only if the need arise).
>>>
>>> When a major release is done, the master branch is to be merged into
>>> the maint branch, and then a "new" master branch created stemming
>>> from the resulting commit.
>>
>> I think what you are proposing is better described as dropping the
>> maint branch and doing development of features for both the stable
>> series as well as the pending major release directly on the stable
>> branch.
>>
> Absolutely not.  In 'maint' will go bugfixes, minor new features
> (with low protability of regressions), and possibly new warnings for
> obsoleted features (that might be removed when we pass to a future
> "major" version).  In master will go "bigger" new feature, non-trivial
> refactorings, and backward-incompatible changes (after their coming
> has been duly announced and prepared in 'maint' and/or in earlier
> releases).

Ok, you didn't understand what I meant with dropping maint instead of
release.  My bad.  I think the rest is just follow-up-confusion
resulting from that misunderstanding.  I'll try to explain what I
mean again...

I think we should do exactly as you describe above.  However, for the
class of changes that are related to the actual release from maint we
should not use the maint branch, and therefore we need three branches.
I.e. we should not commit, to maint, exactly those changes that we do
not want on master but still want in the maintenance releases.
E.g. we will *never* want the change bumping the version from 1.12.3 to
1.12.4 on master.  Now, if we do not have both maint and branch-1.12,
we will have to jump through hoops to not get those changes into master
when we next merge maint into master.

I see two alternatives if there is no branch-1.12 (but see below,
near the end, when I think of a third option with short-lived branches)

1. resolve the merge conflicts, and hope that all changes that
   we don't want on master really do result in conflicts so that
   we don't neglect to fix them up in the merge.
2. merge from maint into master before the release-related commits
   and then do a dummy merge (--strategy=ours) afterwards so that
   the changes are ignored when we do a real merge later.  And
   hope that no real changes have weaseled their way into the "release
   window" between the pre-release merge and the dummy post-release
   merge.

I just happen to think those hoops are a worse cure than the disease
(an extra branch) they are targeting.  I.e., I think that maintenance
releases should happen from a separate branch from maint, so that
maint always merges as cleanly as possible into master.  That separate
branch is branch-x.y.  I fail to see what is wrong with the current
setup.

So, how do you intend to jump through the hoops described above
without the extra branch?

I only see one argument for killing the third branch, and that is the
msvc confusion.  And yes, we did make a mess of it with the msvc branch,
but we have learned and will not be so easily duped into pulling in
changes in branch-x.y without going via the maint branch the next time
we have the urge to merge a topic-branch with code suitable for master
into a maintenance release.

> This is basically the situation we have today, but without the extra
> indirections and possibility of confusion (i.e., another 'msvc'-style
> mess will be made less likely).

I think we have learned that lesson, I don't think we will mess up like
that again.  I therefore do not think it's a valid argument for killing
the third branch.

>> When you wish to make a new release you simply make sure
>> you have merged the latest branch-x.y into master, then create a new
>> branch-x. or branch-.0 from where the current master is
>> and you're done.
>>
> You mean that if we have just released automake 1.13, the release
> 1.13.1 should be cut from master?  That is absolutely *not* what I
> want to do.  Sorry if I didn't explain myself clearly enough.

That's of course not what I meant.  Make that "When you wish to
make a 

bug#11155: when cross-compiling with LT_INIT([win32-dll]) wrappers are installed instead of real programs

2012-04-02 Thread Marcin Wojdyr
automake 1.11.1, autoconf 2.68, libtool 2.4, Fedora 16

I'm cross-compiling a project that has LT_INIT([win32-dll]) and has
programs as well as libraries.
After "make" I have programs (.exe) as well as libraries in .libs/

"make install" installs libraries from .libs:
libtool: install:  /usr/bin/install -c
.libs/libDiffImage-0../bin/libDiffImage-0.dll

but instead of installing programs from .libs/ it installs wrappers
from current directory.
Apparently these wrappers on windows are small ~30kb executables.

$ ls -l automask.exe .libs/automask.exe
-rwxrwxr-x. 1 wojdyr wojdyr  27136 04-02 19:14 automask.exe
-rwxrwxr-x. 1 wojdyr wojdyr 112544 04-02 19:14 .libs/automask.exe

They are installed instead of real programs:

test -z "/run/mw/foo/bin" || /bin/mkdir -p "/run/mw/foo/bin
  /bin/sh ./libtool   --mode=install /usr/bin/install -c automask.exe
diffdump.exe printpeaks.exe diff2jpeg.exe '/run/mw/foo/bin'
libtool: install: /usr/bin/install -c automask.exe /run/mw/foo/bin/automask.exe





bug#11153: change automake branching policy: dispensing with the 'branch-X.Y' branches in the future

2012-04-02 Thread Jim Meyering
Stefano Lattarini wrote:
...
> WDYT?  If you agree, I can apply the change below to HACKING, and
> implement the new branching policy starting from the Automke 1.12
> release.

I agree.
IMHO, you won't go wrong following git.git's example.

> diff --git a/HACKING b/HACKING
...
> +* The Automake git tree currently carries two basic branches: 'master' for
> +  the current development, and 'maint' for maintenance and bug fixes.  The
> +  maint branch should be kept regularly merged into the master branch.
> +  It is advisable to merge only after a set of related commits have been
> +  applied, to avoid introducing too much noise in the history.
> +
> +* There may be a number of longer-lived feature branches for new
> +  developments.  They should be based off of a common ancestor of all
> +  active branches to which the feature should or might be merged later.
> +  in the future, we might introduce a special branch named 'next' that
> +  may serve as common ground for feature merging and testing, should
> +  they not be ready for master yet.

reorder slightly:

  they not yet be ready for master.


> +* When a major release is done, the master branch is to be merged into

Does this convey your meaning?

  After making a major release, the master branch is to be merged into

> +  the maint branch, and then a "new" master branch created stemming
> +  from the resulting commit.
>
>  * When fixing a bug (especially a long-standing one), it may be useful
>to commit the fix to a new temporary branch based off the commit that
> @@ -141,12 +126,6 @@
>the active branches descending from the buggy commit.  This offers a
>simple way to fix the bug consistently and effectively.
>
> -* There may be a number of longer-lived feature branches for new 
> developments.
> -  They should be based off of a common ancestor of all active branches to
> -  which the feature should or might be merged later.  The next branch may
> -  serve as common ground for feature merging and testing, should they not
> -  be ready for master yet.
> -
>  * For merges from branches other than maint, prefer 'git merge --log' over
>plain 'git merge', so that a later 'git log' gives an indication of which
>actual patches were merged even when they don't appear early in the list.





bug#11034: Binutils, GDB, GCC and Automake's 'cygnus' option

2012-04-02 Thread Tom Tromey
> "Stefano" == Stefano Lattarini  writes:

Stefano> True, and that was even stated in the manual; the whole point
Stefano> of ditching support for cygnus trees is that by now those two
Stefano> big users are basically not making any real use of the 'cygnus'
Stefano> option anymore.  To quote my previous report:

Stefano>   ./bfd/doc/Makefile.in:AUTOMAKE_OPTIONS = 1.9 cygnus
Stefano>   ./bfd/doc/Makefile.in:# cygnus option.
Stefano>   ./bfd/doc/Makefile.am:AUTOMAKE_OPTIONS = 1.9 cygnus
Stefano>   ./bfd/doc/Makefile.am:# cygnus option.

But this is a reason not to remove it; or at least to restore the
previous handling of info files.

I don't care about the cygnus option per se.  It was always a grab bag
of hacks.  The issue is removing a feature that an important user relies
on.  So far the suggested replacements haven't seemed that good to me.

Tom





bug#11034: Binutils, GDB, GCC and Automake's 'cygnus' option

2012-04-02 Thread Tom Tromey
> "Stefano" == Stefano Lattarini  writes:

Stefano> Note there's nothing I'm planning to do, nor I should do, in
Stefano> this regard: the two setups described above are both already
Stefano> supported by the current automake implementation (but the last
Stefano> one is not encouraged, even though it makes perfect sense in
Stefano> some *rare* situations).  I was just pointing out that you have
Stefano> to choose one of these setups -- so, if you want to distribute
Stefano> info files, you must accept to have them build in the srcdir.

Or we can just stick with an older version of automake.
It seems to me that this is the sensible approach.

Or move to some other build system; either autogen-based or just
requiring GNU make features.  The latter is fine for GCC but I'm not
sure whether all the src projects are on board.

I'm pretty disappointed that automake would make this change.  I realize
these choices may (arguably) make the most sense for most projects, but
the gcc and src trees are not like most projects; and really the whole
'cygnus' feature is there just to support these two big users.

Tom





bug#11153: change automake branching policy: dispensing with the 'branch-X.Y' branches in the future

2012-04-02 Thread Peter Rosin
On 2012-04-02 18:13, Stefano Lattarini wrote:
> Severity: wishlist
> thanks
> 
> Hello Automakers.
> 
> After some real hand-on experience with the current branching policy
> of Automake, I'm convinced the presence of the 'branch-X.Y' branches
> is just an annoyance and a source of confusion, and that a better policy
> would be to simply have a 'maint' branch (where to cut maintenance
>  releases directly from), a master branch (where maint is to be kept
> regularly merged into, and from which the next major release is to be
> derived at last), and possibly topic branches (only when needed, and
> better if they are short-lived).  Maybe we could also re-add the 'next'
> branch to serve as common ground for feature merging and testing, but
> than can be done in a second time (and only if the need arise).
> 
> When a major release is done, the master branch is to be merged into
> the maint branch, and then a "new" master branch created stemming
> from the resulting commit.

I think what you are proposing is better described as dropping the
maint branch and doing development of features for both the stable
series as well as the pending major release directly on the stable
branch.  When you wish to make a new release you simply make sure
you have merged the latest branch-x.y into master, then create a new
branch-x. or branch-.0 from where the current master is
and you're done.

> WDYT?  If you agree, I can apply the change below to HACKING, and
> implement the new branching policy starting from the Automke 1.12
> release.

Consider what will happen if you don't have maint branches, and need to
release security updates for both the 1.11 and 1.12 branches as well as
having the security fixes available on master.  If you have all the
release-related commits as ancestors to the security fix (which you will
with this scheme), you will have to resolve inevitable merge conflicts
(or cherry-pick, ick).  If you instead have a maint branch related to
each release series, you should be able to make the real change on the
oldest such maintenance branch and then merge it into the more modern
maintenance branches, plus master, then merge the respective maintenance
branches into the release branches (branch-1.11) before cutting the
releases addressing the security problem.

I think it's immensely more clean to have the current dual maint and
branch-1.11 approach for each expected bug-fix series.  When 1.12 is
released, maint should probably move along with it and a maint-1.11
can be created when needed, if a security fix is ever needed for the
1.11 series.  Hopefully, we will not need a maint-1.11, but such things
are as they are...

Either that, or you'd need to do dummy merges from branch-x.y into
master after the release-related commits just to avoid future merge
conflicts, but dummy merges are ugly in my opinion.  And branches are
cheap.

I think we have learned not to merge new features past the maintenance
branch (i.e. directly into the release branch) so I'm pretty confident
that that particular problem will not resurface even if we do keep the
maintenance branch.

So, I'm voting for keeping both maint and branch-x.y.

Cheers,
Peter





bug#11153: change automake branching policy: dispensing with the 'branch-X.Y' branches in the future

2012-04-02 Thread Stefano Lattarini
Severity: wishlist
thanks

Hello Automakers.

After some real hand-on experience with the current branching policy
of Automake, I'm convinced the presence of the 'branch-X.Y' branches
is just an annoyance and a source of confusion, and that a better policy
would be to simply have a 'maint' branch (where to cut maintenance
 releases directly from), a master branch (where maint is to be kept
regularly merged into, and from which the next major release is to be
derived at last), and possibly topic branches (only when needed, and
better if they are short-lived).  Maybe we could also re-add the 'next'
branch to serve as common ground for feature merging and testing, but
than can be done in a second time (and only if the need arise).

When a major release is done, the master branch is to be merged into
the maint branch, and then a "new" master branch created stemming
from the resulting commit.

WDYT?  If you agree, I can apply the change below to HACKING, and
implement the new branching policy starting from the Automke 1.12
release.

Regards,
  Stefano

-*-*-*-

diff --git a/HACKING b/HACKING
index 29c0e4a..b34cee6 100644
--- a/HACKING
+++ b/HACKING
@@ -103,37 +103,22 @@
   latest stable version of Autoconf installed and available early
   in your PATH.

-* The git tree currently carries a number of branches: master for the
-  current development, and release branches named branch-X.Y.  The maint
-  branch serves as common ground for both master and the active release
-  branches.  Changes intended for both should be applied to maint, which
-  should then be merged to release branches and master, of course after
-  suitable testing.  It is advisable to merge only after a set of related
-  commits have been applied.
-
-* Example work flow for patches to maint:
-
-  # 1. Checkout the "maint" branch:
-  git checkout maint
-
-  # 2. Apply the patch(es) with "git am" (or create them with $EDITOR):
-  git am -3 0*.patch
-  # 2a. Run required tests, if any ...
-
-  # 3. Merge maint into branch-1.11:
-  git checkout branch-1.11
-  git merge maint
-  # 3a. Run required tests, if any ...
-
-  # 4. Redo steps 3 and 3a for master:
-  git checkout master
-  git merge maint
-  # testing ...
-
-  # 5. Push the maint and master branches:
-  git push --dry-run origin maint branch-1.11 master
-  # if all seems ok, then actually push:
-  git push origin maint branch-1.11 master
+* The Automake git tree currently carries two basic branches: 'master' for
+  the current development, and 'maint' for maintenance and bug fixes.  The
+  maint branch should be kept regularly merged into the master branch.
+  It is advisable to merge only after a set of related commits have been
+  applied, to avoid introducing too much noise in the history.
+
+* There may be a number of longer-lived feature branches for new
+  developments.  They should be based off of a common ancestor of all
+  active branches to which the feature should or might be merged later.
+  in the future, we might introduce a special branch named 'next' that
+  may serve as common ground for feature merging and testing, should
+  they not be ready for master yet.
+
+* When a major release is done, the master branch is to be merged into
+  the maint branch, and then a "new" master branch created stemming
+  from the resulting commit.

 * When fixing a bug (especially a long-standing one), it may be useful
   to commit the fix to a new temporary branch based off the commit that
@@ -141,12 +126,6 @@
   the active branches descending from the buggy commit.  This offers a
   simple way to fix the bug consistently and effectively.

-* There may be a number of longer-lived feature branches for new developments.
-  They should be based off of a common ancestor of all active branches to
-  which the feature should or might be merged later.  The next branch may
-  serve as common ground for feature merging and testing, should they not
-  be ready for master yet.
-
 * For merges from branches other than maint, prefer 'git merge --log' over
   plain 'git merge', so that a later 'git log' gives an indication of which
   actual patches were merged even when they don't appear early in the list.