version 1.1.1.2, 2012/05/29 12:26:49
|
version 1.1.1.6, 2014/06/15 16:12:53
|
Line 1
|
Line 1
|
#!/usr/bin/env perl |
#!/usr/bin/env perl |
|
# |
|
# Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> |
|
# |
|
# Permission to use, copy, modify, and distribute this software for any |
|
# purpose with or without fee is hereby granted, provided that the above |
|
# copyright notice and this permission notice appear in all copies. |
|
# |
|
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|
# |
|
|
use File::Temp qw/ :mktemp /; |
use File::Temp qw/ :mktemp /; |
use Fcntl; |
use Fcntl; |
Line 50 sub mkdep {
|
Line 65 sub mkdep {
|
|
|
# Expand some configure bits |
# Expand some configure bits |
$makefile =~ s:\@DEV\@::g; |
$makefile =~ s:\@DEV\@::g; |
$makefile =~ s:\@COMMON_OBJS\@:aix.lo:; | $makefile =~ s:\@COMMON_OBJS\@:aix.lo event_poll.lo event_select.lo:; |
$makefile =~ s:\@SUDO_OBJS\@:preload.o selinux.o sesh.o sudo_noexec.lo:; | $makefile =~ s:\@SUDO_OBJS\@:openbsd.o preload.o selinux.o sesh.o solaris.o sudo_noexec.lo:; |
$makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.lo plugin_error.lo:; | $makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.lo sssd.lo:; |
# XXX - fill in AUTH_OBJS from contents of the auth dir instead |
# XXX - fill in AUTH_OBJS from contents of the auth dir instead |
$makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:; |
$makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:; |
$makefile =~ s:\@LTLIBOBJS\@:closefrom.lo dlopen.lo fnmatch.lo getcwd.lo getgrouplist.lo getline.lo getprogname.lo glob.lo isblank.lo memrchr.lo mksiglist.lo mktemp.lo nanosleep.lo pw_dup.lo siglist.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo utimes.lo globtest.o fnm_test.o:; | $makefile =~ s:\@LTLIBOBJS\@:clock_gettime.lo closefrom.lo fnmatch.lo getaddrinfo.lo getcwd.lo getgrouplist.lo getline.lo getopt_long.lo glob.lo isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo pw_dup.lo sig2str.lo siglist.lo signame.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo strtonum.lo utimes.lo globtest.o fnm_test.o inet_pton:; |
|
|
# Parse OBJS lines |
# Parse OBJS lines |
my %objs; |
my %objs; |
Line 89 sub mkdep {
|
Line 104 sub mkdep {
|
#$dir_vars{'top_builddir'} = '.'; |
#$dir_vars{'top_builddir'} = '.'; |
$dir_vars{'incdir'} = 'include'; |
$dir_vars{'incdir'} = 'include'; |
|
|
# Find implicit rules for generate .o and .lo files | # Find implicit rules for generated .o and .lo files |
%implicit = (); |
%implicit = (); |
while ($makefile =~ /^\.c\.(l?o):\s*\n\t+(.*)$/mg) { |
while ($makefile =~ /^\.c\.(l?o):\s*\n\t+(.*)$/mg) { |
$implicit{$1} = $2; |
$implicit{$1} = $2; |
Line 165 exit(0);
|
Line 180 exit(0);
|
|
|
sub find_depends { |
sub find_depends { |
my $src = $_[0]; |
my $src = $_[0]; |
my ($deps, $code, @headers); | my ($deps, $code, %headers); |
|
|
if ($src !~ /\//) { |
if ($src !~ /\//) { |
# XXX - want build dir not src dir |
# XXX - want build dir not src dir |
Line 190 sub find_depends {
|
Line 205 sub find_depends {
|
while ($code =~ /^#\s*include\s+["<](\S+)[">]/mg) { |
while ($code =~ /^#\s*include\s+["<](\S+)[">]/mg) { |
my ($hdr, $hdr_path) = find_header($1); |
my ($hdr, $hdr_path) = find_header($1); |
if (defined($hdr)) { |
if (defined($hdr)) { |
push(@headers, $hdr); | $headers{$hdr} = 1; |
# Look for other includes in the .h file |
# Look for other includes in the .h file |
push(@headers, find_depends($hdr_path)); | foreach (find_depends($hdr_path)) { |
| $headers{$_} = 1; |
| } |
} |
} |
} |
} |
|
|
@headers; | sort keys %headers; |
} |
} |
|
|
# find the path to a header file |
# find the path to a header file |