Costruzione Perl per OS X - Architecture-Specific Opzioni di compilazione
Domanda
Grazie ad un suggerimento da . Owens , ho divertirsi giocando con Perlbrew avere vari Perl costruisce nella mia home directory. La mia domanda è, più in generale sulla costruzione di una nuova Perl sotto OS X tuttavia.
Ho OS X 10.6.4 Snow Leopard in esecuzione su una recentissima MacBook Pro. Dopo un piccola deviazione ottenere gcc correttamente l'impostazione sotto Snow Leopard, ho costruito e gestito Perl 5.12.1 nella mia home directory solo utilizzando le opzioni di default. Passa il test harness Perl.
Perlbrew consente Perl per essere costruito con l'OS e le bandiere piattaforma specifica. Queste sono le opzioni -D -U -A
per lo script di configurazione Perl. Il perlmacosx me leggere il file non è stato aggiornato in 4 anni, in modo che non è molto utile più.
sono tentato di interruttori appena scimmia di Apple utilizzati nel sistema di Perl v 5.10.0 (che si può essere visto per il vostro particolare Perl per [path_to_specific_perl]/perl -V
digitazione o /usr/bin/perl
per il sistema, in molti casi ...) Oltre al -Dprefix=/usr
che sarebbe diversa per una radice differente per la nuova build Perl, che cosa devo usare?
(eyeballing) Ecco le principali differenze tra le opzioni di compilazione di Apple e il default:
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
Un'altra differenza è il libperl di Apple Perl è un DynaLoader, la build di default è collegata in modo statico.
Quindi, domande :
- Quale interruttori
-D -U -A
dovrei usare per costruire una copia locale del Perl su OS X 10.6+? Non penso che ho bisogno di un binario di grassi come la versione di Apple, e non so se devo fare una versione DynaLoader. Principalmente Sto cercando gli interruttori suggerite per l'ottimizzazione e le caratteristiche suggerite di conseguente libperl. - devo fare una versione DynaLoader? (Vale a dire, in OS X senso di librerie dinamiche ...)
- Il sistema di Perl è
/usr/bin/perl
e non voglio cambiarlo. Faccio a cambiare lo sheebang negli script per puntare alla versione Perlbrew di Perl? Ciò significa che il mio sheebang sarebbe `/ Users / andrew / perl5 / perl '. Faccio a cambiare il mio percorso a punto lì? Quali sono gli altri che fanno a questo proposito? Quello che è considerato "migliore prassi"? - Quando eseguo Perlbrew, ottengo l'avvertimento
v-string in use/require non-portable at ./perlbrew line 818.
linea 818 in Perlbrew èuse 5.8.0;
Non dovrebbe essere quella lineause 5.008_000
?
Modifica
Grazie a Jonathan Leffler, ho almeno aveva alcuni Perls da guardare. Piuttosto che entrare troppo in profondità in esso, ho appena preso i valori di default nella maggior parte dei casi, le discussioni aggiunti, e sembra funzionare bene. Ora ho Perlbrew installato con diversi Perl e ho lasciato il sistema Perl a 5.10. Io uso /usr/bin/env perl
sul sheebang per avere il codice futuro proofish.
Soluzione
Il meglio che posso offrire è l'uscita di 'perl -V' per ciascuno della mia collezione di homebrew 5.1x versioni di Perl - alcuni a 32 bit, alcuni a 64-bit. Ho omesso il PowerPC costruisce (dai giorni prima avevo un Mac Intel).
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
Non costruire con filettatura o per la molteplicità. Faccio compilazione con caricamento dinamico; Io uso la versione dlopen - è il default suggerito. La macchina riceve nomi diversi a seconda di dove esso è collegato alla rete; Questo si presenta in nomi delle macchine build.
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-bit)
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 a 64 bit
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 a 64 bit
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 a 32 bit
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 a 64 bit
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
.