#include <ssdef.h>
#include <starlet.h>
+#if defined(VMS_WE_ARE_CASE_SENSITIVE)
+#define DL_CASE_SENSITIVE 1<<4
+#else
+#define DL_CASE_SENSITIVE 0
+#endif
+
typedef unsigned long int vmssts;
struct libref {
{
unsigned long int retsts;
VAXC$ESTABLISH(findsym_handler);
- retsts = lib$find_image_symbol(imgname,symname,entry,defspec);
+ retsts = lib$find_image_symbol(imgname,symname,entry,defspec,DL_CASE_SENSITIVE);
return retsts;
}
push @m, ' $(PERL) -e "print ""$(INST_STATIC)/Include=';
if ($self->{OBJECT} =~ /\bBASEEXT\b/ or
- $self->{OBJECT} =~ /\b$self->{BASEEXT}\b/i) { push @m, '$(BASEEXT)'; }
+ $self->{OBJECT} =~ /\b$self->{BASEEXT}\b/i) {
+ push @m, ($Config{d_vms_case_sensitive_symbols}
+ ? uc($self->{BASEEXT}) :'$(BASEEXT)');
+ }
else { # We don't have a "main" object file, so pull 'em all in
+ # Upcase module names if linker is being case-sensitive
+ my($upcase) = $Config{d_vms_case_sensitive_symbols};
my(@omods) = map { s/\.[^.]*$//; # Trim off file type
s[\$\(\w+_EXT\)][]; # even as a macro
s/.*[:>\/\]]//; # Trim off dir spec
- $_; } split ' ', $self->eliminate_macros($self->{OBJECT});
+ $upcase ? uc($_) : $_;
+ } split ' ', $self->eliminate_macros($self->{OBJECT});
my($tmp,@lines,$elt) = '';
my $tmp = shift @omods;
foreach $elt (@omods) {
$use_mymalloc++ if /define\s+MYMALLOC/;
$hide_mymalloc++ if /define\s+EMBEDMYMALLOC/;
$use_threads++ if /define\s+USE_THREADS/;
+ $care_about_case++ if /define\s+VMS_WE_ARE_CASE_SENSITIVE/;
}
# put quotes back onto defines - they were removed by DCL on the way in
if ($1 eq 'main' || $1 eq 'perl_init_ext') {
print "\tskipped\n" if $debug > 1;
}
- else { $fcns{uc($1)}++ }
+ else { $fcns{$1}++ }
}
}
# Go add some right up front if we need 'em
if ($use_mymalloc) {
- $fcns{uc('Perl_malloc')}++;
- $fcns{uc('Perl_calloc')}++;
- $fcns{uc('Perl_realloc')}++;
- $fcns{uc('Perl_mfree')}++;
+ $fcns{'Perl_malloc'}++;
+ $fcns{'Perl_calloc'}++;
+ $fcns{'Perl_realloc'}++;
+ $fcns{'Perl_mfree'}++;
}
$used_expectation_enum = $used_opcode_enum = 0; # avoid warnings
print OPTBLD "PSECT_ATTR=\$GLOBAL_RO_VARS,PIC,NOEXE,RD,NOWRT,SHR\n";
print OPTBLD "PSECT_ATTR=\$GLOBAL_RW_VARS,PIC,NOEXE,RD,WRT,NOSHR\n";
}
+print OPTBLD "case_sensitive=yes\n" if $care_about_case;
foreach $var (sort (keys %vars,keys %cvars)) {
if ($isvax) { print OPTBLD "UNIVERSAL=$var\n"; }
else { print OPTBLD "SYMBOL_VECTOR=($var=DATA)\n"; }
}
close OPTATTR;
-$incstr = 'perl,globals';
+$incstr = 'PERL,GLOBALS';
if ($isvax) {
$drvrname = "Compile_shrmars.tmp_".time;
open (DRVR,">$drvrname") or die "$0: Can't write to $drvrname: $!\n";