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.
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