Como fazer o autoconf usar “install” em vez de “mkdir -p”?

3

Quando eu executo sudo make install em um pacote compilado do arquivo GNU, ele usa mkdir -p para criar os diretórios de destino.

Eu preferiria usar mkdir -p -m 0755 ou install -d -m 0755 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 o root for 0022 (o que não é verdade para eu).

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 possuem permissões incorretas. Mas esta não é claramente a opção correta.

Eu evitaria estudar toda a documentação para conseguir "apenas isso".

Alguma dica?

    
por EnzoR 06.04.2018 / 16:46

1 resposta

7

A macro AC_PROG_MKDIR_P é uma macro de teste de recurso. Ele expande para o código shell que testa o melhor comando mkdir -p -capable disponível. Ele usa MKDIR_P e ac_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 você 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, caso estes ainda não existam (assim como mkdir -p ).

Normal:

$ ./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
...

Com MKDIR_P definido:

$ ./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
...

De acordo com a documentação , a pessoa deve poder para tornar isso "permanente" definindo a variável de cache ac_cv_path_mkdir para o comando desejado. Essa variável pode ser definida diretamente no script configure (feio) ou modificando o arquivo config.cache criado depois de executar configure com a opção -C uma vez. No entanto , descobri que configure adiciona uma opção -p ao valor desse comando que pode não ser desejado (o significado dessa opção é diferente entre mkdir e install ).

Se você estiver satisfeito em gerar novamente o script configure de sua configure.ac source, poderá definir MKDIR_P como um valor logo após a chamada para AC_INIT . Em seguida, execute autoconf (ou autoreconf ) para recriar configure .

A maneira mais flexível seria definir a variável de ambiente MKDIR_P na sessão de shell atual com export MKDIR_P='install -d' (ou o que você precisa). Isso não exigiria a modificação de nenhum arquivo, mas afetaria todos os scripts configure executados nessa sessão do shell.

    
por 06.04.2018 / 17:09