2009-09-17 10 views
5

he creado un archivo de configure.ac así:¿Cómo obtener variables completamente expandidas fuera de configuración?

AC_INIT() 
set 

el propósito de esto es para imprimir cada variable de entorno disponible el script de configuración crea utilizando set, así que hacer esto:

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

cuales imprime un montón de variables como

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

Hasta ahora todo bien. El problema es:

  1. Quiero ampliar las variables como ${prefix}/share - pero tubería todo en un archivo y ejecutándolo example.sh usar bash no funciona, debido fiesta se queja acerca de la modificación de sólo lectura y variables como UID la expansión en sí misma tampoco parece funcionar.
  2. He intentado utilizar un makefile para este, donde funciona la expansión, pero se queja de las nuevas líneas de cuerdas, como en la salida por encima de la línea de IFS=' causes an error message Makefile:24: *** missing separator. Stop.

¿Alguien tiene una idea de cómo obtener una versión totalmente expandido de configure de ¿salida?

+0

Hola! ¿Podría explicar por qué le gustaría hacer eso? Su pregunta parece que está tratando de resolver otro problema de la manera difícil. (Por ejemplo, si desea recuperar el valor expandido de una variable como '$ datadir', existen formas más simples de hacerlo.) – adl

+0

Quiero crear plantillas de script de shell independientes del sistema Linux que se ejecutan en , entonces puede crear scripts para configurar un servidor y usar el mismo script para una segunda instancia que solo necesita modificar algunos parámetros el motor de la plantilla im usando simplemente search/replace las variables del script para hacer esto necesito inicializar el motor con todos las variables o no serán reemplazadas –

+0

@adl puede explicar cuál es la manera 'fácil' de manejarlo. También estoy luchando con este problema –

Respuesta

6

El manual Autoconf (no puedo recordar o encontrar exactamente dónde) recomienda a "manual" hacer una especie de sustitución de variables tales desde dentro de un Makefile.in (o .AM si quieres pasar a utilizar 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

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

Cuestiones relacionadas