![Depurando a versão Open Dylan Debian](https://rvso.com/image/76420/Depurando%20a%20vers%C3%A3o%20Open%20Dylan%20Debian.png)
Estou tentando depurar algunsmuitobásico e inacabadoEmbalagem DebianparaAbra Dylan.
Estou recebendo erros noLog de compilação do Debian (essência).
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 dificuldade em ver o que está errado.
Ajudaria muito se eu conseguisse que a compilação repetisse consistentemente cada linha antes de executá-la, mas como você pode ver no extrato citado acima, isso não aconteceu quando eu precisava. Ou seja, nessa cp
linha.
NOTA: Open Dylan não está usando o Automake, embora esteja usando o Autoconf. E então eles têm uma escrita à mão Makefile.in
.
ATUALIZAÇÃO: Adicionar 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
Onovo log de compilação (essencial) agora tem o seguinte para o destino de instalação upstream do Open 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!
Isto está claramente errado desde o início. Por alguma razão, prefix
aqui está /usr/local
, enquanto deveria estar /debian/tmp/usr
(eu acho).
A primeira linha doAbra Dylan Makefile.intem:
prefix = $(DESTDIR)@prefix@
o que parece meio fora do padrão. No Makefile gerado, isso se torna:
prefix = $(DESTDIR)/usr/local
Normalmente o Debian passa /usr
por ./configure
padrão, então não tenho certeza do que aconteceu aqui, ou por que (aparentemente), DESTDIR
está em branco.
Responder1
O @
antes de algumas linhas diz ao make "do not echo this line".
Você pode editar e remover alguns dos @
s ou retirá-los todos do Makefile com:
sed -i -e 's/^\(\t\+)@/\1/ ; s/\(^\t\+\)echo/\1@echo/' Makefile
O extrato make doc de @Ortomala Lokni fez uma boa observação sobre echo
, então modifiquei o script sed para colocar um @
back antes de qualquer echo
comando.
Para lidar com o Automake, você provavelmente vai querer ter um pouco mais de cuidado ao remover os @
caracteres que o Automake usa @NAME@
para substituir variáveis no Makefile de saída:
Talvez algo assim, para não alterar as linhas que começam com \t+@NAME@
:
sed -ire 's/^(\t+)@([^ @]+ )/(\t)\1/ ; s/(^\t+)echo/\1@echo/' Makefile.in
Responder2
Para completar a resposta cas você pode ler oManual de criação do GNUque diz:
Normalmente imprime cada linha da receita antes de ela ser executada. Chamamos isso de eco porque dá a impressão de que você mesmo está digitando as linhas.
Quando uma linha começa com '@', o eco dessa linha é suprimido. O '@' é descartado antes que a linha seja passada para o shell. Normalmente você usaria isso para um comando cujo único efeito é imprimir algo, como um comando echo para indicar o progresso através do makefile:
@echo About to make distribution files
Quando make recebe o sinalizador '-n' ou '--just-print' ele apenas ecoa a maioria das receitas, sem executá-las. Consulte Resumo das opções. Neste caso até as linhas da receita que começam com '@' são impressas. Este sinalizador é útil para descobrir quais receitas são necessárias sem realmente fazê-las.
O sinalizador '-s' ou '--silent' para fazer evita qualquer eco, como se todas as receitas começassem com '@'. Uma regra no makefile para o alvo especial .SILENT sem pré-requisitos tem o mesmo efeito (consulte Nomes de alvos integrados especiais). .SILENT é essencialmente obsoleto, pois '@' é mais flexível.