Сборка Perl для OS X — параметры компиляции для конкретной архитектуры

StackOverflow https://stackoverflow.com/questions/3662804

Вопрос

Благодаря предложению от Час.Оуэнс, мне было весело играть с Перлбрю иметь различные сборки Perl в моем домашнем каталоге.Однако мой вопрос в более общем плане касается создания нового Perl под OS X.

У меня OS X 10.6.4 Snow Leopard, работающая на последнем MacBook Pro.После небольшое отвлечение Чтобы правильно настроить gcc под Snow Leopard, я собрал и запустил Perl 5.12.1 в своем домашнем каталоге, используя только параметры по умолчанию.Он проходит тестирование Perl.

Perlbrew позволяет создавать Perl с использованием флагов, специфичных для ОС и платформы.Эти -D -U -A параметры сценария настройки Perl.А perlmacosx файл read me не обновлялся уже 4 года, так что это уже не очень полезно.

У меня возникает соблазн просто подражать переключателям Apple, используемым в системе Perl v 5.10.0 (которую вы можете увидеть для вашего конкретного Perl, набрав [path_to_specific_perl]/perl -V или /usr/bin/perl для системы в большинстве случаев...) Кроме -Dprefix=/usr что будет отличаться для другого корня новой сборки Perl, что мне следует использовать?

(глядя в глаза) Вот основные различия между параметрами компиляции Apple и значениями по умолчанию:

config_args:
Apple:       -ds -e
Default:     -de

-D: =======================
Apple:       useithreads=define, usemultiplicity=define
Default:     useithreads=undef, usemultiplicity=undef

Compiler: =================
Apple:       optimize='-Os' 
Default:     optimize='-O3'

Apple:       -arch x86_64 -arch i386 -arch ppc
Default:     none specified

Apple:      -g -pipe
Default     these optimizations are not set

Apple       not set
Default     -no-cpp-precomp

Linker: ================
Apple:     useshrplib=true, libperl=libperl.dylib
Default:   useshrplib=false, libperl=libperl.a

Characteristics of libperl: =============
Apple      MULTIPLICITY PERL_IMPLICIT_CONTEXT USE_ITHREADS USE_REENTRANT_API
Default    PERL_MALLOC_WRAP USE_PERL_ATOF

Еще одно отличие заключается в том, что Apple Perl libperl является динамическим загрузчиком, сборка по умолчанию статически скомпонована.

Так, вопросы:

  1. Который -D -U -A переключатели, которые мне следует использовать для сборки локальной копии Perl в OS X 10.6+?Я не думаю, что мне нужен толстый двоичный файл, такой как версия Apple, и я не знаю, стоит ли мне делать версию с динамалоадером.В основном я ищу предлагаемые переключатели для оптимизации и предлагаемые характеристики полученного libperl.
  2. Должен ли я сделать версию Dynaloader?(т.е. в смысле OS X Динамические библиотеки...)
  3. Система Perl представляет собой /usr/bin/perl и я не хочу это менять.Могу ли я изменить в сценариях символ, указывающий на версию Perl для Perlbrew?Это означает, что мой Sheebang будет `/users/andrew/perl5/perl. ' Я могу изменить свой путь на точку там?Что делают в этом отношении другие?Что считается «лучшей практикой»?
  4. Когда я запускаю Perlbrew, я получаю предупреждение v-string in use/require non-portable at ./perlbrew line 818. Строка 818 в Perlbrew use 5.8.0; Разве эта линия не должна быть use 5.008_000?

Редактировать

Благодаря Джонатану Леффлеру у меня меньше всего было на что посмотреть Perls.Вместо того, чтобы слишком углубляться в это, я в большинстве случаев просто использовал значения по умолчанию, добавлял потоки, и, похоже, все работает нормально.Теперь у меня установлен Perlbrew с несколькими Perl, и я оставил системный Perl версии 5.10.я использую /usr/bin/env perl на sheebang, чтобы иметь перспективный код.

Это было полезно?

Решение

Лучшее, что я могу предложить, — это вывод команды «perl -V» для каждой моей домашней коллекции версий Perl 5.1x — некоторых 32-битных, некоторых 64-битных.Я пропустил сборки PowerPC (с тех пор, как у меня еще не было Intel Mac).

drwxr-xr-x  8 jleffler  staff       272 Aug  1  2009 v5.10.0
drwxr-xr-x  8 jleffler  staff       272 Nov  8  2009 v5.10.1
drwxr-xr-x  6 jleffler  staff       204 Oct 26  2009 v5.10.1-64
drwxr-xr-x  6 jleffler  staff       204 Jun 23 09:36 v5.12.1
drwxr-xr-x  5 jleffler  staff       170 Jun 17 21:14 v5.12.1-32bit
drwxr-xr-x  5 jleffler  staff       170 Aug 30 15:02 v5.13.4

Я не строю с использованием потоков или множественности.Я делаю сборку с динамической загрузкой;Я использую версию dlopen — она предлагается по умолчанию.Машина получает разные имена в зависимости от того, где она подключена к сети;это отображается в именах машин сборки.

5.10.0

Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=darwin, osvers=9.7.0, archname=darwin-64int-2level
    uname='darwin osiris.sanjose.ibm.com 9.7.0 darwin kernel version 9.7.0: tue mar 31 22:52:17 pdt 2009; root:xnu-1228.12.14~1release_i386 i386 '
    config_args='-Duse64bitint'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -I/usr/local/include -I/usr/gnu/include -I/usr/GNU/include',
    optimize='-O3',
    cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -I/usr/local/include -I/usr/gnu/include -I/usr/GNU/include'
    ccversion='', gccversion='4.0.1 (Apple Inc. build 5493)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -L/usr/local/lib -L/usr/gnu/lib -L/usr/GNU/lib'
    libpth=/usr/local/lib /usr/gnu/lib /usr/GNU/lib /usr/lib
    libs=-ldbm -ldl -lm -lutil -lc
    perllibs=-ldl -lm -lutil -lc
    libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/gnu/lib -L/usr/GNU/lib'


Characteristics of this binary (from libperl): 
  Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP USE_64_BIT_INT
                        USE_LARGE_FILES USE_PERLIO
  Built under darwin
  Compiled at Jul 14 2009 10:09:56
  @INC:
    /Users/jleffler/perl/v5.10.0/lib/5.10.0/darwin-64int-2level
    /Users/jleffler/perl/v5.10.0/lib/5.10.0
    /Users/jleffler/perl/v5.10.0/lib/site_perl/5.10.0/darwin-64int-2level
    /Users/jleffler/perl/v5.10.0/lib/site_perl/5.10.0
    .

5.10.1 (32-битная)

Summary of my perl5 (revision 5 version 10 subversion 1) configuration:

  Platform:
    osname=darwin, osvers=9.8.0, archname=darwin-2level
    uname='darwin osiris.local 9.8.0 darwin kernel version 9.8.0: wed jul 15 16:55:01 pdt 2009; root:xnu-1228.15.4~1release_i386 i386 '
    config_args=''
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=undef, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc -m32', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/usr/gnu/include',
    optimize='-O3',
    cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/usr/gnu/include'
    ccversion='', gccversion='4.0.1 (Apple Inc. build 5493)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc -m32', ldflags =' -fstack-protector -L/usr/local/lib -L/usr/gnu/lib'
    libpth=/usr/local/lib /usr/gnu/lib /usr/lib
    libs=-ldbm -ldl -lm -lutil -lc
    perllibs=-ldl -lm -lutil -lc
    libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/gnu/lib -fstack-protector'


Characteristics of this binary (from libperl): 
  Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP
                        USE_LARGE_FILES USE_PERLIO
  Built under darwin
  Compiled at Sep  3 2009 07:26:44
  @INC:
    /Users/jleffler/perl/v5.10.1/lib/5.10.1/darwin-2level
    /Users/jleffler/perl/v5.10.1/lib/5.10.1
    /Users/jleffler/perl/v5.10.1/lib/site_perl/5.10.1/darwin-2level
    /Users/jleffler/perl/v5.10.1/lib/site_perl/5.10.1
    .

5.10.1 64-битная

Summary of my perl5 (revision 5 version 10 subversion 1) configuration:

  Platform:
    osname=darwin, osvers=9.8.0, archname=darwin-2level
    uname='darwin osiris.sanjose.ibm.com 9.8.0 darwin kernel version 9.8.0: wed jul 15 16:55:01 pdt 2009; root:xnu-1228.15.4~1release_i386 i386 '
    config_args=''
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc -m64', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/usr/gnu/include',
    optimize='-O3',
    cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/usr/gnu/include'
    ccversion='', gccversion='4.0.1 (Apple Inc. build 5493)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc -m64', ldflags =' -fstack-protector -L/usr/local/lib -L/usr/gnu/lib'
    libpth=/usr/local/lib /usr/gnu/lib /usr/lib
    libs=-ldbm -ldl -lm -lutil -lc
    perllibs=-ldl -lm -lutil -lc
    libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/gnu/lib -fstack-protector'


Characteristics of this binary (from libperl): 
  Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP USE_64_BIT_ALL
                        USE_64_BIT_INT USE_LARGE_FILES USE_PERLIO
  Built under darwin
  Compiled at Sep  3 2009 10:12:54
  @INC:
    /Users/jleffler/perl/v5.10.1-64/lib/5.10.1/darwin-2level
    /Users/jleffler/perl/v5.10.1-64/lib/5.10.1
    /Users/jleffler/perl/v5.10.1-64/lib/site_perl/5.10.1/darwin-2level
    /Users/jleffler/perl/v5.10.1-64/lib/site_perl/5.10.1
    .

5.12.1 64-битная

Summary of my perl5 (revision 5 version 12 subversion 1) configuration:

  Platform:
    osname=darwin, osvers=10.3.0, archname=darwin-2level
    uname='darwin dyn744040.sanjose.ibm.com 10.3.0 darwin kernel version 10.3.0: fri feb 26 11:58:09 pst 2010; root:xnu-1504.3.12~1release_i386 i386 '
    config_args=''
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/usr/gnu/include -I/usr/GNU/include',
    optimize='-O3',
    cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/usr/gnu/include -I/usr/GNU/include'
    ccversion='', gccversion='4.2.1 (Apple Inc. build 5659)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib -L/usr/gnu/lib'
    libpth=/usr/local/lib /usr/gnu/lib /usr/lib
    libs=-ldbm -ldb -ldl -lm -lutil -lc
    perllibs=-ldl -lm -lutil -lc
    libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/gnu/lib -fstack-protector'


Characteristics of this binary (from libperl): 
  Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP USE_64_BIT_ALL
                        USE_64_BIT_INT USE_LARGE_FILES USE_PERLIO
                        USE_PERL_ATOF
  Built under darwin
  Compiled at Jun  8 2010 15:36:47
  @INC:
    /Users/jleffler/Perl/v5.12.1/lib/perl5/site_perl/5.12.1/darwin-2level
    /Users/jleffler/Perl/v5.12.1/lib/perl5/site_perl/5.12.1
    /Users/jleffler/Perl/v5.12.1/lib/perl5/5.12.1/darwin-2level
    /Users/jleffler/Perl/v5.12.1/lib/perl5/5.12.1
    .

5.12.1 32-битная

Summary of my perl5 (revision 5 version 12 subversion 1) configuration:

  Platform:
    osname=darwin, osvers=10.4.0, archname=darwin-2level
    uname='darwin osiris-2.local 10.4.0 darwin kernel version 10.4.0: fri apr 23 18:28:53 pdt 2010; root:xnu-1504.7.4~1release_i386 i386 '
    config_args=''
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=undef, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc -m32', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/usr/gnu/include -I/usr/GNU/include',
    optimize='-O3',
    cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/usr/gnu/include -I/usr/GNU/include'
    ccversion='', gccversion='4.2.1 (Apple Inc. build 5659)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc -m32', ldflags =' -fstack-protector -L/usr/local/lib -L/usr/gnu/lib -L/usr/GNU/lib'
    libpth=/usr/local/lib /usr/gnu/lib /usr/GNU/lib /usr/lib
    libs=-ldbm -ldl -lm -lutil -lc
    perllibs=-ldl -lm -lutil -lc
    libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/gnu/lib -L/usr/GNU/lib -fstack-protector'


Characteristics of this binary (from libperl): 
  Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP
                        USE_LARGE_FILES USE_PERLIO USE_PERL_ATOF
  Built under darwin
  Compiled at Jun 17 2010 20:48:50
  @INC:
    /Users/jleffler/Perl/v5.12.1-32bit/lib/perl5/site_perl/5.12.1/darwin-2level
    /Users/jleffler/Perl/v5.12.1-32bit/lib/perl5/site_perl/5.12.1
    /Users/jleffler/Perl/v5.12.1-32bit/lib/perl5/5.12.1/darwin-2level
    /Users/jleffler/Perl/v5.12.1-32bit/lib/perl5/5.12.1
    .

5.13.4 64-битная

Summary of my perl5 (revision 5 version 13 subversion 4) configuration:

  Platform:
    osname=darwin, osvers=10.4.0, archname=darwin-2level
    uname='darwin dyn9043040112.sanjose.ibm.com 10.4.0 darwin kernel version 10.4.0: fri apr 23 18:28:53 pdt 2010; root:xnu-1504.7.4~1release_i386 i386 '
    config_args=''
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc -m64', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/gnu64/include -I/usr/local/include',
    optimize='-O3',
    cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/gnu64/include -I/usr/local/include'
    ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags ='-fstack-protector -L/usr/gnu64/lib -L/usr/local/lib'
    libpth=/usr/gnu64/lib /usr/lib /usr/local/lib
    libs=-ldbm -ldb -ldl -lm -lutil -lc
    perllibs=-ldl -lm -lutil -lc
    libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/gnu64/lib -L/usr/local/lib -fstack-protector'


Characteristics of this binary (from libperl): 
  Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP USE_64_BIT_ALL
                        USE_64_BIT_INT USE_LARGE_FILES USE_PERLIO
                        USE_PERL_ATOF
  Built under darwin
  Compiled at Aug 30 2010 14:36:39
  @INC:
    /Users/jleffler/perl/v5.13.4/lib/site_perl/5.13.4/darwin-2level
    /Users/jleffler/perl/v5.13.4/lib/site_perl/5.13.4
    /Users/jleffler/perl/v5.13.4/lib/5.13.4/darwin-2level
    /Users/jleffler/perl/v5.13.4/lib/5.13.4
    .
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top