デバッグをしようとしています。非常に基本的で未完成Debian パッケージング~のためオープンディラン。
エラーが発生しました。Debian ビルドログ(ハイライト)。
関連ビットは最後にあります。つまり、次のようになります。
Preparing to install Open Dylan...
Copying sources...
cp: cannot create directory ‘/usr/local/sources’: Permission denied
Makefile:328: recipe for target 'install-stage' failed
これは明らかに342で始まる行に対応する。 file.inの生成、今すぐ:
# 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)
最後の行は犯人かもしれませんが、何が間違っているのかを確認するのが困難です。
実行する前に各行を一貫してエコーするようにビルドを取得できれば、多くの助けになります。しかし、上記の抜粋からわかるように、必要に応じてそのようなことは起こりません。その行にありますcp
。
注:Open DylanはAutoconfを使用しますが、Automakeを使用しません。だから彼らは手書きのものを持っていますMakefile.in
。
更新:追加make -n
とdh_auto_build
上書きがdh_auto_install
有効です。したがって:
override_dh_auto_build:
PATH=$(binpath):$$PATH make -n
override_dh_auto_install:
PATH=$(binpath):$$PATH make -n install
これ新しいビルドログ(要点) アップストリーム 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!
これは明らかに最初から間違っていました。どんな理由からなのか、prefix
ここにいてそう/usr/local
すべきだと/debian/tmp/usr
思います。
最初の行Dylan Makefile.inを開く持っている:
prefix = $(DESTDIR)@prefix@
これは少し標準ではないようです。生成されたMakefileでは、次のようになります。
prefix = $(DESTDIR)/usr/local
通常、Debianはデフォルトで/usr
出荷されるので、ここで何が起こっているのか、なぜ(明らかに)空なのか./configure
わかりません。DESTDIR
答え1
@
「この行をエコーしないでください」と言う前のいくつかの行です。
@
Makefile で一部を編集、削除、またはすべて削除できます。
sed -i -e 's/^\(\t\+)@/\1/ ; s/\(^\t\+\)echo/\1@echo/' Makefile
@Ortomala Lokniのmake doc抜粋は良い指摘をしましたので、コマンドの前にバックを追加するecho
ようにsedスクリプトを修正しました。@
echo
@
変数を使用して@NAME@
出力Makefileに変数を置き換えるAutomakeを処理するには、文字の削除に注意する必要があるかもしれません。
おそらく、次のように始まる行が変更されない可能性があります\t+@NAME@
。
sed -ire 's/^(\t+)@([^ @]+ )/(\t)\1/ ; s/(^\t+)echo/\1@echo/' Makefile.in
答え2
CASの回答を完了するには、以下をお読みください。GNU製作マニュアルこれは次のように言います。
通常、make はレシピを実行する前にレシピの各行を印刷します。ユーザーが直接入力した行のように見えるので、これをエコーと呼びます。
行が「@」で始まると、その行のエコーが抑制されます。 「@」は、その行がシェルに渡される前に削除されます。通常、makefileの進行状況を示すために使用されるechoコマンドなど、何かを印刷するだけの効果があるコマンドに使用します。
@echo About to make distribution files
makeに「-n」または「--just-print」フラグが指定されている場合、実行せずにほとんどのレシピだけをエコーします。オプションの概要を参照してください。この場合、「@」で始まるレシピラインも印刷されます。このフラグは、実際にアイデアを実行するよりも、どのレシピがアイデアを必要とするかを調べるのに役立ちます。
「-s」または「--silent」フラグは、すべてのレシピが「@」で始まるように、すべてのエコーを防ぎます。前提条件を持たない makefile の特殊ターゲット .SILENT ルールは同じ効果を持ちます(特殊組み込みターゲット名を参照)。 .SILENT は「@」がより柔軟であるため、本質的に廃止されます。