Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.86k stars 528 forks source link

[PATCH] INSTALL doesn't mention 64 bit support. #2370

Closed p5pRT closed 20 years ago

p5pRT commented 23 years ago

Migrated from rt.perl.org#3702 (status was 'resolved')

Searchable as RT3702$

p5pRT commented 23 years ago

From @abigail

Created by @abigail

The INSTALL file doesn't mention anything about building a perl with 64-bit support; it's all hidden in perl56delta.pod.

This patch adds the information to INSTALL; it's mostly cutted and pasted from perl56delta.pod.

The patch is against the 6640 build.

Abigail

*** INSTALL.orig Sun Aug 13 14​:33​:00 2000 --- INSTALL Tue Aug 15 16​:07​:52 2000 *************** *** 670\,675 **** --- 670\,721 ----   Eventually (by perl v5.6.0) this internal confusion ought to disappear\,   and these options may disappear as well.  
+ =head2 64 bit support. + + If your platform does not have 64 bits natively\, but can simulate them with + compiler flags and/or C\ or C\<int64_t>\, you can build a perl that + uses 64 bits. + + There are actually two modes of 64-bitness​: the first one is achieved + using Configure -Duse64bitint and the second one using Configure + -Duse64bitall. The difference is that the first one is minimal and + the second one maximal. The first works in more places than the second. + + The C\ does only as much as is required to get 64-bit + integers into Perl (this may mean\, for example\, using "long longs") + while your memory may still be limited to 2 gigabytes (because your + pointers could still be 32-bit). Note that the name C\<64bitint> does + not imply that your C compiler will be using 64-bit C\s (it might\, + but it doesn't have to)​: the C\ means that you will be + able to have 64 bits wide scalar values. + + The C\ goes all the way by attempting to switch also + integers (if it can)\, longs (and pointers) to being 64-bit. This may + create an even more binary incompatible Perl than -Duse64bitint​: the + resulting executable may not run at all in a 32-bit box\, or you may + have to reboot/reconfigure/rebuild your operating system to be 64-bit + aware. + + Natively 64-bit systems like Alpha and Cray need neither -Duse64bitint + nor -Duse64bitall. + + NOTE​: 64-bit support is still experimental on most platforms. + Existing support only covers the LP64 data model. In particular\, the + LLP64 data model is not yet supported. 64-bit libraries and system + APIs on many platforms have not stabilized--your mileage may vary. + + =head2 Long doubles + + In some systems you may be able to use long doubles to enhance the + range and precision of your double precision floating point numbers + (that is\, Perl's numbers). Use Configure -Duselongdouble to enable + this support (if it is available). + + =head2 "more bits" + + You can "Configure -Dusemorebits" to turn on both the 64-bit support + and the long double support. +   =head2 Selecting File IO mechanisms  
  Previous versions of perl used the standard IO mechanisms as defined in

Perl Info ``` Flags: category=docs severity=low Site configuration information for perl v5.6.0: Configured by abigail at Wed Jun 14 21:00:02 EDT 2000. Summary of my perl5 (revision 5.0 version 6 subversion 0) configuration: Platform: osname=linux, osvers=2.2.13, archname=i686-linux-64int uname='linux alexandra 2.2.13 #5 tue feb 8 15:37:54 est 2000 i686 unknown ' config_args='-Dprefix=/opt/perl -d -Uinstallusrbinperl -Doptimize=-g -Dusemorebits' hint=recommended, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef useperlio=undef d_sfio=undef uselargefiles=define use64bitint=define use64bitall=undef uselongdouble=define usesocks=undef Compiler: cc='cc', optimize='-g', gccversion=2.95.2 19991024 (release) cppflags='-DDEBUGGING -fno-strict-aliasing -I/usr/local/include' ccflags ='-DDEBUGGING -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' stdchar='char', d_stdstdio=define, usevfork=false intsize=4, longsize=4, ptrsize=4, doublesize=8 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long long', ivsize=8, nvtype='long double', nvsize=12, Off_t='off_t', lseeksize=8 alignbytes=4, usemymalloc=n, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lc -lposix -lcrypt libc=/lib/libc-2.1.2.so, so=so, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic' cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib' Locally applied patches: @INC for perl v5.6.0: /home/abigail/Perl /home/abigail/Sybase /opt/perl/lib/5.6.0/i686-linux-64int /opt/perl/lib/5.6.0 /opt/perl/lib/site_perl/5.6.0/i686-linux-64int /opt/perl/lib/site_perl/5.6.0 /opt/perl/lib/site_perl/5.005 /opt/perl/lib/site_perl . Environment for perl v5.6.0: HOME=/home/abigail LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH=/home/abigail/Lib:/usr/local/lib:/usr/lib:/lib:/usr/X11R6/lib:/opt/tcl/lib:/opt/tk/lib/tk8.0 LOGDIR (unset) PATH=/home/abigail/Bin:/opt/perl/bin:/opt/tcl/bin:/opt/tk/bin:/usr/local/bin:/usr/local/X11/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/games:/opt/povray/bin:/opt/teTeX/bin/i686-pc-linux-gnu:/opt/python/bin PERL5LIB=/home/abigail/Perl:/home/abigail/Sybase PERLDIR=/opt/perl PERL_BADLANG (unset) SHELL=/bin/bash ```
p5pRT commented 23 years ago

From @jhi

On Tue\, Aug 15\, 2000 at 08​:12​:41PM -0000\, abigail@​foad.org wrote​:

This is a bug report for perl from abigail@​foad.org\, generated with the help of perlbug 1.28 running under perl v5.6.0.

----------------------------------------------------------------- [Please enter your report here]

The INSTALL file doesn't mention anything about building a perl with 64-bit support; it's all hidden in perl56delta.pod.

Thanks\, applied.

This patch adds the information to INSTALL; it's mostly cutted and pasted from perl56delta.pod.

Of course\, such info duplication is bad and naughty\, getting out of sync is inevitable. Maybe we should have a perlinstall.pod?

p5pRT commented 23 years ago

From @abigail

On Tue\, Aug 15\, 2000 at 07​:14​:55PM -0500\, Jarkko Hietaniemi wrote​:

On Tue\, Aug 15\, 2000 at 08​:12​:41PM -0000\, abigail@​foad.org wrote​:

This is a bug report for perl from abigail@​foad.org\, generated with the help of perlbug 1.28 running under perl v5.6.0.

----------------------------------------------------------------- [Please enter your report here]

The INSTALL file doesn't mention anything about building a perl with 64-bit support; it's all hidden in perl56delta.pod.

Thanks\, applied.

This patch adds the information to INSTALL; it's mostly cutted and pasted from perl56delta.pod.

Of course\, such info duplication is bad and naughty\, getting out of sync is inevitable. Maybe we should have a perlinstall.pod?

But is getting out of sync bad in this case? perl56delta.pod describes what's new in perl5.6. INSTALL describes the installation of the current Perl. If that changes\, the information *should* get out of sync; otherwise\, one of them would be wrong.

As for perlinstall.pod\, INSTALL *is* a pod file. Perhaps all that's needed is a symlink?

Abigail

p5pRT commented 23 years ago

From @jhi

On Wed\, Aug 16\, 2000 at 12​:01​:33AM -0400\, abigail@​foad.org wrote​:

On Tue\, Aug 15\, 2000 at 07​:14​:55PM -0500\, Jarkko Hietaniemi wrote​:

On Tue\, Aug 15\, 2000 at 08​:12​:41PM -0000\, abigail@​foad.org wrote​:

This is a bug report for perl from abigail@​foad.org\, generated with the help of perlbug 1.28 running under perl v5.6.0.

----------------------------------------------------------------- [Please enter your report here]

The INSTALL file doesn't mention anything about building a perl with 64-bit support; it's all hidden in perl56delta.pod.

Thanks\, applied.

This patch adds the information to INSTALL; it's mostly cutted and pasted from perl56delta.pod.

Of course\, such info duplication is bad and naughty\, getting out of sync is inevitable. Maybe we should have a perlinstall.pod?

But is getting out of sync bad in this case? perl56delta.pod describes what's new in perl5.6. INSTALL describes the installation of the current Perl. If that changes\, the information *should* get out of sync; otherwise\, one of them would be wrong.

I'm referring to installation-ish things in general\, not to this particular detail. And even in this case​: the 64-bits was a new thing in 5.6\, but as it matures it should migrate to someplace else.

As for perlinstall.pod\, INSTALL *is* a pod file. Perhaps all that's needed is a symlink?

Symlinks do not exist everywhere. Ergo\, no symlinks allowed in official distributions. Makefile tricks that copy/rename stuff are okay (like README.os2 ending up us perlos2.pod).

Abigail

p5pRT commented 23 years ago

From [Unknown Contact. See original ticket]

The INSTALL file doesn't mention anything about building a perl with 64-bit support; it's all hidden in perl56delta.pod.

This patch adds the information to INSTALL; it's mostly cutted and pasted from perl56delta.pod.

Its nice that this will make it to INSTALL\, but does anyone who understands it want to take a crack at adding information about how this 64 bit stuff is supposed to interact (or not interact) with support for large file I/O?

I tried to figure out once what I was going to have to do to build perl with large file support and I ran out of time before I ever got anything to make sense :-).

p5pRT commented 23 years ago

From @jhi

On Wed\, Aug 16\, 2000 at 07​:07​:09AM -0400\, Horsley Tom wrote​:

The INSTALL file doesn't mention anything about building a perl with 64-bit support; it's all hidden in perl56delta.pod.

This patch adds the information to INSTALL; it's mostly cutted and pasted from perl56delta.pod.

Its nice that this will make it to INSTALL\, but does anyone who understands it want to take a crack at adding information about how this 64 bit stuff is supposed to interact (or not interact) with support for large file I/O?

I tried to figure out once what I was going to have to do to build perl with large file support and I ran out of time before I ever got anything to make sense :-).

Could you go back in time\, please\, and reiterate the nature and source of your confusion?

p5pRT commented 23 years ago

From [Unknown Contact. See original ticket]

Could you go back in time\, please\, and reiterate the nature and source of your confusion?

The only thing perldelta says about large files is that perl will try to add the O_LARGEFILE flag to all open calls if you have it.

But on my platform (and I think others) we need to compile with -D_LARGEFILE64_SOURCE to really get everything needed for large file support. Part of everything needed for largefile support is using various routines with names like fseeko64 and ftello64 and stat64\, etc\, etc. These are all new routines with new interfaces because you need a 64 bit type to get info about file size\, to seek to file offsets\, etc. There we have the magic requirement for a 64 bit type to do large file support\, that leads to the natural assumption (possibly incorrect) that some sort of 64 bit support is required in perl in order to also support large files.

The other large file confusion is that obviously a lot more is required to really support large files than just the O_LARGEFILE mentioned in the pods\, so I don't know if my platform would really work or not without greater porting efforts.

No doubt I could figure this all out with sufficient time to actually examine the sources and test things\, but this is the source of my current (uninformed) confusion :-).

p5pRT commented 23 years ago

From @jhi

On Wed\, Aug 16\, 2000 at 08​:29​:26AM -0400\, Horsley Tom wrote​:

Could you go back in time\, please\, and reiterate the nature and source of your confusion?

The only thing perldelta says about large files is that perl will try to add the O_LARGEFILE flag to all open calls if you have it.

But on my platform (and I think others) we need to compile with -D_LARGEFILE64_SOURCE to really get everything needed for large file support. Part of everything needed for largefile support is using various routines with names like fseeko64 and ftello64 and stat64\, etc\, etc. These are all new routines with new interfaces because you need a 64 bit type to get info about file size\, to seek to file offsets\, etc. There we have the magic requirement for a 64 bit type to do large file support\, that leads to the natural assumption (possibly incorrect) that some sort of 64 bit support is required in perl in order to also support large files.

The other large file confusion is that obviously a lot more is required to really support large files than just the O_LARGEFILE mentioned in the pods\, so I don't know if my platform would really work or not without greater porting efforts.

Okay\, so your confusion is more of the "how do I port Perl to understand large files in my operating system" kind (as opposed to the "how do I as a user use these large files" kind). I'll see what I can do(cument).

No doubt I could figure this all out with sufficient time to actually examine the sources and test things\, but this is the source of my current (uninformed) confusion :-).