Qual é a diferença entre versões do GNU Make no setup do Cygwin?

2

Eu preciso adicionar o GNU Make à minha instalação do Cygwin, mas o programa de instalação está me oferecendo duas versões:

  • 3,82,90-1 (1,254k)
  • 3,82-3 (473k)

Eu não tenho idéia de qual é a diferença, e todas as minhas tentativas de descobrir por meio do Google deram em nada. Nenhum dos dois está mostrando como incluir o código-fonte (o que explicaria a enorme diferença de tamanho).

Alguém pode me esclarecer sobre a diferença entre as duas versões e / ou sugerir qual pode ser a melhor opção?

(Edit) Para maior clareza, o que estou realmente fazendo aqui é: qual é a diferença entre uma versão x.yy.zz do Make an x.yy-n version? Por que os diferentes padrões de numeração?

    
por Rob Gilliam 13.09.2013 / 12:48

1 resposta

3

cygwin 32bit

Se você olhar para o repositório em si, ou seja, em um dos espelhos ( link ), você encontra quatro arquivos relevantes:

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     

Existem duas versões, 3.82.90-1 e uma mais antiga, 3.81-2, que são aprox do mesmo tamanho (ordem de grandeza). Os pacotes maiores correspondentes (1MB) são as fontes.

Isso é exatamente o que a ferramenta de configuração do cygwin me oferece.

cygwin 64bit

Aqui, os arquivos oferecidos são ( link ):

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    

Isso se ajusta ao seu cenário descrito.

Geralmente, para investigar as diferenças entre essas duas versões, confira o Changelog no tarball de origem mais recente.

Para elaborar um pouco mais: Normalmente ( o Debian usa um esquema similar ), o o número da versão antes do hífen é o número da versão do pacote original, conforme liberado pelo autor do software (isto é, a equipe GNU make ). O número após o hypen fornece algum tipo de patch, aplicado pelo mantenedor do pacote (ou seja, a equipe cygwin ).

Para provar a make.cygport nos pacotes de origem (por exemplo, make-3.82-3-src.tar.bz2 )

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

As correções aplicadas (por cygwin) são arquivadas em make-3.82-3.src.patch .

Então, foi decidido incluir uma porta cygwin de make 3.82 e make 3.82.90 na distribuição de 64bit do cygwin. (Por que o GNU make team decidiu que a versão 3.82.90 deveria seguir 3.82 eu realmente não sei ...)

Qual é a diferença entre essas versões (upstream)? NEWS no tarball de origem original dentro do tarball de origem do cygwin nos diz:

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.

Então, provavelmente essa incompatibilidade com versões anteriores é a razão pela qual ambas as versões são fornecidas pelo cygwin.

    
por 13.09.2013 / 13:55

Tags