|
Packit |
fd8b60 |
#!env perl -w
|
|
Packit |
fd8b60 |
#
|
|
Packit |
fd8b60 |
# Copyright 1995,2001,2002,2003,2004,2005,2009 by the Massachusetts Institute of Technology.
|
|
Packit |
fd8b60 |
# All Rights Reserved.
|
|
Packit |
fd8b60 |
#
|
|
Packit |
fd8b60 |
# Export of this software from the United States of America may
|
|
Packit |
fd8b60 |
# require a specific license from the United States Government.
|
|
Packit |
fd8b60 |
# It is the responsibility of any person or organization contemplating
|
|
Packit |
fd8b60 |
# export to obtain such a license before exporting.
|
|
Packit |
fd8b60 |
#
|
|
Packit |
fd8b60 |
# WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
Packit |
fd8b60 |
# distribute this software and its documentation for any purpose and
|
|
Packit |
fd8b60 |
# without fee is hereby granted, provided that the above copyright
|
|
Packit |
fd8b60 |
# notice appear in all copies and that both that copyright notice and
|
|
Packit |
fd8b60 |
# this permission notice appear in supporting documentation, and that
|
|
Packit |
fd8b60 |
# the name of M.I.T. not be used in advertising or publicity pertaining
|
|
Packit |
fd8b60 |
# to distribution of the software without specific, written prior
|
|
Packit |
fd8b60 |
# permission. Furthermore if you modify this software you must label
|
|
Packit |
fd8b60 |
# your software as modified software and not distribute it in such a
|
|
Packit |
fd8b60 |
# fashion that it might be confused with the original M.I.T. software.
|
|
Packit |
fd8b60 |
# M.I.T. makes no representations about the suitability of
|
|
Packit |
fd8b60 |
# this software for any purpose. It is provided "as is" without express
|
|
Packit |
fd8b60 |
# or implied warranty.
|
|
Packit |
fd8b60 |
#
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
eval 'exec perl -S $0 ${1+"$@"}'
|
|
Packit |
fd8b60 |
if 0;
|
|
Packit |
fd8b60 |
$0 =~ s/^.*?(\w+)[\.\w+]*$/$1/;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
# Input: srctop thisdir srcdir buildtop stlibobjs
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
# Notes: myrelativedir is something like "lib/krb5/asn.1" or ".".
|
|
Packit |
fd8b60 |
# stlibobjs will usually be empty, or include spaces.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
# A typical set of inputs, produced with srcdir=.. at top level:
|
|
Packit |
fd8b60 |
#
|
|
Packit |
fd8b60 |
# top_srcdir = ../../../util/et/../..
|
|
Packit |
fd8b60 |
# thisdir = util/et
|
|
Packit |
fd8b60 |
# srcdir = ../../../util/et
|
|
Packit |
fd8b60 |
# BUILDTOP = ../..
|
|
Packit |
fd8b60 |
# STLIBOBJS = error_message.o et_name.o com_err.o
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
my($top_srcdir,$thisdir,$srcdir,$BUILDTOP,$STLIBOBJS) = @ARGV;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
if (0) {
|
|
Packit |
fd8b60 |
print STDERR "top_srcdir = $top_srcdir\n";
|
|
Packit |
fd8b60 |
print STDERR "BUILDTOP = $BUILDTOP\n";
|
|
Packit |
fd8b60 |
print STDERR "STLIBOBJS = $STLIBOBJS\n";
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#$srcdirpat = quotemeta($srcdir);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
my($extrasuffixes) = ($STLIBOBJS ne "");
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
sub my_qm {
|
|
Packit |
fd8b60 |
my($x) = @_;
|
|
Packit |
fd8b60 |
$x = quotemeta($x);
|
|
Packit |
fd8b60 |
$x =~ s,\\/,/,g;
|
|
Packit |
fd8b60 |
return $x;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
sub strrep {
|
|
Packit |
fd8b60 |
my($old,$new,$s) = @_;
|
|
Packit |
fd8b60 |
my($l) = "strrep('$old','$new','$s')";
|
|
Packit |
fd8b60 |
my($out) = "";
|
|
Packit |
fd8b60 |
while ($s ne "") {
|
|
Packit |
fd8b60 |
my($i) = index($s, $old);
|
|
Packit |
fd8b60 |
if ($i == -1) {
|
|
Packit |
fd8b60 |
$out .= $s;
|
|
Packit |
fd8b60 |
$s = "";
|
|
Packit |
fd8b60 |
} else {
|
|
Packit |
fd8b60 |
$out .= substr($s, 0, $i) . $new;
|
|
Packit |
fd8b60 |
if (length($s) > $i + length($old)) {
|
|
Packit |
fd8b60 |
$s = substr($s, $i + length($old));
|
|
Packit |
fd8b60 |
} else {
|
|
Packit |
fd8b60 |
$s = "";
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
# print STDERR "$l = '$out'\n";
|
|
Packit |
fd8b60 |
return $out;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
sub do_subs {
|
|
Packit |
fd8b60 |
local($_) = @_;
|
|
Packit |
fd8b60 |
s,\\$, \\,g; s, + \\$, \\,g;
|
|
Packit |
fd8b60 |
s,//+,/,g; s, \./, ,g;
|
|
Packit |
fd8b60 |
if ($extrasuffixes) {
|
|
Packit |
fd8b60 |
# Only care about the additional prefixes if we're building
|
|
Packit |
fd8b60 |
# shared libraries.
|
|
Packit |
fd8b60 |
s,^([a-zA-Z0-9_\-]*)\.o:,$1.so $1.po \$(OUTPRE)$1.\$(OBJEXT):,;
|
|
Packit |
fd8b60 |
} else {
|
|
Packit |
fd8b60 |
s,^([a-zA-Z0-9_\-]*)\.o:,\$(OUTPRE)$1.\$(OBJEXT):,;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
# Recognize $(top_srcdir) and variants.
|
|
Packit |
fd8b60 |
my($srct) = $top_srcdir . "/";
|
|
Packit |
fd8b60 |
$_ = strrep(" $srct", " \$(top_srcdir)/", $_);
|
|
Packit |
fd8b60 |
# s, $pat, \$(top_srcdir)/,go;
|
|
Packit |
fd8b60 |
while ($srct =~ m,/[a-z][a-zA-Z0-9_.\-]*/\.\./,) {
|
|
Packit |
fd8b60 |
$srct =~ s,/[a-z][a-zA-Z0-9_.\-]*/\.\./,/,;
|
|
Packit |
fd8b60 |
$_ = strrep(" $srct", " \$(top_srcdir)/", $_);
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
# Now try to produce pathnames relative to $(srcdir).
|
|
Packit |
fd8b60 |
if ($thisdir eq ".") {
|
|
Packit |
fd8b60 |
# blah
|
|
Packit |
fd8b60 |
} else {
|
|
Packit |
fd8b60 |
my($pat) = " \$(top_srcdir)/$thisdir/";
|
|
Packit |
fd8b60 |
my($out) = " \$(srcdir)/";
|
|
Packit |
fd8b60 |
$_ = strrep($pat, $out, $_);
|
|
Packit |
fd8b60 |
while ($pat =~ m,/[a-z][a-zA-Z0-9_.\-]*/$,) {
|
|
Packit |
fd8b60 |
$pat =~ s,/[a-z][a-zA-Z0-9_.\-]*/$,/,;
|
|
Packit |
fd8b60 |
$out .= "../";
|
|
Packit |
fd8b60 |
if ($pat ne " \$(top_srcdir)/") {
|
|
Packit |
fd8b60 |
$_ = strrep($pat, $out, $_);
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
# Now substitute for BUILDTOP:
|
|
Packit |
fd8b60 |
$_ = strrep(" $BUILDTOP/", " \$(BUILDTOP)/", $_);
|
|
Packit |
fd8b60 |
return $_;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
sub do_subs_2 {
|
|
Packit |
fd8b60 |
local($_) = @_;
|
|
Packit |
fd8b60 |
# Add a trailing space.
|
|
Packit |
fd8b60 |
s/$/ /;
|
|
Packit |
fd8b60 |
# Remove excess spaces.
|
|
Packit |
fd8b60 |
s/ */ /g;
|
|
Packit |
fd8b60 |
# Delete headers external to the source and build tree.
|
|
Packit |
fd8b60 |
s; /[^ ]*;;g;
|
|
Packit |
fd8b60 |
# Remove foo/../ sequences.
|
|
Packit |
fd8b60 |
while (m/\/[a-z][a-z0-9_.\-]*\/\.\.\//) {
|
|
Packit |
fd8b60 |
s//\//g;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
# Use VPATH.
|
|
Packit |
fd8b60 |
s;\$\(srcdir\)/([^ /]* );$1;g;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
$_ = &uniquify($_);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
# Allow override of some util dependencies in case local tools are used.
|
|
Packit |
fd8b60 |
s;\$\(BUILDTOP\)/include/com_err.h ;\$(COM_ERR_DEPS) ;g;
|
|
Packit |
fd8b60 |
s;\$\(BUILDTOP\)/include/ss/ss.h \$\(BUILDTOP\)/include/ss/ss_err.h ;\$(SS_DEPS) ;g;
|
|
Packit |
fd8b60 |
s;\$\(BUILDTOP\)/include/db-config.h \$\(BUILDTOP\)/include/db.h ;\$(DB_DEPS) ;g;
|
|
Packit |
fd8b60 |
s;\$\(BUILDTOP\)/include/verto.h ;\$(VERTO_DEPS) ;g;
|
|
Packit |
fd8b60 |
if ($thisdir eq "util/gss-kernel-lib") {
|
|
Packit |
fd8b60 |
# Here com_err.h is used from the current directory.
|
|
Packit |
fd8b60 |
s;com_err.h ;\$(COM_ERR_DEPS) ;g;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
if ($thisdir eq "lib/krb5/ccache") {
|
|
Packit |
fd8b60 |
# These files are only used (and kcmrpc.h only generated) on macOS.
|
|
Packit |
fd8b60 |
# There are conditional dependencies in Makefile.in.
|
|
Packit |
fd8b60 |
s;kcmrpc.h ;;g;
|
|
Packit |
fd8b60 |
s;kcmrpc_types.h ;;g;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
$_ = &uniquify($_);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
# Delete trailing whitespace.
|
|
Packit |
fd8b60 |
s; *$;;g;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
return $_;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
sub uniquify {
|
|
Packit |
fd8b60 |
# Apparently some versions of gcc -- like
|
|
Packit |
fd8b60 |
# "gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)"
|
|
Packit |
fd8b60 |
# -- will sometimes emit duplicate header file names.
|
|
Packit |
fd8b60 |
local($_) = @_;
|
|
Packit |
fd8b60 |
my(@sides) = split ": ", $_;
|
|
Packit |
fd8b60 |
my($lhs) = "";
|
|
Packit |
fd8b60 |
if ($#sides == 1) {
|
|
Packit |
fd8b60 |
$lhs = $sides[0] . ": ";
|
|
Packit |
fd8b60 |
$_ = $sides[1];
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
my(@words) = split " ", $_;
|
|
Packit |
fd8b60 |
my($w);
|
|
Packit |
fd8b60 |
my($result) = "";
|
|
Packit |
fd8b60 |
my(%seen);
|
|
Packit |
fd8b60 |
undef %seen;
|
|
Packit |
fd8b60 |
foreach $w (sort { $a cmp $b; } @words) {
|
|
Packit |
fd8b60 |
next if defined($seen{$w});
|
|
Packit |
fd8b60 |
$seen{$w} = 1;
|
|
Packit |
fd8b60 |
if ($result ne "") { $result .= " "; }
|
|
Packit |
fd8b60 |
$result .= $w;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
return $lhs . $result . " ";
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
sub split_lines {
|
|
Packit |
fd8b60 |
local($_) = @_;
|
|
Packit |
fd8b60 |
s/(.{50}[^ ]*) /$1 \\\n /g;
|
|
Packit |
fd8b60 |
return $_ . "\n";
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
print <
|
|
Packit |
fd8b60 |
#
|
|
Packit |
fd8b60 |
# Generated makefile dependencies follow.
|
|
Packit |
fd8b60 |
#
|
|
Packit |
fd8b60 |
EOH
|
|
Packit |
fd8b60 |
my $buf = '';
|
|
Packit |
fd8b60 |
while (<STDIN>) {
|
|
Packit |
fd8b60 |
# Strip newline.
|
|
Packit |
fd8b60 |
chop;
|
|
Packit |
fd8b60 |
next if /^\s*#/;
|
|
Packit |
fd8b60 |
# Do directory-specific path substitutions on each filename read.
|
|
Packit |
fd8b60 |
$_ = &do_subs($_);
|
|
Packit |
fd8b60 |
if (m/\\$/) {
|
|
Packit |
fd8b60 |
chop;
|
|
Packit |
fd8b60 |
$buf .= $_;
|
|
Packit |
fd8b60 |
} else {
|
|
Packit |
fd8b60 |
$buf = &do_subs_2($buf . $_);
|
|
Packit |
fd8b60 |
print &split_lines($buf);
|
|
Packit |
fd8b60 |
$buf = '';
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
exit 0;
|