b9f1bcd4765b406997c43defc7ca0cfbda296f9f
[p5sagit/p5-mst-13.2.git] / vms / myconfig.com
1 $! #!/bin/sh  ---> MYCONFIG.COM
2
3 $! # This script is designed to provide a handy summary of the configuration
4 $! # information being used to build perl. This is especially useful if you
5 $! # are requesting help from comp.lang.perl on usenet or via mail.
6
7 $! DCL-ified by Peter Prymmer <pvhp@lns62.lns.cornell.edu> 22-DEC-1995
8 $! DCL usage (choose one):
9 $!      @MYCONFIG                                                       !or
10 $!      @MYCONFIG/OUTPUT=MYCONFIG.OUT                                   !or
11 $!      @MYCONFIG [node::][which$disk:][[dir.subdir]]CONFIG.SH          !or
12 $!      @MYCONFIG/OUTPUT=MYCONFIG.OUT [node::][w$disk:][[dir]]CONFIG.SH
13 $!  version 2:
14 $! Incorporates Charles Bailey's ideas about bootstrapping system info - 
15 $! myconfig.com is now callable as a "myconfig" target in your maker and
16 $! may even work if miniperl.exe and config.sh files fail to be made.
17 $! Thus if: 
18 $!      MMK/DESCRIP=[.VMS]                             !(or MMS or MAKE)
19 $! does not work then try:
20 $!      MMK/DESCRIP=[.VMS]/OUTPUT=MYPERLBUILD.PROBLEM  !(or MMS or MAKE)
21 $! Then discuss the MYPERLBUILD.PROBLEM file with a local expert.
22 $! If that still does not work then try:
23 $!      MMK/DESCRIP=[.VMS]/OUT=MYNONFIG.OUT MYCONFIG   !(or MMS or MAKE)
24 $! send output (MYNONFIG.OUT) to an outside expert and ask politely for help.
25
26 $ ECHO = "WRITE SYS$OUTPUT " 
27 $ RATHER_LONG_DEFAULT_DIRECTORY_NAME = F$ENVIRONMENT("DEFAULT")
28
29 $ if (p1.nes."").and.(p2.eqs."")
30 $   then RATHER_LONG_FILENAME_TO_FIND = p1 !no typo-checking (experts only)
31 $   else RATHER_LONG_FILENAME_TO_FIND = "CONFIG.SH"
32 $ endif
33 $Research:
34 $ RATHER_LONG_FILENAME_SEARCH = F$Search(RATHER_LONG_FILENAME_TO_FIND)
35 $ if RATHER_LONG_FILENAME_SEARCH.EQS."" 
36 $   then
37 $     if f$parse(f$environment("DEFAULT"),,,"DIRECTORY",).NES."[000000]"
38 $       then 
39 $         set default [-]
40 $         goto Research
41 $       else
42 $         ECHO "Can't find the perl config.sh file produced by Configure"
43 $         set default 'RATHER_LONG_DEFAULT_DIRECTORY_NAME'
44 $!         exit 3
45 $         goto cannot_find_config_sh
46 $     endif
47 $ endif
48
49 $ open/read RATHER_LONG_CONFIG_FILE_HANDLE 'RATHER_LONG_FILENAME_SEARCH' 
50 $Loop:
51 $  read/end_of_file = Done RATHER_LONG_CONFIG_FILE_HANDLE  line
52 $  name = f$extract(0,f$locate("=",line),line)
53 $  start = f$locate("'",line)+1
54 $  stop = f$locate("'",line)
55 $  value = f$extract(start,stop-start,line)
56 $  if (f$locate("#",name).eqs.f$length(name)).and. -
57       (name.nes."").and. -
58       (name.nes."'") -               !bug in genconfig.pl (vms) for osvers='' ?
59         then $$'name' = "'" + value  !$ not necessary but looks more sh-ish
60 $ goto Loop
61
62 $Done:
63 $ close RATHER_LONG_CONFIG_FILE_HANDLE 
64 $ goto spit_it_out
65
66 $cannot_find_config_sh:
67 $! these parameters are assumed to be passed from make/mm[s|k]:
68 $!   p1=$(CC),    p2=$(CFLAGS), p3=$(LINKFLAGS), 
69 $!   p4=$(LIBS1), p5=$(LIBS2),  p6=$(SOCKLIB),
70 $!   p7=$(EXT),   p8=$(DBG)
71 $! so assign to appropriate $var:
72 $ $cc = "'"+p1+"'"            ! p1=$(CC) from make
73 $ $ccflags = "'"+p2+"'"       ! p2=$(CFLAGS) from make
74 $ $ldflags = "'"+p3+"'"       ! p3=$(LINKFLAGS) from make 
75 $ $libs = "'"+p4+" "+p5+" "+p6+"'" ! p4$(LIBS1),p5$(LIBS2),p6$(SOCKLIB)frm make
76 $ $staticexts = "'"+p7+"'"         ! p7=$(EXT) from make
77
78 $!  hard-coded stuff (for now): 
79 $ $cppflags = "'"+"'"  !(vestigal)
80 $ $optimize = "'"+"'"  !descrip.mms has /Optimize=2 in $(XTRACCFLAGS)
81
82 $!  following assigns done via `dcl` calls in genconfig.pl anyway:
83 $ $osname = "'"+f$edit(f$getsyi("NODE_SWTYPE"),"COLLAPSE") !genconfig.pl has "osname='VMS'"
84 $ $osvers = f$edit(f$getsyi("VERSION")-"V","COLLAPSE")
85 $ if f$getsyi("HW_MODEL").GT.1024
86 $   then $$archname = "'VMS_AXP'"  !string from descrip.mms vmsperl 12-21-95
87 $   else $$archname = "'VMS_VAX'"  !string from descrip.mms vmsperl 12-21-95
88 $ endif
89 $ $myname = ""
90 $  if $myname.eqs."" then $$myname = f$trnlnm("ARPANET_HOST_NAME")
91 $  if $myname.eqs."" then $$myname = f$trnlnm("INTERNET_HOST_NAME")
92 $  if $myname.eqs."" then $$myname = f$trnlnm("MULTINET_HOST_NAME")
93 $  if $myname.eqs."" then $$myname = f$trnlnm("UCX$INET_HOST_NAME")
94 $  if $myname.eqs."" then $$myname = f$trnlnm("TCPWARE_DOMAINNAME")
95 $  if $myname.eqs."" then $$myname = f$trnlnm("NEWS_ADDRESS")
96 $  if $myname.eqs."" then $$myname = f$trnlnm("SYS$NODE")
97 $!  Is this same as genconfig.pl ? (spacing/order unknown):
98 $ $myuname=$osname+" "+$myname+" "+$osvers+" "+F$GetSyi("HW_NAME")+"'"
99 $ $osname = $osname+"'"
100 $ $osvers = "'"+$osvers+"'"
101
102 $look_for_patchlevel_h:
103 $!
104 $ RATHER_LONG_FILENAME_TO_FIND = "PATCHLEVEL.H"
105 $Research_patchlevel_h:
106 $ RATHER_LONG_FILENAME_SEARCH = F$Search(RATHER_LONG_FILENAME_TO_FIND)
107 $ if RATHER_LONG_FILENAME_SEARCH.EQS."" 
108 $   then
109 $     if f$parse(f$environment("DEFAULT"),,,"DIRECTORY",).NES."[000000]"
110 $       then 
111 $         set default [-]
112 $         goto Research_patchlevel_h
113 $       else
114 $         ECHO "Can't find the header file patchlevel.h used to make config.sh"
115 $         set default 'RATHER_LONG_DEFAULT_DIRECTORY_NAME'
116 $         goto look_for_genconfig.pl
117 $     endif
118 $ endif
119
120 $ open/read RATHER_LONG_CONFIG_FILE_HANDLE 'RATHER_LONG_FILENAME_SEARCH' 
121 $read_patchlevel_h:
122 $ read/end_of_file = patchlevel_h_Done RATHER_LONG_CONFIG_FILE_HANDLE  line
123 $ if f$locate("PATCHLEVEL",line).ne.f$length(line)
124 $   then
125 $     line = f$edit(line,"TRIM,COMPRESS")
126 $     $PATCHLEVEL = f$element(2," ",line)
127 $     goto patchlevel_h_Done
128 $ endif
129 $ goto read_patchlevel_h
130
131 $patchlevel_h_Done:
132 $ close RATHER_LONG_CONFIG_FILE_HANDLE 
133 $ if $PATCHLEVEL.eqs.""
134 $   then
135 $     echo "warning: PATCHLEVEL was not found in ''RATHER_LONG_FILENAME_TO_FIND':" 
136 $ endif
137
138 $look_for_genconfig_pl:
139 $!
140 $ if f$search("VMS.DIR").nes."" then set default [.vms]
141 $ RATHER_LONG_FILENAME_TO_FIND = "GENCONFIG.PL"
142 $ genconfig_pl_dir = ""
143 $Research_genconfig_pl:
144 $ RATHER_LONG_FILENAME_SEARCH = F$Search(RATHER_LONG_FILENAME_TO_FIND)
145 $ if RATHER_LONG_FILENAME_SEARCH.EQS."" 
146 $   then
147 $     if f$parse(f$environment("DEFAULT"),,,"DIRECTORY",).NES."[000000]"
148 $       then 
149 $         set default [-]
150 $         goto Research_genconfig_pl
151 $       else
152 $         ECHO "Can't find the perl genconfig.pl used to make config.sh"
153 $         set default 'RATHER_LONG_DEFAULT_DIRECTORY_NAME'
154 $         goto look_for_config_vms
155 $     endif
156 $   else    !genconfig.pl has been found
157 $     genconfig_pl_dir = f$parse(f$environment("DEFAULT"),,,"DIRECTORY",)
158 $ endif
159
160 $ cnfg_keys = "package/hintfile/ld/dlext/d_stdstdio/"
161 $ cnfg_keys = cnfg_keys + "usevfork/usemymalloc/so/libpth/"
162 $ cnfg_keys = cnfg_keys + "dlsrc/cccdlflags/ccdlflags/lddlflags/"
163
164 $ cnfg_vars = "$package/$hint/$ld/$dlext/$d_stdstdio/"
165 $ cnfg_vars = cnfg_vars + "$usevfork/$usemymalloc/$so/$libpth/"
166 $ cnfg_vars = cnfg_vars + "$dlsrc/$cccdlflags/$ccdlflags/$lddlflags/" 
167
168 $ open/read RATHER_LONG_CONFIG_FILE_HANDLE 'RATHER_LONG_FILENAME_SEARCH' 
169 $read_genconfig_pl:
170 $ read/end_of_file = Genconfig_pl_Done RATHER_LONG_CONFIG_FILE_HANDLE  line
171 $ if f$locate("=",line).ne.f$length(line)   !then may be an assigment
172 $   then
173 $     name = f$edit( f$extract(0,f$locate("=",line),line), "COLLAPSE")
174 $     num = 0
175 $key_genconfig_pl:
176 $     key = f$element(num,"/",cnfg_keys)
177 $     if (key .nes. "/").and.(key .nes. "") !not end of cnfg_keys
178 $       then
179 $         if key.eqs.name  !then is key
180 $           then
181 $             start = f$locate("=",line)+1
182 $             stop = f$length(line)
183 $             value = f$extract(start,stop-start,line)
184 $             var = f$element(num,"/",cnfg_vars)
185 $             'var' = value  
186 $             cnfg_keys = cnfg_keys - ("''name'/" ) !trim to shorten future matches
187 $             cnfg_vars = cnfg_vars - ("''var'/" ) !trim to shorten future matches
188 $         endif
189 $         num = num + 1
190 $         goto key_genconfig_pl
191 $     endif ! not end of cnfg_keys
192 $ endif ! then may be an assigment
193 $ goto read_genconfig_pl
194
195 $Genconfig_pl_Done:
196 $ close RATHER_LONG_CONFIG_FILE_HANDLE 
197 $ if cnfg_vars.nes.""
198 $   then
199 $     echo "warning: the following variables were not found in ''RATHER_LONG_FILENAME_TO_FIND':" 
200 $     echo "''cnfg_vars'"
201 $ endif
202
203 $ if (p8.nes."").and.($ld.nes."") then $ld = $ld + " DBG='"+p8+"'" 
204
205 $look_for_config_vms:
206 $ RATHER_LONG_FILENAME_TO_FIND = "''genconfig_pl_dir'CONFIG.VMS"
207
208 $Research_config_vms:
209 $ RATHER_LONG_FILENAME_SEARCH = F$Search(RATHER_LONG_FILENAME_TO_FIND)
210 $ if RATHER_LONG_FILENAME_SEARCH.EQS."" 
211 $   then
212 $     if f$parse(f$environment("DEFAULT"),,,"DIRECTORY",).NES."[000000]"
213 $       then 
214 $         set default [-]
215 $         goto Research_config_vms
216 $       else
217 $         ECHO "Can't find the perl config.vms used to make config.sh"
218 $         set default 'RATHER_LONG_DEFAULT_DIRECTORY_NAME'
219 $         stop
220 $         exit 3 
221 $     endif
222 $ endif
223
224 $ cnfg_keys = "MEM_ALIGNBYTES/CASTNEGFLOAT/CASTFLAGS/RANDBITS/STDCHAR/"
225 $ cnfg_keys = cnfg_keys+"CASTI32/INTSIZE/VOIDFLAGS/DLSYM_NEEDS_UNDERSCORE"
226
227 $ cnfg_vars = "$alignbytes/$d_castneg/$castflags/$randbits/$stdchar/"
228 $ cnfg_vars = cnfg_vars+"$d_casti32/$intsize/$voidflags/$d_dlsymun/"
229
230 $ open/read RATHER_LONG_CONFIG_FILE_HANDLE 'RATHER_LONG_FILENAME_SEARCH' 
231 $read_config_vms:
232 $ read/end_of_file = config_vms_Done RATHER_LONG_CONFIG_FILE_HANDLE  line
233 $! look for "#define" or "#undef"
234 $ if (f$length(line).ne.0).and.-
235    ((f$locate("#define",line).eq.0).or.(f$locate("#undef",line).eq.0)) 
236 $   then
237 $     line = f$edit(line,"COMPRESS, TRIM")
238 $     name = f$element(1," ",line) !macro
239 $     num = 0
240 $key_config_vms:
241 $     key = f$element(num,"/",cnfg_keys)
242 $     if (key .nes. "/").and.(key .nes. "") !not end of cnfg_keys
243 $       then
244 $         if key.eqs.name  !then is key
245 $           then
246 $             var = f$element(num,"/",cnfg_vars)
247 $             cnfg_keys = cnfg_keys - ("''name'/" ) !trim to shorten future matches
248 $             cnfg_vars = cnfg_vars - ("''var'/" ) !trim to shorten future matches
249 $             if (f$locate("#undef",line).eq.0)
250 $               then
251 $                 'var' = "'undef'"
252 $               else                  !is a #define
253 $strip_comment:
254 $                 start = f$locate("/*",line)
255 $                 if start.ne.f$length(line) !comment started
256 $                   then
257 $                     if f$locate("*/",line).ne.f$length(line) !comment stopped
258 $                       then stop = f$locate("*/",line)+2
259 $                       else stop = f$locate("*/",line)
260 $                     endif
261 $                     comment = f$extract(start,stop-start,line)
262 $                     line = line - comment
263 $                     goto strip_comment
264 $                 endif
265 $                 line = f$edit(line,"TRIM")
266 $                 start = f$locate(key,line)+f$length(key)
267 $                 stop = f$length(line)
268 $                 value = f$edit(f$extract(start,stop-start,line),"TRIM")
269 $                 if (value.nes."") 
270 $                   then 
271 $                     'var' = "'"+value+"'"
272 $                   else 
273 $                     'var' = "'define'"
274 $                 endif
275 $             endif            !#define
276 $         endif                ! is key of interest
277 $         num = num + 1
278 $         goto key_config_vms
279 $     endif ! not end of cnfg_keys
280 $ endif ! then may be #define or #undef of interest
281 $ goto read_config_vms
282
283 $config_vms_Done:
284 $ close RATHER_LONG_CONFIG_FILE_HANDLE 
285 $ if cnfg_vars.nes.""
286 $   then
287 $     echo "warning: the following variables were not found in ''RATHER_LONG_FILENAME_TO_FIND':" 
288 $     echo "''cnfg_vars'"
289 $ endif
290
291 $spit_it_out:
292 $! $spitshell = ECHO !<<!GROK!THIS! 
293 $ ECHO " "
294 $ ECHO "Summary of my ''$package' (patchlevel ''$PATCHLEVEL') configuration:"
295 $ ECHO "  Platform:"
296 $ ECHO "    osname=''$osname', osver=''$osvers', archname=''$archname'"
297 $ ECHO "     uname=''$myuname'"                             !->d_has_uname?
298 $ ECHO "     hint=''$hint'"                                 !->hintfile?
299 $ ECHO "     static exts=''$staticexts'"                    ! added for VMS
300 $ ECHO "   Compiler:"
301 $ ECHO "     cc=''$cc', optimize=''$optimize', ld=''$ld'"
302 $ ECHO "     cppflags=''$cppflags'"
303 $ ECHO "     ccflags =''$ccflags'"                          !->vms_cc_type?
304 $ ECHO "     ldflags =''$ldflags'"
305 $ ECHO "     stdchar=''$stdchar', d_stdstdio=''$d_stdstdio', usevfork=''$usevfork'"
306 $ ECHO "     voidflags=''$voidflags', castflags=''$castflags', d_casti32=''$d_casti32', d_castneg=''$d_castneg'"
307 $ ECHO "     intsize=''$intsize', alignbytes=''$alignbytes', usemymalloc=''$usemymalloc', randbits=''$randbits'"
308 $ ECHO "   Libraries:"
309 $ ECHO "     so=''$so'"
310 $ ECHO "     libpth=''$libpth'"
311 $ ECHO "     libs=''$libs'"
312 $ ECHO "     libc=''$libc'"
313 $ ECHO "   Dynamic Linking:"
314 $ ECHO "     dlsrc=''$dlsrc', dlext=''$dlext', d_dlsymun=''$d_dlsymun'"
315 $ ECHO "     cccdlflags=''$cccdlflags', ccdlflags=''$ccdlflags', lddlflags=''$lddlflags'"
316 $ ECHO " " 
317 $ !GROK!THIS!
318 $ SET DEFAULT 'RATHER_LONG_DEFAULT_DIRECTORY_NAME'
319 $ EXIT