Depuración de la compilación Open Dylan Debian

Depuración de la compilación Open Dylan Debian

Estoy intentando depurar algunosmuybásico y sin terminarempaquetado de debianparaabrir dylan.

Recibo errores en elRegistro de compilación de Debian (esencial).

El bit relevante está al 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

Esto corresponde claramente a las líneas que comienzan en 342 en 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)

Probablemente la última línea sea la culpable, pero me cuesta ver qué está pasando.

Sería de gran ayuda si pudiera hacer que la compilación hiciera eco consistentemente de cada línea antes de ejecutarla, pero como puede ver en el extracto citado anteriormente, no sucedió cuando lo necesitaba. Es decir, en esa cplínea.

NOTA: Open Dylan no usa Automake, aunque usa Autoconf. Y por eso tienen una letra manuscrita Makefile.in.

ACTUALIZACIÓN: Agregar make -ny dh_auto_buildanular dh_auto_install trabajos. Así:

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

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

Elnuevo registro de compilación (esencial) ahora tiene lo siguiente para el destino de instalación ascendente de 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!

Claramente todo esto está mal desde el principio. Por alguna razón, prefixaquí está /usr/local, aunque debería estarlo /debian/tmp/usr(creo).

La primera línea delAbrir Dylan Makefile.intiene:

prefix          = $(DESTDIR)@prefix@

que parece algo no estándar. En el Makefile generado, esto se convierte en:

prefix          = $(DESTDIR)/usr/local

Normalmente Debian pasa /usra ./configurepor defecto, así que no estoy seguro de qué pasó aquí, o por qué (aparentemente), DESTDIRestá en blanco.

Respuesta1

El @antes de algunas de las líneas dice "no hagas eco de esta línea".

Puedes editar y eliminar algunos de los @mensajes o eliminarlos todos del Makefile con:

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

El extracto del documento de creación de @Ortomala Lokni hizo un buen comentario echo, por lo que modifiqué el script sed para poner un @respaldo antes de cualquier echocomando.

Para lidiar con Automake, probablemente quieras ser un poco más cuidadoso al eliminar los @caracteres, Automake utiliza @NAME@para sustituir variables en el Makefile de salida:

Quizás algo como esto, para que no cambie las líneas que comienzan con \t+@NAME@:

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

Respuesta2

Para completar la respuesta cas puedes leer elGNU hace manualque dice:

Normalmente imprime cada línea de la receta antes de ejecutarla. A esto lo llamamos eco porque da la apariencia de que usted mismo está escribiendo las líneas.

Cuando una línea comienza con '@', se suprime el eco de esa línea. La '@' se descarta antes de pasar la línea al shell. Normalmente usarías esto para un comando cuyo único efecto es imprimir algo, como un comando echo para indicar el progreso a través del archivo MAKE:

@echo About to make distribution files

Cuando a make se le asigna la bandera '-n' o '--just-print', solo repite la mayoría de las recetas, sin ejecutarlas. Consulte Resumen de opciones. En este caso se imprimen incluso las líneas de recetas que empiezan con '@'. Esta bandera es útil para descubrir qué recetas se consideran necesarias sin llegar a realizarlas.

El indicador '-s' o '--silent' evita todos los ecos, como si todas las recetas comenzaran con '@'. Una regla en el archivo MAKE para el objetivo especial .SILENT sin requisitos previos tiene el mismo efecto (consulte Nombres de objetivos especiales integrados). .SILENT es esencialmente obsoleto ya que '@' es más flexible.

información relacionada