Я розробляю програми за допомогою звичайного набору інструментів Unix: компілятора makeта спільних бібліотек. Потім процедура традиційно є щось подібне
./configure, яка адаптує джерела до особливостей машини, на якій вона працює,make, яка фактично компілює спільні файли, виконувані файли тощо,make check, яка виконує тести, перш ніж встановити пакет,make install, якщо пакет поводиться належним чином, і, нарешті, необов'язково,make installcheck, щоб переконатися, що установка працює.
Під makeчас спільні файли та виконувані файли складаються у їх остаточному вигляді: виконувані файли складаються залежно від спільних ліб за їх кінцевим призначенням (тобто вони залежать від бібліотек, /usr/local/libхоча їх ще немає, вони все ще знаходяться в складанні дерево). Тоді make install, приблизно, просто використовуйте cpдля установки libs та виконуваних файлів від дерева збірки до остаточного місця.
Під час make checkфази ми запускаємо програму, яку не видалено: спільні файли, виконувані файли та допоміжні файли все ще знаходяться у дереві збірки. Для запуску тестів необхідно встановити кілька змінних користувальницьких середовищ (наприклад, сказати програмі, що ваші допоміжні файли даних не знаходяться, /usr/local/shareа є у вихідному дереві), а також деякі змінні системного середовища, щоб вказати вашому завантажувачу ліб- файлів для пошуку для спільних ліб. Змінні середовища в традиційних Unices є LD_LIBRARY_PATH, в OS X це є DYLD_LIBRARY_PATH. Це працює (десятки) років.
Але зараз Ель Капітан це порушив.
$ (export FOO=foo; env) | grep foo
FOO=foo
$ (export DYLDFOO=foo; env) | grep foo
DYLDFOO=foo
$ (export DYLD_FOO=foo; env) | grep foo
$
тепер, коли SIP увімкнено, жоден процес DYLD_*не експортується з процесу для своїх дітей.
Отже, моє запитання: як ми можемо запускати програми, які не встановлені? Яку процедуру слід дотримуватися, щоб мати змогу запустити традиційну послідовність Unix ./configure && make && make check?
Будь ласка , жодної відповіді, наприклад "запустити make installперший". Це не суть. Я розробник, і запуск "робити перевірку" (і загалом, запуск неінстальованої версії програми) - це те, що я роблю дуже часто. Навіть установка на підроблене місце займає багато часу. Мені потрібно щось ефективне та ефективне. І відключення SIP не вирішить проблему для користувачів моїх пакунків, які хочуть запуститись make check.
DYLD_INSERT_LIBRARIES=$HOME/.bin/lib/Apple80211 /Applications/Utilities/AirPort\ Utility\ 5.6.app/Contents/MacOS/AirPort\ Utility\ 5.6для запуску старого APU (зі старою бібліотекою) під 10.11 (навіть якщо змінна не відображається вenv). Дивно (але це працює).