oksh-noxz

[fork] Portable OpenBSD ksh, based on the Public Domain Korn Shell (pdksh).
git clone https://noxz.tech/git/oksh-noxz.git
Log | Files | Tags

configure
1#!/bin/sh
2
3# This configure script written by Brian Callahan <bcallah@openbsd.org>
4# and released into the Public Domain.
5
6Makefile() {
7  if [ $strip -ne 0 ] ; then
8    stripopt="-s"
9  fi
10
11  if [ -z "$cc" ] ; then
12    cc=$CC
13  fi
14cat << EOF > Makefile
15# This Makefile automatically generated by configure.
16
17CC =		$cc
18CFLAGS =	$cflags
19EOF
20
21if [ ! -z "$ldflags" ] ; then
22cat << EOF >> Makefile
23LDFLAGS =	$ldflags
24EOF
25fi
26
27if [ ! -z "$vpath" ] ; then
28cat << EOF >> Makefile
29
30VPATH =		$vpath
31EOF
32fi
33
34cat << EOF >> Makefile
35
36PREFIX =	$prefix
37BINDIR =	$bindir
38MANDIR =	$mandir
39
40PROG =	$instprog
41OBJS =	alloc.o asprintf.o c_ksh.o c_sh.o c_test.o c_ulimit.o edit.o \\
42	emacs.o eval.o exec.o expr.o history.o io.o jobs.o lex.o mail.o \\
43	main.o misc.o path.o shf.o syn.o table.o trap.o tree.o tty.o var.o \\
44	version.o vi.o confstr.o reallocarray.o siglist.o signame.o \\
45	strlcat.o strlcpy.o strtonum.o unvis.o vis.o issetugid.o
46
47all: \${PROG}
48
49\${PROG}: \${OBJS}
50EOF
51
52if [ $compileonly -eq 0 ] ; then
53cat << EOF >> Makefile
54	\${CC} \${LDFLAGS} -o \${PROG} \${OBJS} $libs \${LIBS}
55EOF
56fi
57
58cat << EOF >> Makefile
59
60install:
61	install -d \${DESTDIR}\${BINDIR}
62	install -d \${DESTDIR}\${MANDIR}/man1
63	install -c $stripopt -m 755 \${PROG} \${DESTDIR}\${BINDIR}
64	install -c -m 644 \${PROG}.1 \${DESTDIR}\${MANDIR}/man1
65EOF
66
67if [ $instsh -ne 0 ] ; then
68cat << EOF >> Makefile
69	install -d \${DESTDIR}\${BINDIR}
70	install -d \${DESTDIR}\${MANDIR}/man1
71	install -c $stripopt -m 755 \${PROG} \${DESTDIR}\${BINDIR}/sh
72	install -c -m 644 sh.1 \${DESTDIR}\${MANDIR}/man1
73EOF
74fi
75
76cat << EOF >> Makefile
77	@echo "Please add $bindir/$instprog to /etc/shells"
78EOF
79
80if [ $instsh -ne 0 ] ; then
81cat << EOF >> Makefile
82	@echo "Please add $bindir/sh to /etc/shells"
83EOF
84fi
85
86cat << EOF >> Makefile
87
88uninstall:
89	rm -f \${DESTDIR}\${BINDIR}/\${PROG}
90	rm -f \${DESTDIR}\${MANDIR}/man1/\${PROG}.1
91EOF
92
93if [ $instsh -ne 0 ] ; then
94cat << EOF >> Makefile
95	rm -f \${DESTDIR}\${BINDIR}/sh
96	rm -f \${DESTDIR}\${MANDIR}/man1/sh.1
97EOF
98fi
99
100cat << EOF >> Makefile
101
102test:
103	echo "No tests"
104
105clean:
106	rm -f \${PROG} \${OBJS}
107
108distclean: clean
109	rm -f Makefile pconfig.h *.core
110EOF
111}
112
113asprintfcheck() {
114  cat << EOF > conftest.c
115#include <stdio.h>
116int main(void){asprintf(NULL,NULL);return 0;}
117EOF
118  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
119  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
120  if [ $? -eq 0 ] ; then
121    rm -f conftest conftest.o conftest.c
122    return 0
123  else
124    rm -f conftest conftest.o conftest.c
125    return 1
126  fi
127}
128
129c99check() {
130  cat << EOF > conftest.c
131#include <stdio.h>
132int main(void){long long l;for (int i=0;i<1;i++)printf("%s",__func__);return 0;}
133EOF
134  $cc $cflags -std=c99 -o conftest.o -c conftest.c > /dev/null 2>&1
135  if [ $? -eq 0 ] ; then
136    rm -f conftest conftest.o conftest.c
137    return 0
138  else
139    rm -f conftest conftest.o conftest.c
140    return 1
141  fi
142}
143
144cccheck() {
145  if [ ! -z "$CC" ] ; then
146cat << EOF > conftest.c
147int main(void){return 0;}
148EOF
149    $CC $cflags -o conftest.o -c conftest.c
150    $CC $ldflags -o conftest conftest.o
151    if [ $? -eq 0 ] ; then
152      ./conftest
153      if [ $? -eq 0 ] ; then
154	rm -f conftest conftest.o conftest.c
155	cc="$CC"
156	return 0
157      else
158	echo "could not build working executables"
159	echo "Please ensure your C compiler is a native compiler"
160	exit 1
161      fi
162    else
163      rm -f conftest conftest.o conftest.c
164    fi
165  fi
166
167  for compiler in cc clang pcc tcc lacc cparser ccomp xlc gcc ; do
168cat << EOF > conftest.c
169int main(void){return 0;}
170EOF
171
172    $compiler $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
173    $compiler $ldflags -o conftest conftest.o > /dev/null 2>&1
174
175    if [ $? -eq 0 ] ; then
176      ./conftest
177      if [ $? -eq 0 ] ; then
178	rm -f conftest conftest.o conftest.c
179	cc="$compiler"
180	return 0
181      else
182	echo "could not build working executables"
183	echo "Please ensure your C compiler is a native compiler"
184	exit 1
185      fi
186    else
187      rm -f conftest conftest.o conftest.c
188    fi
189  done
190  return 1
191}
192
193clockgettimecheck() {
194  cat << EOF > conftest.c
195#include <stdio.h>
196#include <time.h>
197int main(void){clock_gettime(0,NULL);return 0;}
198EOF
199  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
200  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
201  if [ $? -eq 0 ] ; then
202    rm -f conftest conftest.o conftest.c
203    return 0
204  else
205    rm -f conftest conftest.o conftest.c
206    return 1
207  fi
208}
209
210clockgettimemacoscheck() {
211  cat << EOF > conftest.c
212int main(void) {
213#if defined(__APPLE__) && defined(__MACH__) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200
214return 0;
215#else
216return 1;
217#endif
218}
219EOF
220  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
221  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
222  if [ $? -eq 0 ] ; then
223    rm -f conftest conftest.o conftest.c
224    return 0
225  else
226    rm -f conftest conftest.o conftest.c
227    return 1
228  fi
229}
230
231clockgettimertcheck() {
232  cat << EOF > conftest.c
233#include <stdio.h>
234#include <time.h>
235int main(void){clock_gettime(0,NULL);return 0;}
236EOF
237  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
238  $cc $ldflags -o conftest conftest.o -lrt > /dev/null 2>&1
239  if [ $? -eq 0 ] ; then
240    rm -f conftest conftest.o conftest.c
241    return 0
242  else
243    rm -f conftest conftest.o conftest.c
244    return 1
245  fi
246}
247
248confstrcheck() {
249  cat << EOF > conftest.c
250#include <unistd.h>
251int main(void){confstr(0,NULL,0);return 0;}
252EOF
253  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
254  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
255  if [ $? -eq 0 ] ; then
256    rm -f conftest conftest.o conftest.c
257    return 0
258  else
259    rm -f conftest conftest.o conftest.c
260    return 1
261  fi
262}
263
264cursescheck() {
265  cat << EOF > conftest.c
266#include <term.h>
267#include <curses.h>
268int main(void){setupterm(NULL, 0, NULL);return 0;}
269EOF
270  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
271  $cc $ldflags -o conftest conftest.o -lcurses > /dev/null 2>&1
272  if [ $? -eq 0 ] ; then
273    rm -f conftest conftest.o conftest.c
274    return 0
275  else
276    rm -f conftest conftest.o conftest.c
277    return 1
278  fi
279}
280
281deadcheck() {
282  cat << EOF > conftest.c
283#include <stdlib.h>
284__dead void usage(void){exit(1);}int main(void){usage();return 0;}
285EOF
286  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
287  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
288  if [ $? -eq 0 ] ; then
289    rm -f conftest conftest.o conftest.c
290    return 0
291  else
292    rm -f conftest conftest.o conftest.c
293    return 1
294  fi
295}
296
297dead2check() {
298  cat << EOF > conftest.c
299#include <stdlib.h>
300__dead2 void usage(void){exit(1);}int main(void){usage();return 0;}
301EOF
302  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
303  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
304  if [ $? -eq 0 ] ; then
305    rm -f conftest conftest.o conftest.c
306    return 0
307  else
308    rm -f conftest conftest.o conftest.c
309    return 1
310  fi
311}
312
313defaultcflagscheck() {
314  cat << EOF > conftest.c
315int main(void){return 0;}
316EOF
317  $cc $cflags -g -O2 -o conftest.o -c conftest.c > /dev/null 2>&1
318  if [ $? -eq 0 ] ; then
319    rm -f conftest conftest.o conftest.c
320    return 1
321  else
322    rm -f conftest conftest.o conftest.c
323    return 0
324  fi
325}
326
327getauxvalcheck() {
328  cat << EOF > conftest.c
329#include <sys/auxv.h>
330int main(void){getauxval(AT_SECURE);return 0;}
331EOF
332  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
333  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
334  if [ $? -eq 0 ] ; then
335    rm -f conftest conftest.o conftest.c
336    return 0
337  else
338    rm -f conftest conftest.o conftest.c
339    return 1
340  fi
341}
342
343gnu99check() {
344  cat << EOF > conftest.c
345#include <stdio.h>
346int main(void){long long l;for (int i=0;i<1;i++)printf("%s",__func__);return 0;}
347EOF
348  $cc $cflags -std=gnu99 -o conftest.o -c conftest.c > /dev/null 2>&1
349  if [ $? -eq 0 ] ; then
350    rm -f conftest conftest.o conftest.c
351    return 0
352  else
353    rm -f conftest conftest.o conftest.c
354    return 1
355  fi
356}
357
358issetugidcheck() {
359  cat << EOF > conftest.c
360#include <unistd.h>
361int main(void){issetugid();return 0;}
362EOF
363  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
364  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
365  if [ $? -eq 0 ] ; then
366    rm -f conftest conftest.o conftest.c
367    return 0
368  else
369    rm -f conftest conftest.o conftest.c
370    return 1
371  fi
372}
373
374ltoflagcheck() {
375  cat << EOF > conftest.c
376int main(void){return 0;}
377EOF
378  $cc $cflags -flto -o conftest.o -c conftest.c > /dev/null 2>&1
379  $cc $ldflags -flto -o conftest conftest.o > /dev/null 2>&1
380  if [ $? -eq 0 ] ; then
381    rm -f conftest conftest.o conftest.c
382    return 1
383  else
384    rm -f conftest conftest.o conftest.c
385    return 0
386  fi
387}
388
389ncursescheck() {
390  cat << EOF > conftest.c
391#include <term.h>
392#include <ncurses.h>
393int main(void){setupterm(NULL, 0, NULL);return 0;}
394EOF
395  $cc $cflags -o conftest.o -c conftest.c -lncurses > /dev/null 2>&1
396  $cc $ldflags -o conftest conftest.o -lncurses > /dev/null 2>&1
397  if [ $? -eq 0 ] ; then
398    rm -f conftest conftest.o conftest.c
399    return 0
400  else
401    rm -f conftest conftest.o conftest.c
402    return 1
403  fi
404}
405
406ncursesncursescheck() {
407  cat << EOF > conftest.c
408#include <ncurses/term.h>
409#include <ncurses/ncurses.h>
410int main(void){setupterm(NULL, 0, NULL);return 0;}
411EOF
412  $cc $cflags -o conftest.o -c conftest.c -lncurses > /dev/null 2>&1
413  $cc $ldflags -o conftest conftest.o -lncurses > /dev/null 2>&1
414  if [ $? -eq 0 ] ; then
415    rm -f conftest conftest.o conftest.c
416    return 0
417  else
418    rm -f conftest conftest.o conftest.c
419    return 1
420  fi
421}
422
423noc99check() {
424  cat << EOF > conftest.c
425#include <stdio.h>
426int main(void){long long l;for (int i=0;i<1;i++)printf("%s",__func__);return 0;}
427EOF
428  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
429  if [ $? -eq 0 ] ; then
430    rm -f conftest conftest.o conftest.c
431    return 0
432  else
433    rm -f conftest conftest.o conftest.c
434    return 1
435  fi
436}
437
438noreturncheck() {
439  cat << EOF > conftest.c
440#include <stdlib.h>
441__attribute__((__noreturn__)) void usage(void){exit(1);}int main(void){usage();return 0;}
442EOF
443  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
444  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
445  if [ $? -eq 0 ] ; then
446    rm -f conftest conftest.o conftest.c
447    return 0
448  else
449    rm -f conftest conftest.o conftest.c
450    return 1
451  fi
452}
453
454pledgecheck() {
455  cat << EOF > conftest.c
456#include <unistd.h>
457int main(void){pledge(NULL,NULL);return 0;}
458EOF
459  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
460  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
461  if [ $? -eq 0 ] ; then
462    rm -f conftest conftest.o conftest.c
463    return 0
464  else
465    rm -f conftest conftest.o conftest.c
466    return 1
467  fi
468}
469
470# Intentionally fail on Android.
471# Avoids header/library mismatches as found on
472#   (at least) Termux. Doesn't hurt to use the
473#   portable reallocarray in this repo.
474reallocarraycheck() {
475  cat << EOF > conftest.c
476#include <stdlib.h>
477#ifdef __ANDROID__
47800ThisWillDefinitelyFail00
479#endif
480int main(void){reallocarray(NULL, 0, 0);return 0;}
481EOF
482  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
483  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
484  if [ $? -eq 0 ] ; then
485    rm -f conftest conftest.o conftest.c
486    return 0
487  else
488    rm -f conftest conftest.o conftest.c
489    return 1
490  fi
491}
492
493setresgidcheck() {
494  cat << EOF > conftest.c
495#include <sys/types.h>
496#include <unistd.h>
497int main(void){setresgid(0, 0, 0);return 0;}
498EOF
499  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
500  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
501  if [ $? -eq 0 ] ; then
502    rm -f conftest conftest.o conftest.c
503    return 0
504  else
505    rm -f conftest conftest.o conftest.c
506    return 1
507  fi
508}
509
510setresuidcheck() {
511  cat << EOF > conftest.c
512#include <sys/types.h>
513#include <unistd.h>
514int main(void){setresuid(0, 0, 0);return 0;}
515EOF
516  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
517  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
518  if [ $? -eq 0 ] ; then
519    rm -f conftest conftest.o conftest.c
520    return 0
521  else
522    rm -f conftest conftest.o conftest.c
523    return 1
524  fi
525}
526
527siglistcheck() {
528  cat << EOF > conftest.c
529#include <signal.h>
530#include <stdio.h>
531#include <unistd.h>
532int main(void){printf("%s",sys_siglist[0]);return 0;}
533EOF
534  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
535  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
536  if [ $? -eq 0 ] ; then
537    rm -f conftest conftest.o conftest.c
538    return 0
539  else
540    rm -f conftest conftest.o conftest.c
541    return 1
542  fi
543}
544
545signamecheck() {
546  cat << EOF > conftest.c
547#include <signal.h>
548#include <stdio.h>
549#include <unistd.h>
550int main(void){printf("%s",sys_signame[0]);return 0;}
551EOF
552  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
553  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
554  if [ $? -eq 0 ] ; then
555    rm -f conftest conftest.o conftest.c
556    return 0
557  else
558    rm -f conftest conftest.o conftest.c
559    return 1
560  fi
561}
562
563sig_tcheck() {
564  cat << EOF > conftest.c
565#include <signal.h>
566int main(void){sig_t s;return 0;}
567EOF
568  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
569  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
570  if [ $? -eq 0 ] ; then
571    rm -f conftest conftest.o conftest.c
572    return 0
573  else
574    rm -f conftest conftest.o conftest.c
575    return 1
576  fi
577}
578
579sranddeterministiccheck() {
580  cat << EOF > conftest.c
581#include <stdlib.h>
582int main(void){srand_deterministic(0);return 0;}
583EOF
584  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
585  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
586  if [ $? -eq 0 ] ; then
587    rm -f conftest conftest.o conftest.c
588    return 0
589  else
590    rm -f conftest conftest.o conftest.c
591    return 1
592  fi
593}
594
595st_mtimcheck() {
596  cat << EOF > conftest.c
597#include <sys/stat.h>
598int main(void){struct stat s;s.st_mtim.tv_sec=0;return 0;}
599EOF
600  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
601  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
602  if [ $? -eq 0 ] ; then
603    rm -f conftest conftest.o conftest.c
604    return 0
605  else
606    rm -f conftest conftest.o conftest.c
607    return 1
608  fi
609}
610
611st_mtimespeccheck() {
612  cat << EOF > conftest.c
613#include <sys/stat.h>
614int main(void){struct stat s;s.st_mtimespec.tv_sec=0;return 0;}
615EOF
616  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
617  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
618  if [ $? -eq 0 ] ; then
619    rm -f conftest conftest.o conftest.c
620    return 0
621  else
622    rm -f conftest conftest.o conftest.c
623    return 1
624  fi
625}
626
627stravischeck() {
628  cat << EOF > conftest.c
629#include <stdlib.h>
630#include <vis.h>
631int main(void){stravis(NULL, NULL, 0);return 0;}
632EOF
633  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
634  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
635  if [ $? -eq 0 ] ; then
636    rm -f conftest conftest.o conftest.c
637    return 0
638  else
639    rm -f conftest conftest.o conftest.c
640    return 1
641  fi
642}
643
644strlcatcheck() {
645  cat << EOF > conftest.c
646#include <string.h>
647int main(void){strlcat(NULL,NULL,0);return 0;}
648EOF
649  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
650  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
651  if [ $? -eq 0 ] ; then
652    rm -f conftest conftest.o conftest.c
653    return 0
654  else
655    rm -f conftest conftest.o conftest.c
656    return 1
657  fi
658}
659
660strlcpycheck() {
661  cat << EOF > conftest.c
662#include <string.h>
663int main(void){strlcpy(NULL,NULL,0);return 0;}
664EOF
665  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
666  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
667  if [ $? -eq 0 ] ; then
668    rm -f conftest conftest.o conftest.c
669    return 0
670  else
671    rm -f conftest conftest.o conftest.c
672    return 1
673  fi
674}
675
676strtonumcheck() {
677  cat << EOF > conftest.c
678#include <stdlib.h>
679int main(void){strtonum(NULL, 0, 0, NULL);return 0;}
680EOF
681  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
682  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
683  if [ $? -eq 0 ] ; then
684    rm -f conftest conftest.o conftest.c
685    return 0
686  else
687    rm -f conftest conftest.o conftest.c
688    return 1
689  fi
690}
691
692strunvischeck() {
693  cat << EOF > conftest.c
694#include <stdlib.h>
695#include <vis.h>
696int main(void){strunvis(NULL, NULL);return 0;}
697EOF
698  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
699  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
700  if [ $? -eq 0 ] ; then
701    rm -f conftest conftest.o conftest.c
702    return 0
703  else
704    rm -f conftest conftest.o conftest.c
705    return 1
706  fi
707}
708
709timeraddcheck() {
710  cat << EOF > conftest.c
711#include <sys/time.h>
712int main(void){struct timeval a, b, res;timeradd(&a, &b, &res);return 0;}
713EOF
714  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
715  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
716  if [ $? -eq 0 ] ; then
717    rm -f conftest conftest.o conftest.c
718    return 0
719  else
720    rm -f conftest conftest.o conftest.c
721    return 1
722  fi
723}
724
725timerclearcheck() {
726  cat << EOF > conftest.c
727#include <sys/time.h>
728int main(void){struct timeval a;timerclear(&a);return 0;}
729EOF
730  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
731  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
732  if [ $? -eq 0 ] ; then
733    rm -f conftest conftest.o conftest.c
734    return 0
735  else
736    rm -f conftest conftest.o conftest.c
737    return 1
738  fi
739}
740
741timersubcheck() {
742  cat << EOF > conftest.c
743#include <sys/time.h>
744int main(void){struct timeval a, b, res;timersub(&a, &b, &res);return 0;}
745EOF
746  $cc $cflags -o conftest.o -c conftest.c > /dev/null 2>&1
747  $cc $ldflags -o conftest conftest.o > /dev/null 2>&1
748  if [ $? -eq 0 ] ; then
749    rm -f conftest conftest.o conftest.c
750    return 0
751  else
752    rm -f conftest conftest.o conftest.c
753    return 1
754  fi
755}
756
757wflagcheck() {
758  if [ "x$cc" = "xkefir" ] ; then
759    return 0
760  fi
761  cat << EOF > conftest.c
762int main(void){return 0;}
763EOF
764  $cc $cflags -w -o conftest.o -c conftest.c > /dev/null 2>&1
765  if [ $? -eq 0 ] ; then
766    rm -f conftest conftest.o conftest.c
767    return 1
768  else
769    rm -f conftest conftest.o conftest.c
770    return 0
771  fi
772}
773
774# Option variables
775if [ ! -z "$PREFIX" ] ; then
776  prefix="$PREFIX"
777else
778  prefix="/usr"
779fi
780
781doconfigure=1
782compileonly=0
783bindirset=0
784mandirset=0
785bindir="$prefix/bin"
786mandir="$prefix/share/man"
787
788instprog="ksh"
789libs=""
790curses=1
791instsh=0
792static=0
793lto=0
794small=0
795strip=1
796
797# Options
798for opt
799do
800  case "$opt" in
801    --prefix=*)
802	prefix=${opt#*=}
803	if [ $bindirset -eq 0 ] ; then
804	  bindir="$prefix/bin"
805	fi
806	if [ $mandirset -eq 0 ] ; then
807	  mandir="$prefix/share/man"
808	fi
809	;;
810    --bindir=*)
811	bindir=${opt#*=}
812	bindirset=1
813	;;
814    --mandir=*)
815	mandir=${opt#*=}
816	mandirset=1
817	;;
818    --cc=*)
819	CC=${opt#*=}
820	;;
821    --cflags=*)
822	CFLAGS=${opt#*=}
823	;;
824    --disable-curses|--enable-curses)
825	if [ "x$opt" = "x--disable-curses" ] ; then
826	  curses=0
827	else
828	  curses=1
829	fi
830	;;
831    --disable-sh|--enable-sh)
832	if [ "x$opt" = "x--enable-sh" ] ; then
833	  instsh=1
834	else
835	  instsh=0
836	fi
837	;;
838    --disable-small|--enable-small)
839	if [ "x$opt" = "x--enable-small" ] ; then
840	  small=1
841	  curses=0
842	else
843	  small=0
844	fi
845	;;
846    --disable-static|--enable-static)
847	if [ "x$opt" = "x--enable-static" ] ; then
848	  static=1
849	else
850	  static=0
851	fi
852	;;
853    --disable-lto|--enable-lto)
854	if [ "x$opt" = "x--enable-lto" ] ; then
855	  lto=1
856	else
857	  lto=0
858	fi
859	;;
860    --no-thanks)
861	doconfigure=0
862	;;
863    --no-link)
864	compileonly=1
865	;;
866    --no-strip)
867	strip=0
868	;;
869    --help|-h)
870	echo "Usage: configure [options]"
871	echo ""
872	echo "Options:"
873	printf "  --help or -h            "
874	echo "Display this help message"
875	printf "  --prefix=PREFIX         "
876	echo "Top level install directory is PREFIX [$prefix]"
877	printf "  --bindir=BINDIR         "
878	echo "Install executable to BINDIR [$bindir]"
879	printf "  --mandir=MANDIR         "
880	echo "Install manual pages to MANDIR [$mandir]"
881	printf "  --cc=CC                 "
882	echo "Use specified C compiler [default=cc]"
883	printf "  --cflags=CFLAGS         "
884        echo "Use specified CFLAGS [default=\"-g -O2\"]"
885	printf "  --enable-curses         "
886	echo "Use curses library for screen clear [default=yes]"
887	printf "  --enable-lto            "
888	echo "Enable link-time optimization [default=no]"
889	printf "  --enable-sh             "
890	echo "Install additional sh executable [default=no]"
891	printf "  --enable-small          "
892	echo "Disable curses and extended history [default=no]"
893	printf "  --enable-static         "
894	echo "Statically link executables [default=no]"
895	printf "  --no-thanks             "
896	echo "Skip all configure checks"
897	printf "  --no-link               "
898	echo "Compile only, do not link (requires --no-thanks)"
899	printf "  --no-strip              "
900	echo "Do not strip executables at install [default=strip]"
901	exit 1
902	;;
903    *)
904	;;
905  esac
906done
907
908if [ ! -z "$CFLAGS" ] ; then
909  cflags="$CFLAGS -DEMACS -DVI"
910else
911  cflags="-DEMACS -DVI"
912fi
913
914if [ ! -z "$LDFLAGS" ] ; then
915  ldflags="$LDFLAGS"
916else
917  ldflags=""
918fi
919
920if [ $static -ne 0 ] ; then
921  ldflags="$ldflags -static"
922fi
923
924if [ $compileonly -eq 1 ] ; then
925  if [ $doconfigure -eq 1 ] ; then
926    echo "ERROR: --no-link requires --no-thanks"
927    exit 1
928  fi
929fi
930
931if [ $doconfigure -eq 0 ] ; then
932  if [ -z "$CC" ] ; then
933    CC=gcc
934  fi
935  cflags="$cflags -std=gnu99"
936  echo "OK, I trust you."
937  echo "I'll assume you have gcc/clang and little else."
938  echo "Edit Makefile and pconfig.h if needed."
939  echo "Good luck!"
940  cat << EOF > pconfig.h
941/* This file automatically generated by configure.  */
942
943#ifndef __dead
944#define __dead __attribute__((__noreturn__))
945#endif
946
947/* #define __attribute__(x) */
948
949/* #define HAVE_ASPRINTF */
950/* #define HAVE_CONFSTR */
951#define NO_CURSES
952/* #define HAVE_ISSETUGID */
953/* #define HAVE_GETAUXVAL */
954/* #define HAVE_PLEDGE */
955/* #define HAVE_REALLOCARRAY */
956/* #define HAVE_SETRESGID */
957/* #define HAVE_SETRESUID */
958/* #define HAVE_SIG_T */
959/* #define HAVE_SRAND_DETERMINISTIC */
960#define HAVE_ST_MTIM
961/* #define HAVE_ST_MTIMESPEC */
962/* #define HAVE_STRAVIS */
963/* #define HAVE_STRLCAT */
964/* #define HAVE_STRLCPY */
965/* #define HAVE_STRTONUM */
966/* #define HAVE_STRUNVIS */
967/* #define HAVE_SIGLIST */
968/* #define HAVE_SIGNAME */
969/* #define HAVE_TIMERADD */
970/* #define HAVE_TIMERCLEAR */
971/* #define HAVE_TIMERSUB */
972EOF
973  Makefile
974
975  exit 0
976fi
977
978printf "checking for C compiler... "
979cccheck
980if [ $? -ne 0 ] ; then
981  echo "not found"
982  echo "Please install a C compiler and re-run configure."
983  exit 1
984else
985  echo "$cc"
986fi
987
988if [ "x$cc" = "xvc" ] ; then
989  echo "using vbcc, setting CFLAGS to -g -O=990"
990  cflags="-g -O=990 -DEMACS -DVI"
991fi
992
993if [ "x$cc" = "xkefir" ] ; then
994  echo "using kefir, setting CFLAGS to -O2"
995  cflags="-O2 -DEMACS -DVI"
996fi
997
998if [ "x$cflags" = "x-DEMACS -DVI" ] ; then
999  printf "checking if the compiler accepts -g -O2... "
1000  defaultcflagscheck
1001  if [ $? -eq 0 ] ; then
1002    echo "no"
1003  else
1004    cflags="-g -O2 $cflags"
1005    echo "yes"
1006  fi
1007fi
1008
1009printf "checking if the compiler can compile C99 without -std=c99... "
1010noc99check
1011if [ $? -ne 0 ] ; then
1012  echo "no"
1013  printf "checking if the compiler can compile C99 with -std=c99... "
1014  cflags="$cflags"
1015  c99check
1016  if [ $? -ne 0 ] ; then
1017    echo "no"
1018    printf "checking if the compiler can compile C99 with -std=gnu99... "
1019    gnu99check
1020    if [ $? -ne 0 ] ; then
1021      echo "no"
1022      echo "You must have a C99 compiler to build ksh!"
1023      exit 1
1024    else
1025      cflags="$cflags -std=gnu99"
1026      echo "yes"
1027    fi
1028  else
1029    cflags="$cflags -std=c99"
1030    echo "yes"
1031  fi
1032else
1033  echo "yes"
1034fi
1035
1036printf "checking for -w compiler flag... "
1037wflagcheck
1038if [ $? -eq 0 ] ; then
1039  echo "no"
1040else
1041  cflags="$cflags -w"
1042  echo "yes"
1043fi
1044
1045printf "checking for OS... "
1046os=`uname -s`
1047echo "$os"
1048
1049case "x$os" in
1050  "xLinux"|"xCYGWIN"*)
1051    cflags="$cflags -D_GNU_SOURCE"
1052    ;;
1053  "xNetBSD")
1054    cflags="$cflags -D_OPENBSD_SOURCE"
1055    ;;
1056  "xOpenBSD")
1057    case "x$cc" in
1058      "xccomp")
1059	cflags="$cflags -D_ANSI_LIBRARY"
1060	ldflags="$ldflags -Wl,-nopie"
1061	;;
1062      "xchibicc")
1063	cflags="$cflags -D_ANSI_LIBRARY"
1064	;;
1065      "xkefir")
1066	cflags="$cflags -D_ANSI_LIBRARY"
1067	;;
1068      "xnwcc")
1069	ldflags="$ldflags -Wl,-nopie"
1070	;;
1071      "xvc")
1072	cflags="$cflags -D_ANSI_LIBRARY"
1073	;;
1074    esac
1075    ;;
1076  "xAIX"|"xOS400")
1077    cflags="$cflags -D_ALL_SOURCE"
1078    ldflags="-lbsd"
1079    ;;
1080esac
1081
1082printf "checking for -flto compiler flag... "
1083if [ $lto -eq 0 ] ; then
1084  echo "not enabled"
1085else
1086  ltoflagcheck
1087  if [ $lto -eq 0 ] ; then
1088    echo "no"
1089  else
1090    cflags="$cflags -flto"
1091    ldflags="$ldflags -flto -Wl,-O3"
1092    echo "yes"
1093  fi
1094fi
1095
1096if [ $small -ne 0 ] ; then
1097  cflags="$cflags -DSMALL"
1098fi
1099
1100cat << EOF > pconfig.h
1101/* This file automatically generated by configure.  */
1102
1103EOF
1104
1105printf "checking for __dead... "
1106deadcheck
1107if [ $? -eq 0 ] ; then
1108  echo "yes"
1109else
1110  echo "no"
1111  printf "checking for __dead2... "
1112  dead2check
1113  if [ $? -eq 0 ] ; then
1114    echo "#define __dead __dead2" >> pconfig.h
1115    echo "yes"
1116  else
1117    echo "no"
1118    printf "checking for __attribute__((__noreturn__))... "
1119    noreturncheck
1120    if [ $? -eq 0 ] ; then
1121      echo "#define __dead __attribute__((__noreturn__))" >> pconfig.h
1122      echo "yes"
1123    else
1124      echo "#define __attribute__(x)" >> pconfig.h
1125      echo "#define __dead" >> pconfig.h
1126      echo "no"
1127    fi
1128  fi
1129fi
1130
1131printf "checking for asprintf... "
1132asprintfcheck
1133if [ $? -eq 0 ] ; then
1134  echo "#define HAVE_ASPRINTF" >> pconfig.h
1135  echo "yes"
1136else
1137  echo "no"
1138fi
1139
1140printf "checking for clock_gettime in libc... "
1141clockgettimecheck
1142if [ $? -eq 0 ] ; then
1143  echo "yes"
1144else
1145  echo "no"
1146  printf "checking for clock_gettime in librt... "
1147  clockgettimertcheck
1148  if [ $? -eq 0 ] ; then
1149    libs="$libs -lrt"
1150    echo "yes"
1151  else
1152    echo "no"
1153    printf "checking if we are Mac OS X 10.11 or older... "
1154    clockgettimemacoscheck
1155    if [ $? -eq 0 ] ; then
1156      echo "yes"
1157    else
1158      echo "Error: ksh requires clock_gettime()"
1159      exit 1
1160    fi
1161  fi
1162fi
1163
1164printf "checking for confstr... "
1165confstrcheck
1166if [ $? -eq 0 ] ; then
1167  echo "#define HAVE_CONFSTR" >> pconfig.h
1168  echo "yes"
1169else
1170  echo "no"
1171fi
1172
1173printf "checking for curses library... "
1174if [ $curses -eq 1 ] ; then
1175  cursescheck
1176  if [ $? -eq 0 ] ; then
1177    libs="$libs -lcurses"
1178    echo "#define HAVE_CURSES" >> pconfig.h
1179    echo "curses.h"
1180  else
1181    ncursescheck
1182    if [ $? -eq 0 ] ; then
1183      libs="$libs -lncurses"
1184      echo "#define HAVE_NCURSES" >> pconfig.h
1185      echo "ncurses.h"
1186    else
1187      ncursesncursescheck
1188      if [ $? -eq 0 ] ; then
1189	libs="$libs -lncurses"
1190	echo "#define HAVE_NCURSESNCURSES" >> pconfig.h
1191	echo "ncurses/ncurses.h"
1192      else
1193	echo "#define NO_CURSES" >> pconfig.h
1194	echo "not found"
1195	echo "ksh will be built without screen clearing support"
1196      fi
1197    fi
1198  fi
1199else
1200  echo "#define NO_CURSES" >> pconfig.h
1201  echo "disabled by user"
1202  echo "ksh will be built without screen clearing support"
1203fi
1204
1205printf "checking for issetugid... "
1206issetugidcheck
1207if [ $? -eq 0 ] ; then
1208  echo "#define HAVE_ISSETUGID" >> pconfig.h
1209  echo "yes"
1210else
1211  echo "no"
1212  printf "checking for getauxval(AT_SECURE)... "
1213  getauxvalcheck
1214  if [ $? -eq 0 ] ; then
1215    echo "#define HAVE_GETAUXVAL" >> pconfig.h
1216    echo "yes"
1217  else
1218    echo "no"
1219  fi
1220fi
1221
1222printf "checking for pledge... "
1223pledgecheck
1224if [ $? -eq 0 ] ; then
1225  echo "#define HAVE_PLEDGE" >> pconfig.h
1226  echo "yes"
1227else
1228  echo "no"
1229fi
1230
1231printf "checking for reallocarray... "
1232reallocarraycheck
1233if [ $? -eq 0 ] ; then
1234  echo "#define HAVE_REALLOCARRAY" >> pconfig.h
1235  echo "yes"
1236else
1237  echo "no"
1238fi
1239
1240printf "checking for setresgid... "
1241setresgidcheck
1242if [ $? -eq 0 ] ; then
1243  echo "#define HAVE_SETRESGID" >> pconfig.h
1244  echo "yes"
1245else
1246  echo "no"
1247fi
1248
1249printf "checking for setresuid... "
1250setresuidcheck
1251if [ $? -eq 0 ] ; then
1252  echo "#define HAVE_SETRESUID" >> pconfig.h
1253  echo "yes"
1254else
1255  echo "no"
1256fi
1257
1258printf "checking for sig_t... "
1259sig_tcheck
1260if [ $? -eq 0 ] ; then
1261  echo "#define HAVE_SIG_T" >> pconfig.h
1262  echo "yes"
1263else
1264  echo "no"
1265fi
1266
1267printf "checking for srand_deterministic... "
1268sranddeterministiccheck
1269if [ $? -eq 0 ] ; then
1270  echo "#define HAVE_SRAND_DETERMINISTIC" >> pconfig.h
1271  echo "yes"
1272else
1273  echo "no"
1274fi
1275
1276printf "checking for st_mtim... "
1277st_mtimcheck
1278if [ $? -eq 0 ] ; then
1279  echo "#define HAVE_ST_MTIM" >> pconfig.h
1280  echo "yes"
1281else
1282  echo "no"
1283fi
1284
1285printf "checking for st_mtimespec... "
1286st_mtimespeccheck
1287if [ $? -eq 0 ] ; then
1288  echo "#define HAVE_ST_MTIMESPEC" >> pconfig.h
1289  echo "yes"
1290else
1291  echo "no"
1292fi
1293
1294printf "checking for stravis... "
1295stravischeck
1296if [ $? -eq 0 ] ; then
1297  echo "#define HAVE_STRAVIS" >> pconfig.h
1298  echo "yes"
1299else
1300  echo "no"
1301fi
1302
1303printf "checking for strlcat... "
1304strlcatcheck
1305if [ $? -eq 0 ] ; then
1306  echo "#define HAVE_STRLCAT" >> pconfig.h
1307  echo "yes"
1308else
1309  echo "no"
1310fi
1311
1312printf "checking for strlcpy... "
1313strlcpycheck
1314if [ $? -eq 0 ] ; then
1315  echo "#define HAVE_STRLCPY" >> pconfig.h
1316  echo "yes"
1317else
1318  echo "no"
1319fi
1320
1321printf "checking for strtonum... "
1322strtonumcheck
1323if [ $? -eq 0 ] ; then
1324  echo "#define HAVE_STRTONUM" >> pconfig.h
1325  echo "yes"
1326else
1327  echo "no"
1328fi
1329
1330printf "checking for strunvis... "
1331strunvischeck
1332if [ $? -eq 0 ] ; then
1333  echo "#define HAVE_STRUNVIS" >> pconfig.h
1334  echo "yes"
1335else
1336  echo "no"
1337fi
1338
1339printf "checking for sys_siglist... "
1340siglistcheck
1341if [ $? -eq 0 ] ; then
1342  echo "#define HAVE_SIGLIST" >> pconfig.h
1343  echo "yes"
1344else
1345  echo "no"
1346fi
1347
1348printf "checking for sys_signame... "
1349signamecheck
1350if [ $? -eq 0 ] ; then
1351  echo "#define HAVE_SIGNAME" >> pconfig.h
1352  echo "yes"
1353else
1354  echo "no"
1355fi
1356
1357printf "checking for timeradd... "
1358timeraddcheck
1359if [ $? -eq 0 ] ; then
1360  echo "#define HAVE_TIMERADD" >> pconfig.h
1361  echo "yes"
1362else
1363  echo "no"
1364fi
1365
1366printf "checking for timerclear... "
1367timerclearcheck
1368if [ $? -eq 0 ] ; then
1369  echo "#define HAVE_TIMERCLEAR" >> pconfig.h
1370  echo "yes"
1371else
1372  echo "no"
1373fi
1374
1375printf "checking for timersub... "
1376timersubcheck
1377if [ $? -eq 0 ] ; then
1378  echo "#define HAVE_TIMERSUB" >> pconfig.h
1379  echo "yes"
1380else
1381  echo "no"
1382fi
1383
1384printf "checking for out-of-tree build... "
1385if [ "x$(dirname $0)" = "x." ] ; then
1386  echo "no"
1387elif [ "x$(dirname $0)" = "x$(pwd)" ] ; then
1388  echo "no"
1389else
1390  echo "yes"
1391  vpath="$(dirname $0)"
1392  cflags="$cflags -I$(pwd)"
1393fi
1394
1395if [ ! -z "$cflags" ] ; then
1396  cflags="${cflags## }"
1397fi
1398
1399if [ ! -z "$ldflags" ] ; then
1400  ldflags="${ldflags## }"
1401fi
1402
1403printf "creating Makefile... "
1404Makefile
1405echo "done"