{- output_on() if $disabled{makedepend}; "" -}
GENERATED_MANDATORY={- join(", ", map { "-\n\t".$_ } @{$unified_info{depends}->{""}} ) -}
GENERATED={- # common0.tmpl provides @generated
- join(", ", map { (my $x = $_) =~ s|\.[sS]$|.asm|; "-\n\t".$x }
+ join(", ", map { my $x = $_;
+ $x =~ s|\.[sS]$|.asm|;
+ $x =~ s|\.ld$|.OPT|;
+ "-\n\t".$x }
@generated) -}
INSTALL_LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @install_libs) -}
$target{bin_cppflags} || (),
@{$config{bin_cppflag}},
'$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
-BIN_CFLAGS={- join('', $target{bin_cflag} || (),
- @{$config{bin_cflag}},
+BIN_CFLAGS={- join('', $target{bin_cflags} || (),
+ @{$config{bin_cflags}},
'$(CNF_CFLAGS)', '$(CFLAGS)') -}
BIN_LDFLAGS={- join('', $target{bin_lflags} || (),
@{$config{bin_lflags}} || (),
@{$config{lib_cflags}},
@{$config{shared_cflag}},
'$(CNF_CFLAGS)', '$(CFLAGS)') -}
-NO_INST_DSO_CFLAGS={- join('', $target{no_inst_lib_cflags}
- // $target{lib_cflags}
+NO_INST_DSO_CFLAGS={- join('', $target{no_inst_dso_cflags}
+ // $target{dso_cflags}
+ // (),
+ $target{no_inst_module_cflags}
+ // $target{module_cflags}
// (),
- $target{dso_cflags} || (),
- @{$config{lib_cflags}},
@{$config{dso_cflags}},
+ @{$config{module_cflags}},
'$(CNF_CFLAGS)', '$(CFLAGS)') -}
NO_INST_BIN_CFLAGS={- join('', $target{no_inst_bin_cflags}
// $target{bin_cflags}
sub generatesrc {
my %args = @_;
- (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
my $generator = join(" ", @{$args{generator}});
my $generator_incs = join("", map { ' "-I'.$_.'"' } @{$args{generator_incs}});
my $deps = join(", -\n\t\t", @{$args{generator_deps}}, @{$args{deps}});
- if ($target !~ /\.asm$/) {
+ if ($args{src} =~ /\.ld$/) {
+ (my $target = $args{src}) =~ s/\.ld$/.OPT/;
+ my $mkdef = sourcefile('util', 'mkdef.pl');
+ my $ord_ver = $args{intent} eq 'lib' ? ' --version $(VERSION)' : '';
+ my $ord_name =
+ $args{generator}->[1] || basename($args{product}, '.EXE');
+ my $case_insensitive =
+ $target{$args{intent}.'_cflags'} =~ m|/NAMES=[^/]*AS_IS|i
+ ? '' : ' --case-insensitive';
+ return <<"EOF";
+$target : $args{generator}->[0] $deps $mkdef
+ \$(PERL) $mkdef$ord_ver --ordinals $args{generator}->[0] --name $ord_name "--OS" "VMS"$case_insensitive > $target
+EOF
+ } elsif ($target !~ /\.[sS]$/) {
+ my $target = $args{src};
if ($args{generator}->[0] =~ m|^.*\.in$|) {
my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
"util", "dofile.pl")),
EOF
}
} else {
+ (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
if ($args{generator}->[0] =~ /\.pl$/) {
$generator = '$(PERL)'.$generator_incs.' '.$generator;
} elsif ($args{generator}->[0] =~ /\.S$/) {
}
my $cppflags = {
+ shlib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)',
bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)'
} -> {$args{intent}};
- my @incs_cmds = includes({ lib => '$(LIB_INCLUDES)',
+ my @incs_cmds = includes({ shlib => '$(LIB_INCLUDES)',
+ lib => '$(LIB_INCLUDES)',
dso => '$(DSO_INCLUDES)',
bin => '$(BIN_INCLUDES)' } -> {$args{intent}},
'$(CNF_INCLUDES)',
my $after = $unified_info{after}->{$obj.".OBJ"} || "\@ !";
if ($srcs[0] =~ /\.asm$/) {
- my $asflags = { lib => ' $(LIB_ASFLAGS)',
+ my $asflags = { shlib => ' $(LIB_ASFLAGS)',
+ lib => ' $(LIB_ASFLAGS)',
dso => ' $(DSO_ASFLAGS)',
bin => ' $(BIN_ASFLAGS)' } -> {$args{intent}};
return <<"EOF";
my $cflags;
if ($args{installed}) {
- $cflags = { lib => '$(LIB_CFLAGS)',
+ $cflags = { shlib => '$(LIB_CFLAGS)',
+ lib => '$(LIB_CFLAGS)',
dso => '$(DSO_CFLAGS)',
bin => '$(BIN_CFLAGS)' } -> {$args{intent}};
} else {
- $cflags = { lib => '$(NO_INST_LIB_CFLAGS)',
+ $cflags = { shlib => '$(NO_INST_LIB_CFLAGS)',
+ lib => '$(NO_INST_LIB_CFLAGS)',
dso => '$(NO_INST_DSO_CFLAGS)',
bin => '$(NO_INST_BIN_CFLAGS)' } -> {$args{intent}};
}
- $cflags .= { lib => '$(LIB_CPPFLAGS)',
+ $cflags .= { shlib => '$(LIB_CPPFLAGS)',
+ lib => '$(LIB_CPPFLAGS)',
dso => '$(DSO_CPPFLAGS)',
bin => '$(BIN_CPPFLAGS)' } -> {$args{intent}};
- my @incs_cmds = includes({ lib => '$(LIB_INCLUDES)',
+ my @incs_cmds = includes({ shlib => '$(LIB_INCLUDES)',
+ lib => '$(LIB_INCLUDES)',
dso => '$(DSO_INCLUDES)',
bin => '$(BIN_INCLUDES)' } -> {$args{intent}},
'$(INCLUDES)',
- PURGE $obj.OBJ
EOF
}
- sub libobj2shlib {
+ sub obj2shlib {
my %args = @_;
my $lib = $args{lib};
my $shlib = $args{shlib};
my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x }
grep { $_ =~ m|\.o$| }
@{$args{objs}};
- my @defs = grep { $_ =~ /\.opt$/ } @{$args{objs}};
+ my @defs = map { (my $x = $_) =~ s|\.ld$|.OPT|; $x }
+ grep { $_ =~ m|\.ld$| }
+ @{$args{objs}};
my @deps = compute_lib_depends(@{$args{deps}});
die "More than one symbol vector" if scalar @defs > 1;
- my $deps = join(", -\n\t\t", @defs, @deps);
+ my $deps = join(", -\n\t\t", @objs, @defs, @deps);
my $shlib_target = $disabled{shared} ? "" : $target{shared_target};
my $translatesyms_pl = abs2rel(rel2abs(catfile($config{sourcedir},
"VMS", "translatesyms.pl")),
"WRITE OPT_FILE \"$x\"" } @deps)
|| "\@ !";
return <<"EOF"
-$shlib.EXE : $lib.OLB $deps
+$shlib.EXE : $deps
\$(PERL) $translatesyms_pl \$(BLDDIR)CXX\$DEMANGLER_DB. < $defs[0] > $defs[0]-translated
OPEN/WRITE/SHARE=READ OPT_FILE $lib-components.OPT
$write_opt1
my $libd = dirname($lib);
my $libn = basename($lib);
(my $libn_nolib = $libn) =~ s/^lib//;
- my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x } @{$args{objs}};
+ my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x }
+ grep { $_ =~ m|\.o$| }
+ @{$args{objs}};
+ my @defs = map { (my $x = $_) =~ s|\.ld$|.OPT|; $x }
+ grep { $_ =~ m|\.ld$| }
+ @{$args{objs}};
my @deps = compute_lib_depends(@{$args{deps}});
- my $deps = join(", -\n\t\t", @objs, @deps);
+ my $deps = join(", -\n\t\t", @objs, @defs, @deps);
+ die "More than one symbol vector" if scalar @defs > 1;
my $shlib_target = $disabled{shared} ? "" : $target{shared_target};
- my $engine_opt = abs2rel(rel2abs(catfile($config{sourcedir},
- "VMS", "engine.opt")),
- rel2abs($config{builddir}));
# The "[]" hack is because in .OPT files, each line inherits the
# previous line's file spec as default, so if no directory spec
# is present in the current line and the previous line has one that
|| "\@ !";
return <<"EOF"
$lib.EXE : $deps
- OPEN/WRITE/SHARE=READ OPT_FILE $lib.OPT
- TYPE $engine_opt /OUTPUT=OPT_FILE:
+ OPEN/WRITE/SHARE=READ OPT_FILE $lib-components.OPT
$write_opt1
$write_opt2
CLOSE OPT_FILE
- LINK \$(DSO_LDFLAGS)/SHARE=\$\@ $lib.OPT/OPT \$(DSO_EX_LIBS)
+ LINK \$(DSO_LDFLAGS)/SHARE=\$\@ $defs[0]/OPT,-
+ $lib-components.OPT/OPT \$(DSO_EX_LIBS)
- PURGE $lib.EXE,$lib.OPT,$lib.MAP
EOF
. ($config{target} =~ m|alpha| ? "" : <<"EOF"
"\@ WRITE OPT_FILE \"$x" } @objs).
"\"";
my $write_opt2 =
- join("\n\t", map { my @lines = ();
+ join("\n\t", map { my @lines = (
+ "\ WRITE OPT_FILE \"CASE_SENSITIVE=YES\""
+ );
my $x = $_ =~ /\[/ ? $_ : "[]".$_;
if ($x =~ m|\.EXE$|) {
push @lines, "\@ WRITE OPT_FILE \"$x/SHARE\"";