What's the difference between versions of GNU Make in Cygwin setup

2

I need to add GNU Make to my Cygwin installation, but Setup is offering me two versions:

  • 3.82.90-1 (1,254k)
  • 3.82-3 (473k)

I have no idea what the difference is, and all my attempts at finding out via Google have come to naught. Neither is showing as including the source code (which would explain the huge difference in size).

Can anyone enlighten me as to the difference between the two version and/or suggest which might be the better option?

(Edit) For clarity, what I'm really asking here is: what's the difference between an x.yy.zz version of Make an x.yy-n version? Why the different numbering patterns?

Rob Gilliam

Posted 2013-09-13T10:48:04.480

Reputation: 276

Answers

3

cygwin 32bit

If you look at the repository itself, i.e. at one of the mirrors (http://mirror.switch.ch/ftp/mirror/cygwin/x86/release/make/), you find four relevant files:

make-3.81-2-src.tar.bz2     09-Feb-2008 20:50   1.1M     
make-3.81-2.tar.bz2         09-Feb-2008 20:50   350K     
make-3.82.90-1-src.tar.bz2  02-Dec-2011 18:05   1.3M     
make-3.82.90-1.tar.bz2      02-Dec-2011 18:05   442K     

There are two version, 3.82.90-1 and an older one 3.81-2 which are approx the same size (order of magnitude). The corresponding bigger packages (1MB) are the sources.

This is exactly what the cygwin setup tool offers me.

cygwin 64bit

Here, the offered files are (http://mirror.switch.ch/ftp/mirror/cygwin/x86_64/release/make/):

make-3.82-3-src.tar.bz2     14-Mar-2013 11:26   1.6M     
make-3.82-3.tar.bz2         14-Mar-2013 11:26   473K     
make-3.82.90-1-src.tar.bz2  30-Mar-2013 12:12   1.9M     
make-3.82.90-1.tar.bz2      30-Mar-2013 12:12   1.2M    

This fits to your described scenario.


Generally to investigate the differences between these two versions, check out the Changelog in the newest source tarball.

To elaborate a little more: Usually (Debian uses a similar scheme), the version number before the hyphen is the version number of the original package, as released by the author of the software (i.e. the GNU make team). The number after the hypen gives some kind of patchlevel, applied by the package maintainer (i.e. the cygwin team).

To prove look at make.cygport in the source packages (e.g. make-3.82-3-src.tar.bz2)

NAME="make"
VERSION="3.82"
RELEASE=3

The applied patches (by cygwin) are filed in make-3.82-3.src.patch.

So, it was decided to include a cygwin port of make 3.82 and make 3.82.90 in the 64bit cygwin distribution. (Why the GNU make team decided that version 3.82.90 should follow 3.82 I really don't know...)

What is the difference between those (upstream) versions? NEWS in the original source tarball inside the cygwin source tarball tells us:

Version 3.82.90

A complete list of bugs fixed in this version is available here: http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=101&set=custom

  • WARNING: Backward-incompatibility! This version of make adheres to the POSIX backslash/newline handling, introducing the following differences:

    • Each backslash/newline in a variable value is replaced with a space;
      multiple consecutive backslash/newlines do not condense into one space.
    • In recipes, a recipe prefix following a backslash-newlines is removed.
  • New feature: The "job server" capability is now supported on Windows.
    Implementation contributed by Troy Runkel

  • New feature: "!=" shell assignment operator as an alternative to the $(shell ...) function. Implemented for compatibility with BSD makefiles.
    WARNING: Backward-incompatibility!
    Variables ending in "!" previously defined as "variable!= value" will now be
    interpreted as shell assignment. Change your assignment to add whitespace
    between the "!" and "=": "variable! = value"

  • New command line option: --trace enables tracing of targets. When enabled
    the recipe to be invoked is printed even if it would otherwise be suppressed
    by .SILENT or a "@" prefix character. Also before each recipe is run the
    makefile name and linenumber where it was defined are shown as well as the
    prerequisites that caused the target to be considered out of date.

  • On failure, the makefile name and linenumber of the recipe that failed are
    shown.

  • A .RECIPEPREFIX setting is remembered per-recipe and variables expanded
    in that recipe also use that recipe prefix setting.

  • In -p output, .RECIPEPREFIX settings are shown and all target-specific
    variables are output as if in a makefile, instead of as comments.

So, probably this backward incompatibility is the reason why both versions are provided by cygwin.

mpy

Posted 2013-09-13T10:48:04.480

Reputation: 20 866

I'm using 64-bit Cygwin, which is probably why you have different pkgs. However my question is really what's the difference between an x.yy.zz version of Make an x.yy-n version? Why the different numbering patterns? – Rob Gilliam – 2013-09-13T13:46:22.103

@RobGilliam: I extended my answer to address the naming scheme. – mpy – 2013-09-13T15:33:03.413