Spec-Zone.ru › Perl 5.28

perlmacosx

СОДЕРЖАНИЕ

  • ИМЯ
  • СИНОПСИС
  • ОПИСАНИЕ
    • Префикс установки
    • Поддержка SDK
    • Поддержка универсальных бинарников
    • Поддержка 64-битной архитектуры PPC
    • libperl и Предвязывание
    • Обновление Perl от Apple
    • Известные проблемы
    • Cocoa
  • Начать с нуля
  • АВТОР
  • ДАТА

ИМЯ

perlmacosx - Perl под Mac OS X

СИНОПСИС

В данном документе кратко описывается Perl под Mac OS X.

curl -O http://www.cpan.org/src/perl-5.28.3.tar.gz
tar -xzf perl-5.28.3.tar.gz
cd perl-5.28.3
./Configure -des -Dprefix=/usr/local/
make
make test
sudo make install

ОПИСАНИЕ

Последняя версия Perl (5.28.3 на момент написания) компилируется без изменений под всеми версиями Mac OS X начиная с 10.3 «Panther».

Для компиляции собственной версии Perl вам потребуется 'make', который входит в состав инструментов разработчика Apple — также известный как Xcode. Начиная с Mac OS X 10.7 «Lion», его можно загрузить отдельно в виде пакета «Инструменты командной строки» напрямую с https://developer.apple.com/downloads/ (вам потребуется бесплатная учётная запись для входа) или в составе пакета Xcode, доступного бесплатно в App Store. Xcode — довольно большой пакет, поэтому, если вы его не используете или не нуждаетесь в нём, рекомендуется скачать «Инструменты командной строки» отдельно по ссылке выше. Если вы хотите выполнить это изнутри Xcode, перейдите в Xcode -> Настройки -> Загрузки и выберите опцию «Инструменты командной строки».

В промежутке между Mac OS X 10.3 «Panther» и 10.6 «Snow Leopard» пакет «Инструменты командной строки» назывался «Инструменты Unix» и обычно поставлялся на установочных дисках Mac OS.

Более ранние версии Mac OS X (10.2 «Jaguar» и более ранние) не включали полностью многопоточную libc, поэтому многопоточность не полностью поддерживается. Кроме того, более ранние версии содержали ошибочный libdb, поэтому некоторые тесты DB_File, как известно, завершаются сбоем в этих версиях.

Префикс установки

По умолчанию место установки для этой версии использует традиционную структуру каталогов UNIX в /usr/local. Это рекомендуемое место для большинства пользователей, и оно не повлияет на предоставленный Apple Perl и его модули.

Использование префикса установки '/usr' приведёт к структуре каталогов, которая копирует стандартный Perl Apple, с основными модулями, хранящимися в '/System/Library/Perl/${version}', модулями CPAN, хранящимися в '/Library/Perl/${version}', и добавлением '/Network/Library/Perl/${version}' в @INC для модулей, хранящихся на файловом сервере и используемых многими компьютерами Mac.

Поддержка SDK

Сначала экспортируйте путь к SDK в среду разработки:

export SDK=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk

Пожалуйста, убедитесь, что версия SDK (то есть цифры перед '.sdk') соответствует версии вашей системы (в данном случае Mac OS X 10.8 «Mountain Lion»), так как возможно, что установлено несколько SDK. Также убедитесь, что путь существует в вашей системе, и если нет, убедитесь, что SDK установлен правильно, так как он должен поставляться с пакетом «Инструменты командной строки», упомянутым выше. Наконец, если у вас более старая система Mac OS X (10.6 «Snow Leopard» и ниже), использующая Xcode 4.2 или ниже, путь к SDK может быть чем-то вроде '/Developer/SDKs/MacOSX10.3.9.sdk'.

Вы можете использовать SDK, экспортировав некоторые дополнения к переменным конфигурации 'ccflags' и '..flags' Perl:

./Configure -Accflags="-nostdinc -B$SDK/usr/include/gcc \
                       -B$SDK/usr/lib/gcc -isystem$SDK/usr/include \
                       -F$SDK/System/Library/Frameworks" \
            -Aldflags="-Wl,-syslibroot,$SDK" \
            -de

Поддержка универсальных бинарников

Примечание: начиная с Mac OS X 10.6 «Snow Leopard», Apple поддерживает только процессоры Intel. Это означает, что вы можете безопасно пропустить этот раздел, если у вас старый компьютер Apple, работающий на ppc, или вы хотите создать бинарный файл perl с обратной совместимостью.

Вы можете скомпилировать perl в виде универсального бинарника (созданного для ppc и intel). В Mac OS X 10.4 «Tiger» необходимо экспортировать вариант 'u' SDK:

export SDK=/Developer/SDKs/MacOSX10.4u.sdk

Mac OS X 10.5 «Leopard» и выше не требуют варианта 'u'.

В дополнение к флагам компилятора, используемым для выбора SDK, добавьте также флаги для создания универсального бинарника:

./Configure -Accflags="-arch i686 -arch ppc -nostdinc               \
                        -B$SDK/usr/include/gcc                      \
                       -B$SDK/usr/lib/gcc -isystem$SDK/usr/include  \
                       -F$SDK/System/Library/Frameworks"            \
            -Aldflags="-arch i686 -arch ppc -Wl,-syslibroot,$SDK"   \
            -de

Помните, что эти настройки компилятора и линковщика также будут использоваться при построении модулей CPAN. Для того, чтобы модули XS были скомпилированы в виде универсального бинарника, все библиотеки, к которым они ссылаются, также должны быть универсальными бинарниками. Системные библиотеки, поставляемые Apple с 10.4u SDK, являются универсальными, но установленные пользователем библиотеки могут потребовать повторной установки в виде универсальных бинарников.

Поддержка 64-битной архитектуры PPC

Следуйте инструкциям в файле INSTALL, чтобы скомпилировать perl с поддержкой 64-битных целых чисел (use64bitint) или и 64-битных целых чисел, и 64-битной адресации (use64bitall). В последнем случае полученный бинарный файл будет работать только на компьютерах на базе G5.

Поддержка 64-битной адресации является экспериментальной: некоторые аспекты Perl могут быть опущены или содержать ошибки. Обратите внимание на сообщения, выводимые Configure, для получения дополнительной информации. Используйте perlbug для отправки отчета о проблеме в случае возникновения трудностей.

При построении 64-битных модулей вы несете ответственность за обеспечение поддержки 64-битных внешних библиотек и фреймворков: если этого нет, сборка модуля может показаться успешной, но попытки использования модуля приведут к ошибкам динамической компоновки во время выполнения и последующему сбою тестов. Используйте file для определения архитектур, поддерживаемых библиотекой:

$ file libgdbm.3.0.0.dylib 
libgdbm.3.0.0.dylib: Mach-O fat file with 2 architectures
libgdbm.3.0.0.dylib (for architecture ppc):      Mach-O dynamically linked shared library ppc
libgdbm.3.0.0.dylib (for architecture ppc64):    Mach-O 64-bit dynamically linked shared library ppc64

Обратите внимание, что эта проблема исключает компиляцию многих специфичных для Macintosh модулей CPAN (Mac::*), так как необходимые фреймворки Apple не поддерживают PPC64. Аналогично, загрузки из Fink или Darwinports вряд ли обеспечат поддержку 64-битности; библиотеки должны быть перекомпилированы из исходного кода с соответствующими флагами компилятора и компоновщика. Для получения дополнительной информации см. «Руководство по переходу на 64-битную архитектуру» Apple по адресу http://developer.apple.com/documentation/Darwin/Conceptual/64bitPorting/index.html.

libperl и Предвязывание

Mac OS X поставляется с динамически загружаемым libperl, но по умолчанию для этой версии скомпилирована статическая libperl. Причина этого — предварительная привязка. Динамические библиотеки могут быть предварительно привязаны к определённому адресу в памяти для уменьшения времени загрузки. Для этого необходимо знать местоположение и размер всех загруженных ранее библиотек. Apple собирает эту информацию в рамках процесса сборки всей своей операционной системы и, таким образом, имеет к ней лёгкий доступ при компиляции Perl, но обычным пользователям потребовалось бы приложить значительные усилия для получения необходимой информации для предварительной привязки.

Вы можете изменить настройки по умолчанию и скомпилировать динамическую libperl, если хотите (Configure ... -Duseshrplib).

В Mac OS X 10.4 «Tiger» и новее для не-предварительно привязанных библиотек практически нет потери производительности. Более ранние версии будут иметь большее время загрузки, чем либо статическая библиотека, либо предварительно привязанная динамическая библиотека Apple.

Обновление Perl от Apple

Короче говоря — не делайте этого, по крайней мере, без *очень* веской причины. Ваши скрипты так же легко могут начинаться с "#!/usr/local/bin/perl", как и с "#!/usr/bin/perl". Скрипты, поставляемые Apple и другими третьими лицами в составе установочных пакетов и т.п., обычно тестировались только с /usr/bin/perl, установленным Apple.

Если вы обнаружите, что вам всё-таки нужно обновить системный Perl, стоит обратить внимание на вопрос статических и динамических библиотек. Если вы обновите с использованием статической libperl по умолчанию, вы обнаружите, что динамическая libperl, предоставленная Apple, не будет удалена. Если обе библиотеки присутствуют при создании приложения, которое ссылается на libperl, ld по умолчанию будет ссылаться на динамическую библиотеку. Таким образом, если вам нужно заменить динамическую libperl Apple статической libperl, необходимо убедиться, что вы удалите старую динамическую библиотеку после обновления.

Известные проблемы

Если вы установили дополнительные библиотеки, такие как GDBM через Fink (то есть у вас есть библиотеки в /sw/lib), или libdlcompat в /usr/local/lib, вам может потребоваться быть особенно внимательными при запуске Configure, чтобы не запутать Configure и Perl в том, какие библиотеки использовать. Наличие путаницы проявится, например, в ошибках «dyld» о проблемах с символами, например, во время «make test». Наиболее безопасный способ — запустить Configure как

Configure ... -Uloclibpth -Dlibpth=/usr/lib

чтобы заставить Configure искать только в системных библиотеках. Если у вас есть дополнительные каталоги библиотек, которые вы действительно хотите использовать (например, более новые библиотеки Berkeley DB в системах до Panther), добавьте их в libpth:

Configure ... -Uloclibpth -Dlibpth='/usr/lib /opt/lib'

По умолчанию компиляция Perl в статическом формате может вызвать проблемы с сложными приложениями, такими как Tk: в этом случае рассмотрите возможность компиляции Perl в динамическом формате

Configure ... -Duseshrplib

но помните, что в этом случае придётся заплатить за время запуска (см. выше «libperl и Предвязывание»).

Начиная с Tiger (Mac OS X 10.4), Apple выпустила некорректные файлы локализации для локали eu_ES (баскский — Испания). В предыдущих версиях Perl это приводило к ошибкам в тесте lib/locale. Эти ошибки были подавлены в текущей версии Perl путём игнорирования некорректной локализации в тесте. Если вам нужно использовать локаль eu_ES, обратитесь в службу поддержки Apple.

Cocoa

Существует два способа использования Cocoa из Perl. Модуль PerlObjCBridge от Apple, включенный в Mac OS X, может использоваться автономными скриптами для доступа к классам и объектам Foundation (т.е. не графическим).

Альтернативой является CamelBones, фреймворк, который позволяет получить доступ к классам и объектам Foundation и AppKit, поэтому можно создавать полноценные графические приложения в Perl. CamelBones можно найти на SourceForge по адресу http://www.sourceforge.net/projects/camelbones/.

Начать с нуля

К сожалению, довольно легко каким-то образом серьёзно сломать Perl Mac OS X. Если всё остальное не работает, и вы действительно, действительно хотите начать с чистого листа и удалить даже вашу установку Perl от Apple (которая по какой-то причине стала повреждённой), следующие инструкции должны помочь. Пожалуйста, подумайте дважды, прежде чем следовать этим инструкциям: они похожи на проведение нейрохирургии самому себе. Без анестезии. Мы не будем решать ваши проблемы, если вы это сделаете.

Сначала удалите libperl.dylib:

# cd /System/Library/Perl/darwin/CORE
# rm libperl.dylib

Затем удалите все файлы .bundle, найденные в папках:

/System/Library/Perl
/Library/Perl

Вы можете найти их, например, так:

# find /System/Library/Perl /Library/Perl -name '*.bundle' -print

После этого вы можете скопировать Perl с носителя вашей операционной системы (вам потребуется как минимум /System/Library/Perl и /usr/bin/perl), или перестроить Perl из исходного кода с Configure -Dprefix=/usr -Duseshrplib ПРИМЕЧАНИЕ: -Dprefix=/usr заменить системный Perl работает намного лучше с Perl 5.8.1 и более поздними версиями, в Perl 5.8.0 настройки были не совсем правильными.

"Pacifist" от CharlesSoft (http://www.charlessoft.com/) — удобный способ извлечь двоичные файлы Perl с носителя ОС, без необходимости переустановки всей ОС.

АВТОР

Этот файл README был написан Sherm Pendley <sherm@dot-app.org>, а затем обновлен Dominic Dunlop <domo@computer.org> и Breno G. de Oliveira <garu@cpan.org>. Рецепт "Начать с нуля" был предоставлен John Montbriand <montbriand@apple.com>.

ДАТА

Последнее изменение 2013-04-29.

© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.28.3/perlmacosx

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API