Onde colocar o ajudante-scripts com GNU autoconf / automake?
Pergunta
Eu estou trabalhando em um projeto que será distribuído com GNU autoconf / automake, e eu tenho um conjunto de scripts bash quais scripts awk chamada. Gostaria que os scripts bash para acabar no $ PATH, mas não os scripts awk. Como devo inseri-las no projeto? Eles devem ser colocados em com outros binários?
Além disso, existe uma maneira de determinar a localização final do arquivo após a instalação? Presumo que / usr / / bin local não é sempre , onde os executáveis ??acabar ...
Solução
Adicione algo como este para Makefile.am
scriptsdir = $(prefix)/bin
scripts_DATA = awkscript1 awkscript2
Neste caso, ele irá instalar awkscript em $ (prefix) / bin (você também pode usar $ (bindir)).
Nota:. Não se esqueça que o primeiro deve ser nomeado nome + dir (roteiros -> scriptsdir) eo segundo deve ser nome + _DATA (scripts -> scripts_DATA)
Outras dicas
Você pode simplesmente listar os scripts que você quer ser instalado em Makefile.am:
bin_SCRIPTS = foo bar
Esta causa foo e bar vontade para ser instalado durante o make install. Para obter o caminho para a sua localização final, você pode usar @ bindir @ em foo.in e deixe configure construção foo para você. Por exemplo, em configure.ac:
AC_CONFIG_FILES([foo bar])
e, em seguida, em foo.in:
#!/bin/sh prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ echo bindir = $bindir
Tenha em mente que a pessoa que executa configure pode especificar qualquer uma --prefix, --exec_prefix, ou --bindir, ea instalação pode ser reencaminhado com uma DESTDIR. Utilizando a técnica descrita aqui, DESTDIR não serão tidas em conta e o script será instalado em um local diferente do caminho que vai ecoar. Isso ocorre por design e é o comportamento correto, como normalmente uma instalação DESTDIR é usado para criar um pacote que acabará por ser descompactado para o sistema de arquivos de tal forma que o bindir no script torna-se válido.
Jonathan, em resposta à sua pergunta adicional: se você deseja substituir o valor de prefixo no momento da compilação, você vai precisar:
- mudar o nome do script 'myscript' para 'myscript.in'
- adicionar uma regra para configure.ac para gerá-la na parte inferior
- usar um I macro fez chamada AS_AC_EXPAND
-
usá-lo como este:
AS_AC_EXPAND (BINDIR, $ bindir)
-
no seu 'myscript.in', agora você pode usar @ BINDIR @ e vai se expandido para o caminho completo onde o script vai acabar sendo instalado.
Note que você não deve usar PREFIX diretamente, qualquer um dos diretórios de instalação pode, potencialmente, ser alterado para que você realmente quer usar o valor passado para configure para bindir e expandir isso.
Se os scripts awk não vai para o diretório bin principal (prefix / bin), então você precisa colocá-los em um sub-diretório apropriado - provavelmente de lib mas possivelmente libexec ou ação (uma vez que os scripts awk são provavelmente plataforma neutra).
Correto: software não será necessariamente acabar em / usr / local / bin; na minha máquina, / usr / / bin local é gerido pela MIS e todo o software para instalar, portanto, vai sob / usr / gnu /. Eu uso:. ./Configure --prefix = / usr / gnu para obter o software instalado onde eu quero
Você pode incorporar o valor de prefixo no scripts bash - efetivamente, você vai 'compilação' os scripts para incluir o local de instalação. Esteja ciente dos problemas durante o teste build -. Você pode precisar para localizar os scripts relativos ao diretório atual primeiro e relativos ao PREFIX mais tarde
Há alguns conselhos sobre isso no Automake Manual . Parece que a abordagem preferida é a de gerar os scripts com o makefile em vez de com o script de configuração.