Changeset 921 for trunk/src/gmakenew/read.c
- Timestamp:
- May 25, 2007, 5:27:53 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gmakenew/read.c
r919 r921 1981 1981 const char **targets = 0, **target_percents = 0; 1982 1982 struct commands *cmds; 1983 #ifdef CONFIG_WITH_EXPLICIT_MULTITARGET 1984 struct file *prev_file = 0; 1985 enum multitarget_mode { m_unsettled, m_no, m_yes, m_yes_maybe } 1986 multi_mode = !two_colon && !pattern ? m_unsettled : m_no; 1987 #endif 1983 1988 1984 1989 /* If we've already snapped deps, that means we're in an eval being … … 2049 2054 } 2050 2055 2056 #ifdef CONFIG_WITH_EXPLICIT_MULTITARGET 2057 /* Check for the explicit multitarget mode operators. For this to be 2058 identified as an excplicit multiple target rule, the first + or +| 2059 operator *must* appear between the first two files. If not found as 2060 the 2nd file or if found as the 1st file, the rule will be rejected 2061 as a potential multiple first target rule. For the subsequent files 2062 the operator is only required to switch between maybe and non-maybe 2063 mode: 2064 `primary + 2nd 3rd +| 4th-maybe + 5th-for-sure: deps; cmds' */ 2065 if (multi_mode != m_no && name[0] == '+' 2066 && (name[1] == '\0' || (name[1] == '|' && name[2] == '\0'))) 2067 { 2068 if (!prev_file) 2069 multi_mode = m_no; /* first */ 2070 else 2071 { 2072 if (multi_mode == m_unsettled) 2073 prev_file->multi_head = prev_file; 2074 multi_mode = name[1] == '\0' ? m_yes : m_yes_maybe; 2075 continue; 2076 } 2077 } 2078 else if (multi_mode == m_unsettled && prev_file) 2079 multi_mode = m_no; 2080 #endif 2081 2051 2082 /* If this is a static pattern rule: 2052 2083 `targets: target%pattern: dep%pattern; cmds', … … 2163 2194 f->updating = 1; 2164 2195 } 2196 2197 #ifdef CONFIG_WITH_EXPLICIT_MULTITARGET 2198 /* If this is an explicit multi target rule, add it to the 2199 target chain and set the multi_maybe flag according to 2200 the current mode. */ 2201 2202 if (multi_mode >= m_yes) 2203 { 2204 f->multi_maybe = multi_mode == m_yes_maybe; 2205 prev_file->multi_next = f; 2206 assert (prev_file->multi_head != 0); 2207 f->multi_head = prev_file->multi_head; 2208 } 2209 prev_file = f; 2210 #endif 2165 2211 } 2166 2212 else
Note:
See TracChangeset
for help on using the changeset viewer.