X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=Configurations%2Fdescrip.mms.tmpl;h=2eb05d12dc71ca564e7716056a14d2c054723f18;hb=4c627d86351996d63d607960a0569248b96e63a8;hp=ebafcc76f975dc7ccba9610b07f1fa74a92f87ec;hpb=c162a8c344f12b2e0e788920358f51181ddf168f;p=openssl.git diff --git a/Configurations/descrip.mms.tmpl b/Configurations/descrip.mms.tmpl index ebafcc76f9..2eb05d12dc 100644 --- a/Configurations/descrip.mms.tmpl +++ b/Configurations/descrip.mms.tmpl @@ -28,14 +28,6 @@ (my $x = shift) =~ s|\]$|...]|; $x } - sub move { - my $f = catdir(@_); - my $b = abs2rel(rel2abs("."),rel2abs($f)); - $sourcedir = catdir($b,$sourcedir) - if !file_name_is_absolute($sourcedir); - $builddir = catdir($b,$builddir) - if !file_name_is_absolute($builddir); - ""; } # Because we need to make two computations of these data, @@ -48,10 +40,31 @@ @{$unified_info{libraries}}; our @install_libs = map { platform->staticname($_) } - @{$unified_info{install}->{libraries}}; + grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} } + @{$unified_info{libraries}}; our @install_shlibs = map { platform->sharedname($_) // () } - @{$unified_info{install}->{libraries}}; + grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} } + @{$unified_info{libraries}}; + our @install_engines = + grep { !$unified_info{attributes}->{modules}->{$_}->{noinst} + && $unified_info{attributes}->{modules}->{$_}->{engine} } + @{$unified_info{modules}}; + our @install_modules = + grep { !$unified_info{attributes}->{modules}->{$_}->{noinst} + && !$unified_info{attributes}->{modules}->{$_}->{engine} } + @{$unified_info{modules}}; + our @install_programs = + grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} } + @{$unified_info{programs}}; + our @install_bin_scripts = + grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst} + && !$unified_info{attributes}->{scripts}->{$_}->{misc} } + @{$unified_info{scripts}}; + our @install_misc_scripts = + grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst} + && $unified_info{attributes}->{scripts}->{$_}->{misc} } + @{$unified_info{scripts}}; # This is a horrible hack, but is needed because recursive inclusion of files # in different directories does not work well with HP C. @@ -86,9 +99,6 @@ return "$target : build_generated\n\t\pipe \$(MMS) \$(MMSQUALIFIERS) depend && \$(MMS) \$(MMSQUALIFIERS) _$target\n_$target"; } - #use Data::Dumper; - #print STDERR "DEBUG: before:\n", Dumper($unified_info{before}); - #print STDERR "DEBUG: after:\n", Dumper($unified_info{after}); ""; -} PLATFORM={- $config{target} -} @@ -100,6 +110,7 @@ BLDDIR={- $config{builddir} -} # Allow both V and VERBOSE to indicate verbosity. This only applies # to testing. VERBOSE=$(V) +VERBOSE_FAILURE=$(VF) VERSION={- "$config{full_version}" -} MAJOR={- $config{major} -} @@ -109,7 +120,7 @@ SHLIB_TARGET={- $target{shared_target} -} LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @libs) -} SHLIBS={- join(", ", map { "-\n\t".$_.".EXE" } @shlibs) -} -ENGINES={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{engines}}) -} +MODULES={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{modules}}) -} PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{programs}}) -} SCRIPTS={- join(", ", map { "-\n\t".$_ } @{$unified_info{scripts}}) -} {- output_off() if $disabled{makedepend}; "" -} @@ -124,15 +135,18 @@ GENERATED={- # common0.tmpl provides @generated INSTALL_LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @install_libs) -} INSTALL_SHLIBS={- join(", ", map { "-\n\t".$_.".EXE" } @install_shlibs) -} -INSTALL_ENGINES={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{install}->{engines}}) -} -INSTALL_PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{install}->{programs}}) -} -{- output_off() if $disabled{apps}; "" -} -BIN_SCRIPTS=[.tools]c_rehash.pl -MISC_SCRIPTS=[.apps]CA.pl, [.apps]tsget.pl -{- output_on() if $disabled{apps}; "" -} - -APPS_OPENSSL={- use File::Spec::Functions; - catfile("apps","openssl") -} +INSTALL_ENGINES={- join(", ", map { "-\n\t".$_.".EXE" } @install_engines) -} +INSTALL_MODULES={- join(", ", map { "-\n\t".$_.".EXE" } @install_modules) -} +INSTALL_PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } @install_programs) -} +BIN_SCRIPTS={- join(", ", @install_bin_scripts) -} +MISC_SCRIPTS={- join(", ", @install_misc_scripts) -} +HTMLDOCS1={- join(", ", map { "-\n\t".$_ } @{$unified_info{htmldocs}->{man1}}) -} +HTMLDOCS3={- join(", ", map { "-\n\t".$_ } @{$unified_info{htmldocs}->{man3}}) -} +HTMLDOCS5={- join(", ", map { "-\n\t".$_ } @{$unified_info{htmldocs}->{man5}}) -} +HTMLDOCS7={- join(", ", map { "-\n\t".$_ } @{$unified_info{htmldocs}->{man7}}) -} + +APPS_OPENSSL="{- use File::Spec::Functions; + catfile("apps","openssl") -}" # DESTDIR is for package builders so that they can configure for, say, # SYS$COMMON:[OPENSSL] and yet have everything installed in STAGING:[USER]. @@ -153,8 +167,10 @@ OPENSSLDIR={- catdir($config{openssldir}) or : "SYS\$COMMON:[OPENSSL-COMMON]" -} # The same, but for C OPENSSLDIR_C={- platform->osslprefix() -}DATAROOT:[000000] -# Where installed engines reside, for C +# Where installed ENGINE modules reside, for C ENGINESDIR_C={- platform->osslprefix() -}ENGINES{- $sover_dirname.$target{pointer_size} -}: +# Where modules reside, for C +MODULESDIR_C={- platform->osslprefix() -}MODULES{- $sover_dirname.$target{pointer_size} -}: ##### User defined commands and flags ################################ @@ -214,7 +230,8 @@ LIB_DEFINES={- our $lib_defines = @{$config{shared_defines}})); join('', $lib_defines, (map { ",$_" } 'OPENSSLDIR="""$(OPENSSLDIR_C)"""', - 'ENGINESDIR="""$(ENGINESDIR_C)"""'), + 'ENGINESDIR="""$(ENGINESDIR_C)"""', + 'MODULESDIR="""$(MODULESDIR_C)"""'), '$(CNF_DEFINES)', '$(DEFINES)') -} LIB_INCLUDES={- our $lib_includes = join(',', @{$target{lib_includes}}, @@ -339,6 +356,9 @@ CPPFLAGS_Q={- (my $c = $lib_cppflags.$cppflags2.$cppflags1) =~ s|"|""|g; # given with /INCLUDE is a fantasy, unfortunately. NODEBUG=@ .FIRST : + $(NODEBUG) sourcetop = F$PARSE("$(SRCDIR)","[]A.;",,"SYNTAX_ONLY,NO_CONCEAL") - ".][000000" - "[000000." - "][" - "]A.;" + ".]" + $(NODEBUG) DEFINE ossl_sourceroot 'sourcetop' + $(NODEBUG) ! $(NODEBUG) openssl_inc1 = F$PARSE("[.include.openssl]","A.;",,,"syntax_only") - "A.;" $(NODEBUG) openssl_inc2 = F$PARSE("{- catdir($config{sourcedir},"[.include.openssl]") -}","A.;",,,"SYNTAX_ONLY") - "A.;" $(NODEBUG) internal_inc1 = F$PARSE("[.crypto.include.internal]","A.;",,,"SYNTAX_ONLY") - "A.;" @@ -389,45 +409,42 @@ NODEBUG=@ # The main targets ################################################### -{- dependmagic('all'); -} : build_libs_nodep, build_engines_nodep, build_programs_nodep +{- dependmagic('build_sw'); -} : build_libs_nodep, build_modules_nodep, build_programs_nodep copy-utils {- dependmagic('build_libs'); -} : build_libs_nodep -{- dependmagic('build_engines'); -} : build_engines_nodep +{- dependmagic('build_modules'); -} : build_modules_nodep {- dependmagic('build_programs'); -} : build_programs_nodep build_generated : $(GENERATED_MANDATORY) build_libs_nodep : $(LIBS), $(SHLIBS) -build_engines_nodep : $(ENGINES) +build_modules_nodep : $(MODULES) build_programs_nodep : $(PROGRAMS), $(SCRIPTS) +build_docs: build_html_docs +build_html_docs: $(HTMLDOCS1) $(HTMLDOCS3) $(HTMLDOCS5) $(HTMLDOCS7) + # Kept around for backward compatibility build_apps build_tests : build_programs # Convenience target to prebuild all generated files, not just the mandatory # ones -build_all_generated : $(GENERATED_MANDATORY) $(GENERATED) +build_all_generated : $(GENERATED_MANDATORY) $(GENERATED) build_docs @ ! {- output_off() if $disabled{makedepend}; "" -} @ WRITE SYS$OUTPUT "Warning: consider configuring with no-makedepend, because if" @ WRITE SYS$OUTPUT " target system doesn't have $(PERL)," @ WRITE SYS$OUTPUT " then make will fail..." @ ! {- output_on() if $disabled{makedepend}; "" -} +all : build_sw build_docs + test : tests -{- dependmagic('tests'); -} : build_programs_nodep, build_engines_nodep +{- dependmagic('tests'); -} : build_programs_nodep, build_modules_nodep copy-utils @ ! {- output_off() if $disabled{tests}; "" -} - SET DEFAULT [.test]{- move("test") -} - CREATE/DIR [.test-runs] DEFINE SRCTOP {- sourcedir() -} DEFINE BLDTOP {- builddir() -} - DEFINE RESULT_D {- builddir(qw(test test-runs)) -} - DEFINE OPENSSL_ENGINES {- builddir("engines") -} - DEFINE OPENSSL_DEBUG_MEMORY "on" IF "$(VERBOSE)" .NES. "" THEN DEFINE VERBOSE "$(VERBOSE)" $(PERL) {- sourcefile("test", "run_tests.pl") -} $(TESTS) - DEASSIGN OPENSSL_DEBUG_MEMORY - DEASSIGN OPENSSL_ENGINES DEASSIGN BLDTOP DEASSIGN SRCTOP - SET DEFAULT [-]{- move("..") -} @ ! {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -} @ WRITE SYS$OUTPUT "Tests are not supported with your chosen Configure options" @ ! {- output_on() if !$disabled{tests}; "" -} @@ -441,7 +458,9 @@ list-tests : @ WRITE SYS$OUTPUT "Tests are not supported with your chosen Configure options" @ ! {- output_on() if !$disabled{tests}; "" -} -install : install_sw install_ssldirs install_docs +install : install_sw install_ssldirs install_docs install_final + +install_final : @ WRITE SYS$OUTPUT "" @ WRITE SYS$OUTPUT "######################################################################" @ WRITE SYS$OUTPUT "" @@ -472,14 +491,18 @@ check_install : uninstall : uninstall_docs uninstall_sw # Because VMS wants the generation number (or *) to delete files, we can't -# use $(LIBS), $(PROGRAMS), $(GENERATED) and $(ENGINES)directly. +# use $(LIBS), $(PROGRAMS), $(GENERATED) and $(MODULES) directly. libclean : {- join("\n\t", map { "- DELETE $_.OLB;*" } @libs) || "@ !" -} {- join("\n\t", map { "- DELETE $_.EXE;*,$_.MAP;*" } @shlibs) || "@ !" -} clean : libclean + {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{htmldocs}->{man1}}) || "@ !" -} + {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{htmldocs}->{man3}}) || "@ !" -} + {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{htmldocs}->{man5}}) || "@ !" -} + {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{htmldocs}->{man7}}) || "@ !" -} {- join("\n\t", map { "- DELETE $_.EXE;*,$_.OPT;*" } @{$unified_info{programs}}) || "@ !" -} - {- join("\n\t", map { "- DELETE $_.EXE;*,$_.OPT;*" } @{$unified_info{engines}}) || "@ !" -} + {- join("\n\t", map { "- DELETE $_.EXE;*,$_.OPT;*" } @{$unified_info{modules}}) || "@ !" -} {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{scripts}}) || "@ !" -} {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{depends}->{""}}) || "@ !" -} {- join("\n\t", map { "- DELETE $_;*" } @generated) || "@ !" -} @@ -503,11 +526,11 @@ descrip.mms : FORCE # Install helper targets ############################################# -install_sw : install_dev install_engines install_runtime - - install_startup install_ivp +install_sw : install_dev install_engines install_modules - + install_runtime install_startup install_ivp -uninstall_sw : uninstall_dev uninstall_engines uninstall_runtime - - uninstall_startup uninstall_ivp +uninstall_sw : uninstall_dev uninstall_modules uninstall_engines - + uninstall_runtime uninstall_startup uninstall_ivp install_docs : install_html_docs @@ -546,14 +569,23 @@ install_dev : check_INSTALLTOP install_runtime_libs map { "COPY/PROT=W:R $_.OLB ossl_installroot:[LIB.'arch']" } @install_libs) -} -install_engines : check_INSTALLTOP install_runtime_libs build_engines - @ {- output_off() unless scalar @{$unified_info{engines}}; "" -} ! +install_engines : check_INSTALLTOP install_runtime_libs build_modules + @ {- output_off() unless scalar @install_engines; "" -} ! @ WRITE SYS$OUTPUT "*** Installing engines" - CREATE/DIR ossl_installroot:[ENGINES{- $sover_dirname.$target{pointer_size} -}.'arch'] {- join("\n ", map { "COPY/PROT=W:RE $_.EXE ossl_installroot:[ENGINES$sover_dirname$target{pointer_size}.'arch']" } - @{$unified_info{install}->{engines}}) -} - @ {- output_on() unless scalar @{$unified_info{engines}}; "" -} ! + @install_engines) -} + @ {- output_on() unless scalar @install_engines; "" -} ! + +install_modules : check_INSTALLTOP install_runtime_libs build_modules + @ {- output_off() unless scalar @install_modules; "" -} ! + @ WRITE SYS$OUTPUT "*** Installing modules" + - CREATE/DIR ossl_installroot:[MODULES{- $sover_dirname.$target{pointer_size} -}.'arch'] + {- join("\n ", + map { "COPY/PROT=W:RE $_.EXE ossl_installroot:[MODULES$sover_dirname$target{pointer_size}.'arch']" } + @install_modules) -} + @ {- output_on() unless scalar @install_modules; "" -} ! install_runtime : install_programs @@ -641,11 +673,21 @@ vmsconfig.pm : configdata.pm WRITE CONFIG "1;" CLOSE CONFIG -install_html_docs : check_INSTALLTOP - sourcedir = F$PARSE("{- $sourcedir -}A.;","[]") - "]A.;" + ".DOC]" - $(PERL) {- sourcefile("util", "process_docs.pl") -} - - --sourcedir='sourcedir' --destdir=ossl_installroot:[HTML] - - --type=html +install_html_docs : check_INSTALLTOP build_html_docs + @ WRITE SYS$OUTPUT "*** Installing HTML docs" + - CREATE/DIR ossl_installroot:[HTML.MAN1] + - CREATE/DIR ossl_installroot:[HTML.MAN3] + - CREATE/DIR ossl_installroot:[HTML.MAN5] + - CREATE/DIR ossl_installroot:[HTML.MAN7] + {- join("\n ", + ( map { "COPY/PROT=W:RE $_ ossl_installroot:[HTML.MAN1]" } + @{$unified_info{htmldocs}->{man1}} ), + ( map { "COPY/PROT=W:RE $_ ossl_installroot:[HTML.MAN3]" } + @{$unified_info{htmldocs}->{man3}} ), + ( map { "COPY/PROT=W:RE $_ ossl_installroot:[HTML.MAN5]" } + @{$unified_info{htmldocs}->{man5}} ), + ( map { "COPY/PROT=W:RE $_ ossl_installroot:[HTML.MAN7]" } + @{$unified_info{htmldocs}->{man7}} )) -} check_INSTALLTOP : @ IF "$(INSTALLTOP)" .EQS. "" THEN - @@ -655,6 +697,14 @@ check_INSTALLTOP : # Helper targets ##################################################### +copy-utils : [.util]wrap.pl + +[.util]wrap.pl : configdata.pm + @ IF "$(SRCDIR)" .NES. "$(BLDDIR)" THEN - + CREATE/DIR/LOG [.util] + @ IF "$(SRCDIR)" .NES. "$(BLDDIR)" THEN - + COPY/LOG ossl_sourceroot:[util]wrap.pl [.util] + # Developer targets ################################################## debug_logicals : @@ -684,7 +734,10 @@ reconfigure reconf : # Depending on shared libraries: # On Windows POSIX layers, we depend on {libname}.dll.a # On Unix platforms, we depend on {shlibname}.so - return map { platform->sharedlib($_) // platform->staticlib($_) } @_; + return map { + { lib => platform->sharedlib($_) // platform->staticlib($_), + attrs => $unified_info{attributes}->{libraries}->{$_} } + } @_; } # Helper function to deal with inclusion directory specs. @@ -735,7 +788,15 @@ reconfigure reconf : my $generator_incs = join("", map { ' "-I'.$_.'"' } @{$args{generator_incs}}); my $deps = join(", -\n\t\t", @{$args{generator_deps}}, @{$args{deps}}); - if (platform->isdef($args{src})) { + if ($args{src} =~ /\.html$/) { + my $title = basename($args{src}, ".html"); + my $pod = $args{generator}->[0]; + my $mkpod2html = sourcefile('util', 'mkpod2html.pl'); + return <<"EOF"; +$args{src}: $pod + \$(PERL) $mkpod2html -i $pod -o \$\@ -t "$title" -r "\$(SRCDIR)/doc" +EOF + } elsif (platform->isdef($args{src})) { my $target = platform->def($args{src}); my $mkdef = sourcefile('util', 'mkdef.pl'); my $ord_ver = $args{intent} eq 'lib' ? ' --version $(VERSION)' : ''; @@ -754,10 +815,14 @@ EOF my $dofile = abs2rel(rel2abs(catfile($config{sourcedir}, "util", "dofile.pl")), rel2abs($config{builddir})); + my @modules = ( 'configdata.pm', + grep { $_ =~ m|\.pm$| } @{$args{deps}} ); + my %moduleincs = map { '"-I'.dirname($_).'"' => 1 } @modules; + @modules = map { '"-M'.basename($_, '.pm').'"' } @modules; + my $modules = join(' ', '', sort keys %moduleincs, @modules); return <<"EOF"; $target : $args{generator}->[0] $deps - \$(PERL) "-I\$(BLDDIR)" "-Mconfigdata" $dofile \\ - "-o$target{build_file}" $generator > \$\@ + \$(PERL)$modules $dofile "-o$target{build_file}" $generator > \$\@ EOF } else { return <<"EOF"; @@ -766,15 +831,6 @@ $target : $args{generator}->[0] $deps EOF } } else { - my $target = platform->asm($args{src}); - if ($args{generator}->[0] =~ /\.pl$/) { - $generator = '$(PERL)'.$generator_incs.' '.$generator; - } elsif ($args{generator}->[0] =~ /\.S$/) { - $generator = undef; - } else { - die "Generator type for $src unknown: $generator\n"; - } - my $cppflags = { shlib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)', lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)', @@ -791,6 +847,17 @@ EOF my $incs_on = join("\n\t\@ ", @{$incs_cmds[0]}) || '!'; my $incs_off = join("\n\t\@ ", @{$incs_cmds[1]}) || '!'; my $defs = join("", map { ",".$_ } @{$args{defs}}); + my $target = platform->asm($args{src}); + + if ($args{generator}->[0] =~ /\.pl$/) { + $generator = '$(PERL)'.$generator_incs.' '.$generator + .' '.$cppflags; + } elsif ($args{generator}->[0] =~ /\.S$/) { + $generator = undef; + } else { + die "Generator type for $src unknown: $generator\n"; + } + if (defined($generator)) { # If the target is named foo.S in build.info, we want to # end up generating foo.s in two steps. @@ -811,7 +878,11 @@ EOF # Otherwise.... return <<"EOF"; $target : $args{generator}->[0] $deps + \@ $incs_on + \@ extradefines = "$defs" $generator \$\@ + \@ DELETE/SYMBOL/LOCAL extradefines + \@ $incs_off EOF } return <<"EOF"; @@ -828,9 +899,15 @@ EOF } sub src2obj { + my $asmext = platform->asmext(); my %args = @_; - my @srcs = map { (my $x = $_) =~ s/\.s$/.asm/; $x } ( @{$args{srcs}} ); + my @srcs = + map { my $x = $_; + (platform->isasm($x) && grep { $x eq $_ } @generated) + ? platform->asm($x) : $x } + ( @{$args{srcs}} ); my $obj = platform->obj($args{obj}); + my $dep = platform->dep($args{obj}); my $deps = join(", -\n\t\t", @srcs, @{$args{deps}}); # Because VMS C isn't very good at combining a /INCLUDE path with @@ -842,37 +919,25 @@ EOF my $forward = dirname($args{srcs}->[0]); my $backward = abs2rel(rel2abs("."), rel2abs($forward)); my $objd = abs2rel(rel2abs(dirname($obj)), rel2abs($forward)); - my $objn = basename($obj, platform->objext()); + my $objn = basename($obj); + my $depd = abs2rel(rel2abs(dirname($dep)), rel2abs($forward)); + my $depn = basename($dep); my $srcs = join(", ", map { abs2rel(rel2abs($_), rel2abs($forward)) } @srcs); my $before = $unified_info{before}->{$obj} || "\@ !"; my $after = $unified_info{after}->{$obj} || "\@ !"; - if ($srcs[0] =~ /\.asm$/) { - my $asflags = { shlib => ' $(LIB_ASFLAGS)', - lib => ' $(LIB_ASFLAGS)', - dso => ' $(DSO_ASFLAGS)', - bin => ' $(BIN_ASFLAGS)' } -> {$args{intent}}; - return <<"EOF"; -$obj : $deps - ${before} - SET DEFAULT $forward - \$(AS) $asflags \$(ASOUTFLAG)${objd}${objn}.OBJ $srcs - SET DEFAULT $backward -EOF - } - my $cflags; - if ($args{installed}) { - $cflags = { shlib => '$(LIB_CFLAGS)', - lib => '$(LIB_CFLAGS)', - dso => '$(DSO_CFLAGS)', - bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; - } else { + if ($args{attrs}->{noinst}) { $cflags = { shlib => '$(NO_INST_LIB_CFLAGS)', lib => '$(NO_INST_LIB_CFLAGS)', dso => '$(NO_INST_DSO_CFLAGS)', bin => '$(NO_INST_BIN_CFLAGS)' } -> {$args{intent}}; + } else { + $cflags = { shlib => '$(LIB_CFLAGS)', + lib => '$(LIB_CFLAGS)', + dso => '$(DSO_CFLAGS)', + bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; } $cflags .= { shlib => '$(LIB_CPPFLAGS)', lib => '$(LIB_CPPFLAGS)', @@ -896,37 +961,37 @@ EOF my $incs_on = join("\n\t\@ ", @{$incs_cmds[0]}) || '!'; my $incs_off = join("\n\t\@ ", @{$incs_cmds[1]}) || '!'; - if ($srcs[0] =~ /\.asm$/) { + if ($srcs[0] =~ /\Q${asmext}\E$/) { return <<"EOF"; -$obj.OBJ : $deps +$obj : $deps ${before} SET DEFAULT $forward - \$(AS) $asflags \$(ASOUTFLAG)${objd}${objn}.OBJ $srcs + \$(AS) $asflags \$(ASOUTFLAG)${objd}${objn} $srcs SET DEFAULT $backward ${after} - - PURGE $obj.OBJ + - PURGE $obj EOF } elsif ($srcs[0] =~ /.S$/) { return <<"EOF"; -$obj.OBJ : $deps +$obj : $deps ${before} SET DEFAULT $forward \@ $incs_on \@ extradefines = "$defs" PIPE \$(CPP) ${cflags} $srcs | - \$(PERL) -ne "/^#(\\s*line)?\\s*[0-9]+\\s+""/ or print" - - > ${objd}${objn}.asm + > ${objd}${objn}-asm \@ DELETE/SYMBOL/LOCAL extradefines \@ $incs_off SET DEFAULT $backward ${after} - \$(AS) $asflags \$(ASOUTFLAG)$obj.OBJ $obj.asm - - PURGE $obj.OBJ + \$(AS) $asflags \$(ASOUTFLAG)$obj $obj-asm + - PURGE $obj EOF } my $depbuild = $disabled{makedepend} ? "" - : " /MMS=(FILE=${objd}${objn}.D,TARGET=$obj)"; + : " /MMS=(FILE=${depd}${depn},TARGET=$obj)"; return <<"EOF"; $obj : $deps @@ -934,7 +999,7 @@ $obj : $deps SET DEFAULT $forward \@ $incs_on \@ extradefines = "$defs" - \$(CC) ${cflags}${depbuild} /OBJECT=${objd}${objn}.OBJ /REPOSITORY=$backward $srcs + \$(CC) ${cflags}${depbuild} /OBJECT=${objd}${objn} /REPOSITORY=$backward $srcs \@ DELETE/SYMBOL/LOCAL extradefines \@ $incs_off SET DEFAULT $backward @@ -954,7 +1019,7 @@ EOF @{$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", @objs, @defs, @deps); + my $deps = join(", -\n\t\t", @objs, @defs, map { $_->{lib} } @deps); my $shlib_target = $disabled{shared} ? "" : $target{shared_target}; my $translatesyms_pl = abs2rel(rel2abs(catfile($config{sourcedir}, "VMS", "translatesyms.pl")), @@ -968,7 +1033,8 @@ EOF "WRITE OPT_FILE \"$x" } @objs). "\""; my $write_opt2 = - join("\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_; + join("\n\t", map { my $x = $_->{lib} =~ /\[/ + ? $_->{lib} : "[]".$_->{lib}; $x =~ s|(\.EXE)|$1/SHARE|; $x =~ s|(\.OLB)|$1/LIB|; "WRITE OPT_FILE \"$x\"" } @deps) @@ -992,8 +1058,8 @@ EOF } sub obj2dso { my %args = @_; - my $dsoname = platform->dsoname($args{lib}); - my $dso = platform->dso($args{lib}); + my $dsoname = platform->dsoname($args{module}); + my $dso = platform->dso($args{module}); my @objs = map { platform->convertext($_) } grep { platform->isobj($_) } @{$args{objs}}; @@ -1001,7 +1067,7 @@ EOF grep { platform->isdef($_) } @{$args{objs}}; my @deps = compute_lib_depends(@{$args{deps}}); - my $deps = join(", -\n\t\t", @objs, @defs, @deps); + my $deps = join(", -\n\t\t", @objs, @defs, map { $_->{lib} } @deps); die "More than one symbol vector" if scalar @defs > 1; my $shlib_target = $disabled{shared} ? "" : $target{shared_target}; # The "[]" hack is because in .OPT files, each line inherits the @@ -1013,7 +1079,8 @@ EOF "WRITE OPT_FILE \"$x" } @objs). "\""; my $write_opt2 = - join("\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_; + join("\n\t", map { my $x = $_->{lib} =~ /\[/ + ? $_->{lib} : "[]".$_->{lib}; $x =~ s|(\.EXE)|$1/SHARE|; $x =~ s|(\.OLB)|$1/LIB|; "WRITE OPT_FILE \"$x\"" } @deps) @@ -1057,9 +1124,9 @@ EOF @{$args{objs}}; my $objs = join(",", @objs); my @deps = compute_lib_depends(@{$args{deps}}); - my $deps = join(", -\n\t\t", @objs, @deps); + my $deps = join(", -\n\t\t", @objs, map { $_->{lib} } @deps); - my $olb_count = scalar grep(m|\.OLB$|, @deps); + my $olb_count = scalar grep(m|\.OLB$|, map { $_->{lib} } @deps); my $analyse_objs = "@ !"; if ($olb_count > 0) { my $analyse_quals = @@ -1075,16 +1142,22 @@ EOF "\@ WRITE OPT_FILE \"$x" } @objs). "\""; my $write_opt2 = - join("\n\t", map { my @lines = ( - "\ WRITE OPT_FILE \"CASE_SENSITIVE=YES\"" - ); - my $x = $_ =~ /\[/ ? $_ : "[]".$_; + join("\n\t", "WRITE OPT_FILE \"CASE_SENSITIVE=YES\"", + map { my @lines = (); + use Data::Dumper; + my $x = $_->{lib} =~ /\[/ + ? $_->{lib} : "[]".$_->{lib}; if ($x =~ m|\.EXE$|) { push @lines, "\@ WRITE OPT_FILE \"$x/SHARE\""; } elsif ($x =~ m|\.OLB$|) { - (my $l = $x) =~ s/\W/_/g; - push @lines, - "\@ IF nomain THEN WRITE OPT_FILE \"$x/LIB\$(INCLUDE_MAIN_$l)\"", + # Special hack to include the MAIN object + # module explicitly. This will only be done + # if there isn't a 'main' in the program's + # object modules already. + my $main = $_->{attrs}->{has_main} + ? '/INCLUDE=main' : ''; + push @lines, + "\@ IF nomain THEN WRITE OPT_FILE \"$x/LIB$main\"", "\@ IF .NOT. nomain THEN WRITE OPT_FILE \"$x/LIB\"" } @lines