2008-10-02 9 views

Respuesta

7

tengo problemas similares en Solaris con CCG - y utilizar la técnica de 'estándar':

CONFIG_SHELL=/bin/bash ./configure ... 

(O, en realidad, yo uso/bin/ksh, pero entorno el env var de CONFIG_SHELL le permite decir scripts autoconf cuyo shell usar).

Comprobé el script de configuración para git y gd (se habían extraído) para comprobar que esta no era una var de env peculiar de GCC.

-4

ln -f /bin/bash /bin/sh

:-P (No, no es una respuesta seria. Por favor, no regar su sistema haciéndolo!)

+0

Puedes descartarme todo lo que quieras; solo demuestra que no tienes sentido del humor. :-P –

0

Dónde está SHELL se establece en eso? ¿Qué se está ejecutando con/bin/sh cuando quieres/bin/bash?

Los scripts de configuración están destinados a ejecutarse en cualquier lugar, incluso en las conchas terriblemente rotas y no Bash que existen en la naturaleza.

Editar: ¿Cuál es exactamente el problema?

Otra edición: Tal vez le gustaría que la secuencia de comandos se vuelva a ejecutar, algo así. Es probablemente con errores:

if test "$SHELL" = "/bin/sh" && test -x /bin/bash; then 
    exec /bin/bash -c "$0" "[email protected]" 
fi 
+0

El problema es que a veces las secuencias de comandos Configurar requieren sintaxis no admitidas por Bourne shell. El script de configuración está roto, pero así es la vida en la industria del software. En ese punto, debe convencer a Configure para que se ejecute con el shell correcto, y eso requiere CONFIG_SHELL como indiqué. –

4

¿Cuáles son los "grandes problemas"? autoconf trabaja muy duro para generar un script de configuración que funcione con un porcentaje muy grande de shells. Si tiene un ejemplo de un constructo que autoconf está escribiendo que no es portátil, informe a la lista de correo de autoconf. Por otro lado, si los problemas que experimenta son el resultado de que su propio código de shell en configure.ac no es portátil (por ejemplo, está utilizando bashisms), entonces la solución es dejar de usar el código no portátil o requerir el usuario para establecer explícitamente SHELL o CONFIG_SHELL en el momento de la configuración.

Parece que el problema que está experimentando se encuentra en el entorno del usuario que ejecuta configure. En Linux, su usuario tiene configurado SHELL en/bin/bash, pero en OS X está configurado en/bin/sh. La secuencia de comandos de configuración generada por autoconf realiza algunas pruebas iniciales del shell bajo el que se ejecuta e intenta volver a ejecutarse utilizando un shell diferente si el shell proporcionado carece de ciertas características. Sin embargo, si está introduciendo un código shell no portátil en configure.ac, está violando una de las principales filosofías de autoconf: que los scripts de configuración deben ser portátiles. Si realmente quieres usar bashisms en tu código de shell, entonces le pides a tu usuario que pase SHELL =/bin/bash como argumento al script de configuración. Esto no es un error en autoconf, pero sería considerado por muchos como un error en la compilación de su proyecto.

+0

Solo digo, de hecho hay situaciones en las que/bin/sh es un problema. En AIX, por ejemplo, el uso de/bin/sh puede hacer que una compilación tome edades porque/bin/sh maneja las pruebas típicas de configuración muy, muy lentamente. (Puede corregirse en versiones más recientes, ha pasado algún tiempo desde que encontré ese problema en particular.) – DevSolar

2

Autoconf se supone que resuelve problemas de portabilidad generando un script que puede ejecutarse "en cualquier lugar".Es por eso que genera código extraño como:

if test X$foo = X ; then ... # check if foo is empty 

en lugar de:

if [ "$x" = "" ] ; then ... 

que tipo de código cruftoso probablemente una vez permite que estas secuencias de comandos para ejecutar en algún sistema Ultrix antigua o lo que sea.

Una secuencia de comandos de configuración no se ejecuta debido a las diferencias de shell es como llegar a una carrera de Fórmula 1 con 10 litros de gasolina y tres llantas de repuesto.

Si está desarrollando un script de configuración con Autoconf, y es sensible a si el shell es Bash o el shell OSX, está haciendo algo mal, o la gente Autoconf rompió algo. Si es de usted, arregle las piezas de shell que está agregando al guión haciéndolos portátiles.

+0

Usando '" x $ foo "' (con comillas dobles además del prefijo 'x') en lugar de' "$ foo" ' no tiene nada que ver con cadenas vacías. Tiene que ver con los casos en los que "$ foo" podría evaluar algo que puede parecer una opción de prueba como '-f'. – adl