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

Foi útil?

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:

  1. mudar o nome do script 'myscript' para 'myscript.in'
  2. adicionar uma regra para configure.ac para gerá-la na parte inferior
  3. usar um I macro fez chamada AS_AC_EXPAND
  4. usá-lo como este:

    AS_AC_EXPAND (BINDIR, $ bindir)

  5. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top