692a014b38fd4df5aff0c0eaf72ff8ac08953aaa
[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         ac_flags 1 wnounusedfunction -Wno-unused-function
1132 fi
1133
1134 phase=x
1135 # The following tests run with -Werror or similar (all compilers) if possible
1136 NOWARN=$DOWARN
1137 test $ct = pcc && phase=u
1138
1139 #
1140 # Compiler: check for stuff that only generates warnings
1141 #
1142 ac_test attribute_bounded '' 'for __attribute__((__bounded__))' <<-'EOF'
1143         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1144         extern int thiswillneverbedefinedIhope(void);
1145         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1146         int main(void) { return (thiswillneverbedefinedIhope()); }
1147         #else
1148         #include <string.h>
1149         #undef __attribute__
1150         int xcopy(const void *, void *, size_t)
1151             __attribute__((__bounded__(__buffer__, 1, 3)))
1152             __attribute__((__bounded__(__buffer__, 2, 3)));
1153         int main(int ac, char *av[]) { return (xcopy(av[0], av[--ac], 1)); }
1154         int xcopy(const void *s, void *d, size_t n) {
1155                 /*
1156                  * if memmove does not exist, we are not on a system
1157                  * with GCC with __bounded__ attribute either so poo
1158                  */
1159                 memmove(d, s, n); return ((int)n);
1160         }
1161         #endif
1162 EOF
1163 ac_test attribute_format '' 'for __attribute__((__format__))' <<-'EOF'
1164         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1165         extern int thiswillneverbedefinedIhope(void);
1166         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1167         int main(void) { return (thiswillneverbedefinedIhope()); }
1168         #else
1169         #define fprintf printfoo
1170         #include <stdio.h>
1171         #undef __attribute__
1172         #undef fprintf
1173         extern int fprintf(FILE *, const char *format, ...)
1174             __attribute__((__format__(__printf__, 2, 3)));
1175         int main(int ac, char *av[]) { return (fprintf(stderr, "%s%d", *av, ac)); }
1176         #endif
1177 EOF
1178 ac_test attribute_nonnull '' 'for __attribute__((__nonnull__))' <<-'EOF'
1179         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1180         extern int thiswillneverbedefinedIhope(void);
1181         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1182         int main(void) { return (thiswillneverbedefinedIhope()); }
1183         #else
1184         #include <stdio.h>
1185         #undef __attribute__
1186         int fnord(const char *) __attribute__((__nonnull__(1)));
1187         int main(void) { return (fnord("x")); }
1188         int fnord(const char *x) { return (fputc(*x, stderr)); }
1189         #endif
1190 EOF
1191 ac_test attribute_noreturn '' 'for __attribute__((__noreturn__))' <<-'EOF'
1192         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1193         extern int thiswillneverbedefinedIhope(void);
1194         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1195         int main(void) { return (thiswillneverbedefinedIhope()); }
1196         #else
1197         #include <stdlib.h>
1198         #undef __attribute__
1199         void fnord(void) __attribute__((__noreturn__));
1200         int main(void) { fnord(); }
1201         void fnord(void) { exit(0); }
1202         #endif
1203 EOF
1204 ac_test attribute_pure '' 'for __attribute__((__pure__))' <<-'EOF'
1205         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1206         extern int thiswillneverbedefinedIhope(void);
1207         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1208         int main(void) { return (thiswillneverbedefinedIhope()); }
1209         #else
1210         #include <unistd.h>
1211         #undef __attribute__
1212         int foo(const char *) __attribute__((__pure__));
1213         int main(int ac, char *av[]) { return (foo(av[ac - 1]) + dup(0)); }
1214         int foo(const char *s) { return ((int)s[0]); }
1215         #endif
1216 EOF
1217 ac_test attribute_unused '' 'for __attribute__((__unused__))' <<-'EOF'
1218         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1219         extern int thiswillneverbedefinedIhope(void);
1220         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1221         int main(void) { return (thiswillneverbedefinedIhope()); }
1222         #else
1223         #include <unistd.h>
1224         #undef __attribute__
1225         int main(int ac __attribute__((__unused__)), char *av[]
1226             __attribute__((__unused__))) { return (dup(0)); }
1227         #endif
1228 EOF
1229 ac_test attribute_used '' 'for __attribute__((__used__))' <<-'EOF'
1230         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1231         extern int thiswillneverbedefinedIhope(void);
1232         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1233         int main(void) { return (thiswillneverbedefinedIhope()); }
1234         #else
1235         #include <unistd.h>
1236         #undef __attribute__
1237         static const char fnord[] __attribute__((__used__)) = "42";
1238         int main(void) { return (dup(0)); }
1239         #endif
1240 EOF
1241
1242 # End of tests run with -Werror
1243 NOWARN=$save_NOWARN
1244 phase=x
1245
1246 add_cppflags -DNeedFunctionPrototypes
1247
1248 #
1249 # Environment: headers
1250 #
1251 ac_header sys/time.h sys/types.h
1252 ac_header time.h sys/types.h
1253 test "11" = "$HAVE_SYS_TIME_H$HAVE_TIME_H" || HAVE_BOTH_TIME_H=0
1254 ac_test both_time_h '' 'whether <sys/time.h> and <time.h> can both be included' <<-'EOF'
1255         #include <sys/types.h>
1256         #include <sys/time.h>
1257         #include <time.h>
1258         #include <unistd.h>
1259         int main(void) { struct tm tm; return ((int)sizeof(tm) + dup(0)); }
1260 EOF
1261 ac_header sys/wait.h sys/types.h
1262 ac_header fcntl.h
1263 ac_header iconv.h
1264 ac_header locale.h
1265 ac_header termios.h
1266 ac_header util.h
1267
1268 #
1269 # Environment: definitions
1270 #
1271 echo '#include <sys/types.h>
1272 #include <fts.h>
1273 #include <unistd.h>
1274 /* check that off_t can represent 2^63-1 correctly, thx FSF */
1275 #define LARGE_OFF_T ((((off_t)1 << 31) << 31) - 1 + (((off_t)1 << 31) << 31))
1276 int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 &&
1277     LARGE_OFF_T % 2147483647 == 1) ? 1 : -1];
1278 int main(void) { return (dup(0)); }' >lft.c
1279 ac_testn can_lfs '' "for large file support" <lft.c
1280 save_CPPFLAGS=$CPPFLAGS
1281 add_cppflags -D_FILE_OFFSET_BITS=64
1282 ac_testn can_lfs_sus '!' can_lfs 0 "... with -D_FILE_OFFSET_BITS=64" <lft.c
1283 if test 0 = $HAVE_CAN_LFS_SUS; then
1284         CPPFLAGS=$save_CPPFLAGS
1285         add_cppflags -D_LARGE_FILES=1
1286         ac_testn can_lfs_aix '!' can_lfs 0 "... with -D_LARGE_FILES=1" <lft.c
1287         test 1 = $HAVE_CAN_LFS_AIX || CPPFLAGS=$save_CPPFLAGS
1288 fi
1289 rm -f lft.c
1290 rmf lft*        # end of large file support test
1291
1292 PK_DEFS=
1293 PK_LIBS=
1294 for pkg in $pkgs; do
1295         $e Running pkg-config for $pkg...
1296         PK_DEFS="$PK_DEFS `pkg-config --cflags $pkg`"
1297         PK_LIBS="$PK_LIBS `pkg-config --libs $pkg`"
1298 done
1299
1300 #
1301 # Environment: types
1302 #
1303 ac_test can_uchar '' "for u_char" <<-'EOF'
1304         #include <sys/types.h>
1305         #include <stddef.h>
1306         int main(int ac, char *av[]) { return ((u_char)(unsigned char)av[ac - 1][0]); }
1307 EOF
1308 ac_test can_ushort '' "for u_short" <<-'EOF'
1309         #include <sys/types.h>
1310         #include <stddef.h>
1311         int main(int ac, char *av[]) { return ((u_short)(unsigned char)av[ac - 1][0]); }
1312 EOF
1313 ac_test can_uint '' "for u_int" <<-'EOF'
1314         #include <sys/types.h>
1315         #include <stddef.h>
1316         int main(int ac, char *av[]) { return ((u_int)(unsigned char)av[ac - 1][0]); }
1317 EOF
1318 ac_test can_ulong '' "for u_long" <<-'EOF'
1319         #include <sys/types.h>
1320         #include <stddef.h>
1321         int main(int ac, char *av[]) { return ((u_long)(size_t)av[ac]); }
1322 EOF
1323
1324 #
1325 # check whether the final link ought to succeed
1326 #
1327 HAVE_LINK_WORKS=x
1328 save_CPPFLAGS=$CPPFLAGS
1329 save_LIBS=$LIBS
1330 CPPFLAGS="-I$srcdir $CPPFLAGS $PK_DEFS -DBUILDSH_LINKTEST"
1331 LIBS="$LIBS $PK_LIBS"
1332 ac_testinit link_works '' 'checking if the final link command may succeed'
1333 fv=1
1334 cat >conftest.c <<-EOF
1335         #include "mgp.h"
1336         #if HAVE_LOCALE_H
1337         #include <locale.h>
1338         #endif
1339         #include <fcntl.h>
1340         #ifdef TTY_KEYINPUT
1341         #include <termios.h>
1342         #endif
1343
1344         int main(void) { printf("Hello, World!\\n"); return (dup(0)); }
1345 EOF
1346 v "$CC $CFLAGS $CPPFLAGS $NOWARN -c conftest.c" || fv=0
1347 test $fv = 0 || v "$CC $CFLAGS $LDFLAGS -o $tcfn conftest.o $LIBS $ccpr"
1348 test -f $tcfn || fv=0
1349 ac_testdone
1350 test $fv = 1 || exit 1
1351 LIBS=$save_LIBS
1352 CPPFLAGS=$save_CPPFLAGS
1353
1354 #
1355 # Environment: library functions
1356 #
1357 cat >lft.c <<-'EOF'
1358         #if HAVE_ICONV_H
1359         #include <iconv.h>
1360         #endif
1361         #include <stdio.h>
1362         #include <string.h>
1363         int main(int ac, char *av[]) {
1364                 iconv_t cd;
1365                 char *srcp = av[1], *dstp = av[2];
1366                 size_t ilen = strlen(srcp), olen = 1;
1367
1368                 if ((cd = iconv_open("dst", "src")) == (iconv_t)-1)
1369                         return (2);
1370                 if (iconv(cd, &srcp, &ilen, &dstp, &olen) < 0)
1371                         return (3);
1372                 return (iconv_close(cd) != 0);
1373         }
1374 EOF
1375 ac_testn iconv <lft.c
1376 iconv_L=
1377 if test 0 = $HAVE_ICONV; then
1378         save_LIBS=$LIBS
1379         LIBS="$LIBS -liconv"
1380         HAVE_ICONV=x
1381         ac_testn iconv <lft.c
1382         if test 1 = $HAVE_ICONV; then
1383                 iconv_L=-liconv
1384         fi
1385         LIBS=$save_LIBS
1386 fi
1387 ac_cppflags
1388 rm -f lft.c
1389 rmf lft*
1390
1391 ac_test setreuid '' 'for setreuid and setregid' <<-'EOF'
1392         #include <sys/types.h>
1393         #include <unistd.h>
1394         int main(void) { return (setreuid(0,0) + setregid(0,0)); }
1395 EOF
1396
1397 save_LIBS=$LIBS
1398 LIBS="$LIBS -lutil"
1399 ac_test uu_lock <<-'EOF'
1400         #include <sys/types.h>
1401         #if HAVE_UTIL_H
1402         #include <util.h>
1403         #endif
1404         int main(int ac, char *av[]) { return (uu_lock(av[ac - 1])); }
1405 EOF
1406 LIBS=$save_LIBS
1407 if test 0 = $HAVE_UU_LOCK; then
1408         uulock_L=
1409         uulock_O=uucplock.o
1410 else
1411         uulock_L=-lutil
1412         uulock_O=
1413 fi
1414
1415 #
1416 # check headers for declarations
1417 #
1418
1419 #
1420 # other checks
1421 #
1422
1423 #
1424 # End of mirtoconf checks
1425 #
1426 $e ... done.
1427 rmf vv.out
1428
1429 test 1 = "$HAVE_CAN_VERB" && CFLAGS="$CFLAGS -verbose"
1430
1431 $e $bi$me: Finished configuration testing, now producing output.$ao
1432
1433 case $tcfn in
1434 a.exe|conftest.exe)
1435         suf=.exe
1436         ;;
1437 *)
1438         suf=
1439         ;;
1440 esac
1441 rm -f Makefile
1442 cat >Makefile~ <<\EOF
1443 # Makefile for building MagicPoint
1444 # generated, do not edit; re-run Build.sh if necessary!
1445
1446 # feel free to override those
1447
1448 # used for building
1449 AR=             ar
1450 AR_CREATE=      $(AR) cq
1451 LEX=            flex
1452 RANLIB=         ranlib
1453 SH=             sh
1454 YACC=           yacc
1455
1456 # used for installing
1457 DESTDIR=
1458 PERL=           /usr/bin/env perl
1459 PREFIX=         /usr
1460 SYSCONFDIR=     /etc
1461 BINDIR=         $(PREFIX)/bin
1462 MANDIR=         $(PREFIX)/share/man
1463 DOCDIR=         $(PREFIX)/share/doc/mgp
1464 EMACSDIR=       $(PREFIX)/share/emacs/site-lisp/mgp
1465 MGPELDIR=       $(DOCDIR)/contrib/mgp-el
1466 #SAMPLEDIR=     $(DOCDIR)/examples
1467 SAMPLEDIR=      $(PREFIX)/share/examples/mgp
1468 RCDIR=          $(SYSCONFDIR)/mgp
1469
1470 # set to empty to not install (Debian)
1471 INST_LICENCE=   LICENCE
1472 INST_RELNOTES=  RELNOTES
1473
1474 # or /usr/ucb/install
1475 INSTALL=        install
1476 INSTALL_COPY=   -c
1477 INSTALL_STRIP=  -s
1478 BINMODE=        555
1479 CONFMODE=       644
1480 NONBINMODE=     444
1481 DIRMODE=        755
1482 INSTALL_DIR=    $(INSTALL) -d -m $(DIRMODE)
1483 INSTALL_PROGRAM=$(INSTALL) $(INSTALL_COPY) $(INSTALL_STRIP) -m $(BINMODE)
1484 INSTALL_SCRIPT= $(INSTALL) $(INSTALL_COPY) -m $(BINMODE)
1485 INSTALL_DATA=   $(INSTALL) $(INSTALL_COPY) -m $(NONBINMODE)
1486 INSTALL_CONF=   $(INSTALL) $(INSTALL_COPY) -m $(CONFMODE)
1487
1488 # do NOT override these, re-run Build.sh if necessary!
1489 EOF
1490 sed 's/#/\\&/g' >>Makefile~ <<EOF
1491 CC=             $CC
1492 CPPFLAGS=       $CPPFLAGS
1493 CFLAGS=         $CFLAGS
1494 LDFLAGS=        $LDFLAGS
1495 LIBS=           $LIBS
1496 SRCDIR=         $srcdir
1497 PK_DEFS=        $PK_DEFS
1498 PK_LIBS=        $PK_LIBS
1499 iconv_L=        $iconv_L
1500 uulock_L=       $uulock_L
1501 uulock_O=       $uulock_O
1502
1503 E=              $suf
1504 mgpversion=     $srcversion
1505 EOF
1506 cat >>Makefile~ <<\EOF
1507
1508 # internals
1509 MAN1=           $(SRCDIR)/contrib/xmindpath/xmindpath.1 \
1510                 $(SRCDIR)/contrib/xwintoppm/xwintoppm.1 \
1511                 $(SRCDIR)/contrib/mgpnet.1 \
1512                 $(SRCDIR)/mgp.1 $(SRCDIR)/mgp2ps.1
1513
1514 xmp_DEFS=       -I$(SRCDIR)/contrib/xmindpath
1515 xmp_OBJS=       main.o $(uulock_O)
1516 xmp_LIBS=       -lXtst -lX11 $(uulock_L)
1517
1518 xwp_DEFS=       -I$(SRCDIR)/contrib/xwintoppm
1519 xwp_OBJS=       dsimple.o list.o multiVis.o xwintoppm.o
1520 xwp_LIBS=       -lXmu -lXt -lX11
1521
1522 mgp_DEFS=       -I$(SRCDIR) -DMGPLIBDIR=\"$(RCDIR)\" $(PK_DEFS)
1523 mgp_LIBS=       -L. -lmgpcommon $(PK_LIBS) $(iconv_L) -lX11 -lm
1524
1525 lib_DEFS=       $(mgp_DEFS) -I$(SRCDIR)/image
1526 lib_OBJS=       ctlwords.o \
1527                 dither.o halftone.o imagetypes.o imlib_loader.o \
1528                 misc.o new.o path.o reduce.o send.o value.o zoom.o \
1529                 background.o draw.o globals.o y.tab.o parse.o \
1530                 plist.o postscript.o lex.yy.o unimap.o
1531
1532 mgp_OBJS=       mgp.o x11.o
1533 mps_OBJS=       print.o x11dummy.o
1534
1535 all: mgp$E mgp2ps$E xmindpath$E xwintoppm$E mgp2html mgp2latex mgpnet
1536
1537 ctlwords.c ctlwords.h ctlwords.pl: $(SRCDIR)/ctlwords.sh
1538         $(SH) $(SRCDIR)/ctlwords.sh
1539
1540 mgp2html: ctlwords.pl $(SRCDIR)/contrib/mgp2html.pl.in
1541         echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
1542             $(SRCDIR)/contrib/mgp2html.pl.in
1543
1544 mgp2latex: ctlwords.pl $(SRCDIR)/contrib/mgp2latex.pl.in
1545         echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
1546             $(SRCDIR)/contrib/mgp2latex.pl.in
1547
1548 mgpnet: ctlwords.pl $(SRCDIR)/contrib/mgpnet.in
1549         echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
1550             $(SRCDIR)/contrib/mgpnet.in
1551
1552 xmindpath$E: $(xmp_OBJS)
1553         $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(xmp_OBJS) $(LIBS) $(xmp_LIBS)
1554
1555 xwintoppm$E: $(xwp_OBJS)
1556         $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(xwp_OBJS) $(LIBS) $(xwp_LIBS)
1557
1558 mgp$E: $(mgp_OBJS) libmgpcommon.a
1559         $(CC) $(CFLAGS) $(mgp_DEFS) $(LDFLAGS) -o $@ \
1560             $(mgp_OBJS) $(LIBS) $(mgp_LIBS)
1561
1562 mgp2ps$E: $(mps_OBJS) libmgpcommon.a
1563         $(CC) $(CFLAGS) $(mgp_DEFS) $(LDFLAGS) -o $@ \
1564             $(mps_OBJS) $(LIBS) $(mgp_LIBS)
1565
1566 libmgpcommon.a: $(lib_OBJS)
1567         @rm -f $@
1568         $(AR_CREATE) $@ $(lib_OBJS)
1569         $(RANLIB) $@
1570
1571 y.tab.c y.tab.h: $(SRCDIR)/grammar.y
1572         $(YACC) -d $(SRCDIR)/grammar.y
1573
1574 lex.yy.c: $(SRCDIR)/scanner.l
1575         $(LEX) $(SRCDIR)/scanner.l
1576
1577 EOF
1578 dofile() {
1579         dstbn=`basename "$1" | sed 's/\.[^.]*$//'`
1580         srcf=
1581         srca=
1582         while test -n "$1"; do
1583                 if test -f "$srcdir/$1"; then
1584                         f='$(SRCDIR)/'"$1"
1585                 else
1586                         f=$1
1587                 fi
1588                 shift
1589                 if test -n "$srcf"; then
1590                         srca="$srca $f"
1591                 else
1592                         srca=$f
1593                         srcf=$f
1594                 fi
1595         done
1596         cat >>Makefile~ <<EOF
1597 $dstbn.o: $srca
1598         \$(CC) \$(CPPFLAGS) \$(CFLAGS) $defs -c $srcf
1599
1600 EOF
1601 }
1602 xlih="image/xloadimage.h image/image.h"
1603 mgph="mgp.h $xlih ctlwords.h"
1604 defs='$(xmp_DEFS)'
1605 dofile contrib/xmindpath/main.c
1606 dofile contrib/xmindpath/uucplock.c contrib/xmindpath/pathnames.h
1607 defs='$(xwp_DEFS)'
1608 dofile contrib/xwintoppm/dsimple.c
1609 dofile contrib/xwintoppm/list.c contrib/xwintoppm/list.h
1610 dofile contrib/xwintoppm/multiVis.c contrib/xwintoppm/list.h \
1611     contrib/xwintoppm/wsutils.h contrib/xwintoppm/multiVis.h
1612 dofile contrib/xwintoppm/xwintoppm.c contrib/xwintoppm/dsimple.h \
1613     contrib/xwintoppm/list.h \
1614     contrib/xwintoppm/wsutils.h contrib/xwintoppm/multiVis.h
1615 defs='$(mgp_DEFS)'
1616 dofile ctlwords.c
1617 defs='$(lib_DEFS)'
1618 dofile image/dither.c image/image.h
1619 dofile image/halftone.c image/image.h
1620 dofile image/imagetypes.c $xlih
1621 dofile image/imlib_loader.c image/image.h
1622 dofile image/misc.c image/image.h
1623 dofile image/new.c image/image.h
1624 dofile image/path.c $xlih
1625 dofile image/reduce.c image/image.h
1626 dofile image/send.c $mgph
1627 dofile image/value.c image/image.h
1628 dofile image/zoom.c image/image.h
1629 defs='$(mgp_DEFS)'
1630 dofile background.c $mgph
1631 dofile draw.c $mgph
1632 dofile globals.c $mgph
1633 dofile y.tab.c $mgph
1634 dofile parse.c $mgph
1635 dofile plist.c $mgph
1636 dofile postscript.c $mgph
1637 dofile lex.yy.c $mgph y.tab.h
1638 dofile unimap.c $mgph
1639 dofile mgp.c $mgph
1640 dofile x11.c $mgph
1641 dofile print.c $mgph
1642 dofile x11dummy.c $mgph
1643 cat >>Makefile~ <<\EOF
1644 install:
1645         $(INSTALL_DIR) $(DESTDIR)$(BINDIR)
1646         $(INSTALL_PROGRAM) mgp $(DESTDIR)$(BINDIR)/
1647         $(INSTALL_PROGRAM) mgp2ps $(DESTDIR)$(BINDIR)/
1648         $(INSTALL_PROGRAM) xmindpath $(DESTDIR)$(BINDIR)/
1649         $(INSTALL_PROGRAM) xwintoppm $(DESTDIR)$(BINDIR)/
1650         $(INSTALL_SCRIPT) $(SRCDIR)/contrib/eqn2eps.sh \
1651             $(DESTDIR)$(BINDIR)/eqn2eps
1652         $(INSTALL_SCRIPT) $(SRCDIR)/contrib/latex2eps.sh \
1653             $(DESTDIR)$(BINDIR)/latex2eps
1654         $(INSTALL_SCRIPT) mgp2html $(DESTDIR)$(BINDIR)/
1655         $(INSTALL_SCRIPT) mgp2latex $(DESTDIR)$(BINDIR)/
1656         $(INSTALL_SCRIPT) mgpnet $(DESTDIR)$(BINDIR)/
1657         $(INSTALL_SCRIPT) $(SRCDIR)/contrib/tex2eps.sh \
1658             $(DESTDIR)$(BINDIR)/tex2eps
1659         $(INSTALL_DIR) $(DESTDIR)$(MANDIR)/man1
1660         $(INSTALL_DATA) $(MAN1) $(DESTDIR)$(MANDIR)/man1/
1661         $(INSTALL_DIR) $(DESTDIR)$(EMACSDIR)
1662         cd $(SRCDIR)/contrib && $(INSTALL_DATA) \
1663             mgp-el/mgp.el mgp-mode-cd.el mgp-mode.el mgp-mode20.el \
1664             $(DESTDIR)$(EMACSDIR)/
1665         $(INSTALL_DIR) $(DESTDIR)$(MGPELDIR)
1666         cd $(SRCDIR)/contrib/mgp-el && $(INSTALL_DATA) \
1667             README mgp.sty $(DESTDIR)$(MGPELDIR)/
1668         $(INSTALL_DIR) $(DESTDIR)$(DOCDIR)
1669         cd $(SRCDIR) && $(INSTALL_DATA) FAQ README README.fonts README.lang \
1670             README.xft SYNTAX TODO.jp USAGE USAGE.jp $(INST_LICENCE) \
1671             $(INST_RELNOTES) $(DESTDIR)$(DOCDIR)/
1672         $(INSTALL_DIR) $(DESTDIR)$(SAMPLEDIR)
1673         cd $(SRCDIR)/sample && $(INSTALL_DATA) \
1674             README README.jp cloud.jpg dad.eps dad.jpg default.mgp \
1675             gradation-jp.mgp gradation.mgp mgp-old1.jpg mgp-old2.jpg \
1676             mgp-old3.jpg mgp-print6 mgp1.jpg mgp2.jpg mgp3.jpg mgp3.xbm \
1677             multilingual.mgp sample-fr.mgp sample-jp-xft.mgp sample-jp.mgp \
1678             sample.mgp sendmail6-jp.mgp sendmail6.mgp tutorial-jp.mgp \
1679             tutorial.mgp utf8test.mgp v6-jp.mgp v6.mgp v6header.* \
1680             $(DESTDIR)$(SAMPLEDIR)/
1681         $(INSTALL_DIR) $(DESTDIR)$(RCDIR)
1682         $(INSTALL_CONF) $(SRCDIR)/sample/default.mgp $(DESTDIR)$(RCDIR)/
1683
1684 clean:
1685         rm -f *~ *.a *.o ctlwords.c ctlwords.h ctlwords.pl lex.yy.c y.tab.* \
1686             mgp$E mgp2ps$E xmindpath$E xwintoppm$E mgp2html mgp2latex mgpnet \
1687             conftest.c
1688 EOF
1689 mv Makefile~ Makefile || exit 1
1690 $e
1691 $e Generated Makefile successfully.
1692 exit 0
1693
1694 : <<'EOD'
1695
1696 === Flags ===
1697
1698 -P list: set list of pkg-config query targets,
1699         default: imlib2 libbsd-overlay xft
1700
1701 === Environment used ===
1702
1703 ==== Makefile variables ====
1704 AR_CREATE                       default: $(AR) cq; AR=ar
1705 RANLIB                          default: ranlib; could be :
1706 LEX                             default: flex
1707 YACC                            default: yacc
1708 SH                              POSIX shell to use during build
1709 DESTDIR                         prefix to use while installing
1710 PERL                            written to shebang
1711 PREFIX                          default: /usr
1712 SYSCONFDIR                      default: /etc
1713 INSTALL_STRIP                   default: -s
1714 mgpversion                      may be overridden with package version
1715
1716 ==== build environment ====
1717 CC                              default: cc
1718 CFLAGS                          if empty, defaults to -xO2 or +O2
1719                                 or -O3 -qstrict or -O2, per compiler
1720 CPPFLAGS                        default empty
1721 LDFLAGS                         default empty; added before sources
1722 LDSTATIC                        set this to '-static'; default unset
1723 LIBS                            default empty; added after sources
1724 NOWARN                          -Wno-error or similar
1725 TARGET_OS                       default: $(uname -s || uname)
1726 TARGET_OSREV                    [SCO] default: $(uname -r)
1727
1728 ===== general format =====
1729 HAVE_STRLEN                     ac_test
1730 HAVE_STRING_H                   ac_header
1731 HAVE_CAN_FSTACKPROTECTORALL     ac_flags
1732
1733 ==== cpp definitions ====
1734 MKSH_TYPEDEF_SSIZE_T            define to e.g. 'long' if your OS has no ssize_t
1735
1736 === generic installation instructions ===
1737
1738 Set CC and possibly CFLAGS, CPPFLAGS, LDFLAGS, LIBS. If cross-compiling,
1739 also set TARGET_OS. To disable tests, set e.g. HAVE_STRLCPY=0; to enable
1740 them, set to a value other than 0 or 1 (e.g. to x).
1741
1742 Normally, the following command is what you want to run, then:
1743 $ (sh Build.sh && make && sudo make install) 2>&1 | tee log
1744
1745 EOD