Depurando o Dylan Open Debian build

2

Estou tentando depurar alguns pacotes Debian básicos e inacabados para muito href="https://github.com/dylan-lang/opendylan"> Abra o Dylan .

Estou recebendo erros no log de criação do Debian .

O bit relevante está no final, a saber:

Preparing to install Open Dylan...
Copying sources...
cp: cannot create directory ‘/usr/local/sources’: Permission denied
Makefile:328: recipe for target 'install-stage' failed

Isto corresponde claramente às linhas que começam em 342 em Makefile.in , a saber:

# Install stage installs stage 3 into prefix
install-stage:
    @echo Preparing to install Open Dylan in $(prefix)...
    @install -d $(prefix)
    @echo Copying sources to $(prefix)/sources...
    @rm -rf $(prefix)/sources
    @cp -R $(abs_srcdir)/sources $(prefix)

Provavelmente a última linha é a culpada, mas estou tendo dificuldades para ver o que está errado.

Seria de grande ajuda se conseguisse fazer a compilação ecoar consistentemente em cada linha antes de executá-la, mas como você pode ver no extrato citado acima, isso não aconteceu quando precisei. Ou seja, nessa linha cp .

NOTA: O Open Dylan não está usando o Automake, embora eles estejam usando o Autoconf. E assim eles têm um Makefile.in manuscrito.

UPDATE: adicionando make -n ao dh_auto_build e dh_auto_install substitui funciona. Assim:

override_dh_auto_build:
        PATH=$(binpath):$$PATH make -n

override_dh_auto_install:
        PATH=$(binpath):$$PATH make -n install

O novo log de criação (essência) agora tem o seguinte para o alvo de instalação upstream do Dylan Makefile:

echo Preparing to install Open Dylan...
install -d /usr/local
echo Copying sources...
rm -rf /usr/local/sources
cp -R /usr/local/src/opendylan/opendylan-2014.1/sources /usr/local
find /usr/local/sources -depth -name '.*' -exec rm -rf {} \;
rm -rf /usr/local/sources/bootstrap1-registry
echo Installing Open Dylan in /usr/local
install -d /usr/local/bin /usr/local/databases /usr/local/lib /usr/local/lib/runtime
install -d /usr/local/share/opendylan /usr/local/include/opendylan
cp -R /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/bin /usr/local
cp -R /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/databases /usr/local
cp -R /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/include/opendylan /usr/local/include
# We use force here because on Mac OS X, the lib directory likely contains read-only
# static libraries for the Boehm GC.
cp -Rf /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/lib /usr/local
cp -Rf /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/share/opendylan /usr/local/share
cp -R /usr/local/src/opendylan/opendylan-2014.1/tools/lldb /usr/local/share/opendylan
cp -R /usr/local/src/opendylan/opendylan-2014.1/tools/bash_completion /usr/local/share/opendylan
cp /usr/local/src/opendylan/opendylan-2014.1/License.txt /usr/local
cp /usr/local/src/opendylan/opendylan-2014.1/packages/unix/README /usr/local
echo Done!

Isso está claramente errado desde o começo. Por alguma razão, prefix aqui é /usr/local , enquanto deveria ser /debian/tmp/usr (eu acho).

A primeira linha do Open Dylan Makefile.in possui:

prefix          = $(DESTDIR)@prefix@

que parece meio não padrão. No Makefile gerado, isso se torna:

prefix          = $(DESTDIR)/usr/local

Normalmente o Debian passa /usr para ./configure por padrão, então não tenho certeza do que aconteceu aqui, ou porque (aparentemente), DESTDIR está em branco.

    
por Faheem Mitha 01.11.2015 / 21:26

2 respostas

2

O @ antes de algumas das linhas informarem "não faça eco desta linha".

Você pode editar e remover alguns dos @ s ou removê-los do Makefile com:

sed -i -e 's/^\(\t\+)@// ; s/\(^\t\+\)echo/@echo/' Makefile

O extrato do make doc by @Ortomala Lokni fez um bom comentário sobre echo , então eu modifiquei o script sed para colocar um @ de volta antes de qualquer comando echo .

Para lidar com o Automake, você provavelmente quer ser um pouco mais cuidadoso ao remover os caracteres @ , o Automake usa @NAME@ para substituir variáveis no Makefile de saída:

Talvez algo assim, para que não mude as linhas que começam com \t+@NAME@ :

sed -ire 's/^(\t+)@([^ @]+ )/(\t)/ ; s/(^\t+)echo/@echo/' Makefile.in
    
por 02.11.2015 / 00:08
1

Para completar a resposta cas você pode ler o manual do GNU make que diz:

Normally make prints each line of the recipe before it is executed. We call this echoing because it gives the appearance that you are typing the lines yourself.

When a line starts with ‘@’, the echoing of that line is suppressed. The ‘@’ is discarded before the line is passed to the shell. Typically you would use this for a command whose only effect is to print something, such as an echo command to indicate progress through the makefile:

@echo About to make distribution files

When make is given the flag ‘-n’ or ‘--just-print’ it only echoes most recipes, without executing them. See Summary of Options. In this case even the recipe lines starting with ‘@’ are printed. This flag is useful for finding out which recipes make thinks are necessary without actually doing them.

The ‘-s’ or ‘--silent’ flag to make prevents all echoing, as if all recipes started with ‘@’. A rule in the makefile for the special target .SILENT without prerequisites has the same effect (see Special Built-in Target Names). .SILENT is essentially obsolete since ‘@’ is more flexible.

    
por 02.11.2015 / 00:20