/[gxemul]/trunk/configure
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/configure

Parent Directory Parent Directory | Revision Log Revision Log


Revision 34 - (hide annotations)
Mon Oct 8 16:21:17 2007 UTC (16 years, 6 months ago) by dpavlin
File size: 30535 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.1480 2007/02/19 01:34:42 debug Exp $
20061029	Changing usleep(1) calls in the debugger to usleep(10000)
20061107	Adding a new disk image option (-d o...) which sets the ISO9660
		filesystem base offset; also making some other hacks to allow
		NetBSD/dreamcast and homebrew demos/games to boot directly
		from a filesystem image.
		Moving Dreamcast-specific stuff in the documentation to its
		own page (dreamcast.html).
		Adding a border to the Dreamcast PVR framebuffer.
20061108	Adding a -T command line option (again?), for halting the
		emulator on unimplemented memory accesses.
20061109	Continuing on various SH4 and Dreamcast related things.
		The emulator should now halt on more unimplemented device
		accesses, instead of just printing a warning, forcing me to
		actually implement missing stuff :)
20061111	Continuing on SH4 and Dreamcast stuff.
		Adding a bogus Landisk (SH4) machine mode.
20061112	Implementing some parts of the Dreamcast GDROM device. With
		some ugly hacks, NetBSD can (barely) mount an ISO image.
20061113	NetBSD/dreamcast now starts booting from the Live CD image,
		but crashes randomly quite early on in the boot process.
20061122	Beginning on a skeleton interrupt.h and interrupt.c for the
		new interrupt subsystem.
20061124	Continuing on the new interrupt system; taking the first steps
		to attempt to connect CPUs (SuperH and MIPS) and devices
		(dev_cons and SH4 timer interrupts) to it. Many things will
		probably break from now on.
20061125	Converting dev_ns16550, dev_8253 to the new interrupt system.
		Attempting to begin to convert the ISA bus.
20061130	Incorporating a patch from Brian Foley for the configure
		script, which checks for X11 libs in /usr/X11R6/lib64 (which
		is used on some Linux systems).
20061227	Adding a note in the man page about booting from Dreamcast
		CDROM images (i.e. that no external kernel is needed).
20061229	Continuing on the interrupt system rewrite: beginning to
		convert more devices, adding abort() calls for legacy interrupt
		system calls so that everything now _has_ to be rewritten!
		Almost all machine modes are now completely broken.
20061230	More progress on removing old interrupt code, mostly related
		to the ISA bus + devices, the LCA bus (on AlphaBook1), and
		the Footbridge bus (for CATS). And some minor PCI stuff.
		Connecting the ARM cpu to the new interrupt system.
		The CATS, NetWinder, and QEMU_MIPS machine modes now work with
		the new interrupt system :)
20061231	Connecting PowerPC CPUs to the new interrupt system.
		Making PReP machines (IBM 6050) work again.
		Beginning to convert the GT PCI controller (for e.g. Malta
		and Cobalt emulation). Some things work, but not everything.
		Updating Copyright notices for 2007.
20070101	Converting dev_kn02 from legacy style to devinit; the 3max
		machine mode now works with the new interrupt system :-]
20070105	Beginning to convert the SGI O2 machine to the new interrupt
		system; finally converting O2 (IP32) devices to devinit, etc.
20070106	Continuing on the interrupt system redesign/rewrite; KN01
		(PMAX), KN230, and Dreamcast ASIC interrupts should work again,
		moving out stuff from machine.h and devices.h into the
		corresponding devices, beginning the rewrite of i80321
		interrupts, etc.
20070107	Beginning on the rewrite of Eagle interrupt stuff (PReP, etc).
20070117	Beginning the rewrite of Algor (V3) interrupts (finally
		changing dev_v3 into devinit style).
20070118	Removing the "bus" registry concept from machine.h, because
		it was practically meaningless.
		Continuing on the rewrite of Algor V3 ISA interrupts.
20070121	More work on Algor interrupts; they are now working again,
		well enough to run NetBSD/algor. :-)
20070122	Converting VR41xx (HPCmips) interrupts. NetBSD/hpcmips
		can be installed using the new interrupt system :-)
20070123	Making the testmips mode work with the new interrupt system.
20070127	Beginning to convert DEC5800 devices to devinit, and to the
		new interrupt system.
		Converting Playstation 2 devices to devinit, and converting
		the interrupt system. Also fixing a severe bug: the interrupt
		mask register on Playstation 2 is bitwise _toggled_ on writes.
20070128	Removing the dummy NetGear machine mode and the 8250 device
		(which was only used by the NetGear machine).
		Beginning to convert the MacPPC GC (Grand Central) interrupt
		controller to the new interrupt system.
		Converting Jazz interrupts (PICA61 etc.) to the new interrupt
		system. NetBSD/arc can be installed again :-)
		Fixing the JAZZ timer (hardcoding it at 100 Hz, works with
		NetBSD and it is better than a completely dummy timer as it
		was before).
		Converting dev_mp to the new interrupt system, although I
		haven't had time to actually test it yet.
		Completely removing src/machines/interrupts.c, cpu_interrupt
		and cpu_interrupt_ack in src/cpu.c, and
		src/include/machine_interrupts.h! Adding fatal error messages
		+ abort() in the few places that are left to fix.
		Converting dev_z8530 to the new interrupt system.
		FINALLY removing the md_int struct completely from the
		machine struct.
		SH4 fixes (adding a PADDR invalidation in the ITLB replacement
		code in memory_sh.c); the NetBSD/dreamcast LiveCD now runs
		all the way to the login prompt, and can be interacted with :-)
		Converting the CPC700 controller (PCI and interrupt controller
		for PM/PPC) to the new interrupt system.
20070129	Fixing MACE ISA interrupts (SGI IP32 emulation). Both NetBSD/
		sgimips' and OpenBSD/sgi's ramdisk kernels can now be
		interacted with again.
20070130	Moving out the MIPS multi_lw and _sw instruction combinations
		so that they are auto-generated at compile time instead.
20070131	Adding detection of amd64/x86_64 hosts in the configure script,
		for doing initial experiments (again :-) with native code
		generation.
		Adding a -k command line option to set the size of the dyntrans
		cache, and a -B command line option to disable native code
		generation, even if GXemul was compiled with support for
		native code generation for the specific host CPU architecture.
20070201	Experimenting with a skeleton for native code generation.
		Changing the default behaviour, so that native code generation
		is now disabled by default, and has to be enabled by using
		-b on the command line.
20070202	Continuing the native code generation experiments.
		Making PCI interrupts work for Footbridge again.
20070203	More native code generation experiments.
		Removing most of the native code generation experimental code,
		it does not make sense to include any quick hacks like this.
		Minor cleanup/removal of some more legacy MIPS interrupt code.
20070204	Making i80321 interrupts work again (for NetBSD/evbarm etc.),
		and fixing the timer at 100 Hz.
20070206	Experimenting with removing the wdc interrupt slowness hack.
20070207	Lowering the number of dyntrans TLB entries for MIPS from
		192 to 128, resulting in a minor speed improvement.
		Minor optimization to the code invalidation routine in
		cpu_dyntrans.c.
20070208	Increasing (experimentally) the nr of dyntrans instructions per
		loop from 60 to 120.
20070210	Commenting out (experimentally) the dyntrans_device_danger
		detection in memory_rw.c.
		Changing the testmips and baremips machines to use a revision 2
		MIPS64 CPU by default, instead of revision 1.
		Removing the dummy i960, IA64, x86, AVR32, and HP PA-RISC
		files, the PC bios emulation, and the Olivetti M700 (ARC) and
		db64360 emulation modes.
20070211	Adding an "mp" demo to the demos directory, which tests the
		SMP functionality of the testmips machine.
		Fixing PReP interrupts some more. NetBSD/prep now boots again.
20070216	Adding a "nop workaround" for booting Mach/PMAX to the
		documentation; thanks to Artur Bujdoso for the values.
		Converting more of the MacPPC interrupt stuff to the new
		system.
		Beginning to convert BeBox interrupts to the new system.
		PPC603e should NOT have the PPC_NO_DEC flag! Removing it.
		Correcting BeBox clock speed (it was set to 100 in the NetBSD
		bootinfo block, but should be 33000000/4), allowing NetBSD
		to start without using the (incorrect) PPC_NO_DEC hack.
20070217	Implementing (slow) AltiVec vector loads and stores, allowing
		NetBSD/macppc to finally boot using the GENERIC kernel :-)
		Updating the documentation with install instructions for
		NetBSD/macppc.
20070218-19	Regression testing for the release.

==============  RELEASE 0.4.4  ==============


1 dpavlin 2 #!/bin/sh
2     ###############################################################################
3     #
4 dpavlin 34 # Copyright (C) 2003-2007 Anders Gavare. All rights reserved.
5 dpavlin 2 #
6     # Redistribution and use in source and binary forms, with or without
7     # modification, are permitted provided that the following conditions are met:
8     #
9     # 1. Redistributions of source code must retain the above copyright
10     # notice, this list of conditions and the following disclaimer.
11     # 2. Redistributions in binary form must reproduce the above copyright
12     # notice, this list of conditions and the following disclaimer in the
13     # documentation and/or other materials provided with the distribution.
14     # 3. The name of the author may not be used to endorse or promote products
15     # derived from this software without specific prior written permission.
16     #
17     # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18     # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19     # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20     # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21     # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22     # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23     # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24     # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25     # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26     # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27     # SUCH DAMAGE.
28     #
29     #
30 dpavlin 34 # $Id: configure,v 1.243 2007/02/10 14:29:54 debug Exp $
31 dpavlin 2 #
32     # This is a minimal configure script, hardcoded for GXemul. This script
33     # figures out which compiler flags will work, and creates Makefiles in
34     # sub-directories. A config.h file is also created.
35     #
36     #
37     # ---> FOR NORMAL USE, JUST RUN ./configure WITHOUT OPTIONS!
38     #
39     #
40     # To compile the emulator with profiling (during development), use
41     # CFLAGS="-pg", run the emulator, and then run 'gprof gxemul' and study
42     # the results.
43     #
44     #
45     # The main things that are detected by this script:
46     #
47     # o) special hacks for some OSes
48     # o) which compiler to use (overridden by setting CC)
49     # o) which compiler flags to use (overridden by setting CFLAGS)
50 dpavlin 24 # o) X11 flags and libraries (TODO: should be possible to override
51     # via command line options?)
52 dpavlin 34 # o) native code generation backend (i.e. detect host architecture)
53 dpavlin 2 #
54 dpavlin 10 #
55 dpavlin 24 # The general philosophy regarding command line switches is that anything
56     # which can be incorporated into the program as a runtime command line option
57     # should be, instead of requiring a recompile.
58     #
59 dpavlin 2 ###############################################################################
60    
61 dpavlin 12 # Figure out if this is a stable version (0.x.x).
62     X=`basename \`pwd\`|cut -d \- -f 2-|cut -c1-2`
63     if [ z"$X" = z0. ]; then
64     # Stable:
65 dpavlin 24 ENABLEALPHA=YES
66 dpavlin 14 ENABLEARM=YES
67 dpavlin 12 ENABLEMIPS=YES
68 dpavlin 20 ENABLEPPC=YES
69 dpavlin 32 ENABLESH=YES
70 dpavlin 12 else
71     # Development:
72 dpavlin 22 UNSTABLE=YES
73 dpavlin 12 ENABLEALPHA=YES
74     ENABLEARM=YES
75 dpavlin 22 ENABLEAVR=YES
76     ENABLEM68K=YES
77 dpavlin 12 ENABLEMIPS=YES
78     ENABLEPPC=YES
79 dpavlin 32 ENABLERCA180X=YES
80 dpavlin 22 ENABLESH=YES
81     ENABLESPARC=YES
82 dpavlin 28 ENABLETRANSPUTER=YES
83 dpavlin 12 fi
84 dpavlin 2
85 dpavlin 22 if [ z"$UNSTABLE" = zYES ]; then
86 dpavlin 24 printf "###\n### DEVELOPMENT (UNSTABLE)\n###\n\n"
87 dpavlin 22 fi
88    
89 dpavlin 2 if [ z"$*" != z ]; then
90     # Parse command line options:
91     for a in $*; do
92     if [ z$a = z--disable-x ]; then
93     NOX11=YES
94     else if [ z$a = z--help ]; then
95 dpavlin 24 printf "usage: $0 [options]\n\n"
96     echo " --disable-x don't include X11 support,"\
97     "even if the host supports it"
98     echo
99 dpavlin 2 exit
100     else
101     echo "Invalid option: $a"
102     echo "Run $0 --help to get a list of" \
103     "available options."
104     exit
105 dpavlin 22 fi; fi
106 dpavlin 2 done
107     fi
108    
109    
110     ###############################################################################
111     #
112     # Configure options:
113     #
114     # This creates a config.h file, which is then included from include/misc.h.
115     #
116     ###############################################################################
117    
118     # Head of config.h:
119     printf "/*
120     * THIS FILE IS AUTOMATICALLY CREATED BY configure!
121     * DON'T EDIT THIS FILE MANUALLY, IT WILL BE OVERWRITTEN.
122     */
123     \n#ifndef CONFIG_H\n#define CONFIG_H\n\n" > config.h
124    
125    
126     # Figure out if VERSION should be defined.
127     X=`basename \`pwd\`|cut -d \- -f 2-`
128     if [ z"$X" = zgxemul ]; then
129 dpavlin 10 echo '/* No VERSION defined. */' >> config.h
130 dpavlin 2 else
131     printf "#define VERSION \"$X\"\n" >> config.h
132     fi
133    
134    
135 dpavlin 24 if [ z"$UNSTABLE" = zYES ]; then
136     printf "#define UNSTABLE_DEVEL\n" >> config.h
137     fi
138    
139    
140 dpavlin 2 ZZ=`echo compiled on \`uname\`/\`uname -m\`, \`date\``
141     printf "#define COMPILE_DATE \"$ZZ\"\n" >> config.h
142    
143    
144    
145     # Support for various CPU types:
146 dpavlin 12 if [ z$ENABLEALPHA = zYES ]; then
147     printf "#define ENABLE_ALPHA\n" >> config.h
148 dpavlin 24 CPU_ARCHS="$CPU_ARCHS cpu_alpha.o cpu_alpha_palcode.o memory_alpha.o"
149 dpavlin 14 CPU_TOOLS="$CPU_TOOLS generate_alpha_misc"
150 dpavlin 12 fi
151 dpavlin 6 if [ z$ENABLEARM = zYES ]; then
152     printf "#define ENABLE_ARM\n" >> config.h
153 dpavlin 14 CPU_ARCHS="$CPU_ARCHS cpu_arm.o cpu_arm_coproc.o memory_arm.o "
154 dpavlin 16 CPU_ARCHS="$CPU_ARCHS tmp_arm_dpi.o tmp_arm_loadstore.o tmp_arm_r.o"
155     CPU_ARCHS="$CPU_ARCHS tmp_arm_r0.o tmp_arm_r1.o"
156     CPU_ARCHS="$CPU_ARCHS tmp_arm_r2.o tmp_arm_r3.o"
157     CPU_ARCHS="$CPU_ARCHS tmp_arm_r4.o tmp_arm_r5.o"
158     CPU_ARCHS="$CPU_ARCHS tmp_arm_r6.o tmp_arm_r7.o"
159     CPU_ARCHS="$CPU_ARCHS tmp_arm_r8.o tmp_arm_r9.o"
160     CPU_ARCHS="$CPU_ARCHS tmp_arm_ra.o tmp_arm_rb.o"
161     CPU_ARCHS="$CPU_ARCHS tmp_arm_rc.o tmp_arm_rd.o"
162 dpavlin 20 CPU_ARCHS="$CPU_ARCHS tmp_arm_re.o tmp_arm_rf.o tmp_arm_multi.o"
163 dpavlin 16 CPU_TOOLS="$CPU_TOOLS generate_arm_dpi generate_arm_r"
164 dpavlin 18 CPU_TOOLS="$CPU_TOOLS generate_arm_loadstore generate_arm_multi"
165 dpavlin 6 fi
166 dpavlin 14 if [ z$ENABLEAVR = zYES ]; then
167     printf "#define ENABLE_AVR\n" >> config.h
168     CPU_ARCHS="$CPU_ARCHS cpu_avr.o"
169     fi
170 dpavlin 12 if [ z$ENABLEM68K = zYES ]; then
171     printf "#define ENABLE_M68K\n" >> config.h
172     CPU_ARCHS="$CPU_ARCHS cpu_m68k.o"
173     fi
174 dpavlin 2 if [ z$ENABLEMIPS = zYES ]; then
175     printf "#define ENABLE_MIPS\n" >> config.h
176 dpavlin 24 CPU_ARCHS="$CPU_ARCHS cpu_mips.o cpu_mips_coproc.o "
177     CPU_ARCHS="$CPU_ARCHS cpu_mips_instr_unaligned.o"
178     CPU_TOOLS="$CPU_TOOLS generate_mips_loadstore"
179 dpavlin 34 CPU_TOOLS="$CPU_TOOLS generate_mips_loadstore_multi"
180 dpavlin 2 fi
181     if [ z$ENABLEPPC = zYES ]; then
182     printf "#define ENABLE_PPC\n" >> config.h
183 dpavlin 12 CPU_ARCHS="$CPU_ARCHS cpu_ppc.o"
184 dpavlin 14 CPU_TOOLS="$CPU_TOOLS generate_ppc_loadstore"
185 dpavlin 2 fi
186 dpavlin 32 if [ z$ENABLERCA180X = zYES ]; then
187     printf "#define ENABLE_RCA180X\n" >> config.h
188     CPU_ARCHS="$CPU_ARCHS cpu_rca180x.o"
189     fi
190 dpavlin 14 if [ z$ENABLESH = zYES ]; then
191     printf "#define ENABLE_SH\n" >> config.h
192 dpavlin 30 CPU_ARCHS="$CPU_ARCHS cpu_sh.o memory_sh.o"
193 dpavlin 14 fi
194 dpavlin 12 if [ z$ENABLESPARC = zYES ]; then
195     printf "#define ENABLE_SPARC\n" >> config.h
196 dpavlin 32 CPU_ARCHS="$CPU_ARCHS cpu_sparc.o memory_sparc.o"
197 dpavlin 28 CPU_TOOLS="$CPU_TOOLS generate_sparc_loadstore"
198 dpavlin 2 fi
199 dpavlin 28 if [ z$ENABLETRANSPUTER = zYES ]; then
200     printf "#define ENABLE_TRANSPUTER\n" >> config.h
201     CPU_ARCHS="$CPU_ARCHS cpu_transputer.o"
202     fi
203 dpavlin 2
204    
205     ###############################################################################
206     #
207     # Special hacks for some host OSes:
208     #
209     ###############################################################################
210    
211     if [ z"`uname|cut -c 1-6`" = zCYGWIN ]; then
212     CYGWIN=YES
213    
214     if [ z"$CC" = z ]; then
215     # Assume gcc on Cygwin (Windows) systems.
216     CC=gcc
217     fi
218     fi
219    
220     if [ z"`uname`" = zHP-UX ]; then
221     HPUX=YES
222    
223     if [ z$CC = z ]; then
224     if [ -f /usr/local/pa64/bin/gcc ]; then
225     CC=/usr/local/pa64/bin/gcc
226     fi
227     fi
228     fi
229    
230     if [ z"`uname`" = zOSF1 ]; then
231     OSF1=YES
232     fi
233    
234    
235     ###############################################################################
236     #
237     # Create the Makefile header:
238     #
239     ###############################################################################
240    
241     rm -f _Makefile.header
242    
243     printf "#
244     # DO NOT EDIT THIS FILE! It is automagically created by
245     # the configure script, based on Makefile.skel.
246     #\n\n" >> _Makefile.header
247    
248    
249     echo 'int main(int argc, char *argv[]) { return 0; }' > _testprog.c
250    
251    
252     # Try to detect which C compiler to use, if CC is not set:
253     printf "checking which C compiler to use... "
254    
255     if [ z"$CC" = z ]; then
256     CC=cc
257    
258     # Try gcc first:
259     printf "#!/bin/sh\ngcc _testprog.c -o _testprog >" > _test.sh
260     printf " /dev/null 2> /dev/null\n" >> _test.sh
261     chmod 755 _test.sh
262     ./_test.sh > /dev/null 2> /dev/null
263     if [ -x _testprog ]; then
264     CC=gcc
265     fi
266     rm -f _testprog
267    
268     # If both gcc and cc exist, then cc might be a vendor specific
269     # compiler which produces faster code than gcc (eg on Solaris):
270     printf "#!/bin/sh\ncc _testprog.c -o _testprog >" > _test.sh
271     printf " /dev/null 2> /dev/null\n" >> _test.sh
272     chmod 755 _test.sh
273     ./_test.sh > /dev/null 2> /dev/null
274     if [ -x _testprog ]; then
275     CC=cc
276     fi
277     rm -f _testprog
278    
279 dpavlin 14 # # Try ccc (FreeBSD/Alpha):
280     # printf "#!/bin/sh\nccc _testprog.c -o _testprog >" > _test.sh
281     # printf " /dev/null 2> /dev/null\n" >> _test.sh
282     # chmod 755 _test.sh
283     # ./_test.sh > /dev/null 2> /dev/null
284     # if [ -x _testprog ]; then
285     # CC="ccc"
286     # fi
287     # rm -f _testprog
288 dpavlin 2
289     rm -f _test.sh
290     fi
291    
292    
293     rm -f _testprog
294     printf "$CC $CFLAGS"
295    
296    
297     CCTYPE="generic"
298    
299     if $CC $CFLAGS -V 2> /dev/null | grep ompaq 1> /dev/null 2> /dev/null; then
300     COMPAQCC=YES
301     CCTYPE="Compaq CC"
302     fi
303    
304     if $CC $CFLAGS -V 2>&1 | grep Sun 1> /dev/null 2> /dev/null; then
305     SUNCC=YES
306     CCTYPE="Solaris CC"
307     fi
308    
309     if $CC $CFLAGS -v 2>&1 | grep gcc 1> /dev/null 2> /dev/null; then
310     GCCCC=YES
311     CCTYPE="GNU CC"
312     fi
313    
314     if [ z$CYGWIN = zYES ]; then
315     CCTYPE="$CCTYPE (Cygwin)"
316     fi
317    
318     echo " ($CCTYPE)"
319    
320    
321     if [ z$NOX11 = z ]; then
322     printf "checking for X11 headers and libs\n"
323    
324     # Try to compile a small X11 test program:
325     printf "#include <X11/Xlib.h>
326     #include <stdio.h>
327     Display *dis;
328     void f(void) {
329     dis = XOpenDisplay(NULL);
330     }
331     int main(int argc, char *argv[])
332     { return 0; }
333     " > _test_x11.c
334    
335     XOK=0
336    
337     XINCLUDE=-I/usr/X11R6/include
338     $CC $CFLAGS _test_x11.c -c -o _test_x11.o $XINCLUDE 2> /dev/null
339    
340     XLIB="-L/usr/X11R6/lib -lX11"
341     $CC $CFLAGS _test_x11.o -o _test_x11 $XLIB 2> /dev/null
342    
343     if [ -x _test_x11 ]; then
344     XOK=1
345     fi
346    
347     rm -f _test_x11 _test_x11.o
348    
349 dpavlin 34 # Special case for some 64-bit Linux/x86_64 systems:
350 dpavlin 2 if [ z$XOK = z0 ]; then
351 dpavlin 34 XLIB="-L/usr/X11R6/lib64 -lX11"
352     $CC $CFLAGS _test_x11.o -o _test_x11 $XLIB 2> /dev/null
353    
354     if [ -x _test_x11 ]; then
355     XOK=1
356     fi
357     fi
358     rm -f _test_x11 _test_x11.o
359    
360     if [ z$XOK = z0 ]; then
361 dpavlin 2 XINCLUDE=""
362     $CC $CFLAGS _test_x11.c -c -o _test_x11.o \
363     $XINCLUDE 2> /dev/null
364    
365     # -lsocket for Solaris
366     XLIB="-lX11 -lsocket"
367     $CC $CFLAGS _test_x11.o -o _test_x11 $XLIB 2> /dev/null
368    
369     if [ -x _test_x11 ]; then
370     XOK=1
371     fi
372     rm -f _test_x11 _test_x11.o
373     fi
374    
375     if [ z`uname` = zNetBSD ]; then
376     echo "Using NetBSD hack for X11 libs..."
377     XLIB="$XLIB -Wl,-rpath,/usr/X11R6/lib"
378     fi
379    
380     if [ z`uname` = zOpenBSD ]; then
381     if [ z`uname -m` = zarc ]; then
382     echo "Using old OpenBSD/arc hack for X11 libs..."
383     XLIB="$XLIB -Wl,-rpath,/usr/X11R6/lib"
384     fi
385     fi
386    
387     if [ z$XOK = z0 ]; then
388     echo "Failed to compile X11 test program." \
389     "Configuring without X11."
390     else
391     printf "X11 headers: $XINCLUDE\n"
392     printf "X11 libraries: $XLIB\n"
393     echo "XINCLUDE=$XINCLUDE" >> _Makefile.header
394     echo "XLIB=$XLIB" >> _Makefile.header
395     printf "#define WITH_X11\n" >> config.h
396     fi
397    
398     rm -f _test_x11.c
399     fi
400    
401    
402     if [ z$HPUX = zYES ]; then
403     CFLAGS="-D_XOPEN_SOURCE_EXTENDED $CFLAGS"
404     printf "#define HPUX\n" >> config.h
405     fi
406    
407    
408     if [ z$OSF1 = zYES ]; then
409     CFLAGS="-D_XOPEN_SOURCE=500 -D_OSF_SOURCE -D_POSIX_PII_SOCKET $CFLAGS"
410     fi
411    
412    
413 dpavlin 12 # Check for 'alpha' define.
414     printf "checking for 'alpha' define... "
415 dpavlin 2 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
416     #ifdef alpha
417     printf(\"1\");
418     #undef alpha
419     #ifdef alpha
420     printf(\"2\");
421     #endif
422     #endif
423     printf(\"\\\n\");return 0;}\n" > _testm.c
424     $CC $CFLAGS _testm.c -o _testm 2> /dev/null
425     if [ ! -x _testm ]; then
426     printf "\nWARNING! COULD NOT COMPILE alpha define TEST"
427     printf " PROGRAM AT ALL!\n"
428     else
429     if [ z`./_testm` = z1 ]; then
430     printf "yes, workaround applied\n"
431     echo "#undef alpha" >> config.h
432     else
433     if [ z`./_testm` = z12 ]; then
434     printf "yes, but workaround not possible\n"
435     exit
436     else
437     printf "no\n"
438     fi
439     fi
440     fi
441     rm -f _testm*
442    
443    
444     # Some OSes on MIPS seems to define 'mips' to 1. (eg OpenBSD/arc)
445 dpavlin 12 printf "checking for 'mips' define... "
446 dpavlin 2 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
447     #ifdef mips
448     printf(\"1\");
449     #undef mips
450     #ifdef mips
451     printf(\"2\");
452     #endif
453     #endif
454     printf(\"\\\n\");return 0;}\n" > _testm.c
455     $CC $CFLAGS _testm.c -o _testm 2> /dev/null
456     if [ ! -x _testm ]; then
457     printf "\nWARNING! COULD NOT COMPILE mips define TEST"
458     printf " PROGRAM AT ALL!\n"
459     else
460     if [ z`./_testm` = z1 ]; then
461     printf "yes, workaround applied\n"
462     echo "#undef mips" >> config.h
463     else
464     if [ z`./_testm` = z12 ]; then
465     printf "yes, but workaround not possible\n"
466     exit
467     else
468     printf "no\n"
469     fi
470     fi
471     fi
472     rm -f _testm*
473    
474    
475     # Similar to the mips define check above, although I don't know if
476     # any OS actually defined ppc like this.
477 dpavlin 12 printf "checking for 'ppc' define... "
478 dpavlin 2 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
479     #ifdef ppc
480     printf(\"1\");
481     #undef ppc
482     #ifdef ppc
483     printf(\"2\");
484     #endif
485     #endif
486     printf(\"\\\n\");return 0;}\n" > _testm.c
487     $CC $CFLAGS _testm.c -o _testm 2> /dev/null
488     if [ ! -x _testm ]; then
489     printf "\nWARNING! COULD NOT COMPILE ppc define TEST"
490     printf " PROGRAM AT ALL!\n"
491     else
492     if [ z`./_testm` = z1 ]; then
493     printf "yes, workaround applied\n"
494     echo "#undef ppc" >> config.h
495     else
496     if [ z`./_testm` = z12 ]; then
497     printf "yes, but workaround not possible\n"
498     exit
499     else
500     printf "no\n"
501     fi
502     fi
503     fi
504     rm -f _testm*
505    
506    
507     # Similar to the mips define check above, although I don't know if
508     # any OS actually defined sparc like this.
509 dpavlin 12 printf "checking for 'sparc' define... "
510 dpavlin 2 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
511     #ifdef sparc
512     printf(\"1\");
513     #undef sparc
514     #ifdef sparc
515     printf(\"2\");
516     #endif
517     #endif
518     printf(\"\\\n\");return 0;}\n" > _testm.c
519     $CC $CFLAGS _testm.c -o _testm 2> /dev/null
520     if [ ! -x _testm ]; then
521     printf "\nWARNING! COULD NOT COMPILE sparc define TEST "
522     printf "PROGRAM AT ALL!\n"
523     else
524     if [ z`./_testm` = z1 ]; then
525     printf "yes, workaround applied\n"
526     echo "#undef sparc" >> config.h
527     else
528     if [ z`./_testm` = z12 ]; then
529     printf "yes, but workaround not possible\n"
530     exit
531     else
532     printf "no\n"
533     fi
534     fi
535     fi
536     rm -f _testm*
537    
538    
539     # CWARNINGS:
540     printf "checking whether -Wall can be used... "
541     $CC $CFLAGS _testprog.c -o _testprog -Wall 2> /dev/null
542     if [ -x _testprog ]; then
543     printf "yes\n"
544     CWARNINGS="-Wall $CWARNINGS"
545    
546     # Compaq's compiler always seems to warn about the long long type,
547     # and unusedtop suppresses warnings about include files being
548     # included more than once.
549     if [ z"$COMPAQCC" = zYES ]; then
550     CWARNINGS="$CWARNINGS -msg_disable longlongtype,unusedtop"
551     fi
552 dpavlin 22
553     if [ z"$UNSTABLE" = zYES ]; then
554     printf "checking whether -Werror can be used... "
555     rm -f _testprog
556     $CC $CFLAGS $CWARNINGS _testprog.c -o _testprog -Werror 2> /dev/null
557     if [ -x _testprog ]; then
558     printf "yes\n"
559     CWARNINGS="$CWARNINGS -Werror"
560     else
561     printf "no\n"
562     fi
563     fi
564 dpavlin 2 else
565     printf "no\n"
566     fi
567     rm -f _testprog
568    
569    
570     if [ z"$COMPAQCC" = zYES ]; then
571 dpavlin 22 # -O4 is possible, but sometimes -O3 is better?
572 dpavlin 2 CFLAGS="-O4 $CFLAGS"
573     else
574     if [ z"`uname`" = zSunOS ]; then
575     # "cc", the system's default compiler:
576     if [ z"$SUNCC" = zYES ]; then
577     CFLAGS="-xO5 -xdepend $CFLAGS"
578     fi
579     printf "#define SOLARIS\n" >> config.h
580     OTHERLIBS="-lsocket $OTHERLIBS"
581     else
582     # gcc or something else:
583     $CC $CFLAGS _testprog.c -o _testprog -O 2> /dev/null
584     if [ -x _testprog ]; then
585     rm -f _testprog
586 dpavlin 22 $CC $CFLAGS _testprog.c -o _testprog -O3 2> /dev/null
587 dpavlin 2 if [ -x _testprog ]; then
588 dpavlin 22 CFLAGS="-O3 $CFLAGS"
589 dpavlin 2 else
590     CFLAGS="-O $CFLAGS"
591     fi
592     fi
593     fi
594     fi
595     rm -f _testprog
596    
597    
598     # -fschedule-insns causes bugs on i386 with gcc,
599     # but works OK on my alpha with ccc (compaq's cc).
600     if [ z"$COMPAQCC" = zYES ]; then
601     printf "checking whether -fschedule-insns2 can be used... "
602     $CC $CFLAGS _testprog.c -o _testprog -fschedule-insns2 2> /dev/null
603     if [ -x _testprog ]; then
604     CFLAGS="-fschedule-insns2 $CFLAGS"
605     printf "yes\n"
606     else
607     printf "no\n"
608     fi
609     rm -f _testprog
610    
611     printf "checking whether -fschedule-insns can be used... "
612     $CC $CFLAGS _testprog.c -o _testprog -fschedule-insns 2> /dev/null
613     if [ -x _testprog ]; then
614     CFLAGS="-fschedule-insns $CFLAGS"
615     printf "yes\n"
616     else
617     printf "no\n"
618     fi
619     rm -f _testprog
620    
621     # # -intrinsics
622     # $CC $CFLAGS _testprog.c -o _testprog -intrinsics 2> /dev/null
623     # if [ -x _testprog ]; then
624     # CFLAGS="-intrinsics $CFLAGS"
625     # fi
626     # rm -f _testprog
627    
628     # -fast
629     printf "checking whether -fast can be used... "
630     $CC $CFLAGS _testprog.c -o _testprog -fast 2> /dev/null
631     if [ -x _testprog ]; then
632     CFLAGS="-fast $CFLAGS"
633     printf "yes\n"
634     else
635     printf "no\n"
636     fi
637     rm -f _testprog
638     fi
639    
640    
641     # -fpeephole
642     printf "checking whether -fpeephole can be used... "
643     $CC $CFLAGS -fpeephole _testprog.c -o _testprog > _testprog.stdout 2>&1
644     cat _testprog.stdout >> _testprog.error
645     if grep peephole _testprog.error > /dev/null 2>&1; then
646     printf "no\n"
647     else
648     if [ -x _testprog ]; then
649     CFLAGS="-fpeephole $CFLAGS"
650     printf "yes\n"
651     else
652     printf "no\n"
653     fi
654     fi
655     rm -f _testprog _testprog.error _testprog.stdout
656    
657    
658     # -fomit-frame-pointer
659     printf "checking whether -fomit-frame-pointer can be used... "
660     $CC $CFLAGS -fomit-frame-pointer _testprog.c -o \
661     _testprog 1> _testprog.stdout 2>&1
662     cat _testprog.stdout >> _testprog.error
663     if grep frame _testprog.error > /dev/null 2>&1; then
664     printf "no\n"
665     else
666     if [ -x _testprog ]; then
667     CFLAGS="-fomit-frame-pointer $CFLAGS"
668     printf "yes\n"
669     else
670     printf "no\n"
671     fi
672     fi
673     rm -f _testprog _testprog.error _testprog.stdout
674    
675    
676 dpavlin 30 # -g, for development builds
677     if [ z"$UNSTABLE" = zYES ]; then
678     printf "checking whether -g can be used... "
679     if [ z"$COMPAQCC" = zYES ]; then
680     printf "skipping\n"
681 dpavlin 22 else
682 dpavlin 30 $CC $CFLAGS -g _testprog.c -o _testprog > _testprog.stdout 2>&1
683     cat _testprog.stdout >> _testprog.error
684     if [ -x _testprog ]; then
685     CFLAGS="-g $CFLAGS"
686     printf "yes\n"
687     else
688 dpavlin 22 printf "no\n"
689 dpavlin 30 fi
690 dpavlin 22 fi
691 dpavlin 30 rm -f _testprog _testprog.error _testprog.stdout
692 dpavlin 22 fi
693    
694    
695 dpavlin 2 # -lrt for nanosleep?
696     printf "checking whether -lrt is required for nanosleep... "
697     printf "#include <time.h>\n#include <stdio.h>
698     int main(int argc, char *argv[]){nanosleep(NULL,NULL);return 0;}\n" > _testns.c
699     $CC $CFLAGS _testns.c -o _testns 2> /dev/null
700     if [ ! -x _testns ]; then
701     $CC $CFLAGS -lrt _testns.c -o _testns 2> /dev/null
702     if [ ! -x _testns ]; then
703     printf "WARNING! COULD NOT COMPILE WITH nanosleep AT ALL!\n"
704     else
705     # -lrt for nanosleep
706     OTHERLIBS="-lrt $OTHERLIBS"
707     printf "yes\n"
708     fi
709     else
710     printf "no\n"
711     fi
712     rm -f _testns.c _testns
713    
714    
715     # -lresolv for inet_pton?
716     printf "checking whether -lresolv is required for inet_pton... "
717     printf "int inet_pton(void); int main(int argc, " > _testr.c
718     printf "char *argv[]) { return inet_pton(); }\n" >> _testr.c
719     $CC $CFLAGS _testr.c -o _testr 2> /dev/null
720     if [ ! -x _testr ]; then
721     $CC $CFLAGS _testr.c -lresolv -o _testr 2> /dev/null
722     if [ ! -x _testr ]; then
723     $CC $CFLAGS _testr.c -lresolv -lnsl -o _testr 2> /dev/null
724     if [ ! -x _testr ]; then
725     printf "no, using inet_aton\n"
726     else
727     # -lresolv -lnsl for inet_pton
728     OTHERLIBS="-lresolv -lnsl $OTHERLIBS"
729     printf "yes (and -lnsl)\n"
730     printf "#define HAVE_INET_PTON\n" >> config.h
731     fi
732     else
733     # -lresolv for inet_pton
734     OTHERLIBS="-lresolv $OTHERLIBS"
735     printf "yes\n"
736     printf "#define HAVE_INET_PTON\n" >> config.h
737     fi
738     else
739     printf "no\n"
740     printf "#define HAVE_INET_PTON\n" >> config.h
741     fi
742     rm -f _testr.[co] _testr
743    
744    
745     # -lm?
746     printf "checking for math libs..."
747     printf "#include <math.h>\nint main(int argc, char *argv[]) { " > _testr.c
748     printf "double x = sqrt((double)argc); return (int)x; }\n" >> _testr.c
749     $CC $CFLAGS _testr.c -o _testr 2> /dev/null
750     if [ ! -x _testr ]; then
751     $CC $CFLAGS _testr.c -lm -o _testr 2> /dev/null
752     if [ ! -x _testr ]; then
753     $CC $CFLAGS _testr.c -lm -lcpml -o _testr 2> /dev/null
754     if [ ! -x _testr ]; then
755     printf "\nWARNING! Could not compile math test "
756     printf "at all!\nContinuing anyway.\n\n"
757     else
758     # -lm AND -lcpml
759     OTHERLIBS="-lm -lcpml $OTHERLIBS"
760     printf " -lm -lcpml\n"
761     fi
762     else
763     # Normal -lm
764     OTHERLIBS="-lm $OTHERLIBS"
765     printf " -lm\n"
766     fi
767     else
768     printf " none needed\n"
769     fi
770     rm -f _testr.[co] _testr
771    
772    
773 dpavlin 10 # strlcpy missing?
774     printf "checking for strlcpy... "
775     printf "#include <string.h>
776     int main(int argc, char *argv[]) { char *p; char *q; size_t x;
777     x = strlcpy(p, q, 50); return 0;}\n" > _tests.c
778     $CC $CFLAGS _tests.c -o _tests 2> /dev/null
779     if [ ! -x _tests ]; then
780     printf "missing, using mystrlcpy\n"
781     printf "#define strlcpy mystrlcpy\n" >> config.h
782     printf "#define strlcat mystrlcat\n" >> config.h
783     printf "#define USE_STRLCPY_REPLACEMENTS\n" >> config.h
784     else
785     printf "found\n"
786     fi
787     rm -f _tests.[co] _tests
788    
789    
790 dpavlin 2 # strtoull missing?
791     printf "checking for strtoull... "
792     printf "#include <stdlib.h>
793     #include <limits.h>
794     #include <stdio.h>
795     int main(int argc, char *argv[]) {
796     long long x = strtoull(argv[1], NULL, 0); return 0;}\n" > _tests.c
797     $CC $CFLAGS _tests.c -o _tests 2> /dev/null
798     if [ ! -x _tests ]; then
799     printf "missing, using mystrtoull\n"
800     printf "#define strtoull mystrtoull\n" >> config.h
801     else
802 dpavlin 6 printf "found\n"
803 dpavlin 2 fi
804 dpavlin 6 rm -f _tests.[co] _tests
805 dpavlin 2
806    
807 dpavlin 6 # mkstemp missing?
808     printf "checking for mkstemp... "
809     printf "#include <unistd.h>
810     int main(int argc, char *argv[]) { int x; char *y = \"abc\";
811     x = mkstemp(y); return 0;}\n" > _tests.c
812     $CC $CFLAGS _tests.c -o _tests 2> /dev/null
813     if [ ! -x _tests ]; then
814     printf "missing, using workaround\n"
815     printf "#define mkstemp mymkstemp\n" >> config.h
816     else
817     printf "found\n"
818     fi
819     rm -f _tests.[co] _tests
820    
821    
822 dpavlin 2 # fseeko missing?
823     printf "checking for fseeko... "
824     printf "#include <stdlib.h>
825     #include <limits.h>
826     #include <stdio.h>
827     #include <sys/types.h>
828     int main(int argc, char *argv[]) { fseeko(NULL, 0, 0); return 0;}\n" > _tests.c
829 dpavlin 24 $CC $CFLAGS $CWARNINGS _tests.c -o _tests 2> /dev/null
830 dpavlin 2 if [ ! -x _tests ]; then
831 dpavlin 24 # Try with _LARGEFILE_SOURCE (hack to make fseeko
832     # work on 64-bit Linux):
833     $CC $CFLAGS -D_LARGEFILE_SOURCE $CWARNINGS _tests.c -o _tests 2> /dev/null
834     if [ ! -x _tests ]; then
835     printf "missing\n"
836     printf "WARNING! fseeko missing from libc. Using a hack, "
837     printf "which probably doesn't work.\n"
838     printf "#define HACK_FSEEKO\n" >> config.h
839     else
840     printf "using -D_LARGEFILE_SOURCE hack\n"
841     CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE"
842     fi
843 dpavlin 2 else
844 dpavlin 6 printf "found\n"
845 dpavlin 2 fi
846     rm -f _tests.[co] _tests
847    
848    
849     # socklen_t missing?
850     # (for example really old OpenBSD/arc 2.3, inside the emulator)
851     printf "checking for socklen_t... "
852     printf "#include <stdlib.h>
853     #include <stdio.h>
854     #include <sys/types.h>
855     #include <sys/socket.h>
856     int main(int argc, char *argv[]) { socklen_t x; return 0;}\n" > _tests.c
857     $CC $CFLAGS _tests.c -o _tests 2> /dev/null
858     if [ ! -x _tests ]; then
859     printf "no, using int\n"
860     CFLAGS="$CFLAGS -Dsocklen_t=int"
861     else
862 dpavlin 6 printf "socklen_t\n"
863 dpavlin 2 fi
864     rm -f _tests.[co] _tests
865    
866    
867     # MAP_ANON missing? (On some HP-UX systems? Use MAP_ANONYMOUS instead.)
868     printf "checking for MAP_ANON... "
869     rm -f _tests
870     printf "#include <stdio.h>
871     #include <sys/types.h>
872     #include <sys/mman.h>
873     int main(int argc, char *argv[]) { int x = MAP_ANON; return 0;}\n" > _tests.c
874     $CC $CFLAGS _tests.c -o _tests 2> /dev/null
875     if [ ! -x _tests ]; then
876     printf "#include <stdio.h>
877     #include <sys/types.h>
878     #include <sys/mman.h>
879     int main(int argc, char *argv[])
880     { int x = MAP_ANONYMOUS; return 0;}\n" > _tests.c
881     $CC $CFLAGS _tests.c -o _tests 2> /dev/null
882     if [ ! -x _tests ]; then
883     printf "no\n\n"
884     printf "WARNING! Neither MAP_ANON nor MAP_ANONYMOUS work on "
885     printf "this system.\nPlease try to compile anyway, and report"
886     printf " to me whether it builds/runs or not.\n\n"
887     printf "#define MAP_ANON 0\n" >> config.h
888     printf "#define NO_MAP_ANON\n" >> config.h
889     else
890     printf "using MAP_ANONYMOUS\n"
891     printf "#define MAP_ANON MAP_ANONYMOUS\n" >> config.h
892     fi
893     else
894     printf "yes\n"
895     fi
896     rm -f _tests.[co] _tests
897    
898    
899 dpavlin 24 # Check for PRIx64 in inttypes.h:
900     printf "checking for PRIx64 in inttypes.h... "
901     printf "#include <inttypes.h>\nint main(int argc, char *argv[])\n
902     {\n#ifdef PRIx64\nreturn 0;\n#else\nreturn 1;\n#endif\n}\n" > _testpri.c
903     $CC $CFLAGS _testpri.c -o _testpri 2> /dev/null
904     if [ ! -x _testpri ]; then
905     printf "\nERROR! COULD NOT COMPILE PRIx64 TEST PROGRAM AT ALL!\n"
906     exit
907     else
908     if ./_testpri; then
909     printf "yes\n"
910     else
911     printf "no, using an ugly hack instead, "
912     printf "#define NO_C99_PRINTF_DEFINES\n" >> config.h
913    
914     # Try llx first:
915     printf "#include <stdio.h>\n#include <inttypes.h>\nint main(int argc, char *argv[]){
916     printf(\"%%llx\\\n\", (int64_t)128);return 0;}\n" > _testpri.c
917     rm -f _testpri
918     $CC $CFLAGS $CWARNINGS _testpri.c -o _testpri 2> /dev/null
919     if [ z`./_testpri` = z80 ]; then
920     printf "PRIx64=llx\n"
921     printf "#define NO_C99_64BIT_LONGLONG\n" >> config.h
922     else
923     # Try lx too:
924     printf "#include <stdio.h>\n#include <inttypes.h>\nint main(int argc, char *argv[]){
925     printf(\"%%lx\\\n\", (int64_t)128);return 0;}\n" > _testpri.c
926     rm -f _testpri
927     $CC $CFLAGS $CWARNINGS _testpri.c -o _testpri 2> /dev/null
928     if [ z`./_testpri` = z80 ]; then
929     printf "PRIx64=lx\n"
930     else
931     printf "\nFailed, neither lx nor llx worked!\n"
932     exit
933     fi
934     fi
935     fi
936     fi
937     rm -f _testpri.c _testpri
938    
939    
940 dpavlin 2 # Check for 64-bit off_t:
941     printf "checking for 64-bit off_t... "
942     printf "#include <stdio.h>\n#include <inttypes.h>\n#include <sys/types.h>\n
943     int main(int argc, char *argv[]){printf(\"%%i\\\n\",
944     (int)sizeof(off_t));return 0;}\n" > _testoff.c
945     $CC $CFLAGS _testoff.c -o _testoff 2> /dev/null
946     if [ ! -x _testoff ]; then
947     printf "\nWARNING! COULD NOT COMPILE off_t TEST PROGRAM AT ALL!\n"
948     else
949     if [ z`./_testoff` = z8 ]; then
950     printf "yes\n"
951     else
952     $CC $CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
953     _testoff.c -o _testoff 2> /dev/null
954     if [ ! -x _testoff ]; then
955     printf "\nWARNING! COULD NOT COMPILE off_t TEST "
956     printf "PROGRAM!\n"
957     else
958     if [ z`./_testoff` = z8 ]; then
959     CFLAGS="-D_FILE_OFFSET_BITS=64 $CFLAGS"
960     CFLAGS="-D_LARGEFILE_SOURCE $CFLAGS"
961     printf "using -D_FILE_OFFSET_BITS=64"
962     printf " -D_LARGEFILE_SOURCE\n"
963     else
964     printf "NO\n"
965     printf "Warning! No 64-bit off_t. Continuing "
966     printf "anyway.\n"
967     fi
968     fi
969     fi
970     fi
971     rm -f _testoff.c _testoff
972    
973    
974     # Check for u_int8_t etc:
975 dpavlin 14 # These are needed because some header files in src/include/ use u_int*
976     # instead of uint*, and I don't have time to rewrite them all.
977 dpavlin 2 printf "checking for u_int8_t... "
978     printf "#include <stdio.h>\n#include <inttypes.h>\n#include <sys/types.h>\n
979     int main(int argc, char *argv[]){printf(\"%%i\\\n\",
980     (int)sizeof(u_int8_t));return 0;}\n" > _testuint.c
981     $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
982     if [ ! -x _testuint ]; then
983     rm -f _testuint*
984     printf "#include <stdio.h>\n#include <inttypes.h>
985     \n#include <sys/types.h>\nint main(int argc, char *argv[])
986     {printf(\"%%i\\\n\", (int)sizeof(uint8_t));return 0;}\n" > _testuint.c
987     $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
988     if [ ! -x _testuint ]; then
989     printf "no\n\nERROR: No u_int8_t or uint8_t. Aborting\n"
990     # TODO: Automagically detect using various combinations
991     # of char, int, short, long etc.
992     exit
993     fi
994    
995     printf "typedef uint8_t u_int8_t;\n" >> config.h
996     printf "typedef uint16_t u_int16_t;\n" >> config.h
997     printf "typedef uint32_t u_int32_t;\n" >> config.h
998     printf "uint8_t\n"
999     else
1000     printf "yes\n"
1001     fi
1002     rm -f _testuint.c _testuint
1003    
1004 dpavlin 14 printf "checking for u_int64_t... "
1005     printf "#include <stdio.h>\n#include <inttypes.h>\n#include <sys/types.h>\n
1006     int main(int argc, char *argv[]){printf(\"%%i\\\n\",
1007     (int)sizeof(u_int64_t));return 0;}\n" > _testuint.c
1008     $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
1009     if [ ! -x _testuint ]; then
1010     rm -f _testuint*
1011     printf "#include <stdio.h>\n#include <inttypes.h>
1012     \n#include <sys/types.h>\nint main(int argc, char *argv[])
1013     {printf(\"%%i\\\n\", (int)sizeof(uint64_t));return 0;}\n" > _testuint.c
1014     $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
1015     if [ ! -x _testuint ]; then
1016     printf "no\n\nERROR: No u_int64_t or uint64_t. Aborting\n"
1017     # TODO: Automagically detect using various combinations
1018     # of char, int, short, long etc.
1019     exit
1020     fi
1021 dpavlin 2
1022 dpavlin 14 printf "typedef uint64_t u_int64_t;\n" >> config.h
1023     printf "uint64_t\n"
1024     else
1025     printf "yes\n"
1026     fi
1027     rm -f _testuint.c _testuint
1028    
1029    
1030 dpavlin 2 ###############################################################################
1031    
1032 dpavlin 12 # Host byte order?
1033     printf "checking host endianness... "
1034     rm -f _test_end*
1035     printf '#include <stdio.h>
1036     int main(int argc, char *argv[])
1037     { int x = 1; void *xp = (void *)&x; char *p = (char *)xp;
1038     if (*p) printf("little\\\n"); else printf("big\\\n"); }
1039     ' > _test_end.c
1040     $CC $CFLAGS _test_end.c -o _test_end 2> /dev/null
1041     X=`./_test_end`
1042     echo $X
1043     if [ z$X = zlittle ]; then
1044     printf "#define HOST_LITTLE_ENDIAN\n" >> config.h
1045     else
1046     if [ z$X = zbig ]; then
1047     printf "#define HOST_BIG_ENDIAN\n" >> config.h
1048     else
1049     echo "Error! Could not determine host's endianness."
1050     exit
1051     fi
1052     fi
1053     rm -f _test_end*
1054    
1055 dpavlin 34
1056 dpavlin 12 ###############################################################################
1057 dpavlin 34 #
1058     # Native code generation backend: (Detect host architecture.)
1059     #
1060     ###############################################################################
1061 dpavlin 12
1062 dpavlin 34 if [ z$UNSTABLE = zYES ]; then
1063     printf "native code generation backend... "
1064    
1065     if [ z"`uname -m`" = zamd64 ]; then
1066     NATIVE_CODE_GENERATION=YES
1067     printf "amd64\n"
1068     printf "#define NATIVE_CODE_GENERATION\n" >> config.h
1069     printf "#define HOST_ARCH_AMD64\n" >> config.h
1070     fi
1071    
1072     if [ z"`uname -m`" = zx86_64 ]; then
1073     NATIVE_CODE_GENERATION=YES
1074     printf "amd64\n"
1075     printf "#define NATIVE_CODE_GENERATION\n" >> config.h
1076     printf "#define HOST_ARCH_AMD64\n" >> config.h
1077     fi
1078    
1079     if [ z$NATIVE_CODE_GENERATION = z ]; then
1080     printf "not yet for this host platform\n"
1081     fi
1082     fi
1083    
1084    
1085     ###############################################################################
1086    
1087 dpavlin 4 INCLUDE=-Iinclude/
1088     DINCLUDE=-I../include/
1089 dpavlin 2
1090 dpavlin 12 rm -f _testprog.c
1091    
1092 dpavlin 4 echo C compiler flags: $CFLAGS $CWARNINGS
1093 dpavlin 2 echo Linker flags: $OTHERLIBS
1094     echo "CWARNINGS=$CWARNINGS" >> _Makefile.header
1095     echo "COPTIM=$CFLAGS" >> _Makefile.header
1096     echo "INCLUDE=$INCLUDE" >> _Makefile.header
1097 dpavlin 4 echo "DINCLUDE=$DINCLUDE" >> _Makefile.header
1098 dpavlin 2 echo "CC=$CC" >> _Makefile.header
1099     echo "OTHERLIBS=$OTHERLIBS" >> _Makefile.header
1100 dpavlin 12 echo "CPU_ARCHS=$CPU_ARCHS" >> _Makefile.header
1101 dpavlin 14 echo "CPU_TOOLS=$CPU_TOOLS" >> _Makefile.header
1102 dpavlin 2 echo "" >> _Makefile.header
1103    
1104    
1105     # Create the Makefiles:
1106 dpavlin 24 D=". src src/include src/cpus src/debugger src/devices src/devices/fonts"
1107 dpavlin 34 D="$D src/machines src/native src/net src/promemul"
1108 dpavlin 20 for a in $D; do
1109 dpavlin 2 echo "creating $a/Makefile"
1110     touch $a/Makefile
1111     cat _Makefile.header > $a/Makefile
1112     cat $a/Makefile.skel >> $a/Makefile
1113     done
1114    
1115     # Tail of config.h:
1116     printf "\n#endif /* CONFIG_H */\n" >> config.h
1117    
1118     # Remove temporary Makefile header:
1119     rm -f _Makefile.header
1120    
1121     echo Configured. You may now run make to build gxemul.

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26