Kind of sync makewhatis.local with FreeBSD. Ignore r/o directories.
[dragonfly.git] / tools / make_libdeps.sh
CommitLineData
984263bc
MD
1#!/bin/sh -e
2#
3# Copyright (c) 2002 Ruslan Ermilov, The FreeBSD Project
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
27# $FreeBSD: src/tools/make_libdeps.sh,v 1.2.2.1 2002/07/23 12:12:30 ru Exp $
28
82909a40 29export PATH=/sbin:/usr/bin
984263bc 30
a3060980 31set -e
32
33LC_ALL=C # make sort deterministic
984263bc
MD
34FS=': ' # internal field separator
35LIBDEPENDS=./_libdeps # intermediate output file
36USRSRC=${1:-/usr/src} # source root
37LIBS="
38 lib
39 gnu/lib
d7e4756d 40 usr.bin/flex/lib
984263bc
MD
41" # where to scan for libraries
42
43# This sed(1) filter is used to convert -lfoo to path/to/libfoo.
44#
45SED_FILTER="
46sed -E
28cbf28d 47 -e's;-Wl,[^ ]+[ ]?;;g'
48 -e's;-lprivate_crypto;-lrecrypto;g'
49 -e's;-lprivate_ncurses;-lncurses;g'
50 -e's;-lprivate_ssh;-lssh;g'
51 -e's;-lprivate_ssl;-lressl;g'
52 -e's;-pthread;-lthread_xu;g'
53 -e's;/[^ ]+/libpthread\.so;-lpthread;g'
54 -e's;/[^ ]+/libelf_pic.a;-lelf;g'
55 -e's;\.\./components/[^ ]+/lib[a-z0-9]+_pic\.a[ ]?;;g'
56 -e's;[ ]$;;g'
984263bc
MD
57 -e's; ;! ;g'
58 -e's;$;!;'
984263bc
MD
59 -e's;-l([^!]+)!;lib/lib\1;g'
60"
61
62# Generate interdependencies between libraries.
63#
64genlibdepends()
65{
66 (
67 cd ${USRSRC}
a3060980 68 find ${LIBS} -mindepth 1 -name Makefile | sort |
984263bc
MD
69 xargs grep -l 'bsd\.lib\.mk' |
70 while read makefile; do
71 libdir=$(dirname ${makefile})
72 deps=$(
73 cd ${libdir}
82909a40 74 make -m ${USRSRC}/share/mk -V LDADD
984263bc
MD
75 )
76 if [ "${deps}" ]; then
77 echo ${libdir}"${FS}"$(
78 echo ${deps} |
79 eval ${SED_FILTER}
80 )
81 fi
82 done
83 )
84}
85
86main()
87{
88 if [ ! -f ${LIBDEPENDS} ]; then
89 genlibdepends >${LIBDEPENDS}
90 fi
91
92 prebuild_libs=$(
a3060980 93 awk -F"${FS}" '{ print $2 }' ${LIBDEPENDS} | tr ' ' '\n' |
94 sort -u
984263bc
MD
95 )
96 echo "Libraries with dependents:"
97 echo
a3060980 98 echo ${prebuild_libs} | tr ' ' '\n'
984263bc
MD
99 echo
100
101 echo "List of interdependencies:"
102 echo
103 for lib in ${prebuild_libs}; do
104 grep "^${lib}${FS}" ${LIBDEPENDS} || true
105 done |
106 awk -F"${FS}" '{
107 if ($2 in dependents)
108 dependents[$2]=dependents[$2]" "$1
109 else
110 dependents[$2]=$1
111 }
112 END {
113 for (lib in dependents)
114 print dependents[lib]": " lib
115 }' |
116 sort
117
118 exit 0
119}
120
121main