#!/bin/sh -e # # Copyright (c) 2002 Ruslan Ermilov, The FreeBSD Project # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD: stable/11/tools/make_libdeps.sh 271278 2014-09-08 17:01:30Z bdrewery $ export PATH=/bin:/usr/bin setglobal LC_ALL = 'C' # make sort deterministic setglobal FS = '': '' # internal field separator setglobal LIBDEPENDS = './_libdeps' # intermediate output file setglobal USRSRC = $(1:-/usr/src) # source root setglobal LIBS = '" lib gnu/lib kerberos5/lib secure/lib usr.bin/lex/lib cddl/lib '" # where to scan for libraries # This sed(1) filter is used to convert -lfoo to path/to/libfoo. # setglobal SED_FILTER = '" sed -E -e's; ;! ;g' -e's;$;!;' -e's;-lbsdxml!;lib/libexpat;g' -e's;-lpthread!;lib/libthr;g' -e's;-lm!;lib/msun;g' -e's;-l(ncurses|termcap)!;lib/ncurses/ncurses;g' -e's;-l(gcc)!;gnu/lib/lib\1;g' -e's;-lssp_nonshared!;gnu/lib/libssp/libssp_nonshared;g' -e's;-l(asn1|hdb|kdc|heimbase|heimntlm|heimsqlite|hx509|krb5|roken|wind)!;kerberos5/lib/lib\1;g' -e's;-l(crypto|ssh|ssl)!;secure/lib/lib\1;g' -e's;-l([^!]+)!;lib/lib\1;g' '" # Generate interdependencies between libraries. # proc genlibdepends { shell { cd $(USRSRC) find -s $(LIBS) -mindepth 1 -name Makefile | xargs grep -l 'bsd\.lib\.mk' | while read makefile { setglobal libdir = $[dirname $(makefile)] setglobal deps = $[ cd $(libdir) make -m $(USRSRC)/share/mk -V LDADD] if test $(deps) { echo $(libdir)"$(FS)"$[ echo $(deps) | eval $(SED_FILTER)] } } } } proc main { if test ! -f $(LIBDEPENDS) { genlibdepends >$(LIBDEPENDS) } setglobal prebuild_libs = $[ awk -F"$(FS)" '{ print $2 }' $(LIBDEPENDS) | tr ' ' '\n' | sort -u] echo "Libraries with dependents:" echo echo $(prebuild_libs) | tr ' ' '\n' echo echo "List of interdependencies:" echo for lib in [$(prebuild_libs)] { grep "^$(lib)$(FS)" $(LIBDEPENDS) || true } | awk -F"$(FS)" '{ if ($2 in dependents) dependents[$2]=dependents[$2]" "$1 else dependents[$2]=$1 } END { for (lib in dependents) print dependents[lib]": " lib }' | sort exit 0 } main