Quando executo sudo make install
um pacote compilado do arquivo GNU, ele usa mkdir -p
para criar os diretórios de destino.
Eu prefiro usar mkdir -p -m 0755
ou install -d -m 0755
, em vez disso, para garantir que o diretório de destino tenha permissões adequadas para todos em todas as circunstâncias, não apenas quando o umask para root é 0022 (o que não é verdade para mim).
O pacote está usando autoconf/automake e parece que o comportamento é controlado por uma macro M4 chamada AC_PROG_MKDIR_P
.
No momento, posso executar sudo chmod 0755
nos diretórios que sei que têm permissões erradas. Mas esta não é claramente a opção certa.
Eu evitaria estudar toda a documentação para fazer "apenas isso".
Alguma dica?
A macro
AC_PROG_MKDIR_P
é uma macro de teste de recurso. Ele se expande para o código shell que testa o melhormkdir -p
comando -capable disponível. Ele usaMKDIR_P
eac_cv_path_mkdir
(uma "variável de cache") para descobrir qual comando usar.Você pode definir o valor de
MKDIR_P
para o comando que deseja usar para criar diretórios. O comando que você usa deve ser capaz de criar não apenas um único diretório, mas também os diretórios pai, se eles ainda não existirem (assim comomkdir -p
).Normal:
Com
MKDIR_P
conjunto:De acordo com a documentação , deve-se tornar isso "permanente" definindo a variável de cache
ac_cv_path_mkdir
para o comando desejado. Esta variável pode ser configurada diretamente noconfigure
script (ugly) ou modificando oconfig.cache
arquivo criado após rodarconfigure
com a-C
opção uma vez. No entanto , descobri queconfigure
adiciona uma-p
opção ao valor desse comando que pode não ser desejado (o significado dessa opção é diferente entremkdir
einstall
).Se estiver satisfeito com a geração novamente do
configure
script a partir de suaconfigure.ac
fonte, você pode definirMKDIR_P
um valor logo após a chamada paraAC_INIT
. Em seguida, executeautoconf
(ouautoreconf
) para recriarconfigure
.A maneira mais flexível seria definir a
MKDIR_P
variável de ambiente na sessão atual do shell comexport MKDIR_P='install -d'
(ou o que você precisar). Isso não exigiria a modificação de nenhum arquivo, mas afetaria todos osconfigure
scripts executados nessa sessão de shell.