eh, make ’em volatile, this is not time-critical code anyway
[alioth/magicpoint.git] / Build.sh
1 #!/bin/sh
2 srcversion='1.2 (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; LANGUAGE=C
42 export LC_ALL; unset LANGUAGE
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 last=
352 pkgs='imlib2 libbsd-overlay xft'
353
354 for i
355 do
356         case $last:$i in
357         P:*)
358                 pkgs=$i
359                 last=
360                 ;;
361         :-g)
362                 # checker, debug, valgrind build
363                 add_cppflags -DDEBUG
364                 CFLAGS="$CFLAGS -g3 -fno-builtin"
365                 ;;
366         :-P)
367                 last=P
368                 ;;
369         :-Q)
370                 eq=1
371                 ;;
372         :-v)
373                 echo "Build.sh for MagicPoint $srcversion"
374                 exit 0
375                 ;;
376         :*)
377                 echo "$me: Unknown option '$i'!" >&2
378                 exit 1
379                 ;;
380         *)
381                 echo "$me: Unknown option -'$last' '$i'!" >&2
382                 exit 1
383                 ;;
384         esac
385 done
386
387 tfn=mgp
388 if test -d $tfn || test -d $tfn.exe; then
389         echo "$me: Error: ./$tfn is a directory!" >&2
390         exit 1
391 fi
392 rmf a.exe* a.out* conftest.c conftest.exe* *core core.* ${tfn}* *.bc *.dbg \
393     *.ll *.o lft no x vv.out *~
394
395 if test -n "$CPPFLAGS"; then
396         CPPFLAGS="-I. $CPPFLAGS"
397 else
398         CPPFLAGS="-I."
399 fi
400 test -n "$LDSTATIC" && if test -n "$LDFLAGS"; then
401         LDFLAGS="$LDFLAGS $LDSTATIC"
402 else
403         LDFLAGS=$LDSTATIC
404 fi
405
406 if test -z "$TARGET_OS"; then
407         x=`uname -s 2>/dev/null || uname`
408         test x"$x" = x"`uname -n 2>/dev/null`" || TARGET_OS=$x
409 fi
410 if test -z "$TARGET_OS"; then
411         echo "$me: Set TARGET_OS, your uname is broken!" >&2
412         exit 1
413 fi
414 oswarn=
415 ccpc=-Wc,
416 ccpl=-Wl,
417 tsts=
418 ccpr='|| for _f in ${tcfn}*; do case $_f in mgp.1|mgp.c|mgp.h) ;; *) rm -f "$_f" ;; esac; done'
419
420 # Evil hack
421 if test x"$TARGET_OS" = x"Android"; then
422         TARGET_OS=Linux
423 fi
424
425 # Evil OS
426 if test x"$TARGET_OS" = x"Minix"; then
427         echo >&2 "
428 WARNING: additional checks before running Build.sh required!
429 You can avoid these by calling Build.sh correctly, see below.
430 "
431         cat >conftest.c <<'EOF'
432 #include <sys/types.h>
433 const char *
434 #ifdef _NETBSD_SOURCE
435 ct="Ninix3"
436 #else
437 ct="Minix3"
438 #endif
439 ;
440 EOF
441         ct=unknown
442         vv ']' "${CC-cc} -E $CFLAGS $CPPFLAGS $NOWARN conftest.c | grep ct= | tr -d \\\\015 >x"
443         sed 's/^/[ /' x
444         eval `cat x`
445         rmf x vv.out
446         case $ct in
447         Minix3|Ninix3)
448                 echo >&2 "
449 Warning: you set TARGET_OS to $TARGET_OS but that is ambiguous.
450 Please set it to either Minix3 or Ninix3, whereas the latter is
451 all versions of Minix with even partial NetBSD(R) userland. The
452 value determined from your compiler for the current compilation
453 (which may be wrong) is: $ct
454 "
455                 TARGET_OS=$ct
456                 ;;
457         *)
458                 echo >&2 "
459 Warning: you set TARGET_OS to $TARGET_OS but that is ambiguous.
460 Please set it to either Minix3 or Ninix3, whereas the latter is
461 all versions of Minix with even partial NetBSD(R) userland. The
462 proper value couldn't be determined, continue at your own risk.
463 "
464                 ;;
465         esac
466 fi
467
468 # Configuration depending on OS revision, on OSes that need them
469 case $TARGET_OS in
470 SCO_SV)
471         test x"$TARGET_OSREV" = x"" && TARGET_OSREV=`uname -r`
472         ;;
473 esac
474
475 # Configuration depending on OS name
476 case $TARGET_OS in
477 AIX)
478         oswarn="; it is untested"
479         add_cppflags -D_ALL_SOURCE
480         ;;
481 Darwin)
482         oswarn="; it is untested"
483         add_cppflags -D_DARWIN_C_SOURCE
484         ;;
485 FreeMiNT)
486         oswarn="; it is untested"
487         add_cppflags -D_GNU_SOURCE
488         ;;
489 GNU)
490         oswarn="; it is untested"
491         case $CC in
492         *tendracc*) ;;
493         *) add_cppflags -D_GNU_SOURCE ;;
494         esac
495         ;;
496 GNU/kFreeBSD)
497         oswarn="; it is untested"
498         case $CC in
499         *tendracc*) ;;
500         *) add_cppflags -D_GNU_SOURCE ;;
501         esac
502         ;;
503 Interix)
504         oswarn="; it is untested"
505         ccpc='-X '
506         ccpl='-Y '
507         add_cppflags -D_ALL_SOURCE
508         ;;
509 Linux)
510         case $CC in
511         *tendracc*) ;;
512         *) add_cppflags -D_GNU_SOURCE ;;
513         esac
514         ;;
515 midipix)
516         oswarn="; it is untested"
517         add_cppflags -D_GNU_SOURCE
518         ;;
519 MidnightBSD)
520         oswarn="; it is untested"
521         add_cppflags -D_WITH_DPRINTF
522         add_cppflags -DUT_NAMESIZE=32
523         ;;
524 MirBSD)
525         add_cppflags -D_ALL_SOURCE
526         ;;
527 MSYS_*)
528         oswarn="; it is untested"
529         # broken on this OE (from ir0nh34d)
530         : "${HAVE_STDINT_H=0}"
531         ;;
532 NetBSD)
533         oswarn="; it is untested"
534         add_cppflags -D_NETBSD_SOURCE
535         add_cppflags -D_OPENBSD_SOURCE
536         ;;
537 NEXTSTEP)
538         oswarn="; it is untested"
539         add_cppflags -D_NEXT_SOURCE
540         add_cppflags -D_POSIX_SOURCE
541         : "${CC=cc -posix}"
542         ;;
543 OS/390)
544         oswarn="; it is untested"
545         : "${CC=xlc}"
546         add_cppflags -D_ALL_SOURCE
547         ;;
548 OSF1)
549         oswarn="; it is untested"
550         add_cppflags -D_OSF_SOURCE
551         add_cppflags -D_POSIX_C_SOURCE=200112L
552         add_cppflags -D_XOPEN_SOURCE=600
553         add_cppflags -D_XOPEN_SOURCE_EXTENDED
554         ;;
555 QNX)
556         oswarn="; it is untested"
557         add_cppflags -D__NO_EXT_QNX
558         add_cppflags -D__EXT_UNIX_MISC
559         ;;
560 SunOS)
561         oswarn="; it is untested"
562         add_cppflags -D_BSD_SOURCE
563         add_cppflags -D__EXTENSIONS__
564         ;;
565 syllable)
566         oswarn="; it is untested"
567         add_cppflags -D_GNU_SOURCE
568         ;;
569 ULTRIX)
570         oswarn="; it is untested"
571         : "${CC=cc -YPOSIX}"
572         add_cppflags -DMKSH_TYPEDEF_SSIZE_T=int
573         ;;
574 UWIN*)
575         oswarn="; it is untested"
576         ccpc='-Yc,'
577         ccpl='-Yl,'
578         tsts=" 3<>/dev/tty"
579         ;;
580 *)
581         oswarn='; it may or may not work'
582         test x"$TARGET_OSREV" = x"" && TARGET_OSREV=`uname -r`
583         ;;
584 esac
585
586 : "${CC=cc}"
587
588 # this aids me in tracing FTBFSen without access to the buildd
589 $e "Hi from$ao ${bi}mgp Build.sh $srcversion$ao on:"
590 case $TARGET_OS in
591 AIX)
592         vv '|' "oslevel >&2"
593         vv '|' "uname -a >&2"
594         ;;
595 Darwin)
596         vv '|' "hwprefs machine_type os_type os_class >&2"
597         vv '|' "sw_vers >&2"
598         vv '|' "system_profiler -detailLevel mini SPSoftwareDataType SPHardwareDataType >&2"
599         vv '|' "/bin/sh --version >&2"
600         vv '|' "xcodebuild -version >&2"
601         vv '|' "uname -a >&2"
602         vv '|' "sysctl kern.version hw.machine hw.model hw.memsize hw.availcpu hw.ncpu hw.cpufrequency hw.byteorder hw.cpu64bit_capable >&2"
603         vv '|' "sysctl hw.cpufrequency hw.byteorder hw.cpu64bit_capable hw.ncpu >&2"
604         ;;
605 IRIX*)
606         vv '|' "uname -a >&2"
607         vv '|' "hinv -v >&2"
608         ;;
609 OSF1)
610         vv '|' "uname -a >&2"
611         vv '|' "/usr/sbin/sizer -v >&2"
612         ;;
613 SCO_SV|UnixWare|UNIX_SV)
614         vv '|' "uname -a >&2"
615         vv '|' "uname -X >&2"
616         ;;
617 *)
618         vv '|' "uname -a >&2"
619         ;;
620 esac
621 test -z "$oswarn" || echo >&2 "
622 Warning: MagicPoint has not yet been ported to or tested on your
623 operating system '$TARGET_OS'$oswarn. If you can provide
624 a shell account to the developer, this may improve; please
625 drop us a success or failure notice or even send in diffs,
626 at the very least, complete logs (Build.sh + make) will help.
627 "
628 $e "$bi$me: Building MagicPoint$ao ${ui}mgp $srcversion$ao on $TARGET_OS ${TARGET_OSREV}..."
629
630 #
631 # Start of mirtoconf checks
632 #
633 $e $bi$me: Scanning for functions... please ignore any errors.$ao
634
635 #
636 # Compiler: which one?
637 #
638 # notes:
639 # - ICC defines __GNUC__ too
640 # - GCC defines __hpux too
641 # - LLVM+clang defines __GNUC__ too
642 # - nwcc defines __GNUC__ too
643 CPP="$CC -E"
644 $e ... which compiler type seems to be used
645 cat >conftest.c <<'EOF'
646 const char *
647 #if defined(__ICC) || defined(__INTEL_COMPILER)
648 ct="icc"
649 #elif defined(__xlC__) || defined(__IBMC__)
650 ct="xlc"
651 #elif defined(__SUNPRO_C)
652 ct="sunpro"
653 #elif defined(__ACK__)
654 ct="ack"
655 #elif defined(__BORLANDC__)
656 ct="bcc"
657 #elif defined(__WATCOMC__)
658 ct="watcom"
659 #elif defined(__MWERKS__)
660 ct="metrowerks"
661 #elif defined(__HP_cc)
662 ct="hpcc"
663 #elif defined(__DECC) || (defined(__osf__) && !defined(__GNUC__))
664 ct="dec"
665 #elif defined(__PGI)
666 ct="pgi"
667 #elif defined(__DMC__)
668 ct="dmc"
669 #elif defined(_MSC_VER)
670 ct="msc"
671 #elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
672 ct="adsp"
673 #elif defined(__IAR_SYSTEMS_ICC__)
674 ct="iar"
675 #elif defined(SDCC)
676 ct="sdcc"
677 #elif defined(__PCC__)
678 ct="pcc"
679 #elif defined(__TenDRA__)
680 ct="tendra"
681 #elif defined(__TINYC__)
682 ct="tcc"
683 #elif defined(__llvm__) && defined(__clang__)
684 ct="clang"
685 #elif defined(__NWCC__)
686 ct="nwcc"
687 #elif defined(__GNUC__)
688 ct="gcc"
689 #elif defined(_COMPILER_VERSION)
690 ct="mipspro"
691 #elif defined(__sgi)
692 ct="mipspro"
693 #elif defined(__hpux) || defined(__hpua)
694 ct="hpcc"
695 #elif defined(__ultrix)
696 ct="ucode"
697 #elif defined(__USLC__)
698 ct="uslc"
699 #elif defined(__LCC__)
700 ct="lcc"
701 #elif defined(MKSH_MAYBE_KENCC)
702 /* and none of the above matches */
703 ct="kencc"
704 #else
705 ct="unknown"
706 #endif
707 ;
708 const char *
709 #if defined(__KLIBC__) && !defined(__OS2__)
710 et="klibc"
711 #else
712 et="unknown"
713 #endif
714 ;
715 EOF
716 ct=untested
717 et=untested
718 vv ']' "$CPP $CFLAGS $CPPFLAGS $NOWARN conftest.c | \
719     sed -n '/^ *[ce]t *= */s/^ *\([ce]t\) *= */\1=/p' | tr -d \\\\015 >x"
720 sed 's/^/[ /' x
721 eval `cat x`
722 rmf x vv.out
723 cat >conftest.c <<'EOF'
724 #include <unistd.h>
725 int main(void) { return (dup(0)); }
726 EOF
727 case $ct in
728 ack)
729         # work around "the famous ACK const bug"
730         CPPFLAGS="-Dconst= $CPPFLAGS"
731         ;;
732 adsp)
733         echo >&2 'Warning: Analog Devices C++ compiler for Blackfin, TigerSHARC
734     and SHARC (21000) DSPs detected. This compiler has not yet
735     been tested for compatibility with mgp. Continue at your
736     own risk, please report success/failure to the developers.'
737         ;;
738 bcc)
739         echo >&2 "Warning: Borland C++ Builder detected. This compiler might
740     produce broken executables. Continue at your own risk,
741     please report success/failure to the developers."
742         ;;
743 clang)
744         # does not work with current "ccc" compiler driver
745         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version"
746         # one of these two works, for now
747         vv '|' "${CLANG-clang} -version"
748         vv '|' "${CLANG-clang} --version"
749         # ensure compiler and linker are in sync unless overridden
750         case $CCC_CC:$CCC_LD in
751         :*)     ;;
752         *:)     CCC_LD=$CCC_CC; export CCC_LD ;;
753         esac
754         ;;
755 dec)
756         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V"
757         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -Wl,-V conftest.c $LIBS"
758         ;;
759 dmc)
760         echo >&2 "Warning: Digital Mars Compiler detected. When running under"
761         echo >&2 "    UWIN, mksh tends to be unstable due to the limitations"
762         echo >&2 "    of this platform. Continue at your own risk,"
763         echo >&2 "    please report success/failure to the developers."
764         ;;
765 gcc)
766         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
767         vv '|' 'eval echo "\`$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -dumpmachine\`" \
768                  "gcc\`$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -dumpversion\`"'
769         ;;
770 hpcc)
771         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
772         ;;
773 iar)
774         echo >&2 'Warning: IAR Systems (http://www.iar.com) compiler for embedded
775     systems detected. This unsupported compiler has not yet
776     been tested for compatibility with mgp. Continue at your
777     own risk, please report success/failure to the developers.'
778         ;;
779 icc)
780         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V"
781         ;;
782 kencc)
783         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
784         ;;
785 lcc)
786         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
787         add_cppflags -D__inline__=__inline
788         ;;
789 metrowerks)
790         echo >&2 'Warning: Metrowerks C compiler detected. This has not yet
791     been tested for compatibility with mgp. Continue at your
792     own risk, please report success/failure to the developers.'
793         ;;
794 mipspro)
795         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version"
796         ;;
797 msc)
798         ccpr=           # errorlevels are not reliable
799         case $TARGET_OS in
800         Interix)
801                 if [[ -n $C89_COMPILER ]]; then
802                         C89_COMPILER=`ntpath2posix -c "$C89_COMPILER"`
803                 else
804                         C89_COMPILER=CL.EXE
805                 fi
806                 if [[ -n $C89_LINKER ]]; then
807                         C89_LINKER=`ntpath2posix -c "$C89_LINKER"`
808                 else
809                         C89_LINKER=LINK.EXE
810                 fi
811                 vv '|' "$C89_COMPILER /HELP >&2"
812                 vv '|' "$C89_LINKER /LINK >&2"
813                 ;;
814         esac
815         ;;
816 nwcc)
817         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -version"
818         ;;
819 pcc)
820         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -v"
821         ;;
822 pgi)
823         echo >&2 'Warning: PGI detected. This unknown compiler has not yet
824     been tested for compatibility with mgp. Continue at your
825     own risk, please report success/failure to the developers.'
826         ;;
827 sdcc)
828         echo >&2 'Warning: sdcc (http://sdcc.sourceforge.net), the small devices
829     C compiler for embedded systems detected. This has not yet
830     been tested for compatibility with mgp. Continue at your
831     own risk, please report success/failure to the developers.'
832         ;;
833 sunpro)
834         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
835         ;;
836 tcc)
837         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -v"
838         ;;
839 tendra)
840         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V 2>&1 | \
841             grep -F -i -e version -e release"
842         ;;
843 ucode)
844         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -V"
845         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -Wl,-V conftest.c $LIBS"
846         ;;
847 uslc)
848         case $TARGET_OS:$TARGET_OSREV in
849         SCO_SV:3.2*)
850                 # SCO OpenServer 5
851                 CFLAGS="$CFLAGS -g"
852                 : "${HAVE_CAN_OTWO=0}${HAVE_CAN_OPTIMISE=0}"
853                 ;;
854         esac
855         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
856         ;;
857 watcom)
858         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
859         ;;
860 xlc)
861         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -qversion"
862         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN $LIBS -qversion=verbose"
863         vv '|' "ld -V"
864         ;;
865 *)
866         test x"$ct" = x"untested" && $e "!!! detecting preprocessor failed"
867         ct=unknown
868         vv "$CC --version"
869         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -v conftest.c $LIBS"
870         vv '|' "$CC $CFLAGS $CPPFLAGS $LDFLAGS $NOWARN -V conftest.c $LIBS"
871         ;;
872 esac
873 etd=" on $et"
874 case $et in
875 klibc)
876         ;;
877 unknown)
878         # nothing special detected, don’t worry
879         etd=
880         ;;
881 *)
882         # huh?
883         ;;
884 esac
885 $e "$bi==> which compiler type seems to be used...$ao $ui$ct$etd$ao"
886 rmf conftest.c conftest.o conftest a.out* a.exe* conftest.exe* vv.out
887
888 #
889 # Compiler: works as-is, with -Wno-error and -Werror
890 #
891 save_NOWARN=$NOWARN
892 NOWARN=
893 DOWARN=
894 ac_flags 0 compiler_works '' 'if the compiler works'
895 test 1 = $HAVE_CAN_COMPILER_WORKS || exit 1
896 HAVE_COMPILER_KNOWN=0
897 test $ct = unknown || HAVE_COMPILER_KNOWN=1
898 if ac_ifcpp 'if 0' compiler_fails '' \
899     'if the compiler does not fail correctly'; then
900         save_CFLAGS=$CFLAGS
901         : "${HAVE_CAN_DELEXE=x}"
902         case $ct in
903         dec)
904                 CFLAGS="$CFLAGS ${ccpl}-non_shared"
905                 ac_testn can_delexe compiler_fails 0 'for the -non_shared linker option' <<-'EOF'
906                         #include <unistd.h>
907                         int main(void) { return (dup(0)); }
908                 EOF
909                 ;;
910         dmc)
911                 CFLAGS="$CFLAGS ${ccpl}/DELEXECUTABLE"
912                 ac_testn can_delexe compiler_fails 0 'for the /DELEXECUTABLE linker option' <<-'EOF'
913                         #include <unistd.h>
914                         int main(void) { return (dup(0)); }
915                 EOF
916                 ;;
917         *)
918                 exit 1
919                 ;;
920         esac
921         test 1 = $HAVE_CAN_DELEXE || CFLAGS=$save_CFLAGS
922         ac_ifcpp 'if 0' compiler_still_fails \
923             'if the compiler still does not fail correctly' && exit 1
924 fi
925 if ac_ifcpp 'ifdef __TINYC__' couldbe_tcc '!' compiler_known 0 \
926     'if this could be tcc'; then
927         ct=tcc
928         CPP='cpp -D__TINYC__'
929         HAVE_COMPILER_KNOWN=1
930 fi
931
932 case $ct in
933 bcc)
934         save_NOWARN="${ccpc}-w"
935         DOWARN="${ccpc}-w!"
936         ;;
937 dec)
938         # -msg_* flags not used yet, or is -w2 correct?
939         ;;
940 dmc)
941         save_NOWARN="${ccpc}-w"
942         DOWARN="${ccpc}-wx"
943         ;;
944 hpcc)
945         save_NOWARN=
946         DOWARN=+We
947         ;;
948 kencc)
949         save_NOWARN=
950         DOWARN=
951         ;;
952 mipspro)
953         save_NOWARN=
954         DOWARN="-diag_error 1-10000"
955         ;;
956 msc)
957         save_NOWARN="${ccpc}/w"
958         DOWARN="${ccpc}/WX"
959         ;;
960 sunpro)
961         test x"$save_NOWARN" = x"" && save_NOWARN='-errwarn=%none'
962         ac_flags 0 errwarnnone "$save_NOWARN"
963         test 1 = $HAVE_CAN_ERRWARNNONE || save_NOWARN=
964         ac_flags 0 errwarnall "-errwarn=%all"
965         test 1 = $HAVE_CAN_ERRWARNALL && DOWARN="-errwarn=%all"
966         ;;
967 tendra)
968         save_NOWARN=-w
969         ;;
970 ucode)
971         save_NOWARN=
972         DOWARN=-w2
973         ;;
974 watcom)
975         save_NOWARN=
976         DOWARN=-Wc,-we
977         ;;
978 xlc)
979         case $TARGET_OS in
980         OS/390)
981                 save_NOWARN=-qflag=e
982                 DOWARN=-qflag=i
983                 ;;
984         *)
985                 save_NOWARN=-qflag=i:e
986                 DOWARN=-qflag=i:i
987                 ;;
988         esac
989         ;;
990 *)
991         test x"$save_NOWARN" = x"" && save_NOWARN=-Wno-error
992         ac_flags 0 wnoerror "$save_NOWARN"
993         test 1 = $HAVE_CAN_WNOERROR || save_NOWARN=
994         ac_flags 0 werror -Werror
995         test 1 = $HAVE_CAN_WERROR && DOWARN=-Werror
996         test $ct = icc && DOWARN="$DOWARN -wd1419"
997         ;;
998 esac
999 NOWARN=$save_NOWARN
1000
1001 #
1002 # Compiler: extra flags (-O2 -f* -W* etc.)
1003 #
1004 i=`echo :"$orig_CFLAGS" | sed 's/^://' | tr -c -d $alll$allu$alln`
1005 # optimisation: only if orig_CFLAGS is empty
1006 test x"$i" = x"" && case $ct in
1007 hpcc)
1008         phase=u
1009         ac_flags 1 otwo +O2
1010         phase=x
1011         ;;
1012 kencc|tcc|tendra)
1013         # no special optimisation
1014         ;;
1015 sunpro)
1016         cat >x <<-'EOF'
1017                 #include <unistd.h>
1018                 int main(void) { return (dup(0)); }
1019                 #define __IDSTRING_CONCAT(l,p)  __LINTED__ ## l ## _ ## p
1020                 #define __IDSTRING_EXPAND(l,p)  __IDSTRING_CONCAT(l,p)
1021                 #define pad                     void __IDSTRING_EXPAND(__LINE__,x)(void) { }
1022         EOF
1023         yes pad | head -n 256 >>x
1024         ac_flags - 1 otwo -xO2 <x
1025         rmf x
1026         ;;
1027 xlc)
1028         ac_flags 1 othree "-O3 -qstrict"
1029         test 1 = $HAVE_CAN_OTHREE || ac_flags 1 otwo -O2
1030         ;;
1031 *)
1032         ac_flags 1 otwo -O2
1033         test 1 = $HAVE_CAN_OTWO || ac_flags 1 optimise -O
1034         ;;
1035 esac
1036 # other flags: just add them if they are supported
1037 i=0
1038 case $ct in
1039 bcc)
1040         ac_flags 1 strpool "${ccpc}-d" 'if string pooling can be enabled'
1041         ;;
1042 clang)
1043         i=1
1044         ;;
1045 dec)
1046         ac_flags 0 verb -verbose
1047         ac_flags 1 rodata -readonly_strings
1048         ;;
1049 dmc)
1050         ac_flags 1 decl "${ccpc}-r" 'for strict prototype checks'
1051         ac_flags 1 schk "${ccpc}-s" 'for stack overflow checking'
1052         ;;
1053 gcc)
1054         # The following tests run with -Werror (gcc only) if possible
1055         NOWARN=$DOWARN; phase=u
1056         # MagicPoint is not written in CFrustFrust!
1057         ac_flags 1 no_eh_frame -fno-asynchronous-unwind-tables
1058         ac_flags 1 fnostrictaliasing -fno-strict-aliasing
1059         ac_flags 1 fstackprotectorstrong -fstack-protector-strong
1060         test 1 = $HAVE_CAN_FSTACKPROTECTORSTRONG || \
1061             ac_flags 1 fstackprotectorall -fstack-protector-all
1062         ac_flags 1 data_abi_align -malign-data=abi
1063         i=1
1064         ;;
1065 hpcc)
1066         phase=u
1067         # probably not needed
1068         #ac_flags 1 agcc -Agcc 'for support of GCC extensions'
1069         phase=x
1070         ;;
1071 icc)
1072         ac_flags 1 fnobuiltinsetmode -fno-builtin-setmode
1073         ac_flags 1 fnostrictaliasing -fno-strict-aliasing
1074         ac_flags 1 fstacksecuritycheck -fstack-security-check
1075         i=1
1076         ;;
1077 mipspro)
1078         ac_flags 1 fullwarn -fullwarn 'for remark output support'
1079         ;;
1080 msc)
1081         ac_flags 1 strpool "${ccpc}/GF" 'if string pooling can be enabled'
1082         echo 'int main(void) { char test[64] = ""; return (*test); }' >x
1083         ac_flags - 1 stackon "${ccpc}/GZ" 'if stack checks can be enabled' <x
1084         ac_flags - 1 stckall "${ccpc}/Ge" 'stack checks for all functions' <x
1085         ac_flags - 1 secuchk "${ccpc}/GS" 'for compiler security checks' <x
1086         rmf x
1087         ac_flags 1 wall "${ccpc}/Wall" 'to enable all warnings'
1088         ac_flags 1 wp64 "${ccpc}/Wp64" 'to enable 64-bit warnings'
1089         ;;
1090 nwcc)
1091         #broken# ac_flags 1 ssp -stackprotect
1092         i=1
1093         ;;
1094 pcc)
1095         ac_flags 1 fstackprotectorall -fstack-protector-all
1096         i=1
1097         ;;
1098 sunpro)
1099         phase=u
1100         ac_flags 1 v -v
1101         ac_flags 1 ipo -xipo 'for cross-module optimisation'
1102         phase=x
1103         ;;
1104 tcc)
1105         : #broken# ac_flags 1 boundschk -b
1106         ;;
1107 tendra)
1108         ac_flags 0 ysystem -Ysystem
1109         test 1 = $HAVE_CAN_YSYSTEM && CPPFLAGS="-Ysystem $CPPFLAGS"
1110         ac_flags 1 extansi -Xa
1111         ;;
1112 xlc)
1113         case $TARGET_OS in
1114         OS/390)
1115                 # On IBM z/OS, the following are warnings by default:
1116                 # CCN3296: #include file <foo.h> not found.
1117                 # CCN3944: Attribute "__foo__" is not supported and is ignored.
1118                 # CCN3963: The attribute "foo" is not a valid variable attribute and is ignored.
1119                 ac_flags 1 halton '-qhaltonmsg=CCN3296 -qhaltonmsg=CCN3944 -qhaltonmsg=CCN3963'
1120                 # CCN3290: Unknown macro name FOO on #undef directive.
1121                 # CCN4108: The use of keyword '__attribute__' is non-portable.
1122                 ac_flags 1 supprss '-qsuppress=CCN3290 -qsuppress=CCN4108'
1123                 ;;
1124         *)
1125                 ac_flags 1 rodata '-qro -qroconst -qroptr'
1126                 ac_flags 1 rtcheck -qcheck=all
1127                 #ac_flags 1 rtchkc -qextchk     # reported broken
1128                 ac_flags 1 wformat '-qformat=all -qformat=nozln'
1129                 ;;
1130         esac
1131         #ac_flags 1 wp64 -qwarn64       # too verbose for now
1132         ;;
1133 esac
1134 # flags common to a subset of compilers (run with -Werror on gcc)
1135 if test 1 = $i; then
1136         ac_flags 1 wall -Wall
1137         ac_flags 1 fwrapv -fwrapv
1138         # keep this sane
1139         ac_flags 1 wformat -Wformat
1140         ac_flags 1 wextra -Wextra # temporarily
1141         ac_flags 1 woldstyledecl -Wold-style-declaration
1142         ac_flags 1 woldstyledefn -Wold-style-definition
1143         ac_flags 1 wmissingdecl -Wmissing-declarations
1144         ac_flags 1 wmissingproto -Wmissing-prototypes
1145 fi
1146
1147 phase=x
1148 # The following tests run with -Werror or similar (all compilers) if possible
1149 NOWARN=$DOWARN
1150 test $ct = pcc && phase=u
1151
1152 #
1153 # Compiler: check for stuff that only generates warnings
1154 #
1155 ac_test attribute_bounded '' 'for __attribute__((__bounded__))' <<-'EOF'
1156         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1157         extern int thiswillneverbedefinedIhope(void);
1158         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1159         int main(void) { return (thiswillneverbedefinedIhope()); }
1160         #else
1161         #include <string.h>
1162         #undef __attribute__
1163         int xcopy(const void *, void *, size_t)
1164             __attribute__((__bounded__(__buffer__, 1, 3)))
1165             __attribute__((__bounded__(__buffer__, 2, 3)));
1166         int main(int ac, char *av[]) { return (xcopy(av[0], av[--ac], 1)); }
1167         int xcopy(const void *s, void *d, size_t n) {
1168                 /*
1169                  * if memmove does not exist, we are not on a system
1170                  * with GCC with __bounded__ attribute either so poo
1171                  */
1172                 memmove(d, s, n); return ((int)n);
1173         }
1174         #endif
1175 EOF
1176 ac_test attribute_format '' 'for __attribute__((__format__))' <<-'EOF'
1177         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1178         extern int thiswillneverbedefinedIhope(void);
1179         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1180         int main(void) { return (thiswillneverbedefinedIhope()); }
1181         #else
1182         #define fprintf printfoo
1183         #include <stdio.h>
1184         #undef __attribute__
1185         #undef fprintf
1186         extern int fprintf(FILE *, const char *format, ...)
1187             __attribute__((__format__(__printf__, 2, 3)));
1188         int main(int ac, char *av[]) { return (fprintf(stderr, "%s%d", *av, ac)); }
1189         #endif
1190 EOF
1191 ac_test attribute_nonnull '' 'for __attribute__((__nonnull__))' <<-'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 <stdio.h>
1198         #undef __attribute__
1199         int fnord(const char *) __attribute__((__nonnull__(1)));
1200         int main(void) { return (fnord("x")); }
1201         int fnord(const char *x) { return (fputc(*x, stderr)); }
1202         #endif
1203 EOF
1204 ac_test attribute_noreturn '' 'for __attribute__((__noreturn__))' <<-'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 <stdlib.h>
1211         #undef __attribute__
1212         void fnord(void) __attribute__((__noreturn__));
1213         int main(void) { fnord(); }
1214         void fnord(void) { exit(0); }
1215         #endif
1216 EOF
1217 ac_test attribute_pure '' 'for __attribute__((__pure__))' <<-'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 foo(const char *) __attribute__((__pure__));
1226         int main(int ac, char *av[]) { return (foo(av[ac - 1]) + dup(0)); }
1227         int foo(const char *s) { return ((int)s[0]); }
1228         #endif
1229 EOF
1230 ac_test attribute_unused '' 'for __attribute__((__unused__))' <<-'EOF'
1231         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1232         extern int thiswillneverbedefinedIhope(void);
1233         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1234         int main(void) { return (thiswillneverbedefinedIhope()); }
1235         #else
1236         #include <unistd.h>
1237         #undef __attribute__
1238         int main(int ac __attribute__((__unused__)), char *av[]
1239             __attribute__((__unused__))) { return (dup(0)); }
1240         #endif
1241 EOF
1242 ac_test attribute_used '' 'for __attribute__((__used__))' <<-'EOF'
1243         #if defined(__TenDRA__) || (defined(__GNUC__) && (__GNUC__ < 2))
1244         extern int thiswillneverbedefinedIhope(void);
1245         /* force a failure: TenDRA and gcc 1.42 have false positive here */
1246         int main(void) { return (thiswillneverbedefinedIhope()); }
1247         #else
1248         #include <unistd.h>
1249         #undef __attribute__
1250         static const char fnord[] __attribute__((__used__)) = "42";
1251         int main(void) { return (dup(0)); }
1252         #endif
1253 EOF
1254
1255 # End of tests run with -Werror
1256 NOWARN=$save_NOWARN
1257 phase=x
1258
1259 add_cppflags -DNeedFunctionPrototypes
1260
1261 #
1262 # Environment: headers
1263 #
1264 ac_header sys/time.h sys/types.h
1265 ac_header time.h sys/types.h
1266 test "11" = "$HAVE_SYS_TIME_H$HAVE_TIME_H" || HAVE_BOTH_TIME_H=0
1267 ac_test both_time_h '' 'whether <sys/time.h> and <time.h> can both be included' <<-'EOF'
1268         #include <sys/types.h>
1269         #include <sys/time.h>
1270         #include <time.h>
1271         #include <unistd.h>
1272         int main(void) { struct tm tm; return ((int)sizeof(tm) + dup(0)); }
1273 EOF
1274 ac_header sys/wait.h sys/types.h
1275 ac_header fcntl.h
1276 ac_header iconv.h
1277 ac_header locale.h
1278 ac_header termios.h
1279 ac_header util.h
1280
1281 #
1282 # Environment: definitions
1283 #
1284 echo '#include <sys/types.h>
1285 #include <fts.h>
1286 #include <unistd.h>
1287 /* check that off_t can represent 2^63-1 correctly, thx FSF */
1288 #define LARGE_OFF_T ((((off_t)1 << 31) << 31) - 1 + (((off_t)1 << 31) << 31))
1289 int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 &&
1290     LARGE_OFF_T % 2147483647 == 1) ? 1 : -1];
1291 int main(void) { return (dup(0)); }' >lft.c
1292 ac_testn can_lfs '' "for large file support" <lft.c
1293 save_CPPFLAGS=$CPPFLAGS
1294 add_cppflags -D_FILE_OFFSET_BITS=64
1295 ac_testn can_lfs_sus '!' can_lfs 0 "... with -D_FILE_OFFSET_BITS=64" <lft.c
1296 if test 0 = $HAVE_CAN_LFS_SUS; then
1297         CPPFLAGS=$save_CPPFLAGS
1298         add_cppflags -D_LARGE_FILES=1
1299         ac_testn can_lfs_aix '!' can_lfs 0 "... with -D_LARGE_FILES=1" <lft.c
1300         test 1 = $HAVE_CAN_LFS_AIX || CPPFLAGS=$save_CPPFLAGS
1301 fi
1302 rm -f lft.c
1303 rmf lft*        # end of large file support test
1304
1305 PK_DEFS=
1306 PK_LIBS=
1307 for pkg in $pkgs; do
1308         $e Running pkg-config for $pkg...
1309         PK_DEFS="$PK_DEFS `pkg-config --cflags $pkg`"
1310         PK_LIBS="$PK_LIBS `pkg-config --libs $pkg`"
1311 done
1312
1313 #
1314 # Environment: types
1315 #
1316 ac_test can_uchar '' "for u_char" <<-'EOF'
1317         #include <sys/types.h>
1318         #include <stddef.h>
1319         int main(int ac, char *av[]) { return ((u_char)(unsigned char)av[ac - 1][0]); }
1320 EOF
1321 ac_test can_ushort '' "for u_short" <<-'EOF'
1322         #include <sys/types.h>
1323         #include <stddef.h>
1324         int main(int ac, char *av[]) { return ((u_short)(unsigned char)av[ac - 1][0]); }
1325 EOF
1326 ac_test can_uint '' "for u_int" <<-'EOF'
1327         #include <sys/types.h>
1328         #include <stddef.h>
1329         int main(int ac, char *av[]) { return ((u_int)(unsigned char)av[ac - 1][0]); }
1330 EOF
1331 ac_test can_ulong '' "for u_long" <<-'EOF'
1332         #include <sys/types.h>
1333         #include <stddef.h>
1334         int main(int ac, char *av[]) { return ((u_long)(size_t)av[ac]); }
1335 EOF
1336
1337 #
1338 # check whether the final link ought to succeed
1339 #
1340 HAVE_LINK_WORKS=x
1341 save_CPPFLAGS=$CPPFLAGS
1342 save_LIBS=$LIBS
1343 CPPFLAGS="-I$srcdir $CPPFLAGS $PK_DEFS -DBUILDSH_LINKTEST"
1344 LIBS="$LIBS $PK_LIBS"
1345 ac_testinit link_works '' 'checking if the final link command may succeed'
1346 fv=1
1347 cat >conftest.c <<-EOF
1348         #include "mgp.h"
1349         #if HAVE_LOCALE_H
1350         #include <locale.h>
1351         #endif
1352         #include <fcntl.h>
1353         #ifdef TTY_KEYINPUT
1354         #include <termios.h>
1355         #endif
1356
1357         int main(void) { printf("Hello, World!\\n"); return (dup(0)); }
1358 EOF
1359 v "$CC $CFLAGS $CPPFLAGS $NOWARN -c conftest.c" || fv=0
1360 test $fv = 0 || v "$CC $CFLAGS $LDFLAGS -o $tcfn conftest.o $LIBS $ccpr"
1361 test -f $tcfn || fv=0
1362 ac_testdone
1363 test $fv = 1 || exit 1
1364 LIBS=$save_LIBS
1365 CPPFLAGS=$save_CPPFLAGS
1366
1367 #
1368 # Environment: library functions
1369 #
1370 cat >lft.c <<-'EOF'
1371         #if HAVE_ICONV_H
1372         #include <iconv.h>
1373         #endif
1374         #include <stdio.h>
1375         #include <string.h>
1376         int main(int ac, char *av[]) {
1377                 iconv_t cd;
1378                 char *srcp = av[1], *dstp = av[2];
1379                 size_t ilen = strlen(srcp), olen = ac;
1380
1381                 if ((cd = iconv_open("dst", "src")) == (iconv_t)-1)
1382                         return (2);
1383                 if (iconv(cd, &srcp, &ilen, &dstp, &olen) == (size_t)-1)
1384                         return (3);
1385                 return (iconv_close(cd) != 0);
1386         }
1387 EOF
1388 ac_testn iconv '' 'iconv (no extra libraries)' <lft.c
1389 iconv_L=
1390 if test 0 = $HAVE_ICONV; then
1391         save_LIBS=$LIBS
1392         LIBS="$LIBS -liconv"
1393         HAVE_ICONV=x
1394         ac_testn iconv '' 'iconv (with libiconv)' <lft.c
1395         if test 1 = $HAVE_ICONV; then
1396                 iconv_L=-liconv
1397         fi
1398         LIBS=$save_LIBS
1399 fi
1400 ac_cppflags
1401 rm -f lft.c
1402 rmf lft*
1403
1404 ac_test setlocale_ctype locale_h 0 'setlocale(LC_CTYPE, "")' <<-'EOF'
1405         #include <locale.h>
1406         #include <stddef.h>
1407         int main(void) { return ((int)(size_t)(void *)setlocale(LC_CTYPE, "")); }
1408 EOF
1409
1410 ac_test setreuid '' 'for setreuid and setregid' <<-'EOF'
1411         #include <sys/types.h>
1412         #include <unistd.h>
1413         int main(void) { return (setreuid(0,0) + setregid(0,0)); }
1414 EOF
1415
1416 save_LIBS=$LIBS
1417 LIBS="$LIBS -lutil"
1418 ac_test uu_lock <<-'EOF'
1419         #include <sys/types.h>
1420         #if HAVE_UTIL_H
1421         #include <util.h>
1422         #endif
1423         int main(int ac, char *av[]) { return (uu_lock(av[ac - 1])); }
1424 EOF
1425 LIBS=$save_LIBS
1426 if test 0 = $HAVE_UU_LOCK; then
1427         uulock_L=
1428         uulock_O=uucplock.o
1429 else
1430         uulock_L=-lutil
1431         uulock_O=
1432 fi
1433
1434 #
1435 # check headers for declarations
1436 #
1437
1438 #
1439 # other checks
1440 #
1441
1442 #
1443 # End of mirtoconf checks
1444 #
1445 $e ... done.
1446 rmf vv.out
1447
1448 test 1 = "$HAVE_CAN_VERB" && CFLAGS="$CFLAGS -verbose"
1449
1450 $e $bi$me: Finished configuration testing, now producing output.$ao
1451
1452 case $tcfn in
1453 a.exe|conftest.exe)
1454         suf=.exe
1455         ;;
1456 *)
1457         suf=
1458         ;;
1459 esac
1460 rm -f Makefile
1461 cat >Makefile~ <<\EOF
1462 # Makefile for building MagicPoint
1463 # generated, do not edit; re-run Build.sh if necessary!
1464
1465 # feel free to override those
1466
1467 # used for building
1468 AR=             ar
1469 AR_CREATE=      $(AR) cq
1470 LEX=            flex
1471 RANLIB=         ranlib
1472 SH=             sh
1473 YACC=           yacc
1474
1475 # used for installing
1476 LINKMANPAGE=    ln -s
1477 PERL=           /usr/bin/env perl
1478 DESTDIR=
1479 PREFIX=         /usr
1480 SYSCONFDIR=     /etc
1481 BINDIR=         $(PREFIX)/bin
1482 MANDIR=         $(PREFIX)/share/man
1483 DOCDIR=         $(PREFIX)/share/doc/mgp
1484 EMACSDIR=       $(PREFIX)/share/emacs/site-lisp/mgp
1485 MGPELDIR=       $(DOCDIR)/contrib/mgp-el
1486 #SAMPLEDIR=     $(DOCDIR)/examples
1487 SAMPLEDIR=      $(PREFIX)/share/examples/mgp
1488 RCDIR=          $(SYSCONFDIR)/mgp
1489
1490 # set to empty to not install (Debian)
1491 INST_LICENCE=   LICENCE
1492 INST_RELNOTES=  RELNOTES
1493
1494 # or /usr/ucb/install
1495 INSTALL=        install
1496 INSTALL_COPY=   -c
1497 INSTALL_STRIP=  -s
1498 BINMODE=        555
1499 CONFMODE=       644
1500 NONBINMODE=     444
1501 DIRMODE=        755
1502 INSTALL_DIR=    $(INSTALL) -d -m $(DIRMODE)
1503 INSTALL_PROGRAM=$(INSTALL) $(INSTALL_COPY) $(INSTALL_STRIP) -m $(BINMODE)
1504 INSTALL_SCRIPT= $(INSTALL) $(INSTALL_COPY) -m $(BINMODE)
1505 INSTALL_DATA=   $(INSTALL) $(INSTALL_COPY) -m $(NONBINMODE)
1506 INSTALL_CONF=   $(INSTALL) $(INSTALL_COPY) -m $(CONFMODE)
1507
1508 # do NOT override these, re-run Build.sh if necessary!
1509 EOF
1510 sed 's/#/\\&/g' >>Makefile~ <<EOF
1511 CC=             $CC
1512 CPPFLAGS=       $CPPFLAGS
1513 CFLAGS=         $CFLAGS
1514 LDFLAGS=        $LDFLAGS
1515 LIBS=           $LIBS
1516 SRCDIR=         $srcdir
1517 PK_DEFS=        $PK_DEFS
1518 PK_LIBS=        $PK_LIBS
1519 iconv_L=        $iconv_L
1520 uulock_L=       $uulock_L
1521 uulock_O=       $uulock_O
1522
1523 E=              $suf
1524 mgpversion=     $srcversion
1525 EOF
1526 cat >>Makefile~ <<\EOF
1527
1528 # internals
1529 MAN1=           $(SRCDIR)/contrib/xmindpath/xmindpath.1 \
1530                 $(SRCDIR)/contrib/xwintoppm/xwintoppm.1 \
1531                 $(SRCDIR)/contrib/eqn2eps.1 \
1532                 $(SRCDIR)/contrib/mgp2html.1 \
1533                 $(SRCDIR)/contrib/mgpnet.1 \
1534                 $(SRCDIR)/mgp.1 $(SRCDIR)/mgp2ps.1
1535 MAN1LINKS=      'eqn2eps.1 latex2eps.1' \
1536                 'eqn2eps.1 tex2eps.1' \
1537                 'mgp2html.1 mgp2latex.1'
1538
1539 xmp_DEFS=       -I$(SRCDIR)/contrib/xmindpath
1540 xmp_OBJS=       main.o $(uulock_O)
1541 xmp_LIBS=       -lXtst -lX11 $(uulock_L)
1542
1543 xwp_DEFS=       -I$(SRCDIR)/contrib/xwintoppm
1544 xwp_OBJS=       dsimple.o list.o multiVis.o xwintoppm.o
1545 xwp_LIBS=       -lXmu -lXt -lX11
1546
1547 mgp_DEFS=       -I$(SRCDIR) -DMGPLIBDIR=\"$(RCDIR)\" $(PK_DEFS)
1548 mgp_LIBS=       -L. -lmgpcommon $(PK_LIBS) $(iconv_L) -lX11 -lm
1549
1550 lib_DEFS=       $(mgp_DEFS) -I$(SRCDIR)/image
1551 lib_OBJS=       ctlwords.o \
1552                 dither.o halftone.o imagetypes.o imlib_loader.o \
1553                 misc.o new.o path.o reduce.o send.o value.o zoom.o \
1554                 background.o draw.o globals.o y.tab.o parse.o \
1555                 plist.o postscript.o lex.yy.o unimap.o
1556
1557 mgp_OBJS=       mgp.o x11.o
1558 mps_OBJS=       print.o x11dummy.o
1559
1560 all: mgp$E mgp2ps$E xmindpath$E xwintoppm$E mgp2html mgp2latex mgpnet
1561
1562 # also builds ctlwords.h and ctlwords.pl
1563 ctlwords.c: $(SRCDIR)/ctlwords.sh
1564         $(SH) $(SRCDIR)/ctlwords.sh
1565
1566 mgp2html: ctlwords.c $(SRCDIR)/contrib/mgp2html.pl.in
1567         echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
1568             $(SRCDIR)/contrib/mgp2html.pl.in
1569
1570 mgp2latex: ctlwords.c $(SRCDIR)/contrib/mgp2latex.pl.in
1571         echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
1572             $(SRCDIR)/contrib/mgp2latex.pl.in
1573
1574 mgpnet: ctlwords.c $(SRCDIR)/contrib/mgpnet.in
1575         echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
1576             $(SRCDIR)/contrib/mgpnet.in
1577
1578 xmindpath$E: $(xmp_OBJS)
1579         $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(xmp_OBJS) $(LIBS) $(xmp_LIBS)
1580
1581 xwintoppm$E: $(xwp_OBJS)
1582         $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(xwp_OBJS) $(LIBS) $(xwp_LIBS)
1583
1584 mgp$E: $(mgp_OBJS) libmgpcommon.a
1585         $(CC) $(CFLAGS) $(mgp_DEFS) $(LDFLAGS) -o $@ \
1586             $(mgp_OBJS) $(LIBS) $(mgp_LIBS)
1587
1588 mgp2ps$E: $(mps_OBJS) libmgpcommon.a
1589         $(CC) $(CFLAGS) $(mgp_DEFS) $(LDFLAGS) -o $@ \
1590             $(mps_OBJS) $(LIBS) $(mgp_LIBS)
1591
1592 libmgpcommon.a: $(lib_OBJS)
1593         @rm -f $@
1594         $(AR_CREATE) $@ $(lib_OBJS)
1595         $(RANLIB) $@
1596
1597 # also builds y.tab.h
1598 y.tab.c: $(SRCDIR)/grammar.y
1599         $(YACC) -d $(SRCDIR)/grammar.y
1600
1601 lex.yy.c: $(SRCDIR)/scanner.l
1602         $(LEX) $(SRCDIR)/scanner.l
1603
1604 EOF
1605 dofile() {
1606         dstbn=`basename "$1" | sed 's/\.[^.]*$//'`
1607         srcf=
1608         srca=
1609         while test -n "$1"; do
1610                 if test -f "$srcdir/$1"; then
1611                         f='$(SRCDIR)/'"$1"
1612                 else
1613                         f=$1
1614                 fi
1615                 shift
1616                 if test -n "$srcf"; then
1617                         srca="$srca $f"
1618                 else
1619                         srca=$f
1620                         srcf=$f
1621                 fi
1622         done
1623         cat >>Makefile~ <<EOF
1624 $dstbn.o: $srca
1625         \$(CC) \$(CPPFLAGS) \$(CFLAGS) $defs -c $srcf
1626
1627 EOF
1628 }
1629 xlih="image/xloadimage.h image/image.h"
1630 mgph="mgp.h $xlih ctlwords.c" # ctlwords.h but that breaks parallel gmake
1631 defs='$(xmp_DEFS)'
1632 dofile contrib/xmindpath/main.c
1633 dofile contrib/xmindpath/uucplock.c contrib/xmindpath/pathnames.h
1634 defs='$(xwp_DEFS)'
1635 dofile contrib/xwintoppm/dsimple.c contrib/xwintoppm/dsimple.h
1636 dofile contrib/xwintoppm/list.c contrib/xwintoppm/list.h
1637 dofile contrib/xwintoppm/multiVis.c contrib/xwintoppm/list.h \
1638     contrib/xwintoppm/wsutils.h contrib/xwintoppm/multiVis.h
1639 dofile contrib/xwintoppm/xwintoppm.c contrib/xwintoppm/dsimple.h \
1640     contrib/xwintoppm/list.h \
1641     contrib/xwintoppm/wsutils.h contrib/xwintoppm/multiVis.h
1642 defs='$(mgp_DEFS)'
1643 dofile ctlwords.c
1644 defs='$(lib_DEFS)'
1645 dofile image/dither.c image/image.h
1646 dofile image/halftone.c image/image.h
1647 dofile image/imagetypes.c $xlih
1648 dofile image/imlib_loader.c $xlih
1649 dofile image/misc.c image/image.h
1650 dofile image/new.c image/image.h
1651 dofile image/path.c $xlih
1652 dofile image/reduce.c image/image.h
1653 dofile image/send.c $mgph
1654 dofile image/value.c image/image.h
1655 dofile image/zoom.c image/image.h
1656 defs='$(mgp_DEFS)'
1657 dofile background.c $mgph
1658 dofile draw.c $mgph
1659 dofile globals.c $mgph
1660 dofile y.tab.c $mgph
1661 dofile parse.c $mgph
1662 dofile plist.c $mgph
1663 dofile postscript.c $mgph
1664 dofile lex.yy.c $mgph y.tab.c # y.tab.h but that breaks parallel gmake
1665 dofile unimap.c $mgph
1666 dofile mgp.c $mgph
1667 dofile x11.c $mgph
1668 dofile print.c $mgph
1669 dofile x11dummy.c $mgph
1670 cat >>Makefile~ <<\EOF
1671 INSTALL_SYSCONFIG=install-sysconfig
1672 install: install-program $(INSTALL_SYSCONFIG)
1673 install-program:
1674         $(INSTALL_DIR) $(DESTDIR)$(BINDIR)
1675         $(INSTALL_PROGRAM) mgp $(DESTDIR)$(BINDIR)/
1676         $(INSTALL_PROGRAM) mgp2ps $(DESTDIR)$(BINDIR)/
1677         $(INSTALL_PROGRAM) xmindpath $(DESTDIR)$(BINDIR)/
1678         $(INSTALL_PROGRAM) xwintoppm $(DESTDIR)$(BINDIR)/
1679         $(INSTALL_SCRIPT) $(SRCDIR)/contrib/eqn2eps.sh \
1680             $(DESTDIR)$(BINDIR)/eqn2eps
1681         $(INSTALL_SCRIPT) $(SRCDIR)/contrib/latex2eps.sh \
1682             $(DESTDIR)$(BINDIR)/latex2eps
1683         $(INSTALL_SCRIPT) mgp2html $(DESTDIR)$(BINDIR)/
1684         $(INSTALL_SCRIPT) mgp2latex $(DESTDIR)$(BINDIR)/
1685         $(INSTALL_SCRIPT) mgpnet $(DESTDIR)$(BINDIR)/
1686         $(INSTALL_SCRIPT) $(SRCDIR)/contrib/tex2eps.sh \
1687             $(DESTDIR)$(BINDIR)/tex2eps
1688         $(INSTALL_DIR) $(DESTDIR)$(MANDIR)/man1
1689         $(INSTALL_DATA) $(MAN1) $(DESTDIR)$(MANDIR)/man1/
1690         cd $(DESTDIR)$(MANDIR)/man1/ && for link in $(MAN1LINKS); do \
1691                 $(LINKMANPAGE) $$link || exit 1; \
1692         done
1693         $(INSTALL_DIR) $(DESTDIR)$(EMACSDIR)
1694         cd $(SRCDIR)/contrib && $(INSTALL_DATA) \
1695             mgp-el/mgp.el mgp-mode-cd.el mgp-mode.el mgp-mode20.el \
1696             $(DESTDIR)$(EMACSDIR)/
1697         $(INSTALL_DIR) $(DESTDIR)$(MGPELDIR)
1698         cd $(SRCDIR)/contrib/mgp-el && $(INSTALL_DATA) \
1699             README mgp.sty $(DESTDIR)$(MGPELDIR)/
1700         $(INSTALL_DIR) $(DESTDIR)$(DOCDIR)
1701         cd $(SRCDIR) && $(INSTALL_DATA) FAQ README README.fonts README.lang \
1702             README.xft SYNTAX TODO.jp USAGE USAGE.jp $(INST_LICENCE) \
1703             $(INST_RELNOTES) $(DESTDIR)$(DOCDIR)/
1704         $(INSTALL_DIR) $(DESTDIR)$(SAMPLEDIR)
1705         cd $(SRCDIR)/sample && $(INSTALL_DATA) \
1706             README README.jp cloud.jpg dad.eps dad.jpg default.mgp \
1707             gradation-jp.mgp gradation.mgp mgp-old1.jpg mgp-old2.jpg \
1708             mgp-old3.jpg mgp-print6 mgp1.jpg mgp2.jpg mgp3.jpg mgp3.xbm \
1709             multilingual.mgp sample-fr.mgp sample-jp-xft.mgp sample-jp.mgp \
1710             sample.mgp sendmail6-jp.mgp sendmail6.mgp tutorial-jp.mgp \
1711             tutorial.mgp utf8test.mgp v6-jp.mgp v6.mgp v6header.* \
1712             $(DESTDIR)$(SAMPLEDIR)/
1713
1714 install-sysconfig:
1715         $(INSTALL_DIR) $(DESTDIR)$(RCDIR)
1716         $(INSTALL_CONF) $(SRCDIR)/sample/default.mgp $(DESTDIR)$(RCDIR)/
1717
1718 clean:
1719         rm -f *~ *.a *.o ctlwords.c ctlwords.h ctlwords.pl lex.yy.c y.tab.* \
1720             mgp$E mgp2ps$E xmindpath$E xwintoppm$E mgp2html mgp2latex mgpnet \
1721             conftest.c
1722 EOF
1723 mv Makefile~ Makefile || exit 1
1724 $e
1725 $e Generated Makefile successfully.
1726 echo >&2 '
1727 You can now use make(1) to compile MagicPoint.
1728 '
1729 exit 0
1730
1731 : <<'EOD'
1732
1733 === Flags ===
1734
1735 -P list: set list of pkg-config query targets,
1736         default: imlib2 libbsd-overlay xft
1737
1738 === Environment used ===
1739
1740 ==== Makefile variables ====
1741 AR_CREATE                       default: $(AR) cq; AR=ar
1742 RANLIB                          default: ranlib; could be :
1743 LEX                             default: flex
1744 YACC                            default: yacc
1745 SH                              POSIX shell to use during build
1746 DESTDIR                         prefix to use while installing
1747 PERL                            written to shebang
1748 PREFIX                          default: /usr
1749 SYSCONFDIR                      default: /etc
1750 INSTALL_STRIP                   default: -s
1751 mgpversion                      may be overridden with package version
1752
1753 ==== build environment ====
1754 CC                              default: cc
1755 CFLAGS                          if empty, defaults to -xO2 or +O2
1756                                 or -O3 -qstrict or -O2, per compiler
1757 CPPFLAGS                        default empty
1758 LDFLAGS                         default empty; added before sources
1759 LDSTATIC                        set this to '-static'; default unset
1760 LIBS                            default empty; added after sources
1761 NOWARN                          -Wno-error or similar
1762 TARGET_OS                       default: $(uname -s || uname)
1763 TARGET_OSREV                    [SCO] default: $(uname -r)
1764
1765 ===== general format =====
1766 HAVE_STRLEN                     ac_test
1767 HAVE_STRING_H                   ac_header
1768 HAVE_CAN_FSTACKPROTECTORALL     ac_flags
1769
1770 ==== cpp definitions ====
1771 MKSH_TYPEDEF_SSIZE_T            define to e.g. 'long' if your OS has no ssize_t
1772
1773 === generic installation instructions ===
1774
1775 Set CC and possibly CFLAGS, CPPFLAGS, LDFLAGS, LIBS. If cross-compiling,
1776 also set TARGET_OS. To disable tests, set e.g. HAVE_STRLCPY=0; to enable
1777 them, set to a value other than 0 or 1 (e.g. to x).
1778
1779 Normally, the following command is what you want to run, then:
1780 $ (sh Build.sh && make && sudo make install) 2>&1 | tee log
1781
1782 EOD