1a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner/* Definitions for using pattern rules in GNU Make.
2a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
4a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerFoundation, Inc.
5a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerThis file is part of GNU Make.
6a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
7a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerGNU Make is free software; you can redistribute it and/or modify it under the
8a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerterms of the GNU General Public License as published by the Free Software
9a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerFoundation; either version 2, or (at your option) any later version.
10a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
11a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
12a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerA PARTICULAR PURPOSE.  See the GNU General Public License for more details.
14a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
15a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerYou should have received a copy of the GNU General Public License along with
16a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerGNU Make; see the file COPYING.  If not, write to the Free Software
17a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' TurnerFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */
18a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
19a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner/* Structure used for pattern rules.  */
20a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
21a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerstruct rule
22a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner  {
23a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner    struct rule *next;
24a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner    char **targets;		/* Targets of the rule.  */
25a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner    unsigned int *lens;		/* Lengths of each target.  */
26a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner    char **suffixes;		/* Suffixes (after `%') of each target.  */
27a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner    struct dep *deps;		/* Dependencies of the rule.  */
28a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner    struct commands *cmds;	/* Commands to execute.  */
29a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner    char terminal;		/* If terminal (double-colon).  */
30a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner    char in_use;		/* If in use by a parent pattern_search.  */
31a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner  };
32a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
33a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner/* For calling install_pattern_rule.  */
34a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerstruct pspec
35a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner  {
36a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner    char *target, *dep, *commands;
37a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner  };
38a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
39a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
40a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern struct rule *pattern_rules;
41a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern struct rule *last_pattern_rule;
42a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern unsigned int num_pattern_rules;
43a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
44a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern unsigned int max_pattern_deps;
45a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern unsigned int max_pattern_targets;
46a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern unsigned int max_pattern_dep_length;
47a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
48a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern struct file *suffix_file;
49a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern unsigned int maxsuffix;
50a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
51a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner
52a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern void install_pattern_rule PARAMS ((struct pspec *p, int terminal));
53a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern int new_pattern_rule PARAMS ((struct rule *rule, int override));
54a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern void count_implicit_rule_limits PARAMS ((void));
55a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern void convert_to_pattern PARAMS ((void));
56a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turnerextern void create_pattern_rule PARAMS ((char **targets,
57a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner                                         char **target_percents, int terminal,
58a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner                                         struct dep *deps,
59a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner                                         struct commands *commands,
60a86d4c1bde70365cbbe874ad9ddb3f06916d2085David 'Digit' Turner                                         int override));
61