summaryrefslogtreecommitdiff
path: root/win32/config_sh.PL
diff options
context:
space:
mode:
authorSteve Hay <steve.m.hay@googlemail.com>2012-08-01 18:16:53 +0100
committerSteve Hay <steve.m.hay@googlemail.com>2012-08-01 18:16:53 +0100
commit1f64ae15647e757e817c923b2a9fcbc528c5f610 (patch)
tree54178f89858b01440249f595e13fc348387e4300 /win32/config_sh.PL
parent9fa1f09fe74e63fd5b313c36efc35bb18e73faf3 (diff)
downloadperl-1f64ae15647e757e817c923b2a9fcbc528c5f610.tar.gz
Add a USE_64_BIT_INT build option to the Windows makefiles.
Rather than adding more canned configurations, we dynamically set values which differ from the standard 32-bit build options, and actually remove the canned configurations for 64-bit builds too and do likewise for them. The ~ARCHPREFIX~ games used by the outgoing .gc64 configuration needed bringing into the remaining .gc configuration to maintain support for the GCCCROSS build option. Two tweaks to sv.c were required for the USE_64_BIT_INT option to work with a VC++ build, allowing the I64 printf size specification. The GCC build worked anyway since it uses ll rather than I64. The motivation for this change came from a patch submitted by Sisyphus <sisyphus1@optusnet.com.au>: Message-ID: <6AC52DD00C96415A9E919A02F12DD05F@desktop2>
Diffstat (limited to 'win32/config_sh.PL')
-rw-r--r--win32/config_sh.PL83
1 files changed, 74 insertions, 9 deletions
diff --git a/win32/config_sh.PL b/win32/config_sh.PL
index 4d83369f7a..3733c47bec 100644
--- a/win32/config_sh.PL
+++ b/win32/config_sh.PL
@@ -110,17 +110,82 @@ $opt{usemymalloc} = 'y' if $opt{d_mymalloc} eq 'define';
$opt{libpth} = mungepath($opt{libpth}) if exists $opt{libpth};
$opt{incpath} = mungepath($opt{incpath}) if exists $opt{incpath};
-# change the lseeksize and lseektype from their canned default values (which
-# are set-up for a non-uselargefiles build) if we are building with
-# uselargefiles.
+my($int64, $int64f);
+if ($opt{cc} eq 'cl') {
+ $int64 = '__int64';
+ $int64f = 'I64';
+}
+elsif ($opt{cc} =~ /\bgcc\b/) {
+ $int64 = 'long long';
+ $int64f = 'll';
+}
+
+# set large files options
if ($opt{uselargefiles} eq 'define') {
$opt{lseeksize} = 8;
- if ($opt{cc} eq 'cl') {
- $opt{lseektype} = '__int64';
- }
- elsif ($opt{cc} =~ /\bgcc\b/) {
- $opt{lseektype} = 'long long';
- }
+ $opt{lseektype} = $int64;
+}
+else {
+ $opt{lseeksize} = 4;
+ $opt{lseektype} = 'long';
+}
+
+# set 64-bit options
+if ($opt{WIN64} eq 'define') {
+ $opt{d_atoll} = 'define';
+ $opt{d_strtoll} = 'define';
+ $opt{d_strtoull} = 'define';
+ $opt{ptrsize} = 8;
+ $opt{sizesize} = 8;
+ $opt{ssizetype} = $int64;
+ $opt{st_ino_size} = 8;
+}
+else {
+ $opt{d_atoll} = 'undef';
+ $opt{d_strtoll} = 'undef';
+ $opt{d_strtoull} = 'undef';
+ $opt{ptrsize} = 4;
+ $opt{sizesize} = 4;
+ $opt{ssizetype} = 'int';
+ $opt{st_ino_size} = 4;
+}
+if ($opt{use64bitint} eq 'define') {
+ $opt{d_nv_preserves_uv} = 'undef';
+ $opt{ivdformat} = qq{"${int64f}d"};
+ $opt{ivsize} = 8;
+ $opt{ivtype} = $int64;
+ $opt{nv_preserves_uv_bits} = 53;
+ $opt{sPRIXU64} = qq{"${int64f}X"};
+ $opt{sPRId64} = qq{"${int64f}d"};
+ $opt{sPRIi64} = qq{"${int64f}i"};
+ $opt{sPRIo64} = qq{"${int64f}o"};
+ $opt{sPRIu64} = qq{"${int64f}u"};
+ $opt{sPRIx64} = qq{"${int64f}x"};
+ $opt{uvXUformat} = qq{"${int64f}X"};
+ $opt{uvoformat} = qq{"${int64f}o"};
+ $opt{uvsize} = 8;
+ $opt{uvtype} = qq{unsigned $int64};
+ $opt{uvuformat} = qq{"${int64f}u"};
+ $opt{uvxformat} = qq{"${int64f}x"};
+}
+else {
+ $opt{d_nv_preserves_uv} = 'define';
+ $opt{ivdformat} = '"ld"';
+ $opt{ivsize} = 4;
+ $opt{ivtype} = 'long';
+ $opt{nv_preserves_uv_bits} = 32;
+ $opt{sPRIXU64} = '"lX"';
+ $opt{sPRId64} = '"ld"';
+ $opt{sPRIi64} = '"li"';
+ $opt{sPRIo64} = '"lo"';
+ $opt{sPRIu64} = '"lu"';
+ $opt{sPRIx64} = '"lx"';
+ $opt{uvXUformat} = '"lX"';
+ $opt{uvoformat} = '"lo"';
+ $opt{uvsize} = 4;
+ $opt{uvtype} = 'unsigned long';
+ $opt{uvuformat} = '"lu"';
+ $opt{uvxformat} = '"lx"';
}
# change the s{GM|LOCAL}TIME_{min|max} for VS2005 (aka VC 8) and