web-dev-qa-db-ja.com

autoconfに「mkdir-p」の代わりに「install」を使用させる方法は?

GNUアーカイブからコンパイルされたパッケージでSudo make installを実行すると、mkdir -pを使用して宛先ディレクトリが作成されます。

ルートのumaskが0022の場合だけでなく、すべての状況で宛先ディレクトリに適切なアクセス許可があることを確認するために、代わりにmkdir -p -m 0755またはinstall -d -m 0755を使用することをお勧めします(これは正しくありません)。私のために)。

パッケージはautoconf/automakeを使用しており、動作はAC_PROG_MKDIR_Pと呼ばれるM4マクロによって制御されているようです。

現時点では、間違ったアクセス許可があることがわかっているディレクトリでSudo chmod 0755を実行できます。しかし、これは明らかに正しい選択肢ではありません。

「まさにそれ」を達成するために、ドキュメント全体を研究することは避けたいと思います。

ヒントはありますか?

3
EnzoR

マクロAC_PROG_MKDIR_Pは機能テストマクロです。利用可能な最高のmkdir -p対応コマンドをテストするシェルコードに拡張されます。 MKDIR_Pおよびac_cv_path_mkdir(「キャッシュ変数」)を使用して、使用するコマンドを判別します。

MKDIR_Pの値を、ディレクトリの作成に使用するコマンドに設定できます。使用するコマンドは、単一のディレクトリだけでなく、親ディレクトリがまだ存在しない場合はそれらも作成できる必要があります(mkdir -pのように)。

正常:

$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/local/bin/gmkdir -p
checking for gawk... gawk
...

MKDIR_Pを設定した場合:

$ ./configure MKDIR_P='install -d -m 0755'
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... install -d -m 0755
checking for gawk... gawk
...

ドキュメント によると、キャッシュ変数ac_cv_path_mkdirを必要なコマンドに設定することで、これを「永続的」にすることができるはずです。この変数は、configureスクリプトで直接設定するか(醜い)、config.cacheオプションを1回使用してconfigureを実行した後に作成した-Cファイルを変更することで設定できます。 しかし、私はconfigureがこのコマンドの値に-pオプションを追加することを発見しました。 (このオプションの意味は、mkdirinstallで異なります)。

configure.acソースからconfigureスクリプトを再生成することに満足している場合は、MKDIR_Pを呼び出した直後の値にAC_INITを設定できます。次に、autoconf(またはautoreconf)を実行して、configureを再作成します。

最も柔軟な方法は、現在のシェルセッションでMKDIR_P環境変数をexport MKDIR_P='install -d'(または必要なもの)で設定することです。これにはファイルの変更は必要ありませんが、そのシェルセッションで実行するすべてのconfigureスクリプトに影響します。

8
Kusalananda