1439fafc7SDag-Erling Smørgrav#!/usr/bin/perl -w 2439fafc7SDag-Erling Smørgrav#- 3439fafc7SDag-Erling Smørgrav# Copyright (c) 2013 Dag-Erling Smørgrav 4439fafc7SDag-Erling Smørgrav# All rights reserved. 5439fafc7SDag-Erling Smørgrav# 6439fafc7SDag-Erling Smørgrav# Redistribution and use in source and binary forms, with or without 7439fafc7SDag-Erling Smørgrav# modification, are permitted provided that the following conditions 8439fafc7SDag-Erling Smørgrav# are met: 9439fafc7SDag-Erling Smørgrav# 1. Redistributions of source code must retain the above copyright 10439fafc7SDag-Erling Smørgrav# notice, this list of conditions and the following disclaimer. 11439fafc7SDag-Erling Smørgrav# 2. Redistributions in binary form must reproduce the above copyright 12439fafc7SDag-Erling Smørgrav# notice, this list of conditions and the following disclaimer in the 13439fafc7SDag-Erling Smørgrav# documentation and/or other materials provided with the distribution. 14439fafc7SDag-Erling Smørgrav# 15439fafc7SDag-Erling Smørgrav# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16439fafc7SDag-Erling Smørgrav# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17439fafc7SDag-Erling Smørgrav# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18439fafc7SDag-Erling Smørgrav# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19439fafc7SDag-Erling Smørgrav# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20439fafc7SDag-Erling Smørgrav# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21439fafc7SDag-Erling Smørgrav# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22439fafc7SDag-Erling Smørgrav# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23439fafc7SDag-Erling Smørgrav# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24439fafc7SDag-Erling Smørgrav# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25439fafc7SDag-Erling Smørgrav# SUCH DAMAGE. 26439fafc7SDag-Erling Smørgrav# 27a6a72607SDag-Erling Smørgrav# $FreeBSD$ 28439fafc7SDag-Erling Smørgrav# 29439fafc7SDag-Erling Smørgrav 30439fafc7SDag-Erling Smørgravuse strict; 31439fafc7SDag-Erling Smørgravuse warnings; 32439fafc7SDag-Erling Smørgravuse Text::Wrap; 33439fafc7SDag-Erling Smørgrav 3405ff931fSDag-Erling Smørgravour @targets = qw(LIBUNBOUND DAEMON UBANCHOR CHECKCONF CONTROL); 35439fafc7SDag-Erling Smørgrav 36439fafc7SDag-Erling Smørgravour %target_names = ( 37439fafc7SDag-Erling Smørgrav LIBUNBOUND => "libunbound", 38439fafc7SDag-Erling Smørgrav DAEMON => "unbound", 39439fafc7SDag-Erling Smørgrav UBANCHOR => "unbound-anchor", 40439fafc7SDag-Erling Smørgrav CHECKCONF => "unbound-checkconf", 4105ff931fSDag-Erling Smørgrav CONTROL => "unbound-control", 42439fafc7SDag-Erling Smørgrav); 43439fafc7SDag-Erling Smørgrav 44439fafc7SDag-Erling Smørgravsub get_sources($) { 45439fafc7SDag-Erling Smørgrav my ($target) = @_; 46439fafc7SDag-Erling Smørgrav local $/; 47439fafc7SDag-Erling Smørgrav 48439fafc7SDag-Erling Smørgrav open(MAKE, "-|", "make", "-V${target}_OBJ_LINK") 49439fafc7SDag-Erling Smørgrav or die("failed to exec make: $!\n"); 50439fafc7SDag-Erling Smørgrav my $objs = <MAKE>; 51439fafc7SDag-Erling Smørgrav close(MAKE); 52439fafc7SDag-Erling Smørgrav chomp($objs); 53439fafc7SDag-Erling Smørgrav $objs =~ s/\.l?o\b/.c/g; 54*7ca2a890SDag-Erling Smørgrav return map { 55*7ca2a890SDag-Erling Smørgrav /lexer/ && s/c$/l/; 56*7ca2a890SDag-Erling Smørgrav /parser/ && s/c$/y/; 57*7ca2a890SDag-Erling Smørgrav $_; 58*7ca2a890SDag-Erling Smørgrav } split(/\s+/, $objs); 59439fafc7SDag-Erling Smørgrav} 60439fafc7SDag-Erling Smørgrav 61439fafc7SDag-Erling SmørgravMAIN:{ 62439fafc7SDag-Erling Smørgrav my %sources; 63439fafc7SDag-Erling Smørgrav foreach my $target (@targets) { 64439fafc7SDag-Erling Smørgrav $sources{$target} = { 65439fafc7SDag-Erling Smørgrav map({ $_ => 1 } 66439fafc7SDag-Erling Smørgrav grep({ !exists($sources{LIBUNBOUND}->{$_}) } 67439fafc7SDag-Erling Smørgrav get_sources($target))) 68439fafc7SDag-Erling Smørgrav }; 69439fafc7SDag-Erling Smørgrav print("# $target_names{$target}\n"); 70439fafc7SDag-Erling Smørgrav my $SRCS = fill("SRCS=\t", "\t", sort keys %{$sources{$target}}); 71439fafc7SDag-Erling Smørgrav $SRCS =~ s/\n/ \\\n/gm; 72439fafc7SDag-Erling Smørgrav print("$SRCS\n"); 73439fafc7SDag-Erling Smørgrav } 74439fafc7SDag-Erling Smørgrav} 75439fafc7SDag-Erling Smørgrav 76439fafc7SDag-Erling Smørgrav1; 77