Question

Je travaille sur un projet qui sera distribué avec GNU autoconf / automake, et j’ai un ensemble de scripts bash qui appellent des scripts awk. Je voudrais que les scripts bash finissent dans le $ PATH, mais pas les scripts awk. Comment dois-je les insérer dans le projet? Devraient-ils être intégrés à d’autres fichiers binaires?

De même, existe-t-il un moyen de déterminer l'emplacement final du fichier après l'installation? Je suppose que / usr / local / bin n’est pas toujours là où se trouvent les exécutables ...

Était-ce utile?

La solution

Ajoutez quelque chose comme ça à Makefile.am

scriptsdir = $(prefix)/bin
scripts_DATA = awkscript1 awkscript2

Dans ce cas, awkscript sera installé dans $ (préfixe) / bin (vous pouvez également utiliser $ (bindir)).

Remarque: n'oubliez pas que le premier doit être nommé nom + dir (scripts - > scriptsdir) et que le second doit être nommé + _DATA (scripts - > scripts_DATA).

Autres conseils

Vous pouvez simplement lister les scripts que vous voulez installer dans Makefile.am:

bin_SCRIPTS = foo bar

Ceci entraînera l’installation de foo et de bar pendant l’installation de make install. Pour obtenir le chemin d'accès à leur emplacement final, vous pouvez utiliser @ bindir @ in foo.in et laisser configurer build foo pour vous. Par exemple, dans configure.ac:

AC_CONFIG_FILES([foo bar])

puis dans foo.in:

#!/bin/sh

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
echo bindir = $bindir

N'oubliez pas que la personne qui exécute configure peut spécifier l'un des éléments --prefix, --exec_prefix ou --bindir, et l'installation peut être redirigée avec un DESTDIR. En utilisant la technique décrite ici, DESTDIR ne sera pas pris en compte et le script sera installé à un emplacement autre que le chemin sur lequel il sera répercuté. Cela est voulu par la conception et constitue le comportement correct, car une installation DESTDIR est généralement utilisée pour créer une archive qui sera éventuellement décompressée dans le système de fichiers de sorte que le bindir du script devienne valide.

Jonathan, en réponse à votre question supplémentaire: si vous souhaitez remplacer la valeur du préfixe au moment de la construction, vous devez:

  1. renommez votre script "myscript" en "myscript.in"
  2. ajouter une règle à configure.ac pour le générer en bas
  3. utilise une macro que j'ai créée et intitulée AS_AC_EXPAND
  4. utilisez-le comme ceci:

    AS_AC_EXPAND (BINDIR, $ bindir)

  5. dans votre 'myscript.in', vous pouvez maintenant utiliser @ BINDIR @ et il sera étendu au chemin complet où le script sera installé.

Notez que vous ne devez pas utiliser PREFIX directement, aucun des répertoires d'installation ne peut potentiellement être modifié. Vous souhaitez donc vraiment utiliser la valeur transmise à configurer pour bindir et le développer.

Si les scripts awk ne vont pas dans le répertoire bin principal (préfixe / bin), vous devez les placer dans un sous-répertoire approprié - probablement de lib mais éventuellement libexec ou share (car les scripts awk sont probablement plate-forme neutre).

Correct: les logiciels ne finiront pas nécessairement dans / usr / local / bin; sur ma machine, / usr / local / bin est géré par MIS et tous les logiciels que j'installe sont donc placés sous / usr / gnu /. J'utilise: ./configure --prefix = / usr / gnu pour installer le logiciel où je le veux.

Vous pouvez intégrer la valeur de PREFIX dans les scripts bash. En fait, vous allez "compiler" les scripts pour inclure l'emplacement d'installation. Tenez compte des problèmes rencontrés lors des tests de construction: vous devrez peut-être localiser d'abord les scripts par rapport au répertoire actuel, puis par rapport à PREFIX.

Vous trouverez des conseils à ce sujet dans le manuel Automake . . Il semble que l’approche privilégiée consiste à générer les scripts avec le makefile plutôt qu'avec le script configure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top