-
Notifications
You must be signed in to change notification settings - Fork 5
/
panoptic.ksh
320 lines (271 loc) · 10 KB
/
panoptic.ksh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
#
# ======================================================================== v1.0/0a157
#
# This software is part of the AT&T Ningaui distribution
#
# Copyright (c) 2001-2009 by AT&T Intellectual Property. All rights reserved
# AT&T and the AT&T logo are trademarks of AT&T Intellectual Property.
#
# Ningaui software is licensed under the Common Public
# License, Version 1.0 by AT&T Intellectual Property.
#
# A copy of the License is available at
# http://www.opensource.org/licenses/cpl1.0.txt
#
# Information and Software Systems Research
# AT&T Labs
# Florham Park, NJ
#
# Send questions, comments via email to ningaui_support@research.att.com.
#
#
# ======================================================================== 0a229
# setup specifics base on O/S type. we generate a file into the current directory that
# panoptic.mk can include.
function ensure_dirs
{
for x in "$@"
do
if [[ ! -d $x ]]
then
mkdir -p $x
fi
done
}
# -----------------------------------------------------------------------------
# These variables can/should be set by the code generated by this script.
# There may be others that are specific only to a particular platform; these will
# be documented in the code.
# CC: The command name of the c compiler.
# POMK_NEW_YACC: set to 1 to use the new version of yacc/lex (flex)
# lex: set to the command that invokes the lex parser (flex)
# gmake: set to the installed name of gmake (make on some systems)
# CFLAGS: compiler flags
# other_libs: any -l<libname> strings that should be added by default to
# compile commands (-lm on sun for instance)
# JAVAC_FLAGS: flags passed on the javac command line
# LD_LIBRARY_PATH: obvious
# GLMK_NEED_ASTH: The headers that should be coppied from contrib/kpv that
# are usually found in ast (ast_common.h in windows for example)
# last_ref: The set of library references that should be placed as the last
# set on a compile line. Typically socket libs added for environments
# like the sun.
# -----------------------------------------------------------------------------
echo "# NOTE: This file is generated by panoptic.ksh to be read by panoptic.mk with each invocation of mk"
echo "# Any changes made to this file will be scratched with the next invocation of mk"
if (( ${GLMK_VERBOSE:-0} > 0 ))
then
echo "panoptic.ksh running" >/dev/fd/2
fi
# bloody sun has a different flavour with different options. Yacc/lex rule in panoptic.mk uses on this var
if yacc --version >/dev/null 2>&1
then
echo "POMK_NEW_YACC = 1"
else
echo "POMK_NEW_YACC = 0"
fi
if flex --version >/dev/null 2>&1
then
echo "lex=flex"
else
echo "lex=lex"
fi
ensure_dirs $NG_SRC/.bin $NG_SRC/include/copybooks $NG_SRC/include/contrib $NG_SRC/stlib $NG_SRC/manuals
# bloody sun/sgi which returns 0 even if not found, so we roll our own (we'd use whence but this allows us to build with bash)
gmake=make
for x in ${PATH//:/ }
do
if [[ -e $x/gmake ]]
then
gmake=gmake
break
fi
done
echo "gmake=$gmake"
#if [[ -n $AST ]] # we are using ast, must add to IFLAGS
#then
# echo "IFLAGS = $IFLAGS -I$AST/include/ast"
#fi
# build default ld_library_path; echo'd out at end of O/S case
def_ld_lib=".:$NG_SRC/stlib"
ptlib="-lpthread" # pthread lib should be in -lpthread, but at least one flavour of FreeBSD its not there
if [[ -n GLMK_AST ]] # only if we are using the ast lib -- dont need otherwise
then
iconv="-liconv" # linux seems not to need this and we will clear the string if it is linux
if [[ -d $GLMK_AST/lib ]]
then
def_ld_lib="$def_ld_lib:$GLMK_AST/lib"
fi
fi
if [[ -d /usr/local/lib ]]
then
def_ld_lib="$def_ld_lib:/usr/local/lib" # bsd puts iconv here
dash_l_list="$dash_l_list-L/usr/local/lib " # must have as on some systems it is not searched automatically
fi
# issues with whence on some sun flavours -- dont use whence
uname_cmd=$(which uname) # ksh has one built if we can find a binary, we want to use that
if [[ -z $uname_cmd ]]
then
if [[ -x /bin/uname ]]
then
uname_cmd=/bin/uname
else
uname_cmd=uname # bite the big one and let it go genericly
fi
fi
proc_type="$( $uname_cmd -p )"
sys_type="$( $uname_cmd -s )"
vinfo="$($uname_cmd -a | awk ' { split( $3, a, "." ); printf( "-DOS_MAJVER=%d -DOS_MINVER=%d\n", a[1]+0, a[2]+0); }')"
echo "# [INFO] proc_type=$proc_type"
echo "# [INFO] sys_type=$sys_type"
# default CFLAGS. added to based on OS type AND based on arch, then written out at end
CFLAGS='$gflag -O -D_USE_LARGEFILES -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -D_LARGEFILE_SOURCE=1'" $vinfo" # base flags, dont expand $gflag
case $sys_type in
Linux)
echo '# ----------- Linux ----------------'
CFLAGS="$CFLAGS -DOS_LINUX"
if [[ $proc_type = *x86_64* ]]
then
echo "other_libs = -lm"
fi
echo 'JAVAC_FLAGS = --multi'
iconv=""
;;
FreeBSD)
echo '# ----------- BSD ----------------'
CFLAGS="$CFLAGS -DOS_FREEBSD"
echo 'JAVAC_FLAGS = --multi'
echo 'LDFLAGS=-lm'
for x in /usr/lib/libc_r:-lc_r /usr/local/lib/libc_r:-lc_r # 5.2 quirk
do
if [[ -f ${x%%:*}.a ]]
then
ptlib="${x##*:}"
break
fi
done
;;
Darwin)
echo '# ----------- Darwin ----------------'
echo 'libflag = lib'
echo 'pthreadlib = -lc_r'
#/* the -Xlinker -m ld option causes multiply defined functions to be warnings rather than errors */
CFLAGS="$CFLAGS -DOS_DARWIN" # used to be OS_MACPPC, but that is now set only if powerpc arch is noticed
if (( ${GLMK_BIND_AT_LOAD:-0} > 0 ))
then
echo 'LDFLAGS = -bind_at_load'
else
echo 'LDFLAGS ='
fi
echo 'pthreadlib = -lpthread'
echo 'gmake = make'
;;
IRIX*)
echo '# ----------- Irix ----------------'
echo 'AST_LIB = -L$AST/lib -last'
#/* 3201 and 1152 are var assigned/not used, and parm not referenced; 1110 is unreachable statement */
#/*CCFLAGS = -O -g3 -DOS_IRIX -fullwarn -w2 -woff 1171,1223,1110,3201,1552,1116,1196,1498,1174,1506 -OPT:Olimit=11000*/
# linker warnings turned off:
# 84 - lib not used to resolve anything
# 85 - function in liba trumpped same function in lib b
# 107 - parameters declared for function in liba dont match parms declared for function in lib b
CFLAGS="-O -g -DOS_IRIX -Wl,-LD_MSG:off=84-85:off=107" # complete override of defaults for Irix
echo 'LDFLAGS= -Wl,-woff,85'
echo 'LDLIBRARIES = $ningaui_libs -last '
echo 'lgen_ref=-lgen' # must be specifically referenced for things like basename (repmgr)
;;
SunOS)
echo '# ----------- SunOS ----------------'
# _reentrant needed to get *_r() prototypes
CFLAGS="$CFLAGS -DOS_SOLARIS -D_REENTRANT"
if ls /usr/lib/libintl* >/dev/null 2>&1
then
echo 'SYS_SOCK_LIB = -lsocket -lnsl -lintl' # some sun nodes seem to not have this library
else
echo 'SYS_SOCK_LIB = -lsocket -lnsl'
fi
echo 'SYS_SOCK_LIB = -lsocket -lnsl -lintl' # libs that must be expicitly referenced on this system
echo 'SYS_LIB = -lrt -lm' # bloody sun needs explicit includes for system things
gcc_dir=/opt/sfw/bin # where we expect to find gcc
if [[ -z $GLMK_CC ]] # if we can find gcc we want gcc, else we fall back to suns implementation of cc
then
if [[ -f $gcc_dir/gcc ]]
then
echo 'CC = gcc'
else
echo 'CC = cc'
fi
fi
# must have some/all of these to find make, cc and gcc
for x in /opt/SUNWspro/bin /usr/ccs/bin $gcc_dir /usr/lib
do
if [[ -d $x ]]
then
PATH="$PATH:$x"
fi
done
echo "PATH = $PATH"
echo 'last_ref = $last_ref $SYS_SOCK_LIB'
echo 'LFLAGS = $LFLAGS $SYS_SOCK_LIB'
;;
CYGWIN*)
CFLAGS="$CFLAGS -DOS_CYGWIN"
echo "GLMK_NEED_ASTH=ast_common.h"
;;
*)
;;
esac
echo "lib_pthread_ref = $ptlib"
if [[ -n $iconv ]]
then
echo "ICONV = $iconv"
fi
# now anything that is specific to the type of processor, but independant of the O/S
case $proc_type in
*x86_64*|amd64)
CFLAGS="$CFLAGS -DCPU_X86_64" # opteron or amd's 64bit look-alike
;;
*386*)
CFLAGS="$CFLAGS -DCPU_386"
;;
*86pc*) # bloody sun has to return something different
CFLAGS="$CFLAGS -DCPU_86PC -DCPU_386"
;;
*686*)
CFLAGS="$CFLAGS -DCPU_386 -DCPU_686"
;;
*powerpc*)
CFLAGS="$CFLAGS -DCPU_PPC -DOS_MACPPC" # MACPPC is oldschool, they should be changed to CPU_PPC
;;
ppc64)
CFLAGS="$CFLAGS -DCPU_PPC" # yellowdog reports this way; others may too
;;
*)
;;
esac
echo "LD_LIBRARY_PATH = $def_ld_lib"
echo "DYLD_LIBRARY_PATH = $def_ld_lib" # only needed on darwin, but doesnt hurt to put out on all
echo "CFLAGS = $CFLAGS $dash_l_list"
if (( ${GLMK_VERBOSE:-0} > 0 ))
then
echo "panoptic.ksh finished" >/dev/fd/2
fi
exit 0
# mods:
# 06 Aug 2005 (sd) : added _REENTRANT to cflags for sun.
# 05 Oct 2005 (sd) : Added lead comment to the file generated to
indicate that it is a generated file.
# 06 Jan 2006 (sd) : Had to force SOCK_LIB to the end of last_ref.
# 16 Jan 2006 (sd) : Added lgen_ref var if Irix -- needed by repmgr
# 15 Feb 2006 (sd) : cpp needed by cuscus is hidden in /usr/lib on the sun; erk.
# 21 Feb 2006 (sd) : fixed the /usr/lib reference so that it always is set.
# 29 Aug 2006 (sd) : Added better lib pthread stuff.
# 07 Jun 2007 (sd) : Changes to support Suse 10.x reporting 686.
# 26 Nov 2007 (sd) : Added support for amd 64 bit processor.
# 30 Nov 2007 (sd) : Added /usr/local/lib to ld library path.
# 26 Mar 2008 (sd) : Changed path for sun to switch to using gcc rather than sun licenced cc.
# 01 Apr 2008 (sd) : Corrected as switch to gcc broke on i386 sun nodes.
# 15 Apr 2008 (sd) : Added even more junk to suppor the ever differing sun environment.
# 21 Jun 2008 (sd) : Added ppc catch to pickup ppc yellowdog.
# 09 Mar 2009 (sd) : Changed whence to which as newest sun node was having issues.
# 24 Mar 2009 (sd) : We now set OS_MINVER and OS_MAJVER based on thrid token of uname -a output