blob: 6a01feded914e2eb265cf4319f07eea5d28175bf [file] [log] [blame]
Steve Kondikae271bc2015-11-15 02:50:53 +01001# $Id: mk-0th.awk,v 1.22 2012/06/30 20:56:11 tom Exp $
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302##############################################################################
Steve Kondikae271bc2015-11-15 02:50:53 +01003# Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. #
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05304# #
5# Permission is hereby granted, free of charge, to any person obtaining a #
6# copy of this software and associated documentation files (the "Software"), #
7# to deal in the Software without restriction, including without limitation #
8# the rights to use, copy, modify, merge, publish, distribute, distribute #
9# with modifications, sublicense, and/or sell copies of the Software, and to #
10# permit persons to whom the Software is furnished to do so, subject to the #
11# following conditions: #
12# #
13# The above copyright notice and this permission notice shall be included in #
14# all copies or substantial portions of the Software. #
15# #
16# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
17# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
18# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
19# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
20# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
21# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
22# DEALINGS IN THE SOFTWARE. #
23# #
24# Except as contained in this notice, the name(s) of the above copyright #
25# holders shall not be used in advertising or otherwise to promote the sale, #
26# use or other dealings in this Software without prior written #
27# authorization. #
28##############################################################################
29#
Steve Kondikae271bc2015-11-15 02:50:53 +010030# Author: Thomas E. Dickey 1996-on
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053031#
32# Generate list of sources for a library, together with lint/lintlib rules
33#
34# Variables:
35# libname (library name, e.g., "ncurses", "panel", "forms", "menus")
36# subsets (is used here to decide if wide-character code is used)
Steve Kondikae271bc2015-11-15 02:50:53 +010037# ticlib (library name for libtic, e.g., "tic")
38# termlib (library name for libtinfo, e.g., "tinfo")
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053039#
Steve Kondikae271bc2015-11-15 02:50:53 +010040function make_lintlib(name,sources) {
41 print ""
42 print "clean ::"
43 printf "\trm -f llib-l%s.*\n", name
44 print ""
45 print "realclean ::"
46 printf "\trm -f llib-l%s\n", name
47 print ""
48 printf "llib-l%s : %s\n", name, sources
49 printf "\tcproto -a -l -DNCURSES_ENABLE_STDBOOL_H=0 -DLINT $(CPPFLAGS) %s >$@\n", sources
50 print ""
51 print "lintlib ::"
52 printf "\tsh $(srcdir)/../misc/makellib %s $(CPPFLAGS)\n", name
53 print ""
54 print "lint ::"
55 printf "\t$(LINT) $(LINT_OPTS) $(CPPFLAGS) %s $(LINT_LIBS)\n", sources
56}
57
58# A blank in "subsets" indicates a split-off of the library into a separate
59# file, e.g., for libtic or libtinfo. They are all logical parts of the same
60# library.
61function which_library() {
62 if ( ( which == "ticlib" ) && ( subsets ~ /ticlib / ) ) {
63 return ticlib;
64 } else if ( ( which == "termlib" || which == "ext_tinfo" ) && ( subsets ~ /[[:space:]]base/ ) ) {
65 return termlib;
66 } else {
67 return libname;
68 }
69}
70
71function show_list(name, len, list) {
72 if ( len > 0 ) {
73 printf "\n%s_SRC =", toupper(name);
74 for (n = 0; n < len; ++n)
75 printf " \\\n\t%s", list[n];
76 print "";
77 make_lintlib(name, sprintf("$(%s_SRC)", toupper(name)));
78 }
79}
80
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053081BEGIN {
Steve Kondikae271bc2015-11-15 02:50:53 +010082 which = libname;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053083 using = 0;
84 found = 0;
Steve Kondikae271bc2015-11-15 02:50:53 +010085 count_ticlib = 0;
86 count_termlib = 0;
87 count_library = 0;
88 }
89 /^@/ {
90 which = $0;
91 sub(/^@[[:blank:]]+/, "", which);
92 sub(/[[:blank:]]+$/, "", which);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053093 }
94 !/^[@#]/ {
95 if (using == 0)
96 {
97 print ""
98 print "# generated by mk-0th.awk"
99 printf "# libname: %s\n", libname
100 printf "# subsets: %s\n", subsets
Steve Kondikae271bc2015-11-15 02:50:53 +0100101 if ( libname ~ /ncurses/ ) {
102 printf "# ticlib: %s\n", ticlib
103 printf "# termlib: %s\n", termlib
104 }
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530105 print ""
106 print ".SUFFIXES: .c .cc .h .i .ii"
107 print ".c.i :"
108 printf "\t$(CPP) $(CPPFLAGS) $< >$@\n"
109 print ".cc.ii :"
110 printf "\t$(CPP) $(CPPFLAGS) $< >$@\n"
111 print ".h.i :"
112 printf "\t$(CPP) $(CPPFLAGS) $< >$@\n"
113 print ""
114 using = 1;
115 }
Steve Kondikae271bc2015-11-15 02:50:53 +0100116 if (which ~ /port_/ )
117 {
118 # skip win32 source
119 }
120 else if ( $0 != "" && $1 != "link_test" )
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530121 {
122 if ( found == 0 )
123 {
124 if ( subsets ~ /widechar/ )
125 widechar = 1;
126 else
127 widechar = 0;
128 printf "C_SRC ="
129 if ( $2 == "lib" )
130 found = 1
131 else
132 found = 2
133 }
134 if ( libname == "c++" || libname == "c++w" ) {
Steve Kondikae271bc2015-11-15 02:50:53 +0100135 srcname = sprintf("%s/%s.cc", $3, $1);
136 printf " \\\n\t%s", srcname;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530137 } else if ( widechar == 1 || $3 != "$(wide)" ) {
Steve Kondikae271bc2015-11-15 02:50:53 +0100138 srcname = sprintf("%s/%s.c", $3, $1);
139 printf " \\\n\t%s", srcname;
140 if ( which_library() == libname ) {
141 list_library[count_library++] = srcname;
142 } else if ( which_library() == ticlib ) {
143 list_ticlib[count_ticlib++] = srcname;
144 } else {
145 list_termlib[count_termlib++] = srcname;
146 }
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530147 }
148 }
149 }
150END {
151 print ""
152 if ( found == 1 )
153 {
154 print ""
Steve Kondikae271bc2015-11-15 02:50:53 +0100155 printf "# Producing llib-l%s is time-consuming, so there's no direct-dependency for\n", libname;
156 print "# it in the lintlib rule. We'll only remove in the cleanest setup.";
157 show_list(libname, count_library, list_library);
158 show_list(ticlib, count_ticlib, list_ticlib);
159 show_list(termlib, count_termlib, list_termlib);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530160 }
161 else
162 {
163 print ""
164 print "lintlib :"
165 print "\t@echo no action needed"
166 }
167 }
Steve Kondikae271bc2015-11-15 02:50:53 +0100168# vile:ts=4 sw=4