Commit | Line | Data |
---|---|---|
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 $ | |
7e5d4a4c | 28 | # $DragonFly: src/tools/make_libdeps.sh,v 1.4 2005/05/07 17:38:34 swildner Exp $ |
984263bc MD |
29 | |
30 | export PATH=/usr/bin | |
31 | ||
32 | FS=': ' # internal field separator | |
33 | LIBDEPENDS=./_libdeps # intermediate output file | |
34 | USRSRC=${1:-/usr/src} # source root | |
35 | LIBS=" | |
36 | lib | |
37 | gnu/lib | |
38 | gnu/usr.bin/perl/libperl | |
984263bc MD |
39 | kerberos5/lib |
40 | secure/lib | |
41 | usr.bin/lex/lib | |
984263bc MD |
42 | " # where to scan for libraries |
43 | ||
44 | # This sed(1) filter is used to convert -lfoo to path/to/libfoo. | |
45 | # | |
46 | SED_FILTER=" | |
47 | sed -E | |
48 | -e's; ;! ;g' | |
49 | -e's;$;!;' | |
50 | -e's;-lm!;lib/msun;g' | |
984263bc MD |
51 | -e's;-l(asn1|gssapi|krb5|roken)!;kerberos5/lib/lib\1;g' |
52 | -e's;-l(crypto|ssh)!;secure/lib/lib\1;g' | |
53 | -e's;-l([^!]+)!;lib/lib\1;g' | |
54 | " | |
55 | ||
56 | # Generate interdependencies between libraries. | |
57 | # | |
58 | genlibdepends() | |
59 | { | |
60 | ( | |
61 | cd ${USRSRC} | |
62 | find ${LIBS} -mindepth 1 -name Makefile | | |
63 | xargs grep -l 'bsd\.lib\.mk' | | |
64 | while read makefile; do | |
65 | libdir=$(dirname ${makefile}) | |
66 | deps=$( | |
67 | cd ${libdir} | |
68 | make -V LDADD | |
69 | ) | |
70 | if [ "${deps}" ]; then | |
71 | echo ${libdir}"${FS}"$( | |
72 | echo ${deps} | | |
73 | eval ${SED_FILTER} | |
74 | ) | |
75 | fi | |
76 | done | |
77 | ) | |
78 | } | |
79 | ||
80 | main() | |
81 | { | |
82 | if [ ! -f ${LIBDEPENDS} ]; then | |
83 | genlibdepends >${LIBDEPENDS} | |
84 | fi | |
85 | ||
86 | prebuild_libs=$( | |
87 | awk -F"${FS}" '{ print $2 }' ${LIBDEPENDS} |rs 0 1 |sort -u | |
88 | ) | |
89 | echo "Libraries with dependents:" | |
90 | echo | |
91 | echo ${prebuild_libs} | | |
92 | rs 0 1 | |
93 | echo | |
94 | ||
95 | echo "List of interdependencies:" | |
96 | echo | |
97 | for lib in ${prebuild_libs}; do | |
98 | grep "^${lib}${FS}" ${LIBDEPENDS} || true | |
99 | done | | |
100 | awk -F"${FS}" '{ | |
101 | if ($2 in dependents) | |
102 | dependents[$2]=dependents[$2]" "$1 | |
103 | else | |
104 | dependents[$2]=$1 | |
105 | } | |
106 | END { | |
107 | for (lib in dependents) | |
108 | print dependents[lib]": " lib | |
109 | }' | | |
110 | sort | |
111 | ||
112 | exit 0 | |
113 | } | |
114 | ||
115 | main |