1 | Configure Internals
|
---|
2 | ===================
|
---|
3 |
|
---|
4 | [ note: this file uses markdown for formatting ]
|
---|
5 |
|
---|
6 | Intro
|
---|
7 | -----
|
---|
8 |
|
---|
9 | This is a collection of notes that are hopefully of interest to those
|
---|
10 | who decide to dive into Configure and what it does. This is a living
|
---|
11 | document and anyone is encouraged to add to it and submit changes.
|
---|
12 | There's no claim for this document to be complete at any time, but it
|
---|
13 | will hopefully reach such a point in time.
|
---|
14 |
|
---|
15 |
|
---|
16 | ----------------------------------------------------------------------
|
---|
17 |
|
---|
18 | Parsing build.info files, processing conditions
|
---|
19 | -----------------------------------------------
|
---|
20 |
|
---|
21 | Processing conditions in build.info files is done with the help of a
|
---|
22 | condition stack that tell if a build.info should be processed or if it
|
---|
23 | should just be skipped over. The possible states of the stack top are
|
---|
24 | expressed in the following comment from Configure:
|
---|
25 |
|
---|
26 | # The top item of this stack has the following values
|
---|
27 | # -2 positive already run and we found ELSE (following ELSIF should fail)
|
---|
28 | # -1 positive already run (skip until ENDIF)
|
---|
29 | # 0 negatives so far (if we're at a condition, check it)
|
---|
30 | # 1 last was positive (don't skip lines until next ELSE, ELSIF or ENDIF)
|
---|
31 | # 2 positive ELSE (following ELSIF should fail)
|
---|
32 |
|
---|
33 | Ground rule is that non-condition lines are skipped over if the
|
---|
34 | stack top is > 0. Condition lines (IF, ELSIF, ELSE and ENDIF
|
---|
35 | statements) need to be processed either way to keep track of the skip
|
---|
36 | stack states, so they are a little more intricate.
|
---|
37 |
|
---|
38 | Instead of trying to describe in words, here are some example of what
|
---|
39 | the skip stack should look like after each line is processed:
|
---|
40 |
|
---|
41 | Example 1:
|
---|
42 |
|
---|
43 | | IF[1] | 1 | |
|
---|
44 | | ... whatever ... | | this line is processed |
|
---|
45 | | IF[1] | 1 1 | |
|
---|
46 | | ... whatever ... | | this line is processed |
|
---|
47 | | ELSIF[1] | 1 -1 | |
|
---|
48 | | ... whatever ... | | this line is skipped over |
|
---|
49 | | ELSE | 1 -2 | |
|
---|
50 | | ... whatever ... | | this line is skipped over |
|
---|
51 | | ENDIF | 1 | |
|
---|
52 | | ... whatever ... | | this line is processed |
|
---|
53 | | ELSIF[1] | -1 | |
|
---|
54 | | ... whatever ... | | this line is skipped over |
|
---|
55 | | IF[1] | -1 -1 | |
|
---|
56 | | ... whatever ... | | this line is skipped over |
|
---|
57 | | ELSIF[1] | -1 -1 | |
|
---|
58 | | ... whatever ... | | this line is skipped over |
|
---|
59 | | ELSE | -1 -2 | |
|
---|
60 | | ... whatever ... | | this line is skipped over |
|
---|
61 | | ENDIF | -1 | |
|
---|
62 | | ... whatever ... | | this line is skipped over |
|
---|
63 | | ENDIF | | |
|
---|
64 |
|
---|
65 | Example 2:
|
---|
66 |
|
---|
67 | | IF[0] | 0 | |
|
---|
68 | | ... whatever ... | | this line is skipped over |
|
---|
69 | | IF[1] | 0 -1 | |
|
---|
70 | | ... whatever ... | | this line is skipped over |
|
---|
71 | | ELSIF[1] | 0 -1 | |
|
---|
72 | | ... whatever ... | | this line is skipped over |
|
---|
73 | | ELSE | 0 -2 | |
|
---|
74 | | ... whatever ... | | this line is skipped over |
|
---|
75 | | ENDIF | 0 | |
|
---|
76 | | ... whatever ... | | this line is skipped over |
|
---|
77 | | ELSIF[1] | 1 | |
|
---|
78 | | ... whatever ... | | this line is processed |
|
---|
79 | | IF[1] | 1 1 | |
|
---|
80 | | ... whatever ... | | this line is processed |
|
---|
81 | | ELSIF[1] | 1 -1 | |
|
---|
82 | | ... whatever ... | | this line is skipped over |
|
---|
83 | | ELSE | 1 -2 | |
|
---|
84 | | ... whatever ... | | this line is skipped over |
|
---|
85 | | ENDIF | 1 | |
|
---|
86 | | ... whatever ... | | this line is processed |
|
---|
87 | | ENDIF | | |
|
---|
88 |
|
---|
89 | Example 3:
|
---|
90 |
|
---|
91 | | IF[0] | 0 | |
|
---|
92 | | ... whatever ... | | this line is skipped over |
|
---|
93 | | IF[0] | 0 -1 | |
|
---|
94 | | ... whatever ... | | this line is skipped over |
|
---|
95 | | ELSIF[1] | 0 -1 | |
|
---|
96 | | ... whatever ... | | this line is skipped over |
|
---|
97 | | ELSE | 0 -2 | |
|
---|
98 | | ... whatever ... | | this line is skipped over |
|
---|
99 | | ENDIF | 0 | |
|
---|
100 | | ... whatever ... | | this line is skipped over |
|
---|
101 | | ELSIF[1] | 1 | |
|
---|
102 | | ... whatever ... | | this line is processed |
|
---|
103 | | IF[0] | 1 0 | |
|
---|
104 | | ... whatever ... | | this line is skipped over |
|
---|
105 | | ELSIF[1] | 1 1 | |
|
---|
106 | | ... whatever ... | | this line is processed |
|
---|
107 | | ELSE | 1 -2 | |
|
---|
108 | | ... whatever ... | | this line is skipped over |
|
---|
109 | | ENDIF | 1 | |
|
---|
110 | | ... whatever ... | | this line is processed |
|
---|
111 | | ENDIF | | |
|
---|
112 |
|
---|
113 | Example 4:
|
---|
114 |
|
---|
115 | | IF[0] | 0 | |
|
---|
116 | | ... whatever ... | | this line is skipped over |
|
---|
117 | | IF[0] | 0 -1 | |
|
---|
118 | | ... whatever ... | | this line is skipped over |
|
---|
119 | | ELSIF[0] | 0 -1 | |
|
---|
120 | | ... whatever ... | | this line is skipped over |
|
---|
121 | | ELSE | 0 -2 | |
|
---|
122 | | ... whatever ... | | this line is skipped over |
|
---|
123 | | ENDIF | 0 | |
|
---|
124 | | ... whatever ... | | this line is skipped over |
|
---|
125 | | ELSIF[1] | 1 | |
|
---|
126 | | ... whatever ... | | this line is processed |
|
---|
127 | | IF[0] | 1 0 | |
|
---|
128 | | ... whatever ... | | this line is skipped over |
|
---|
129 | | ELSIF[0] | 1 0 | |
|
---|
130 | | ... whatever ... | | this line is skipped over |
|
---|
131 | | ELSE | 1 2 | |
|
---|
132 | | ... whatever ... | | this line is processed |
|
---|
133 | | ENDIF | 1 | |
|
---|
134 | | ... whatever ... | | this line is processed |
|
---|
135 | | ENDIF | | |
|
---|
136 |
|
---|