next round of fixes
[alioth/magicpoint.git] / Build.sh
1 #!/bin/sh
2 srcversion='1.20 (Alpha)'
3 #-
4 # Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
5 #               2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019
6 #       mirabilos <m@mirbsd.org>
7 # Copyright (c) 2018, 2019
8 #       mirabilos <t.glaser@tarent.de>
9 #
10 # Redistribution and use in source and binary forms, with or without
11 # modification, are permitted provided that the following conditions
12 # are met:
13 # 1. Redistributions of source code must retain the above copyright
14 #    notice, this list of conditions and the following disclaimer.
15 # 2. Redistributions in binary form must reproduce the above copyright
16 #    notice, this list of conditions and the following disclaimer in the
17 #    documentation and/or other materials provided with the distribution.
18 # 3. Neither the name of the project nor the names of its contributors
19 #    may be used to endorse or promote products derived from this software
20 #    without specific prior written permission.
21 #
22 # THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS “AS IS” AND
23 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 # ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
26 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 # SUCH DAMAGE.
33 #
34 # This script is also available under The MirOS Licence.
35 #-
36 # People analysing the output must whitelist conftest.c for any kind
37 # of compiler warning checks (mirtoconf is by design not quiet).
38 #
39 # Used environment documentation is at the end of this file.
40
41 LC_ALL=C
42 export LC_ALL
43
44 case $ZSH_VERSION:$VERSION in
45 :zsh*) ZSH_VERSION=2 ;;
46 esac
47
48 if test -n "${ZSH_VERSION+x}" && (emulate sh) >/dev/null 2>&1; then
49         emulate sh
50         NULLCMD=:
51 fi
52
53 if test -d /usr/xpg4/bin/. >/dev/null 2>&1; then
54         # Solaris: some of the tools have weird behaviour, use portable ones
55         PATH=/usr/xpg4/bin:$PATH
56         export PATH
57 fi
58
59 nl='
60 '
61 safeIFS='       '
62 safeIFS=" $safeIFS$nl"
63 IFS=$safeIFS
64 allu=QWERTYUIOPASDFGHJKLZXCVBNM
65 alll=qwertyuiopasdfghjklzxcvbnm
66 alln=0123456789
67 alls=______________________________________________________________
68
69 case `echo a | tr '\201' X` in
70 X)
71         # EBCDIC build system
72         lfcr='\n\r'
73         ;;
74 *)
75         lfcr='\012\015'
76         ;;
77 esac
78
79 echo "For the build logs, demonstrate that /dev/null and /dev/tty exist:"
80 ls -l /dev/null /dev/tty
81
82 v() {
83         $e "$*"
84         eval "$@"
85 }
86
87 vv() {
88         _c=$1
89         shift
90         $e "\$ $*" 2>&1
91         eval "$@" >vv.out 2>&1
92         sed "s\a^\a${_c} \a" <vv.out
93 }
94
95 vq() {
96         eval "$@"
97 }
98
99 rmf() {
100         for _f in "$@"; do
101                 case $_f in
102                 mgp.1|mgp.c|mgp.h) ;;
103                 *) rm -f "$_f" ;;
104                 esac
105         done
106 }
107
108 tcfn=no
109 bi=
110 ui=
111 ao=
112 fx=
113 me=`basename "$0"`
114 orig_CFLAGS=$CFLAGS
115 phase=x
116
117 if test -t 1; then
118         bi='\e[1m'
119         ui='\e[4m'
120         ao='\e[0m'
121 fi
122
123 upper() {
124         echo :"$@" | sed 's/^://' | tr $alll $allu
125 }
126
127 # clean up after ac_testrun()
128 ac_testdone() {
129         eval HAVE_$fu=$fv
130         fr=no
131         test 0 = $fv || fr=yes
132         $e "$bi==> $fd...$ao $ui$fr$ao$fx"
133         fx=
134 }
135
136 # ac_cache label: sets f, fu, fv?=0
137 ac_cache() {
138         f=$1
139         fu=`upper $f`
140         eval fv=\$HAVE_$fu
141         case $fv in
142         0|1)
143                 fx=' (cached)'
144                 return 0
145                 ;;
146         esac
147         fv=0
148         return 1
149 }
150
151 # ac_testinit label [!] checkif[!]0 [setlabelifcheckis[!]0] useroutput
152 # returns 1 if value was cached/implied, 0 otherwise: call ac_testdone
153 ac_testinit() {
154         if ac_cache $1; then
155                 test x"$2" = x"!" && shift
156                 test x"$2" = x"" || shift
157                 fd=${3-$f}
158                 ac_testdone
159                 return 1
160         fi
161         fc=0
162         if test x"$2" = x""; then
163                 ft=1
164         else
165                 if test x"$2" = x"!"; then
166                         fc=1
167                         shift
168                 fi
169                 eval ft=\$HAVE_`upper $2`
170                 shift
171         fi
172         fd=${3-$f}
173         if test $fc = "$ft"; then
174                 fv=$2
175                 fx=' (implied)'
176                 ac_testdone
177                 return 1
178         fi
179         $e ... $fd
180         return 0
181 }
182
183 # pipe .c | ac_test[n] [!] label [!] checkif[!]0 [setlabelifcheckis[!]0] useroutput
184 ac_testnnd() {
185         if test x"$1" = x"!"; then
186                 fr=1
187                 shift
188         else
189                 fr=0
190         fi
191         ac_testinit "$@" || return 1
192         cat >conftest.c
193         vv ']' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN conftest.c $LIBS $ccpr"
194         test $tcfn = no && test -f a.out && tcfn=a.out
195         test $tcfn = no && test -f a.exe && tcfn=a.exe
196         test $tcfn = no && test -f conftest.exe && tcfn=conftest.exe
197         test $tcfn = no && test -f conftest && tcfn=conftest
198         if test -f $tcfn; then
199                 test 1 = $fr || fv=1
200         else
201                 test 0 = $fr || fv=1
202         fi
203         vscan=
204         if test $phase = u; then
205                 test $ct = gcc && vscan='unrecogni[sz]ed'
206                 test $ct = hpcc && vscan='unsupported'
207                 test $ct = pcc && vscan='unsupported'
208                 test $ct = sunpro && vscan='-e ignored -e turned.off'
209         fi
210         test -n "$vscan" && grep $vscan vv.out >/dev/null 2>&1 && fv=$fr
211         return 0
212 }
213 ac_testn() {
214         ac_testnnd "$@" || return
215         rmf conftest.c conftest.o ${tcfn}* vv.out
216         ac_testdone
217 }
218
219 # ac_ifcpp cppexpr [!] label [!] checkif[!]0 [setlabelifcheckis[!]0] useroutput
220 ac_ifcpp() {
221         expr=$1; shift
222         ac_testn "$@" <<-EOF
223                 #include <unistd.h>
224                 extern int thiswillneverbedefinedIhope(void);
225                 int main(void) { return (dup(0) +
226                 #$expr
227                     0
228                 #else
229                 /* force a failure: expr is false */
230                     thiswillneverbedefinedIhope()
231                 #endif
232                     ); }
233 EOF
234         test x"$1" = x"!" && shift
235         f=$1
236         fu=`upper $f`
237         eval fv=\$HAVE_$fu
238         test x"$fv" = x"1"
239 }
240
241 add_cppflags() {
242         CPPFLAGS="$CPPFLAGS $*"
243 }
244
245 ac_cppflags() {
246         test x"$1" = x"" || fu=$1
247         fv=$2
248         test x"$2" = x"" && eval fv=\$HAVE_$fu
249         add_cppflags -DHAVE_$fu=$fv
250 }
251
252 ac_test() {
253         ac_testn "$@"
254         ac_cppflags
255 }
256
257 # ac_flags [-] add varname cflags [text] [ldflags]
258 ac_flags() {
259         if test x"$1" = x"-"; then
260                 shift
261                 hf=1
262         else
263                 hf=0
264         fi
265         fa=$1
266         vn=$2
267         f=$3
268         ft=$4
269         fl=$5
270         test x"$ft" = x"" && ft="if $f can be used"
271         save_CFLAGS=$CFLAGS
272         CFLAGS="$CFLAGS $f"
273         if test -n "$fl"; then
274                 save_LDFLAGS=$LDFLAGS
275                 LDFLAGS="$LDFLAGS $fl"
276         fi
277         if test 1 = $hf; then
278                 ac_testn can_$vn '' "$ft"
279         else
280                 ac_testn can_$vn '' "$ft" <<-'EOF'
281                         /* evil apo'stroph in comment test */
282                         #include <unistd.h>
283                         int main(void) { return (dup(0)); }
284                 EOF
285                 #'
286         fi
287         eval fv=\$HAVE_CAN_`upper $vn`
288         if test -n "$fl"; then
289                 test 11 = $fa$fv || LDFLAGS=$save_LDFLAGS
290         fi
291         test 11 = $fa$fv || CFLAGS=$save_CFLAGS
292 }
293
294 # ac_header [!] header [prereq ...]
295 ac_header() {
296         if test x"$1" = x"!"; then
297                 na=1
298                 shift
299         else
300                 na=0
301         fi
302         hf=$1; shift
303         hv=`echo "$hf" | tr -d "$lfcr" | tr -c $alll$allu$alln $alls`
304         echo "/* NeXTstep bug workaround */" >x
305         for i
306         do
307                 case $i in
308                 _time)
309                         echo '#if HAVE_BOTH_TIME_H' >>x
310                         echo '#include <sys/time.h>' >>x
311                         echo '#include <time.h>' >>x
312                         echo '#elif HAVE_SYS_TIME_H' >>x
313                         echo '#include <sys/time.h>' >>x
314                         echo '#elif HAVE_TIME_H' >>x
315                         echo '#include <time.h>' >>x
316                         echo '#endif' >>x
317                         ;;
318                 *)
319                         echo "#include <$i>" >>x
320                         ;;
321                 esac
322         done
323         echo "#include <$hf>" >>x
324         echo '#include <unistd.h>' >>x
325         echo 'int main(void) { return (dup(0)); }' >>x
326         ac_testn "$hv" "" "<$hf>" <x
327         rmf x
328         test 1 = $na || ac_cppflags
329 }
330
331
332 curdir=`pwd` srcdir=`dirname "$0" 2>/dev/null`
333 case x$srcdir in
334 x)
335         srcdir=.
336         ;;
337 *\ *|*" "*|*"$nl"*)
338         echo >&2 Source directory should not contain space or tab or newline.
339         echo >&2 Errors may occur.
340         ;;
341 *"'"*)
342         echo Source directory must not contain single quotes.
343         exit 1
344         ;;
345 esac
346 CFLAGS="-DMCCF $CFLAGS"
347 add_cppflags '-Dmgp_version='\''"$(mgpversion)"'\'' -DMCPPF'
348
349 e=echo
350 eq=0
351 pkgs='imlib2 libbsd-overlay xft'
352
353 for i
354 do
355         case :$i in
356         :-g)
357                 # checker, debug, valgrind build
358                 add_cppflags -DDEBUG
359                 CFLAGS="$CFLAGS -g3 -fno-builtin"
360                 ;;
361         :-Q)
362                 eq=1
363                 ;;
364         :-v)
365                 echo "Build.sh for MagicPoint $srcversion"
366                 exit 0
367                 ;;
368         :*)
369                 echo "$me: Unknown option '$i'!" >&2
370                 exit 1
371                 ;;
372         *)
373                 echo "$me: Unknown option -'$last' '$i'!" >&2
374                 exit 1
375                 ;;
376         esac
377 done
378
379 tfn=mgp
380 if test -d $tfn || test -d $tfn.exe; then
381         echo "$me: Error: ./$tfn is a directory!" >&2
382         exit 1
383 fi
384 rmf a.exe* a.out* conftest.c conftest.exe* *core core.* ${tfn}* *.bc *.dbg \
385     *.ll *.o lft no x vv.out *~
386
387 if test -n "$CPPFLAGS"; then
388         CPPFLAGS="-I. $CPPFLAGS"
389 else
390         CPPFLAGS="-I."
391 fi
392 test -n "$LDSTATIC" && if test -n "$LDFLAGS"; then
393         LDFLAGS="$LDFLAGS $LDSTATIC"
394 else
395         LDFLAGS=$LDSTATIC
396 fi
397
398 if test -z "$TARGET_OS"; then
399         x=`uname -s 2>/dev/null || uname`
400         test x"$x" = x"`uname -n 2>/dev/null`" || TARGET_OS=$x
401 fi
402 if test -z "$TARGET_OS"; then
403         echo "$me: Set TARGET_OS, your uname is broken!" >&2
404         exit 1
405 fi
406 oswarn=
407 ccpc=-Wc,
408 ccpl=-Wl,
409 tsts=
410 ccpr='|| for _f in ${tcfn}*; do case $_f in mgp.1|mgp.c|mgp.h) ;; *) rm -f "$_f" ;; esac; done'
411
412 # Evil hack
413 if test x"$TARGET_OS" = x"Android"; then
414         TARGET_OS=Linux
415 fi
416
417 # Evil OS
418 if test x"$TARGET_OS" = x"Minix"; then
419         echo >&2 "
420 WARNING: additional checks before running Build.sh required!
421 You can avoid these by calling Build.sh correctly, see below.
422 "
423         cat >conftest.c <<'EOF'
424 #include <sys/types.h>
425 const char *
426 #ifdef _NETBSD_SOURCE
427 ct="Ninix3"
428 #else
429 ct="Minix3"
430 #endif
431 ;
432 EOF
433         ct=unknown
434         vv ']' "${CC-cc} -E $CFLAGS $CPPFLAGS $NOWARN conftest.c | grep ct= | tr -d \\\\015 >x"
435         sed 's/^/[ /' x
436         eval `cat x`
437         rmf x vv.out
438         case $ct in
439         Minix3|Ninix3)
440                 echo >&2 "
441 Warning: you set TARGET_OS to $TARGET_OS but that is ambiguous.
442 Please set it to either Minix3 or Ninix3, whereas the latter is
443 all versions of Minix with even partial NetBSD(R) userland. The
444 value determined from your compiler for the current compilation
445 (which may be wrong) is: $ct
446 "
447                 TARGET_OS=$ct
448                 ;;
449         *)
450                 echo >&2 "
451 Warning: you set TARGET_OS to $TARGET_OS but that is ambiguous.
452 Please set it to either Minix3 or Ninix3, whereas the latter is
453 all versions of Minix with even partial NetBSD(R) userland. The
454 proper value couldn't be determined, continue at your own risk.
455 "
456                 ;;
457         esac
458 fi
459
460 # Configuration depending on OS revision, on OSes that need them
461 case $TARGET_OS in
462 SCO_SV)
463         test x"$TARGET_OSREV" = x"" && TARGET_OSREV=`uname -r`
464         ;;
465 esac
466
467 # Configuration depending on OS name
468 case $TARGET_OS in
469 AIX)
470         oswarn="; it is untested"
471         add_cppflags -D_ALL_SOURCE
472         ;;
473 Darwin)
474         oswarn="; it is untested"
475         add_cppflags -D_DARWIN_C_SOURCE
476         ;;
477 FreeMiNT)
478         oswarn="; it is untested"
479         add_cppflags -D_GNU_SOURCE
480         ;;
481 GNU)
482         oswarn="; it is untested"
483         case $CC in
484         *tendracc*) ;;
485         *) add_cppflags -D_GNU_SOURCE ;;
486         esac
487         ;;
488 GNU/kFreeBSD)
489         oswarn="; it is untested"
490         case $CC in
491         *tendracc*) ;;
492         *) add_cppflags -D_GNU_SOURCE ;;
493         esac
494         ;;
495 Interix)
496         oswarn="; it is untested"
497         ccpc='-X '
498         ccpl='-Y '
499         add_cppflags -D_ALL_SOURCE
500         ;;
501 Linux)
502         case $CC in
503         *tendracc*) ;;
504         *) add_cppflags -D_GNU_SOURCE ;;
505         esac
506         ;;
507 midipix)
508         add_cppflags -D_GNU_SOURCE
509         ;;
510 MidnightBSD)
511         add_cppflags -D_WITH_DPRINTF
512         add_cppflags -DUT_NAMESIZE=32
513         ;;
514 MirBSD)
515         add_cppflags -D_ALL_SOURCE
516         ;;
517 MSYS_*)
518         oswarn="; it is untested"
519         # broken on this OE (from ir0nh34d)
520         : "${HAVE_STDINT_H=0}"
521         ;;
522 NetBSD)
523         add_cppflags -D_NETBSD_SOURCE
524         add_cppflags -D_OPENBSD_SOURCE
525         ;;
526 NEXTSTEP)
527         oswarn="; it is untested"
528         add_cppflags -D_NEXT_SOURCE
529         add_cppflags -D_POSIX_SOURCE
530         : "${CC=cc -posix}"
531         ;;
532 OS/390)
533         oswarn='; EBCDIC support is incomplete'
534         oswarn="; it is untested"
535         : "${CC=xlc}"
536         add_cppflags -D_ALL_SOURCE
537         ;;
538 OSF1)
539         oswarn="; it is untested"
540         add_cppflags -D_OSF_SOURCE
541         add_cppflags -D_POSIX_C_SOURCE=200112L
542         add_cppflags -D_XOPEN_SOURCE=600
543         add_cppflags -D_XOPEN_SOURCE_EXTENDED
544         ;;
545 QNX)
546         oswarn="; it is untested"
547         add_cppflags -D__NO_EXT_QNX
548         add_cppflags -D__EXT_UNIX_MISC
549         ;;
550 SunOS)
551         oswarn="; it is untested"
552         add_cppflags -D_BSD_SOURCE
553         add_cppflags -D__EXTENSIONS__
554         ;;
555 syllable)
556         oswarn="; it is untested"
557         add_cppflags -D_GNU_SOURCE
558         ;;
559 ULTRIX)
560         oswarn="; it is untested"
561         : "${CC=cc -YPOSIX}"
562         add_cppflags -DMKSH_TYPEDEF_SSIZE_T=int
563         ;;
564 UWIN*)
565         oswarn="; it is untested"
566         ccpc='-Yc,'
567         ccpl='-Yl,'
568         tsts=" 3<>/dev/tty"
569         ;;
570 *)
571         oswarn='; it may or may not work'
572         test x"$TARGET_OSREV" = x"" && TARGET_OSREV=`uname -r`
573         ;;
574 esac
575
576 : "${CC=cc}"
577
578 # this aids me in tracing FTBFSen without access to the buildd
579 $e "Hi from$ao ${bi}mgp Build.sh $srcversion$ao on:"
580 case $TARGET_OS in
581 AIX)
582         vv '|' "oslevel >&2"
583         vv '|' "uname -a >&2"
584         ;;
585 Darwin)
586         vv '|' "hwprefs machine_type os_type os_class >&2"
587         vv '|' "sw_vers >&2"
588         vv '|' "system_profiler -detailLevel mini SPSoftwareDataType SPHardwareDataType >&2"
589         vv '|' "/bin/sh --version >&2"
590         vv '|' "xcodebuild -version >&2"
591         vv '|' "uname -a >&2"
592         vv '|' "sysctl kern.version hw.machine hw.model hw.memsize hw.availcpu hw.ncpu hw.cpufrequency hw.byteorder hw.cpu64bit_capable >&2"
593         vv '|' "sysctl hw.cpufrequency hw.byteorder hw.cpu64bit_capable hw.ncpu >&2"
594         ;;
595 IRIX*)
596         vv '|' "uname -a >&2"
597         vv '|' "hinv -v >&2"
598         ;;
599 OSF1)
600         vv '|' "uname -a >&2"
601         vv '|' "/usr/sbin/sizer -v >&2"
602         ;;
603 SCO_SV|UnixWare|UNIX_SV)
604         vv '|' "uname -a >&2"
605         vv '|' "uname -X >&2"
606         ;;
607 *)
608         vv '|' "uname -a >&2"
609         ;;
610 esac
611 test -z "$oswarn" || echo >&2 "
612 Warning: MagicPoint has not yet been ported to or tested on your
613 operating system '$TARGET_OS'$oswarn. If you can provide
614 a shell account to the developer, this may improve; please
615 drop us a success or failure notice or even send in diffs.
616 "
617 $e "$bi$me: Building MagicPoint$ao ${ui}mgp $srcversion$ao on $TARGET_OS ${TARGET_OSREV}..."
618
619 #
620 # Start of mirtoconf checks
621 #
622 $e $bi$me: Scanning for functions... please ignore any errors.$ao
623
624 #
625 # Compiler: which one?
626 #
627 # notes:
628 # - ICC defines __GNUC__ too
629 # - GCC defines __hpux too
630 # - LLVM+clang defines __GNUC__ too
631 # - nwcc defines __GNUC__ too
632 CPP="$CC -E"
633 $e ... which compiler type seems to be used
634 cat >conftest.c <<'EOF'
635 const char *
636 #if defined(__ICC) || defined(__INTEL_COMPILER)
637 ct="icc"
638 #elif defined(__xlC__) || defined(__IBMC__)
639 ct="xlc"
640 #elif defined(__SUNPRO_C)
641 ct="sunpro"
642 #elif defined(__ACK__)
643 ct="ack"
644 #elif defined(__BORLANDC__)
645 ct="bcc"
646 #elif defined(__WATCOMC__)
647 ct="watcom"
648 #elif defined(__MWERKS__)
649 ct="metrowerks"
650 #elif defined(__HP_cc)
651 ct="hpcc"
652 #elif defined(__DECC) || (defined(__osf__) && !defined(__GNUC__))
653 ct="dec"
654 #elif defined(__PGI)
655 ct="pgi"
656 #elif defined(__DMC__)
657 ct="dmc"
658 #elif defined(_MSC_VER)
659 ct="msc"
660 #elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
661 ct="adsp"
662 #elif defined(__IAR_SYSTEMS_ICC__)
663 ct="iar"
664 #elif defined(SDCC)
665 ct="sdcc"
666 #elif defined(__PCC__)
667 ct="pcc"
668 #elif defined(__TenDRA__)
669 ct="tendra"
670 #elif defined(__TINYC__)
671 ct="tcc"
672 #elif defined(__llvm__) && defined(__clang__)
673 ct="clang"
674 #elif defined(__NWCC__)
675 ct="nwcc"
676 #elif defined(__GNUC__)
677 ct="gcc"
678 #elif defined(_COMPILER_VERSION)
679 ct="mipspro"
680 #elif defined(__sgi)
681 ct="mipspro"
682 #elif defined(__hpux) || defined(__hpua)
683 ct="hpcc"
684 #elif defined(__ultrix)
685 ct="ucode"
686 #elif defined(__USLC__)
687 ct="uslc"
688 #elif defined(__LCC__)
689 ct="lcc"
690 #elif defined(MKSH_MAYBE_KENCC)
691 /* and none of the above matches */
692 ct="kencc"
693 #else
694 ct="unknown"
695 #endif
696 ;
697 const char *
698 #if defined(__KLIBC__) && !defined(__OS2__)
699 et="klibc"
700 #else
701 et="unknown"
702 #endif
703 ;
704 EOF
705 ct=untested
706 et=untested
707 vv ']' "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c | \
708     sed -n '/^ *[ce]t *= */s/^ *\([ce]t\) *= */\1=/p' | tr -d \\\\015 >x"
709 sed 's/^/[ /' x
710 eval `cat x`
711 rmf x vv.out
712 cat >conftest.c <<'EOF'
713 #include <unistd.h>
714 int main(void) { return (dup(0)); }
715 EOF
716 case $ct in
717 ack)
718         # work around "the famous ACK const bug"
719         CPPFLAGS="-Dconst= $CPPFLAGS"
720         ;;
721 adsp)
722         echo >&2 'Warning: Analog Devices C++ compiler for Blackfin, TigerSHARC
723     and SHARC (21000) DSPs detected. This compiler has not yet
724     been tested for compatibility with mgp. Continue at your
725     own risk, please report success/failure to the developers.'
726         ;;
727 bcc)
728         echo >&2 "Warning: Borland C++ Builder detected. This compiler might
729     produce broken executables. Continue at your own risk,
730     please report success/failure to the developers."
731         ;;
732 clang)
733         # does not work with current "ccc" compiler driver
734         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version"
735         # one of these two works, for now
736         vv '|' "${CLANG-clang} -version"
737         vv '|' "${CLANG-clang} --version"
738         # ensure compiler and linker are in sync unless overridden
739         case $CCC_CC:$CCC_LD in
740         :*)     ;;
741         *:)     CCC_LD=$CCC_CC; export CCC_LD ;;
742         esac
743         ;;
744 dec)
745         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V"
746         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -Wl,-V conftest.c $LIBS"
747         ;;
748 dmc)
749         echo >&2 "Warning: Digital Mars Compiler detected. When running under"
750         echo >&2 "    UWIN, mksh tends to be unstable due to the limitations"
751         echo >&2 "    of this platform. Continue at your own risk,"
752         echo >&2 "    please report success/failure to the developers."
753         ;;
754 gcc)
755         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
756         vv '|' 'eval echo "\`$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -dumpmachine\`" \
757                  "gcc\`$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -dumpversion\`"'
758         ;;
759 hpcc)
760         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
761         ;;
762 iar)
763         echo >&2 'Warning: IAR Systems (http://www.iar.com) compiler for embedded
764     systems detected. This unsupported compiler has not yet
765     been tested for compatibility with mgp. Continue at your
766     own risk, please report success/failure to the developers.'
767         ;;
768 icc)
769         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V"
770         ;;
771 kencc)
772         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
773         ;;
774 lcc)
775         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
776         add_cppflags -D__inline__=__inline
777         ;;
778 metrowerks)
779         echo >&2 'Warning: Metrowerks C compiler detected. This has not yet
780     been tested for compatibility with mgp. Continue at your
781     own risk, please report success/failure to the developers.'
782         ;;
783 mipspro)
784         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version"
785         ;;
786 msc)
787         ccpr=           # errorlevels are not reliable
788         case $TARGET_OS in
789         Interix)
790                 if [[ -n $C89_COMPILER ]]; then
791                         C89_COMPILER=`ntpath2posix -c "$C89_COMPILER"`
792                 else
793                         C89_COMPILER=CL.EXE
794                 fi
795                 if [[ -n $C89_LINKER ]]; then
796                         C89_LINKER=`ntpath2posix -c "$C89_LINKER"`
797                 else
798                         C89_LINKER=LINK.EXE
799                 fi
800                 vv '|' "$C89_COMPILER /HELP >&2"
801                 vv '|' "$C89_LINKER /LINK >&2"
802                 ;;
803         esac
804         ;;
805 nwcc)
806         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version"
807         ;;
808 pcc)
809         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -v"
810         ;;
811 pgi)
812         echo >&2 'Warning: PGI detected. This unknown compiler has not yet
813     been tested for compatibility with mgp. Continue at your
814     own risk, please report success/failure to the developers.'
815         ;;
816 sdcc)
817         echo >&2 'Warning: sdcc (http://sdcc.sourceforge.net), the small devices
818     C compiler for embedded systems detected. This has not yet
819     been tested for compatibility with mgp. Continue at your
820     own risk, please report success/failure to the developers.'
821         ;;
822 sunpro)
823         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
824         ;;
825 tcc)
826         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -v"
827         ;;
828 tendra)
829         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V 2>&1 | \
830             grep -F -i -e version -e release"
831         ;;
832 ucode)
833         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V"
834         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -Wl,-V conftest.c $LIBS"
835         ;;
836 uslc)
837         case $TARGET_OS:$TARGET_OSREV in
838         SCO_SV:3.2*)
839                 # SCO OpenServer 5
840                 CFLAGS="$CFLAGS -g"
841                 : "${HAVE_CAN_OTWO=0}${HAVE_CAN_OPTIMISE=0}"
842                 ;;
843         esac
844         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
845         ;;
846 watcom)
847         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
848         ;;
849 xlc)
850         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -qversion"
851         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -qversion=verbose"
852         vv '|' "ld -V"
853         ;;
854 *)
855         test x"$ct" = x"untested" && $e "!!! detecting preprocessor failed"
856         ct=unknown
857         vv "$CC --version"
858         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
859         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
860         ;;
861 esac
862 etd=" on $et"
863 case $et in
864 klibc)
865         ;;
866 unknown)
867         # nothing special detected, don’t worry
868         etd=
869         ;;
870 *)
871         # huh?
872         ;;
873 esac
874 $e "$bi==> which compiler type seems to be used...$ao $ui$ct$etd$ao"
875 rmf conftest.c conftest.o conftest a.out* a.exe* conftest.exe* vv.out
876
877 #
878 # Compiler: works as-is, with -Wno-error and -Werror
879 #
880 save_NOWARN=$NOWARN
881 NOWARN=
882 DOWARN=
883 ac_flags 0 compiler_works '' 'if the compiler works'
884 test 1 = $HAVE_CAN_COMPILER_WORKS || exit 1
885 HAVE_COMPILER_KNOWN=0
886 test $ct = unknown || HAVE_COMPILER_KNOWN=1
887 if ac_ifcpp 'if 0' compiler_fails '' \
888     'if the compiler does not fail correctly'; then
889         save_CFLAGS=$CFLAGS
890         : "${HAVE_CAN_DELEXE=x}"
891         case $ct in
892         dec)
893                 CFLAGS="$CFLAGS ${ccpl}-non_shared"
894                 ac_testn can_delexe compiler_fails 0 'for the -non_shared linker option' <<-'EOF'
895                         #include <unistd.h>
896                         int main(void) { return (dup(0)); }
897                 EOF
898                 ;;
899         dmc)
900                 CFLAGS="$CFLAGS ${ccpl}/DELEXECUTABLE"
901                 ac_testn can_delexe compiler_fails 0 'for the /DELEXECUTABLE linker option' <<-'EOF'
902                         #include <unistd.h>
903                         int main(void) { return (dup(0)); }
904                 EOF
905                 ;;
906         *)
907                 exit 1
908                 ;;
909         esac
910         test 1 = $HAVE_CAN_DELEXE || CFLAGS=$save_CFLAGS
911         ac_ifcpp 'if 0' compiler_still_fails \
912             'if the compiler still does not fail correctly' && exit 1
913 fi
914 if ac_ifcpp 'ifdef __TINYC__' couldbe_tcc '!' compiler_known 0 \
915     'if this could be tcc'; then
916         ct=tcc
917         CPP='cpp -D__TINYC__'
918         HAVE_COMPILER_KNOWN=1
919 fi
920
921 case $ct in
922 bcc)
923         save_NOWARN="${ccpc}-w"
924         DOWARN="${ccpc}-w!"
925         ;;
926 dec)
927         # -msg_* flags not used yet, or is -w2 correct?
928         ;;
929 dmc)
930         save_NOWARN="${ccpc}-w"
931         DOWARN="${ccpc}-wx"
932         ;;
933 hpcc)
934         save_NOWARN=
935         DOWARN=+We
936         ;;
937 kencc)
938         save_NOWARN=
939         DOWARN=
940         ;;
941 mipspro)
942         save_NOWARN=
943         DOWARN="-diag_error 1-10000"
944         ;;
945 msc)
946         save_NOWARN="${ccpc}/w"
947         DOWARN="${ccpc}/WX"
948         ;;
949 sunpro)
950         test x"$save_NOWARN" = x"" && save_NOWARN='-errwarn=%none'
951         ac_flags 0 errwarnnone "$save_NOWARN"
952         test 1 = $HAVE_CAN_ERRWARNNONE || save_NOWARN=
953         ac_flags 0 errwarnall "-errwarn=%all"
954         test 1 = $HAVE_CAN_ERRWARNALL && DOWARN="-errwarn=%all"
955         ;;
956 tendra)
957         save_NOWARN=-w
958         ;;
959 ucode)
960         save_NOWARN=
961         DOWARN=-w2
962         ;;
963 watcom)
964         save_NOWARN=
965         DOWARN=-Wc,-we
966         ;;
967 xlc)
968         case $TARGET_OS in
969         OS/390)
970                 save_NOWARN=-qflag=e
971                 DOWARN=-qflag=i
972                 ;;
973         *)
974                 save_NOWARN=-qflag=i:e
975                 DOWARN=-qflag=i:i
976                 ;;
977         esac
978         ;;
979 *)
980         test x"$save_NOWARN" = x"" && save_NOWARN=-Wno-error
981         ac_flags 0 wnoerror "$save_NOWARN"
982         test 1 = $HAVE_CAN_WNOERROR || save_NOWARN=
983         ac_flags 0 werror -Werror
984         test 1 = $HAVE_CAN_WERROR && DOWARN=-Werror
985         test $ct = icc && DOWARN="$DOWARN -wd1419"
986         ;;
987 esac
988 NOWARN=$save_NOWARN
989
990 #
991 # Compiler: extra flags (-O2 -f* -W* etc.)
992 #
993 i=`echo :"$orig_CFLAGS" | sed 's/^://' | tr -c -d $alll$allu$alln`
994 # optimisation: only if orig_CFLAGS is empty
995 test x"$i" = x"" && case $ct in
996 hpcc)
997         phase=u
998         ac_flags 1 otwo +O2
999         phase=x
1000         ;;
1001 kencc|tcc|tendra)
1002         # no special optimisation
1003         ;;
1004 sunpro)
1005         cat >x <<-'EOF'
1006                 #include <unistd.h>
1007                 int main(void) { return (dup(0)); }
1008                 #define __IDSTRING_CONCAT(l,p)  __LINTED__ ## l ## _ ## p
1009                 #define __IDSTRING_EXPAND(l,p)  __IDSTRING_CONCAT(l,p)
1010                 #define pad                     void __IDSTRING_EXPAND(__LINE__,x)(void) { }
1011         EOF
1012         yes pad | head -n 256 >>x
1013         ac_flags - 1 otwo -xO2 <x
1014         rmf x
1015         ;;
1016 xlc)
1017         ac_flags 1 othree "-O3 -qstrict"
1018         test 1 = $HAVE_CAN_OTHREE || ac_flags 1 otwo -O2
1019         ;;
1020 *)
1021         ac_flags 1 otwo -O2
1022         test 1 = $HAVE_CAN_OTWO || ac_flags 1 optimise -O
1023         ;;
1024 esac
1025 # other flags: just add them if they are supported
1026 i=0
1027 case $ct in
1028 bcc)
1029         ac_flags 1 strpool "${ccpc}-d" 'if string pooling can be enabled'
1030         ;;
1031 clang)
1032         i=1
1033         ;;
1034 dec)
1035         ac_flags 0 verb -verbose
1036         ac_flags 1 rodata -readonly_strings
1037         ;;
1038 dmc)
1039         ac_flags 1 decl "${ccpc}-r" 'for strict prototype checks'
1040         ac_flags 1 schk "${ccpc}-s" 'for stack overflow checking'
1041         ;;
1042 gcc)
1043         # The following tests run with -Werror (gcc only) if possible
1044         NOWARN=$DOWARN; phase=u
1045         # MagicPoint is not written in CFrustFrust!
1046         ac_flags 1 no_eh_frame -fno-asynchronous-unwind-tables
1047         ac_flags 1 fnostrictaliasing -fno-strict-aliasing
1048         ac_flags 1 fstackprotectorstrong -fstack-protector-strong
1049         test 1 = $HAVE_CAN_FSTACKPROTECTORSTRONG || \
1050             ac_flags 1 fstackprotectorall -fstack-protector-all
1051         ac_flags 1 data_abi_align -malign-data=abi
1052         i=1
1053         ;;
1054 hpcc)
1055         phase=u
1056         # probably not needed
1057         #ac_flags 1 agcc -Agcc 'for support of GCC extensions'
1058         phase=x
1059         ;;
1060 icc)
1061         ac_flags 1 fnobuiltinsetmode -fno-builtin-setmode
1062         ac_flags 1 fnostrictaliasing -fno-strict-aliasing
1063         ac_flags 1 fstacksecuritycheck -fstack-security-check
1064         i=1
1065         ;;
1066 mipspro)
1067         ac_flags 1 fullwarn -fullwarn 'for remark output support'
1068         ;;
1069 msc)
1070         ac_flags 1 strpool "${ccpc}/GF" 'if string pooling can be enabled'
1071         echo 'int main(void) { char test[64] = ""; return (*test); }' >x
1072         ac_flags - 1 stackon "${ccpc}/GZ" 'if stack checks can be enabled' <x
1073         ac_flags - 1 stckall "${ccpc}/Ge" 'stack checks for all functions' <x
1074         ac_flags - 1 secuchk "${ccpc}/GS" 'for compiler security checks' <x
1075         rmf x
1076         ac_flags 1 wall "${ccpc}/Wall" 'to enable all warnings'
1077         ac_flags 1 wp64 "${ccpc}/Wp64" 'to enable 64-bit warnings'
1078         ;;
1079 nwcc)
1080         #broken# ac_flags 1 ssp -stackprotect
1081         i=1
1082         ;;
1083 pcc)
1084         ac_flags 1 fstackprotectorall -fstack-protector-all
1085         i=1
1086         ;;
1087 sunpro)
1088         phase=u
1089         ac_flags 1 v -v
1090         ac_flags 1 ipo -xipo 'for cross-module optimisation'
1091         phase=x
1092         ;;
1093 tcc)
1094         : #broken# ac_flags 1 boundschk -b
1095         ;;
1096 tendra)
1097         ac_flags 0 ysystem -Ysystem
1098         test 1 = $HAVE_CAN_YSYSTEM && CPPFLAGS="-Ysystem $CPPFLAGS"
1099         ac_flags 1 extansi -Xa
1100         ;;
1101 xlc)
1102         case $TARGET_OS in
1103         OS/390)
1104                 # On IBM z/OS, the following are warnings by default:
1105                 # CCN3296: #include file <foo.h> not found.
1106                 # CCN3944: Attribute "__foo__" is not supported and is ignored.
1107                 # CCN3963: The attribute "foo" is not a valid variable attribute and is ignored.
1108                 ac_flags 1 halton '-qhaltonmsg=CCN3296 -qhaltonmsg=CCN3944 -qhaltonmsg=CCN3963'
1109                 # CCN3290: Unknown macro name FOO on #undef directive.
1110                 # CCN4108: The use of keyword '__attribute__' is non-portable.
1111                 ac_flags 1 supprss '-qsuppress=CCN3290 -qsuppress=CCN4108'
1112                 ;;
1113         *)
1114                 ac_flags 1 rodata '-qro -qroconst -qroptr'
1115                 ac_flags 1 rtcheck -qcheck=all
1116                 #ac_flags 1 rtchkc -qextchk     # reported broken
1117                 ac_flags 1 wformat '-qformat=all -qformat=nozln'
1118                 ;;
1119         esac
1120         #ac_flags 1 wp64 -qwarn64       # too verbose for now
1121         ;;
1122 esac
1123 # flags common to a subset of compilers (run with -Werror on gcc)
1124 if test 1 = $i; then
1125         ac_flags 1 wall -Wall
1126         ac_flags 1 fwrapv -fwrapv
1127         #XXX TODO for now…
1128         ac_flags 1 wnopointersign -Wno-pointer-sign
1129         ac_flags 1 wnounusedbutsetvariable -Wno-unused-but-set-variable
1130         ac_flags 1 wnounusedvariable -Wno-unused-variable
1131 fi
1132
1133 phase=x
1134 # The following tests run with -Werror or similar (all compilers) if possible
1135 NOWARN=$DOWARN
1136 test $ct = pcc && phase=u
1137
1138 #
1139 # Compiler: check for stuff that only generates warnings
1140 #
1141 ac_test attribute_bounded '' 'for __attribute__((__bounded__))' <<-'EOF'
1142         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1143         extern int thiswillneverbedefinedIhope(void);
1144         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1145         int main(void) { return (thiswillneverbedefinedIhope()); }
1146         #else
1147         #include <string.h>
1148         #undef __attribute__
1149         int xcopy(const void *, void *, size_t)
1150             __attribute__((__bounded__(__buffer__, 1, 3)))
1151             __attribute__((__bounded__(__buffer__, 2, 3)));
1152         int main(int ac, char *av[]) { return (xcopy(av[0], av[--ac], 1)); }
1153         int xcopy(const void *s, void *d, size_t n) {
1154                 /*
1155                  * if memmove does not exist, we are not on a system
1156                  * with GCC with __bounded__ attribute either so poo
1157                  */
1158                 memmove(d, s, n); return ((int)n);
1159         }
1160         #endif
1161 EOF
1162 ac_test attribute_format '' 'for __attribute__((__format__))' <<-'EOF'
1163         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1164         extern int thiswillneverbedefinedIhope(void);
1165         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1166         int main(void) { return (thiswillneverbedefinedIhope()); }
1167         #else
1168         #define fprintf printfoo
1169         #include <stdio.h>
1170         #undef __attribute__
1171         #undef fprintf
1172         extern int fprintf(FILE *, const char *format, ...)
1173             __attribute__((__format__(__printf__, 2, 3)));
1174         int main(int ac, char *av[]) { return (fprintf(stderr, "%s%d", *av, ac)); }
1175         #endif
1176 EOF
1177 ac_test attribute_nonnull '' 'for __attribute__((__nonnull__))' <<-'EOF'
1178         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1179         extern int thiswillneverbedefinedIhope(void);
1180         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1181         int main(void) { return (thiswillneverbedefinedIhope()); }
1182         #else
1183         #include <stdio.h>
1184         #undef __attribute__
1185         int fnord(const char *) __attribute__((__nonnull__(1)));
1186         int main(void) { return (fnord("x")); }
1187         int fnord(const char *x) { return (fputc(*x, stderr)); }
1188         #endif
1189 EOF
1190 ac_test attribute_noreturn '' 'for __attribute__((__noreturn__))' <<-'EOF'
1191         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1192         extern int thiswillneverbedefinedIhope(void);
1193         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1194         int main(void) { return (thiswillneverbedefinedIhope()); }
1195         #else
1196         #include <stdlib.h>
1197         #undef __attribute__
1198         void fnord(void) __attribute__((__noreturn__));
1199         int main(void) { fnord(); }
1200         void fnord(void) { exit(0); }
1201         #endif
1202 EOF
1203 ac_test attribute_pure '' 'for __attribute__((__pure__))' <<-'EOF'
1204         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1205         extern int thiswillneverbedefinedIhope(void);
1206         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1207         int main(void) { return (thiswillneverbedefinedIhope()); }
1208         #else
1209         #include <unistd.h>
1210         #undef __attribute__
1211         int foo(const char *) __attribute__((__pure__));
1212         int main(int ac, char *av[]) { return (foo(av[ac - 1]) + dup(0)); }
1213         int foo(const char *s) { return ((int)s[0]); }
1214         #endif
1215 EOF
1216 ac_test attribute_unused '' 'for __attribute__((__unused__))' <<-'EOF'
1217         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1218         extern int thiswillneverbedefinedIhope(void);
1219         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1220         int main(void) { return (thiswillneverbedefinedIhope()); }
1221         #else
1222         #include <unistd.h>
1223         #undef __attribute__
1224         int main(int ac __attribute__((__unused__)), char *av[]
1225             __attribute__((__unused__))) { return (dup(0)); }
1226         #endif
1227 EOF
1228 ac_test attribute_used '' 'for __attribute__((__used__))' <<-'EOF'
1229         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1230         extern int thiswillneverbedefinedIhope(void);
1231         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1232         int main(void) { return (thiswillneverbedefinedIhope()); }
1233         #else
1234         #include <unistd.h>
1235         #undef __attribute__
1236         static const char fnord[] __attribute__((__used__)) = "42";
1237         int main(void) { return (dup(0)); }
1238         #endif
1239 EOF
1240
1241 # End of tests run with -Werror
1242 NOWARN=$save_NOWARN
1243 phase=x
1244
1245 add_cppflags -DNeedFunctionPrototypes
1246
1247 #
1248 # Environment: headers
1249 #
1250 ac_header sys/time.h sys/types.h
1251 ac_header time.h sys/types.h
1252 test "11" = "$HAVE_SYS_TIME_H$HAVE_TIME_H" || HAVE_BOTH_TIME_H=0
1253 ac_test both_time_h '' 'whether <sys/time.h> and <time.h> can both be included' <<-'EOF'
1254         #include <sys/types.h>
1255         #include <sys/time.h>
1256         #include <time.h>
1257         #include <unistd.h>
1258         int main(void) { struct tm tm; return ((int)sizeof(tm) + dup(0)); }
1259 EOF
1260 ac_header sys/wait.h sys/types.h
1261 ac_header fcntl.h
1262 ac_header iconv.h
1263 ac_header locale.h
1264 ac_header termios.h
1265 ac_header util.h
1266
1267 #
1268 # Environment: definitions
1269 #
1270 echo '#include <sys/types.h>
1271 #include <fts.h>
1272 #include <unistd.h>
1273 /* check that off_t can represent 2^63-1 correctly, thx FSF */
1274 #define LARGE_OFF_T ((((off_t)1 << 31) << 31) - 1 + (((off_t)1 << 31) << 31))
1275 int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 &&
1276     LARGE_OFF_T % 2147483647 == 1) ? 1 : -1];
1277 int main(void) { return (dup(0)); }' >lft.c
1278 ac_testn can_lfs '' "for large file support" <lft.c
1279 save_CPPFLAGS=$CPPFLAGS
1280 add_cppflags -D_FILE_OFFSET_BITS=64
1281 ac_testn can_lfs_sus '!' can_lfs 0 "... with -D_FILE_OFFSET_BITS=64" <lft.c
1282 if test 0 = $HAVE_CAN_LFS_SUS; then
1283         CPPFLAGS=$save_CPPFLAGS
1284         add_cppflags -D_LARGE_FILES=1
1285         ac_testn can_lfs_aix '!' can_lfs 0 "... with -D_LARGE_FILES=1" <lft.c
1286         test 1 = $HAVE_CAN_LFS_AIX || CPPFLAGS=$save_CPPFLAGS
1287 fi
1288 rm -f lft.c
1289 rmf lft*        # end of large file support test
1290
1291 PK_DEFS=
1292 PK_LIBS=
1293 for pkg in $pkgs; do
1294         $e Running pkg-config for $pkg...
1295         PK_DEFS="$PK_DEFS `pkg-config --cflags $pkg`"
1296         PK_LIBS="$PK_LIBS `pkg-config --libs $pkg`"
1297 done
1298
1299 #
1300 # Environment: types
1301 #
1302 ac_test can_uchar '' "for u_char" <<-'EOF'
1303         #include <sys/types.h>
1304         #include <stddef.h>
1305         int main(int ac, char *av[]) { return ((u_char)(unsigned char)av[ac - 1][0]); }
1306 EOF
1307 ac_test can_ushort '' "for u_short" <<-'EOF'
1308         #include <sys/types.h>
1309         #include <stddef.h>
1310         int main(int ac, char *av[]) { return ((u_short)(unsigned char)av[ac - 1][0]); }
1311 EOF
1312 ac_test can_uint '' "for u_int" <<-'EOF'
1313         #include <sys/types.h>
1314         #include <stddef.h>
1315         int main(int ac, char *av[]) { return ((u_int)(unsigned char)av[ac - 1][0]); }
1316 EOF
1317 ac_test can_ulong '' "for u_long" <<-'EOF'
1318         #include <sys/types.h>
1319         #include <stddef.h>
1320         int main(int ac, char *av[]) { return ((u_long)(size_t)av[ac]); }
1321 EOF
1322
1323 #
1324 # check whether the final link ought to succeed
1325 #
1326 HAVE_LINK_WORKS=x
1327 save_CPPFLAGS=$CPPFLAGS
1328 save_LIBS=$LIBS
1329 CPPFLAGS="-I$srcdir $CPPFLAGS $PK_DEFS -DBUILDSH_LINKTEST"
1330 LIBS="$LIBS $PK_LIBS"
1331 ac_testinit link_works '' 'checking if the final link command may succeed'
1332 fv=1
1333 cat >conftest.c <<-EOF
1334         #include "mgp.h"
1335         #if HAVE_LOCALE_H
1336         #include <locale.h>
1337         #endif
1338         #include <fcntl.h>
1339         #ifdef TTY_KEYINPUT
1340         #include <termios.h>
1341         #endif
1342
1343         int main(void) { printf("Hello, World!\\n"); return (dup(0)); }
1344 EOF
1345 v "$CC $CFLAGS $CPPFLAGS $NOWARN -c conftest.c" || fv=0
1346 test $fv = 0 || v "$CC $CFLAGS $LDFLAGS -o $tcfn conftest.o $LIBS $ccpr"
1347 test -f $tcfn || fv=0
1348 ac_testdone
1349 test $fv = 1 || exit 1
1350 LIBS=$save_LIBS
1351 CPPFLAGS=$save_CPPFLAGS
1352
1353 #
1354 # Environment: library functions
1355 #
1356 cat >lft.c <<-'EOF'
1357         #if HAVE_ICONV_H
1358         #include <iconv.h>
1359         #endif
1360         #include <stdio.h>
1361         #include <string.h>
1362         int main(int ac, char *av[]) {
1363                 iconv_t cd;
1364                 char *srcp = av[1], *dstp = av[2];
1365                 size_t ilen = strlen(srcp), olen = 1;
1366
1367                 if ((cd = iconv_open("dst", "src")) == (iconv_t)-1)
1368                         return (2);
1369                 if (iconv(cd, &srcp, &ilen, &dstp, &olen) < 0)
1370                         return (3);
1371                 return (iconv_close(cd) != 0);
1372         }
1373 EOF
1374 ac_testn iconv <lft.c
1375 iconv_L=
1376 if test 0 = $HAVE_ICONV; then
1377         save_LIBS=$LIBS
1378         LIBS="$LIBS -liconv"
1379         HAVE_ICONV=x
1380         ac_testn iconv <lft.c
1381         if test 1 = $HAVE_ICONV; then
1382                 iconv_L=-liconv
1383         fi
1384         LIBS=$save_LIBS
1385 fi
1386 ac_cppflags
1387 rm -f lft.c
1388 rmf lft*
1389
1390 ac_test setreuid '' 'for setreuid and setregid' <<-'EOF'
1391         #include <sys/types.h>
1392         #include <unistd.h>
1393         int main(void) { return (setreuid(0,0) + setregid(0,0)); }
1394 EOF
1395
1396 save_LIBS=$LIBS
1397 LIBS="$LIBS -lutil"
1398 ac_test uu_lock <<-'EOF'
1399         #include <sys/types.h>
1400         #if HAVE_UTIL_H
1401         #include <util.h>
1402         #endif
1403         int main(int ac, char *av[]) { return (uu_lock(av[ac - 1])); }
1404 EOF
1405 LIBS=$save_LIBS
1406 if test 0 = $HAVE_UU_LOCK; then
1407         uulock_L=
1408         uulock_O=uucplock.o
1409 else
1410         uulock_L=-lutil
1411         uulock_O=
1412 fi
1413
1414 #
1415 # check headers for declarations
1416 #
1417
1418 #
1419 # other checks
1420 #
1421
1422 #
1423 # End of mirtoconf checks
1424 #
1425 $e ... done.
1426 rmf vv.out
1427
1428 test 1 = "$HAVE_CAN_VERB" && CFLAGS="$CFLAGS -verbose"
1429
1430 $e $bi$me: Finished configuration testing, now producing output.$ao
1431
1432 case $tcfn in
1433 a.exe|conftest.exe)
1434         suf=.exe
1435         ;;
1436 *)
1437         suf=
1438         ;;
1439 esac
1440 rm -f Makefile
1441 cat >Makefile~ <<\EOF
1442 # Makefile for building MagicPoint
1443 # generated, do not edit; re-run Build.sh if necessary!
1444
1445 # feel free to override those
1446
1447 # used for building
1448 AR=             ar
1449 AR_CREATE=      $(AR) cq
1450 LEX=            flex
1451 RANLIB=         ranlib
1452 SH=             sh
1453 YACC=           yacc
1454
1455 # used for installing
1456 DESTDIR=
1457 PERL=           /usr/bin/env perl
1458 PREFIX=         /usr
1459 SYSCONFDIR=     /etc
1460 BINDIR=         $(PREFIX)/bin
1461 MANDIR=         $(PREFIX)/share/man
1462 DOCDIR=         $(PREFIX)/share/doc/mgp
1463 EMACSDIR=       $(PREFIX)/share/emacs/site-lisp/mgp
1464 MGPELDIR=       $(DOCDIR)/contrib/mgp-el
1465 #SAMPLEDIR=     $(DOCDIR)/examples
1466 SAMPLEDIR=      $(PREFIX)/share/examples/mgp
1467 RCDIR=          $(SYSCONFDIR)/mgp
1468
1469 # set to empty to not install (Debian)
1470 INST_LICENCE=   LICENCE
1471 INST_RELNOTES=  RELNOTES
1472
1473 # or /usr/ucb/install
1474 INSTALL=        install
1475 INSTALL_COPY=   -c
1476 INSTALL_STRIP=  -s
1477 BINMODE=        555
1478 CONFMODE=       644
1479 NONBINMODE=     444
1480 DIRMODE=        755
1481 INSTALL_DIR=    $(INSTALL) -d -m $(DIRMODE)
1482 INSTALL_PROGRAM=$(INSTALL) $(INSTALL_COPY) $(INSTALL_STRIP) -m $(BINMODE)
1483 INSTALL_SCRIPT= $(INSTALL) $(INSTALL_COPY) -m $(BINMODE)
1484 INSTALL_DATA=   $(INSTALL) $(INSTALL_COPY) -m $(NONBINMODE)
1485 INSTALL_CONF=   $(INSTALL) $(INSTALL_COPY) -m $(CONFMODE)
1486
1487 # do NOT override these, re-run Build.sh if necessary!
1488 EOF
1489 sed 's/#/\\&/g' >>Makefile~ <<EOF
1490 CC=             $CC
1491 CPPFLAGS=       $CPPFLAGS
1492 CFLAGS=         $CFLAGS
1493 LDFLAGS=        $LDFLAGS
1494 LIBS=           $LIBS
1495 SRCDIR=         $srcdir
1496 PK_DEFS=        $PK_DEFS
1497 PK_LIBS=        $PK_LIBS
1498 iconv_L=        $iconv_L
1499 uulock_L=       $uulock_L
1500 uulock_O=       $uulock_O
1501
1502 E=              $suf
1503 mgpversion=     $srcversion
1504 EOF
1505 cat >>Makefile~ <<\EOF
1506
1507 # internals
1508 MAN1=           $(SRCDIR)/contrib/xmindpath/xmindpath.1 \
1509                 $(SRCDIR)/contrib/xwintoppm/xwintoppm.1 \
1510                 $(SRCDIR)/contrib/mgpnet.1 \
1511                 $(SRCDIR)/mgp.1 $(SRCDIR)/mgp2ps.1
1512
1513 xmp_DEFS=       -I$(SRCDIR)/contrib/xmindpath
1514 xmp_OBJS=       main.o $(uulock_O)
1515 xmp_LIBS=       -lXtst -lX11 $(uulock_L)
1516
1517 xwp_DEFS=       -I$(SRCDIR)/contrib/xwintoppm
1518 xwp_OBJS=       dsimple.o list.o multiVis.o xwintoppm.o
1519 xwp_LIBS=       -lXmu -lXt -lX11
1520
1521 mgp_DEFS=       -I$(SRCDIR) -DMGPLIBDIR=\"$(RCDIR)\" $(PK_DEFS)
1522 mgp_LIBS=       -L. -lmgpcommon $(PK_LIBS) $(iconv_L) -lX11 -lm
1523
1524 lib_DEFS=       $(mgp_DEFS) -I$(SRCDIR)/image
1525 lib_OBJS=       ctlwords.o \
1526                 dither.o halftone.o imagetypes.o imlib_loader.o \
1527                 misc.o new.o path.o reduce.o send.o value.o zoom.o \
1528                 background.o draw.o globals.o y.tab.o parse.o \
1529                 plist.o postscript.o lex.yy.o unimap.o
1530
1531 mgp_OBJS=       mgp.o x11.o
1532 mps_OBJS=       print.o x11dummy.o
1533
1534 all: mgp$E mgp2ps$E xmindpath$E xwintoppm$E mgp2html mgp2latex mgpnet
1535
1536 ctlwords.c ctlwords.h ctlwords.pl: $(SRCDIR)/ctlwords.sh
1537         $(SH) $(SRCDIR)/ctlwords.sh
1538
1539 mgp2html: ctlwords.pl $(SRCDIR)/contrib/mgp2html.pl.in
1540         echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
1541             $(SRCDIR)/contrib/mgp2html.pl.in
1542
1543 mgp2latex: ctlwords.pl $(SRCDIR)/contrib/mgp2latex.pl.in
1544         echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
1545             $(SRCDIR)/contrib/mgp2latex.pl.in
1546
1547 mgpnet: ctlwords.pl $(SRCDIR)/contrib/mgpnet.in
1548         echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
1549             $(SRCDIR)/contrib/mgpnet.in
1550
1551 xmindpath$E: $(xmp_OBJS)
1552         $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(xmp_OBJS) $(LIBS) $(xmp_LIBS)
1553
1554 xwintoppm$E: $(xwp_OBJS)
1555         $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(xwp_OBJS) $(LIBS) $(xwp_LIBS)
1556
1557 mgp$E: $(mgp_OBJS) libmgpcommon.a
1558         $(CC) $(CFLAGS) $(mgp_DEFS) $(LDFLAGS) -o $@ \
1559             $(mgp_OBJS) $(LIBS) $(mgp_LIBS)
1560
1561 mgp2ps$E: $(mps_OBJS) libmgpcommon.a
1562         $(CC) $(CFLAGS) $(mgp_DEFS) $(LDFLAGS) -o $@ \
1563             $(mps_OBJS) $(LIBS) $(mgp_LIBS)
1564
1565 libmgpcommon.a: $(lib_OBJS)
1566         @rm -f $@
1567         $(AR_CREATE) $@ $(lib_OBJS)
1568         $(RANLIB) $@
1569
1570 y.tab.c y.tab.h: $(SRCDIR)/grammar.y
1571         $(YACC) -d $(SRCDIR)/grammar.y
1572
1573 lex.yy.c: $(SRCDIR)/scanner.l
1574         $(LEX) $(SRCDIR)/scanner.l
1575
1576 EOF
1577 dofile() {
1578         dstbn=`basename "$1" | sed 's/\.[^.]*$//'`
1579         srcf=
1580         srca=
1581         while test -n "$1"; do
1582                 if test -f "$srcdir/$1"; then
1583                         f='$(SRCDIR)/'"$1"
1584                 else
1585                         f=$1
1586                 fi
1587                 shift
1588                 if test -n "$srcf"; then
1589                         srca="$srca $f"
1590                 else
1591                         srca=$f
1592                         srcf=$f
1593                 fi
1594         done
1595         cat >>Makefile~ <<EOF
1596 $dstbn.o: $srca
1597         \$(CC) \$(CPPFLAGS) \$(CFLAGS) $defs -c $srcf
1598
1599 EOF
1600 }
1601 xlih="image/xloadimage.h image/image.h"
1602 mgph="mgp.h $xlih ctlwords.h"
1603 defs='$(xmp_DEFS)'
1604 dofile contrib/xmindpath/main.c
1605 dofile contrib/xmindpath/uucplock.c contrib/xmindpath/pathnames.h
1606 defs='$(xwp_DEFS)'
1607 dofile contrib/xwintoppm/dsimple.c
1608 dofile contrib/xwintoppm/list.c contrib/xwintoppm/list.h
1609 dofile contrib/xwintoppm/multiVis.c contrib/xwintoppm/list.h \
1610     contrib/xwintoppm/wsutils.h contrib/xwintoppm/multiVis.h
1611 dofile contrib/xwintoppm/xwintoppm.c contrib/xwintoppm/dsimple.h \
1612     contrib/xwintoppm/list.h \
1613     contrib/xwintoppm/wsutils.h contrib/xwintoppm/multiVis.h
1614 defs='$(mgp_DEFS)'
1615 dofile ctlwords.c
1616 defs='$(lib_DEFS)'
1617 dofile image/dither.c image/image.h
1618 dofile image/halftone.c image/image.h
1619 dofile image/imagetypes.c $xlih
1620 dofile image/imlib_loader.c image/image.h
1621 dofile image/misc.c image/image.h
1622 dofile image/new.c image/image.h
1623 dofile image/path.c $xlih
1624 dofile image/reduce.c image/image.h
1625 dofile image/send.c $mgph
1626 dofile image/value.c image/image.h
1627 dofile image/zoom.c image/image.h
1628 defs='$(mgp_DEFS)'
1629 dofile background.c $mgph
1630 dofile draw.c $mgph
1631 dofile globals.c $mgph
1632 dofile y.tab.c $mgph
1633 dofile parse.c $mgph
1634 dofile plist.c $mgph
1635 dofile postscript.c $mgph
1636 dofile lex.yy.c $mgph y.tab.h
1637 dofile unimap.c $mgph
1638 dofile mgp.c $mgph
1639 dofile x11.c $mgph
1640 dofile print.c $mgph
1641 dofile x11dummy.c $mgph
1642 cat >>Makefile~ <<\EOF
1643 install:
1644         $(INSTALL_DIR) $(DESTDIR)$(BINDIR)
1645         $(INSTALL_PROGRAM) mgp $(DESTDIR)$(BINDIR)/
1646         $(INSTALL_PROGRAM) mgp2ps $(DESTDIR)$(BINDIR)/
1647         $(INSTALL_PROGRAM) xmindpath $(DESTDIR)$(BINDIR)/
1648         $(INSTALL_PROGRAM) xwintoppm $(DESTDIR)$(BINDIR)/
1649         $(INSTALL_SCRIPT) $(SRCDIR)/contrib/eqn2eps.sh \
1650             $(DESTDIR)$(BINDIR)/eqn2eps
1651         $(INSTALL_SCRIPT) $(SRCDIR)/contrib/latex2eps.sh \
1652             $(DESTDIR)$(BINDIR)/latex2eps
1653         $(INSTALL_SCRIPT) mgp2html $(DESTDIR)$(BINDIR)/
1654         $(INSTALL_SCRIPT) mgp2latex $(DESTDIR)$(BINDIR)/
1655         $(INSTALL_SCRIPT) mgpnet $(DESTDIR)$(BINDIR)/
1656         $(INSTALL_SCRIPT) $(SRCDIR)/contrib/tex2eps.sh \
1657             $(DESTDIR)$(BINDIR)/tex2eps
1658         $(INSTALL_DIR) $(DESTDIR)$(MANDIR)/man1
1659         $(INSTALL_DATA) $(MAN1) $(DESTDIR)$(MANDIR)/man1/
1660         $(INSTALL_DIR) $(DESTDIR)$(EMACSDIR)
1661         cd $(SRCDIR)/contrib && $(INSTALL_DATA) \
1662             mgp-el/mgp.el mgp-mode-cd.el mgp-mode.el mgp-mode20.el \
1663             $(DESTDIR)$(EMACSDIR)/
1664         $(INSTALL_DIR) $(DESTDIR)$(MGPELDIR)
1665         cd $(SRCDIR)/contrib/mgp-el && $(INSTALL_DATA) \
1666             README mgp.sty $(DESTDIR)$(MGPELDIR)/
1667         $(INSTALL_DIR) $(DESTDIR)$(DOCDIR)
1668         cd $(SRCDIR) && $(INSTALL_DATA) FAQ README README.fonts README.lang \
1669             README.xft SYNTAX TODO.jp USAGE USAGE.jp $(INST_LICENCE) \
1670             $(INST_RELNOTES) $(DESTDIR)$(DOCDIR)/
1671         $(INSTALL_DIR) $(DESTDIR)$(SAMPLEDIR)
1672         cd $(SRCDIR)/sample && $(INSTALL_DATA) \
1673             README README.jp cloud.jpg dad.eps dad.jpg default.mgp \
1674             gradation-jp.mgp gradation.mgp mgp-old1.jpg mgp-old2.jpg \
1675             mgp-old3.jpg mgp-print6 mgp1.jpg mgp2.jpg mgp3.jpg mgp3.xbm \
1676             multilingual.mgp sample-fr.mgp sample-jp-xft.mgp sample-jp.mgp \
1677             sample.mgp sendmail6-jp.mgp sendmail6.mgp tutorial-jp.mgp \
1678             tutorial.mgp utf8test.mgp v6-jp.mgp v6.mgp v6header.* \
1679             $(DESTDIR)$(SAMPLEDIR)/
1680         $(INSTALL_DIR) $(DESTDIR)$(RCDIR)
1681         $(INSTALL_CONF) $(SRCDIR)/sample/default.mgp $(DESTDIR)$(RCDIR)/
1682
1683 clean:
1684         rm -f *~ *.a *.o ctlwords.c ctlwords.h ctlwords.pl lex.yy.c y.tab.* \
1685             mgp$E mgp2ps$E xmindpath$E xwintoppm$E mgp2html mgp2latex mgpnet \
1686             conftest.c
1687 EOF
1688 mv Makefile~ Makefile || exit 1
1689 $e
1690 $e Generated Makefile successfully.
1691 echo >&2 '
1692 You can now use make(1) to compile MagicPoint.
1693 '
1694 exit 0
1695
1696 : <<'EOD'
1697
1698 === Flags ===
1699
1700 -P list: set list of pkg-config query targets,
1701         default: imlib2 libbsd-overlay xft
1702
1703 === Environment used ===
1704
1705 ==== Makefile variables ====
1706 AR_CREATE                       default: $(AR) cq; AR=ar
1707 RANLIB                          default: ranlib; could be :
1708 LEX                             default: flex
1709 YACC                            default: yacc
1710 SH                              POSIX shell to use during build
1711 DESTDIR                         prefix to use while installing
1712 PERL                            written to shebang
1713 PREFIX                          default: /usr
1714 SYSCONFDIR                      default: /etc
1715 INSTALL_STRIP                   default: -s
1716 mgpversion                      may be overridden with package version
1717
1718 ==== build environment ====
1719 CC                              default: cc
1720 CFLAGS                          if empty, defaults to -xO2 or +O2
1721                                 or -O3 -qstrict or -O2, per compiler
1722 CPPFLAGS                        default empty
1723 LDFLAGS                         default empty; added before sources
1724 LDSTATIC                        set this to '-static'; default unset
1725 LIBS                            default empty; added after sources
1726 NOWARN                          -Wno-error or similar
1727 TARGET_OS                       default: $(uname -s || uname)
1728 TARGET_OSREV                    [SCO] default: $(uname -r)
1729
1730 ===== general format =====
1731 HAVE_STRLEN                     ac_test
1732 HAVE_STRING_H                   ac_header
1733 HAVE_CAN_FSTACKPROTECTORALL     ac_flags
1734
1735 ==== cpp definitions ====
1736 MKSH_TYPEDEF_SSIZE_T            define to e.g. 'long' if your OS has no ssize_t
1737
1738 === generic installation instructions ===
1739
1740 Set CC and possibly CFLAGS, CPPFLAGS, LDFLAGS, LIBS. If cross-compiling,
1741 also set TARGET_OS. To disable tests, set e.g. HAVE_STRLCPY=0; to enable
1742 them, set to a value other than 0 or 1 (e.g. to x).
1743
1744 Normally, the following command is what you want to run, then:
1745 $ (sh Build.sh && make && sudo make install) 2>&1 | tee log
1746
1747 EOD