1 # $Id: mk-0th.awk,v 1.22 2012/06/30 20:56:11 tom Exp $
2 ##############################################################################
3 # Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. #
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: #
13 # The above copyright notice and this permission notice shall be included in #
14 # all copies or substantial portions of the Software. #
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. #
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 #
28 ##############################################################################
30 # Author: Thomas E. Dickey 1996-on
32 # Generate list of sources for a library, together with lint/lintlib rules
35 # libname (library name, e.g., "ncurses", "panel", "forms", "menus")
36 # subsets (is used here to decide if wide-character code is used)
37 # ticlib (library name for libtic, e.g., "tic")
38 # termlib (library name for libtinfo, e.g., "tinfo")
40 function make_lintlib(name,sources) {
43 printf "\trm -f llib-l%s.*\n", name
46 printf "\trm -f llib-l%s\n", name
48 printf "llib-l%s : %s\n", name, sources
49 printf "\tcproto -a -l -DNCURSES_ENABLE_STDBOOL_H=0 -DLINT $(CPPFLAGS) %s >$@\n", sources
52 printf "\tsh $(srcdir)/../misc/makellib %s $(CPPFLAGS)\n", name
55 printf "\t$(LINT) $(LINT_OPTS) $(CPPFLAGS) %s $(LINT_LIBS)\n", sources
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
61 function which_library() {
62 if ( ( which == "ticlib" ) && ( subsets ~ /ticlib / ) ) {
64 } else if ( ( which == "termlib" || which == "ext_tinfo" ) && ( subsets ~ /[[:space:]]base/ ) ) {
71 function show_list(name, len, list) {
73 printf "\n%s_SRC =", toupper(name);
74 for (n = 0; n < len; ++n)
75 printf " \\\n\t%s", list[n];
77 make_lintlib(name, sprintf("$(%s_SRC)", toupper(name)));
91 sub(/^@[[:blank:]]+/, "", which);
92 sub(/[[:blank:]]+$/, "", which);
98 print "# generated by mk-0th.awk"
99 printf "# libname: %s\n", libname
100 printf "# subsets: %s\n", subsets
101 if ( libname ~ /ncurses/ ) {
102 printf "# ticlib: %s\n", ticlib
103 printf "# termlib: %s\n", termlib
106 print ".SUFFIXES: .c .cc .h .i .ii"
108 printf "\t$(CPP) $(CPPFLAGS) $< >$@\n"
110 printf "\t$(CPP) $(CPPFLAGS) $< >$@\n"
112 printf "\t$(CPP) $(CPPFLAGS) $< >$@\n"
116 if (which ~ /port_/ )
120 else if ( $0 != "" && $1 != "link_test" )
124 if ( subsets ~ /widechar/ )
134 if ( libname == "c++" || libname == "c++w" ) {
135 srcname = sprintf("%s/%s.cc", $3, $1);
136 printf " \\\n\t%s", srcname;
137 } else if ( widechar == 1 || $3 != "$(wide)" ) {
138 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;
145 list_termlib[count_termlib++] = srcname;
155 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);
165 print "\t@echo no action needed"