2009-09-17 14 views
5

Ho creato un file configure.ac come questo:Come ottenere le variabili completamente espanse da configurare?

AC_INIT() 
set 

lo scopo di questo è quello di stampare ogni variabile d'ambiente a disposizione lo script di configurazione crea utilizzando set, così mi fare questo:

[email protected]:~$ autoconf 
[email protected]:~$ ./configure 

che stampa un mucchio di variabili come

build= 
cache_file=/dev/null 
IFS=' 
' 
LANG=C 
LANGUAGE=C 
datarootdir='${prefix}/share' 
mandir='${datarootdir}/man' 
no_create= 

Fin qui tutto bene. Il problema è:

  1. voglio ampliare le variabili come ${prefix}/share - ma tubazioni tutto in un file e l'esecuzione di example.sh utilizzando bash non funziona, perché bash si lamenta sulla modifica Variabili di lettura come UID e anche l'espansione non sembra funzionare.
  2. Ho provato ad utilizzare un makefile per questo in cui funziona l'espansione, ma si lamenta a capo nelle stringhe, come in uscita al di sopra della linea di IFS=' causes an error message Makefile:24: *** missing separator. Stop.

Qualcuno ha un'idea di come ottenere una versione completamente ampliata di di configurazione di produzione?

+0

Hi! Potresti spiegare perché ti piacerebbe farlo? La tua domanda sembra che tu stia cercando di risolvere un altro problema nel modo più difficile. (Ad esempio, se si desidera recuperare il valore espanso di una variabile come '$ datadir', ci sono modi più semplici per farlo.) – adl

+0

Voglio creare modelli di script di shell indipendenti dal sistema linux su cui sono in esecuzione su così io puoi creare script per configurare un server e utilizzare lo stesso script per una seconda istanza che richiede solo la modifica di alcuni parametri il motore di template im usando solo cerca/sostituisci le variabili dello script per fare questo ho bisogno di inizializzare il motore con tutti le variabili o non vengono sostituite –

+0

@adl puoi spiegare qual è il modo "facile" per affrontarlo. Sono anche alle prese con questo problema –

risposta

6

Il manuale Autoconf (non riesco a ricordare o trovare esattamente dove) raccomanda di "manualmente" fare una sorta di sostituzione di variabile all'interno di un Makefile.in (o .am se vi capita di usare Automake):

Makefile.in

[...] 
foo.sh: foo.sh.in 
     $(SED) \ 
      -e 's|[@][email protected]|$(prefix)|g' \ 
      -e 's|[@][email protected]|$(exec_prefix)|g' \ 
      -e 's|[@][email protected]|$(bindir)|g' \ 
      -e 's|[@][email protected]|$(datarootdir)|g' \ 
      < "$<" > "[email protected]" 
[...] 

foo.sh.in

#!/bin/sh 
[email protected]@ 
du "$datarootdir" 
+1

Rif: http://www.gnu.org/software/automake/manual/html_node/Scripts.html#Scripts – Lekensteyn