Debuggen des Open Dylan Debian-Builds

Debuggen des Open Dylan Debian-Builds

Ich versuche, einige zu debuggensehreinfach und unvollendetDebian-PaketierungfürOffene Dylan.

Ich erhalte Fehler in derDebian-Build-Protokoll (gist).

Das Relevante steht am Ende, und zwar:

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

Dies entspricht eindeutig den Zeilen ab 342 in Makefile.in, nämlich:

# 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)

Wahrscheinlich ist die letzte Zeile der Übeltäter, aber ich kann nicht erkennen, was da schief läuft.

Es wäre eine große Hilfe, wenn ich den Build dazu bringen könnte, jede Zeile vor der Ausführung konsequent wiederzugeben, aber wie Sie im oben zitierten Auszug sehen können, geschah dies nicht, als ich es brauchte. Nämlich bei dieser cpZeile.

HINWEIS: Open Dylan verwendet nicht Automake, sondern Autoconf. Daher haben sie eine handschriftliche Makefile.in.

UPDATE: make -nDas Hinzufügen zu dh_auto_buildund dh_auto_install Überschreibungen funktioniert. So:

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

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

Derneues Build-Protokoll (Gist) verfügt jetzt über Folgendes für das Upstream-Installationsziel von 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!

Das ist von Anfang an ganz offensichtlich alles falsch. Aus irgendeinem Grund prefixist hier , obwohl es (glaube ich) /usr/localso sein sollte ./debian/tmp/usr

Die erste Zeile desÖffnen Sie Dylan Makefile.inhat:

prefix          = $(DESTDIR)@prefix@

was irgendwie nicht standardmäßig aussieht. Im generierten Makefile wird daraus:

prefix          = $(DESTDIR)/usr/local

Normalerweise übergibt Debian standardmäßig /usran , daher bin ich nicht sicher, was hier passiert ist oder warum (anscheinend) leer ist../configureDESTDIR

Antwort1

Der Hinweis @vor einigen Zeilen weist make an, „diese Zeile nicht zu wiederholen“.

Sie können einige der @s bearbeiten und entfernen oder sie alle aus dem Makefile entfernen mit:

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

Der Make-Doc-Auszug von @Ortomala Lokni hat diesbezüglich einen guten Punkt angesprochen , daher habe ich das Sed-Skript geändert, um vor alle Befehle echoein „back“ einzufügen .@echo

Beim Umgang mit Automake möchten Sie wahrscheinlich etwas vorsichtiger beim Entfernen der @Zeichen sein, die Automake @NAME@zum Ersetzen von Variablen im Ausgabe-Makefile verwendet:

Vielleicht so etwas, damit Zeilen, die mit beginnen, nicht geändert werden \t+@NAME@:

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

Antwort2

Um die CAS-Antwort zu vervollständigen, können Sie dieGNU Make-Handbuchwas sagt:

Normalerweise druckt make jede Zeile des Rezepts aus, bevor es ausgeführt wird. Wir nennen das Echoing, weil es den Anschein erweckt, als würden Sie die Zeilen selbst eingeben.

Wenn eine Zeile mit '@' beginnt, wird die Echoausgabe dieser Zeile unterdrückt. Das '@' wird verworfen, bevor die Zeile an die Shell übergeben wird. Normalerweise würden Sie dies für einen Befehl verwenden, dessen einziger Effekt darin besteht, etwas auszudrucken, wie z. B. einen Echo-Befehl, um den Fortschritt durch das Makefile anzuzeigen:

@echo About to make distribution files

Wenn make die Flags '-n' oder '--just-print' erhält, gibt es die meisten Rezepte nur aus, ohne sie auszuführen. Siehe Zusammenfassung der Optionen. In diesem Fall werden sogar die Rezeptzeilen gedruckt, die mit '@' beginnen. Dieses Flag ist nützlich, um herauszufinden, welche Rezepte make für notwendig hält, ohne sie tatsächlich auszuführen.

Die Markierung '-s' oder '--silent' von make verhindert jegliches Echo, als ob alle Rezepte mit '@' beginnen würden. Eine Regel im Makefile für das spezielle Ziel .SILENT ohne Voraussetzungen hat dieselbe Wirkung (siehe Spezielle integrierte Zielnamen). .SILENT ist im Wesentlichen veraltet, da '@' flexibler ist.

verwandte Informationen