1 # $Id: mk-0th.awk,v 1.24 2021/03/20 11:44:48 tom Exp $
2 ##############################################################################
3 # Copyright 2020,2021 Thomas E. Dickey #
4 # Copyright 1998-2010,2012 Free Software Foundation, Inc. #
6 # Permission is hereby granted, free of charge, to any person obtaining a #
7 # copy of this software and associated documentation files (the "Software"), #
8 # to deal in the Software without restriction, including without limitation #
9 # the rights to use, copy, modify, merge, publish, distribute, distribute #
10 # with modifications, sublicense, and/or sell copies of the Software, and to #
11 # permit persons to whom the Software is furnished to do so, subject to the #
12 # following conditions: #
14 # The above copyright notice and this permission notice shall be included in #
15 # all copies or substantial portions of the Software. #
17 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
18 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
19 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
20 # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
21 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
22 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
23 # DEALINGS IN THE SOFTWARE. #
25 # Except as contained in this notice, the name(s) of the above copyright #
26 # holders shall not be used in advertising or otherwise to promote the sale, #
27 # use or other dealings in this Software without prior written #
29 ##############################################################################
31 # Author: Thomas E. Dickey 1996-on
33 # Generate list of sources for a library, together with lint/lintlib rules
36 # libname (library name, e.g., "ncurses", "panel", "forms", "menus")
37 # subsets (is used here to decide if wide-character code is used)
38 # ticlib (library name for libtic, e.g., "tic")
39 # termlib (library name for libtinfo, e.g., "tinfo")
41 function make_lintlib(name,sources) {
44 printf "\trm -f llib-l%s.*\n", name
47 printf "\trm -f llib-l%s\n", name
49 printf "llib-l%s : %s\n", name, sources
50 printf "\tcproto -a -l -DNCURSES_ENABLE_STDBOOL_H=0 -DLINT $(CPPFLAGS) %s >$@\n", sources
53 printf "\tsh $(srcdir)/../misc/makellib %s $(CPPFLAGS)\n", name
56 printf "\t$(LINT) $(LINT_OPTS) $(CPPFLAGS) %s $(LINT_LIBS)\n", sources
59 # A blank in "subsets" indicates a split-off of the library into a separate
60 # file, e.g., for libtic or libtinfo. They are all logical parts of the same
62 function which_library() {
63 if ( ( which == "ticlib" ) && ( subsets ~ /ticlib / ) ) {
65 } else if ( ( which == "termlib" || which == "ext_tinfo" ) && ( subsets ~ /[[:space:]]base/ ) ) {
72 function show_list(name, len, list) {
74 printf "\n%s_SRC =", toupper(name);
75 for (n = 0; n < len; ++n)
76 printf " \\\n\t%s", list[n];
78 make_lintlib(name, sprintf("$(%s_SRC)", toupper(name)));
92 sub(/^@[[:blank:]]+/, "", which);
93 sub(/[[:blank:]]+$/, "", which);
99 print "# generated by mk-0th.awk"
100 printf "# libname: %s\n", libname
101 printf "# subsets: %s\n", subsets
102 if ( libname ~ /ncurses/ ) {
103 printf "# ticlib: %s\n", ticlib
104 printf "# termlib: %s\n", termlib
107 print ".SUFFIXES: .c .cc .h .i .ii"
109 printf "\t$(CPP) $(CPPFLAGS) $< >$@\n"
111 printf "\t$(CPP) $(CPPFLAGS) $< >$@\n"
113 printf "\t$(CPP) $(CPPFLAGS) $< >$@\n"
117 if (which ~ /port_/ )
121 else if ( $0 != "" && $1 != "link_test" )
125 if ( subsets ~ /widechar/ )
132 else if ( $2 == "c++" )
137 if ( libname == "c++" || libname == "c++w" ) {
138 srcname = sprintf("%s/%s.cc", $3, $1);
139 printf " \\\n\t%s", srcname;
140 } else if ( widechar == 1 || $3 != "$(wide)" ) {
141 srcname = sprintf("%s/%s.c", $3, $1);
142 printf " \\\n\t%s", srcname;
143 if ( which_library() == libname ) {
144 list_library[count_library++] = srcname;
145 } else if ( which_library() == ticlib ) {
146 list_ticlib[count_ticlib++] = srcname;
148 list_termlib[count_termlib++] = srcname;
158 printf "# Producing llib-l%s is time-consuming, so there's no direct-dependency for\n", libname;
159 print "# it in the lintlib rule. We'll only remove in the cleanest setup.";
160 show_list(libname, count_library, list_library);
161 show_list(ticlib, count_ticlib, list_ticlib);
162 show_list(termlib, count_termlib, list_termlib);
164 else if ( found == 2 )
166 make_lintlib(libname, "$(C_SRC)");
172 print "\t@echo no action needed"