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