This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Part 3 of a big cleanup action based on the upcoming dist-4.0
[metaconfig.git] / U / modified / models.U
1 ?RCS: $Id: models.U,v 3.0.1.2 1997/02/28 16:13:17 ram Exp $
2 ?RCS:
3 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
4 ?RCS:
5 ?RCS: You may redistribute only under the terms of the Artistic Licence,
6 ?RCS: as specified in the README file that comes with the distribution.
7 ?RCS: You may reuse parts of this distribution only within the terms of
8 ?RCS: that same Artistic Licence; a copy of which may be found at the root
9 ?RCS: of the source tree for dist 3.0.
10 ?RCS:
11 ?RCS: $Log: models.U,v $
12 ?RCS: Revision 3.0.1.2  1997/02/28  16:13:17  ram
13 ?RCS: patch61: added ?F: metalint hint
14 ?RCS:
15 ?RCS: Revision 3.0.1.1  1993/08/25  14:02:39  ram
16 ?RCS: patch6: added default for large
17 ?RCS:
18 ?RCS: Revision 3.0  1993/08/18  12:09:17  ram
19 ?RCS: Baseline for dist 3.0 netwide release.
20 ?RCS:
21 ?MAKE:models split small medium large huge: test cat Myread sysman Oldconfig \
22         Loc contains rm
23 ?MAKE:  -pick add $@ %<
24 ?S:models:
25 ?S:     This variable contains the list of memory models supported by this
26 ?S:     system.  Possible component values are none, split, unsplit, small,
27 ?S:     medium, large, and huge.  The component values are space separated.
28 ?S:.
29 ?S:split:
30 ?S:     This variable contains a flag which will tell the C compiler and loader
31 ?S:     to produce a program that will run in separate I and D space, for those
32 ?S:     machines that support separation of instruction and data space.  It is
33 ?S:     up to the Makefile to use this.
34 ?S:.
35 ?S:small:
36 ?S:     This variable contains a flag which will tell the C compiler and loader
37 ?S:     to produce a program running with a small memory model.  It is up to
38 ?S:     the Makefile to use this.
39 ?S:.
40 ?S:medium:
41 ?S:     This variable contains a flag which will tell the C compiler and loader
42 ?S:     to produce a program running with a medium memory model.  If the
43 ?S:     medium model is not supported, contains the flag to produce large
44 ?S:     model programs.  It is up to the Makefile to use this.
45 ?S:.
46 ?S:large:
47 ?S:     This variable contains a flag which will tell the C compiler and loader
48 ?S:     to produce a program running with a large memory model.  It is up to
49 ?S:     the Makefile to use this.
50 ?S:.
51 ?S:huge:
52 ?S:     This variable contains a flag which will tell the C compiler and loader
53 ?S:     to produce a program running with a huge memory model.  If the
54 ?S:     huge model is not supported, contains the flag to produce large
55 ?S:     model programs.  It is up to the Makefile to use this.
56 ?S:.
57 ?T:unsplit tans modelcc
58 ?X: This really is a temporary file, but Metalint gets fooled :-(.  --AD.
59 ?X:?F:!pdp11
60 ?D:large=''
61 ?LINT:extern cc
62 : see what memory models we can support
63 case "$models" in
64 '')
65 ?X: We may not use Cppsym or we get a circular dependency through cc.
66 ?X: But this should work regardless of which cc we eventually use.
67         $cat >pdp11.c <<'EOP'
68 int main() {
69 #ifdef pdp11
70         exit(0);
71 #else
72         exit(1);
73 #endif
74 }
75 EOP
76 ?X: Run cc in a subshell in case they don't have a 'cc' command.
77 ?X: Presumably they do have gcc or something.
78         case "$cc" in
79         '') modelcc="$cc" ;;
80         *) modelcc="cc" ;;
81         esac
82         ( $modelcc -o pdp11 pdp11.c ) >/dev/null 2>&1
83         if $test -f pdp11 && ./pdp11 2>/dev/null; then
84                 dflt='unsplit split'
85         else
86                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
87                 case "$tans" in
88                 X) dflt='none';;
89                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
90                                 dflt='small'
91                         else
92                                 dflt=''
93                         fi
94                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
95                                 dflt="$dflt medium"
96                         fi
97                         if $test -d /lib/large || $test -d /usr/lib/large; then
98                                 dflt="$dflt large"
99                         fi
100                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
101                                 dflt="$dflt huge"
102                         fi
103                 esac
104         fi;;
105 *) dflt="$models";;
106 esac
107 $cat <<EOM
108
109 Some systems have different model sizes.  On most systems they are called
110 small, medium, large, and huge.  On the PDP11 they are called unsplit and
111 split.  If your system doesn't support different memory models, say "none".
112 If you wish to force everything to one memory model, say "none" here and
113 put the appropriate flags later when it asks you for other cc and ld flags.
114 Venix systems may wish to put "none" and let the compiler figure things out.
115 (In the following question multiple model names should be space separated.)
116
117 The default for most systems is "none".
118
119 EOM
120 rp="Which memory models are supported?"
121 . ./myread
122 models="$ans"
123
124 case "$models" in
125 none)
126         small=''
127         medium=''
128         large=''
129         huge=''
130         unsplit=''
131         split=''
132         ;;
133 *split)
134         case "$split" in
135         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
136                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
137                         dflt='-i'
138                 else
139                         dflt='none'
140                 fi;;
141         *) dflt="$split";;
142         esac
143         rp="What flag indicates separate I and D space?"
144         . ./myread
145         tans="$ans"
146         case "$tans" in
147         none) tans='';;
148         esac
149         split="$tans"
150         unsplit='';;
151 *large*|*small*|*medium*|*huge*)
152         case "$models" in
153         *large*)
154                 case "$large" in
155                 '') dflt='-Ml';;
156                 *) dflt="$large";;
157                 esac
158         rp="What flag indicates large model?"
159         . ./myread
160         tans="$ans"
161         case "$tans" in
162         none) tans='';
163         esac
164         large="$tans";;
165         *) large='';;
166         esac
167         case "$models" in
168         *huge*) case "$huge" in
169                 '') dflt='-Mh';;
170                 *) dflt="$huge";;
171                 esac
172                 rp="What flag indicates huge model?"
173                 . ./myread
174                 tans="$ans"
175                 case "$tans" in
176                 none) tans='';
177                 esac
178                 huge="$tans";;
179         *) huge="$large";;
180         esac
181         case "$models" in
182         *medium*) case "$medium" in
183                 '') dflt='-Mm';;
184                 *) dflt="$medium";;
185                 esac
186                 rp="What flag indicates medium model?"
187                 . ./myread
188                 tans="$ans"
189                 case "$tans" in
190                 none) tans='';
191                 esac
192                 medium="$tans";;
193         *) medium="$large";;
194         esac
195         case "$models" in
196         *small*) case "$small" in
197                 '') dflt='none';;
198                 *) dflt="$small";;
199                 esac
200                 rp="What flag indicates small model?"
201                 . ./myread
202                 tans="$ans"
203                 case "$tans" in
204                 none) tans='';
205                 esac
206                 small="$tans";;
207         *) small='';;
208         esac
209         ;;
210 *)
211         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
212         ;;
213 esac
214 $rm -f pdp11.* pdp11
215