Puedo desarrollar aplicaciones utilizando el habitual conjunto de herramientas de Unix: un compilador, make
, y las bibliotecas compartidas. El procedimiento es, a continuación, tradicionalmente algo como
-
./configure
, que adecua las fuentes de las características de la máquina que se ejecuta, -
make
, que en realidad recoge las bibliotecas compartidas, ejecutables, etc., -
make check
, que ejecuta las pruebas antes de instalar el paquete, -
make install
, si el paquete se comporta correctamente, y por último, opcionalmente, -
make installcheck
, para asegurarse de que la instalación funciona.
Durante make
, el de bibliotecas compartidas y ejecutables compilados en su forma definitiva: los ejecutables compilados con una dependencia para las bibliotecas compartidas en su destino final (es decir, dependen de las bibliotecas en /usr/local/lib
a pesar de que aún no, aún están en el árbol). A continuación, make install
es, a grandes rasgos, sólo que usando cp
a instalar librerías y ejecutables a partir de la generación de árbol para el último lugar.
Durante la make check
fase, se está ejecutando el programa desinstalado: las bibliotecas compartidas, archivos ejecutables y archivos auxiliares se encuentran todavía en la construcción del árbol. Para ejecutar las pruebas que tienes que configurar un par de custom variables de entorno (por ejemplo, dígale a su programa de su auxiliar de archivos de datos no se en /usr/local/share
, pero en el árbol de código fuente), y algunas variables de entorno del sistema, para contar su cuota de lib cargador para buscar las librerías compartidas. Las variables de entorno en los sistemas unix tradicionales es LD_LIBRARY_PATH
, en OS X es DYLD_LIBRARY_PATH
. Esto ha funcionado para (decenas de) años.
Pero ahora, El Capitán rompió este.
$ (export FOO=foo; env) | grep foo
FOO=foo
$ (export DYLDFOO=foo; env) | grep foo
DYLDFOO=foo
$ (export DYLD_FOO=foo; env) | grep foo
$
ahora, cuando la SIP está habilitado, no DYLD_*
se exporta a partir de un proceso para sus hijos.
Así que mi pregunta es: ¿Cómo podemos ejecutar programas que no se instalan? ¿Cuál es el procedimiento a seguir para ser capaz de ejecutar el tradicional de Unix secuencia ./configure && make && make check
?
Por favor, no hay respuesta, tales como "ejecutar make install
primera". Ese no es el punto. Soy un desarrollador, y la ejecución de "hacer" (y, más generalmente, ejecutando un no-versión instalada de un programa) es algo que hago muy a menudo. Incluso la instalación de un ficticio lugar es mucho tiempo. Necesito algo eficaz, y eficiente. Y desactivación de la SIP no va a arreglar el problema de los usuarios de mis paquetes que desea ejecutar make check
.