Como obter os sinalizadores de compilador que são usados para construir os binários em um pacote (.deb)?

4

Eu sei que apt-get source <package_name> fornece o pacote fonte. Ele contém uma pasta debian com um arquivo chamado rules . Se eu entendi corretamente, este arquivo descreve como o pacote de código-fonte pode ser transformado em um pacote .deb , incluindo quais sinalizadores de compilador devem ser usados.

Duas perguntas:

  1. Como obtenho os sinalizadores de compilador que são realmente usados? É necessário executar make -n (se isso for possível) ou posso obtê-los de alguma forma analisando o (s) documento (s)?
  2. Dado o caso de um pacote fonte de um repositório oficial. Os sinalizadores do compilador são 100% determinados pelo arquivo rules ou dependem do sistema em que a criação .deb é feita? Preciso "espelhar" o sistema de compilação oficial para obter os mesmos sinalizadores que foram usados no processo de criação oficial .deb ? Como posso fazer isso?

Eu aprendi aqui , que o debian não tem uma política oficial sobre quais flags do compilador são usadas para o .deb binários com pacotes.

    
por stackoverflowwww 06.04.2016 / 13:32

1 resposta

4

Os sinalizadores de compilador usados são uma função de

  • o arquivo debian/rules ,
  • os arquivos de compilação do pacote (já que o autor do upstream também pode especificar flags lá),
  • o sistema de compilação usado ( dh , cdbs etc.),
  • as configurações padrão do compilador.

Para ver os sinalizadores usados, é necessário pelo menos compilar o pacote:

debian/rules build

Experimentando coisas como

debian/rules -n

geralmente não vai te levar muito longe; por exemplo, em um pacote dh -based, ele apenas dirá

dh build

ou algo similar; pedindo dh para mostrar o que isso faria (com --no-act ) irá produzir

dh_testdir
dh_auto_configure
dh_auto_build

e assim por diante.

Não existe uma maneira infalível e fácil de explicar para determinar os sinalizadores de compilação lendo debian/rules ; Você pode obter alguma idéia procurando por sinalizadores definidos lá e também (quando apropriado) procurando opções para dpkg-buildflags (como DEB_BUILD_MAINT_OPTIONS ) e executando isso. Para muitos pacotes, a maneira mais fácil de ver quais flags foram usados é examinar os logs de compilação dos pacotes enviados nos arquivos, começando pelo link . Por exemplo, os registros para coreutils on i386 mostra que os sinalizadores usados foram -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector-strong -Wformat -Werror=format-security para compilação e -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wl,--as-needed -Wl,-z,relro para vinculação (graças a Faheem Mitha por apontar este último!).

    
por 06.04.2016 / 13:46