This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
rm_try makes exe_exr redundant
[metaconfig.git] / U / modified / d_union_semun.U
CommitLineData
959f3c4c
JH
1?RCS: $Id: d_union_semun.U,v $
2?RCS:
3?RCS: Copyright (c) 1998 Andy Dougherty
4?RCS:
5?RCS: You may distribute under the terms of either the GNU General Public
6?RCS: License or the Artistic License, as specified in the README file.
7?RCS:
8?RCS: $Log: d_union_semun.U,v $
9?RCS:
0f00356b 10?MAKE:d_union_semun d_semctl_semun d_semctl_semid_ds: Compile Setvar Myread run \
2cb64bf6 11 cat rm_try d_sem
959f3c4c
JH
12?MAKE: -pick add $@ %<
13?S:d_union_semun:
14?S: This variable conditionally defines HAS_UNION_SEMUN if the
15?S: union semun is defined by including <sys/sem.h>.
16?S:.
17?S:d_semctl_semun:
18?S: This variable conditionally defines USE_SEMCTL_SEMUN, which
19?S: indicates that union semun is to be used for semctl IPC_STAT.
20?S:.
21?S:d_semctl_semid_ds:
22?S: This variable conditionally defines USE_SEMCTL_SEMID_DS, which
23?S: indicates that struct semid_ds * is to be used for semctl IPC_STAT.
24?S:.
25?C:HAS_UNION_SEMUN:
26?C: This symbol, if defined, indicates that the union semun is
27?C: defined by including <sys/sem.h>. If not, the user code
28?C: probably needs to define it as:
29?C: union semun {
30?C: int val;
31?C: struct semid_ds *buf;
32?C: unsigned short *array;
33?C: }
34?C:.
35?C:USE_SEMCTL_SEMUN:
36?C: This symbol, if defined, indicates that union semun is
37?C: used for semctl IPC_STAT.
38?C:.
39?C:USE_SEMCTL_SEMID_DS:
40?C: This symbol, if defined, indicates that struct semid_ds * is
41?C: used for semctl IPC_STAT.
42?C:.
43?H:#$d_union_semun HAS_UNION_SEMUN /**/
44?H:#$d_semctl_semun USE_SEMCTL_SEMUN /**/
45?H:#$d_semctl_semid_ds USE_SEMCTL_SEMID_DS /**/
46?H:.
47?T:xxx also
959f3c4c
JH
48?LINT: set d_union_semun d_semctl_semun d_semctl_semid_ds
49: see whether sys/sem.h defines union semun
50echo " "
51$cat > try.c <<'END'
52#include <sys/types.h>
53#include <sys/ipc.h>
54#include <sys/sem.h>
55int main () { union semun semun; semun.buf = 0; }
56END
57set try
58if eval $compile; then
59 echo "You have union semun in <sys/sem.h>." >&4
60 val="$define"
61else
62 echo "You do not have union semun in <sys/sem.h>." >&4
63 val="$undef"
64fi
2cb64bf6 65$rm_try
959f3c4c
JH
66set d_union_semun
67eval $setvar
68
69: see how to do semctl IPC_STAT
70case "$d_sem" in
71$define)
959f3c4c
JH
72 echo " "
73 $cat > try.h <<END
74#ifndef S_IRUSR
75# ifdef S_IREAD
76# define S_IRUSR S_IREAD
77# define S_IWUSR S_IWRITE
78# define S_IXUSR S_IEXEC
79# else
80# define S_IRUSR 0400
81# define S_IWUSR 0200
82# define S_IXUSR 0100
83# endif
84# define S_IRGRP (S_IRUSR>>3)
85# define S_IWGRP (S_IWUSR>>3)
86# define S_IXGRP (S_IXUSR>>3)
87# define S_IROTH (S_IRUSR>>6)
88# define S_IWOTH (S_IWUSR>>6)
89# define S_IXOTH (S_IXUSR>>6)
90#endif
91#ifndef S_IRWXU
92# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
93# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
94# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
95#endif
96END
b7d0cd4f 97 : see whether semctl IPC_STAT can use union semun
b7d0cd4f
JH
98 case "$d_semctl_semun" in
99 '')
437d7d39 100 val="$undef"
b7d0cd4f 101 $cat > try.c <<END
959f3c4c
JH
102#include <sys/types.h>
103#include <sys/ipc.h>
104#include <sys/sem.h>
105#include <sys/stat.h>
106#include <stdio.h>
107#include <errno.h>
108#include "try.h"
109#ifndef errno
110extern int errno;
111#endif
112#$d_union_semun HAS_UNION_SEMUN
113int main() {
114 union semun
115#ifndef HAS_UNION_SEMUN
116 {
117 int val;
118 struct semid_ds *buf;
119 unsigned short *array;
120 }
121#endif
122 arg;
123 int sem, st;
124
125#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
126 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
127 if (sem > -1) {
128 struct semid_ds argbuf;
129 arg.buf = &argbuf;
130# ifdef IPC_STAT
131 st = semctl(sem, 0, IPC_STAT, arg);
132 if (st == 0)
133 printf("semun\n");
134 else
135# endif /* IPC_STAT */
136 printf("semctl IPC_STAT failed: errno = %d\n", errno);
137# ifdef IPC_RMID
138 if (semctl(sem, 0, IPC_RMID, arg) != 0)
437d7d39 139# endif /* IPC_RMID */
959f3c4c
JH
140 printf("semctl IPC_RMID failed: errno = %d\n", errno);
141 } else
142#endif /* IPC_PRIVATE && ... */
143 printf("semget failed: errno = %d\n", errno);
144 return 0;
145}
146END
b7d0cd4f
JH
147 set try
148 if eval $compile; then
149 xxx=`$run ./try`
150 case "$xxx" in
151 semun) val="$define" ;;
152 esac
153 fi
2cb64bf6 154 $rm_try
437d7d39
YST
155 set d_semctl_semun
156 eval $setvar
b7d0cd4f
JH
157 ;;
158 esac
959f3c4c
JH
159 case "$d_semctl_semun" in
160 $define)
161 echo "You can use union semun for semctl IPC_STAT." >&4
162 also='also'
163 ;;
164 *) echo "You cannot use union semun for semctl IPC_STAT." >&4
165 also=''
166 ;;
167 esac
168
169 : see whether semctl IPC_STAT can use struct semid_ds pointer
b7d0cd4f
JH
170 case "$d_semctl_semid_ds" in
171 '')
437d7d39 172 val="$undef"
b7d0cd4f 173 $cat > try.c <<'END'
959f3c4c
JH
174#include <sys/types.h>
175#include <sys/ipc.h>
176#include <sys/sem.h>
177#include <sys/stat.h>
178#include "try.h"
179#include <stdio.h>
180#include <errno.h>
181#ifndef errno
182extern int errno;
183#endif
184int main() {
185 struct semid_ds arg;
186 int sem, st;
187
188#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
189 sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
190 if (sem > -1) {
191# ifdef IPC_STAT
192 st = semctl(sem, 0, IPC_STAT, &arg);
193 if (st == 0)
194 printf("semid_ds\n");
195 else
196# endif /* IPC_STAT */
197 printf("semctl IPC_STAT failed: errno = %d\n", errno);
198# ifdef IPC_RMID
199 if (semctl(sem, 0, IPC_RMID, &arg) != 0)
200# endif /* IPC_RMID */
201 printf("semctl IPC_RMID failed: errno = %d\n", errno);
202 } else
203#endif /* IPC_PRIVATE && ... */
204 printf("semget failed: errno = %d\n", errno);
205
206 return 0;
207}
208END
b7d0cd4f
JH
209 set try
210 if eval $compile; then
211 xxx=`$run ./try`
212 case "$xxx" in
213 semid_ds) val="$define" ;;
214 esac
215 fi
2cb64bf6 216 $rm_try
437d7d39
YST
217 set d_semctl_semid_ds
218 eval $setvar
b7d0cd4f
JH
219 ;;
220 esac
959f3c4c
JH
221 case "$d_semctl_semid_ds" in
222 $define)
223 echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
224 ;;
225 *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
226 ;;
227 esac
2cb64bf6 228 $rm_try
959f3c4c
JH
229 ;;
230*) val="$undef"
231
232 # We do not have the full sem*(2) library, so assume we can not
233 # use either.
234
235 set d_semctl_semun
236 eval $setvar
237
238 set d_semctl_semid_ds
239 eval $setvar
240 ;;
241esac
242