]> code.delx.au - gnu-emacs/blob - configure1.in
Rename buffer-flush-undo to buffer-disable-undo.
[gnu-emacs] / configure1.in
1 #!/bin/sh
2 # Configuration script for GNU Emacs
3 # Copyright (C) 1992 Free Software Foundation, Inc.
4
5 #This file is part of GNU Emacs.
6
7 #GNU Emacs is free software; you can redistribute it and/or modify
8 #it under the terms of the GNU General Public License as published by
9 #the Free Software Foundation; either version 1, or (at your option)
10 #any later version.
11
12 #GNU Emacs is distributed in the hope that it will be useful,
13 #but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 #GNU General Public License for more details.
16
17 #You should have received a copy of the GNU General Public License
18 #along with GNU Emacs; see the file COPYING. If not, write to
19 #the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
20
21 # Shell script to edit files and make symlinks in preparation for
22 # compiling Emacs.
23 #
24 # Usage: configure machine
25 #
26 # If configure succeeds, it leaves its status in config.status.
27 # If configure fails after disturbing the status quo,
28 # config.status is removed.
29 #
30
31 # Remove any leading "." elements from the path name. If we don't
32 # remove them, then another "./" will be prepended to the file name
33 # each time we use config.status, and the program name will get larger
34 # and larger. This wouldn't be a problem, except that since progname
35 # gets recorded in all the Makefiles this script produces,
36 # move-if-changed thinks they're different when they're not.
37 #
38 # It would be nice if we could put the ./ in a \( \) group and then
39 # apply the * operator to that, so we remove as many leading ./././'s
40 # as are present, but some seds (like Ultrix's sed) don't allow you to
41 # apply * to a \( \) group. Bleah.
42 progname="`echo $0 | sed 's:^\./::'`"
43
44 short_usage="Type \`${progname} -usage' for more information about options."
45
46 usage_message="Usage: ${progname} MACHINENAME [-OPTION[=VALUE] ...]
47 Set compilation and installation parameters for GNU Emacs, and report.
48 MACHINENAME is the machine to build for. For example:
49 ${progname} decstation
50 configures Emacs to run on a DECstation running Ultrix. See \`etc/MACHINES'.
51 Options are:
52 --with-x, --with-x11 or --with-x10 - what window system to use;
53 default is to use X11 if present. If you don't want X, specify
54 \`--with-x=no'.
55 -g, -O - Passed to the compiler. Default is -g, plus -O if using gcc.
56 --prefix=DIR - where to install Emacs's library files
57 --libdir=DIR - where to look for arch-dependent library files
58 --datadir=DIR - where to look for architecture-independent library files
59 --bindir=DIR - where to install the Emacs executable, and some friends
60 --lisppath=PATH - colon-separated list of Emacs Lisp directories
61 --lockdir=DIR - where Emacs should do its file-locking stuff
62 If successful, ${progname} leaves its status in config.status. If
63 unsuccessful after disturbing the status quo, config.status is removed."
64 # These are omitted since users should not mess with them.
65 # --gnu-malloc=[yes] or no - use the GNU memory allocator
66 # --rel-alloc=[yes] or no - use compacting allocator for buffers
67 # --lisp-float-type=[yes] or no - Support floating point in Emacs Lisp.
68 # --window-system is omitted because --with... follow the conventions.
69
70 if [ ! -r ./src/lisp.h ]; then
71 echo "${progname}: Can't find Emacs sources in \`./src'.
72 Run this config script in the top directory of the Emacs source tree." >&2
73 exit 1
74 fi
75
76 # The option names defined here are actually the shell variable names.
77 # They should have `_' in place of `-'.
78 options=":\
79 usage:help:\
80 with_x:with_x11:with_x10:\
81 g:O:\
82 prefix:bindir:emacsdir:datadir:lispdir:locallisppath:\
83 lisppath:buildlisppath:statedir:lockdir:libdir:mandir:infodir:\
84 "
85
86 boolean_opts=":\
87 g:O:with_x:with_x10:\
88 "
89
90 config_h_opts=":\
91 have_x_windows:have_x11:have_x_menu:\
92 c_switch_site:sigtype:gnu_malloc:rel_alloc:lisp_float_type:\
93 "
94
95 prefix=
96 bindir=/usr/local/bin
97 gnu_malloc=yes
98 lisp_float_type=yes
99
100 # The default values for the following options are guessed at after other
101 # options have been checked and given values, so we set them to null here.
102 lisppath=""
103 datadir=""
104 libdir=""
105 lockdir=""
106 window_system=""
107
108 # Record all the arguments, so we can save them in config.status.
109 arguments="$@"
110
111 echo "Examining options."
112 while [ $# != 0 ]; do
113 arg="$1"
114 case "${arg}" in
115 -*)
116 # Separate the switch name from the value it's being given.
117 case "${arg}" in
118 -*=*)
119 opt=`echo ${arg} | sed 's:^-*\([^=]*\)=.*$:\1:'`
120 val=`echo ${arg} | sed 's:^-*[^=]*=\(.*\)$:\1:'`
121 valomitted=no
122 ;;
123 -*)
124 # If FOO is a boolean argument, -FOO is equivalent to
125 # -FOO=yes. Otherwise, the value comes from the next
126 # argument - see below.
127 opt=`echo ${arg} | sed 's:^-*\(.*\)$:\1:'`
128 val="yes"
129 valomitted=yes
130 ;;
131 esac
132
133 # Also change `-' in the option name to `_'.
134 opt="`echo ${opt} | tr - _`"
135
136 # Make sure the argument is valid and unambiguous.
137 case ${options} in
138 *:${opt}:* ) # Exact match.
139 optvar=${opt}
140 ;;
141 *:${opt}*:${opt}*:* ) # Ambiguous prefix.
142 echo "\`-${opt}' is an ambiguous switch; it could be any of the following:"
143 # We can't just use tr to translate colons to newlines, since
144 # BSD sed and SYSV sed use different syntaxes for that.
145 spaced_options=`echo ${options} | tr ':' ' '`
146 echo `(for option in ${spaced_options}; do echo $option; done) \
147 | grep "^${opt}"`
148 echo ${short_usage}
149 exit 1
150 ;;
151 *:${opt}*:* ) # Unambigous prefix.
152 optvar=`echo ${options} | sed 's/^.*:\('${opt}'[^:]*\):.*$/\1/'`
153 ;;
154 * )
155 (echo "\`-${opt}' is not a valid option."
156 echo "${short_usage}") | more
157 exit 1
158 ;;
159 esac
160
161 case "${optvar}" in
162 usage | help)
163 echo "${usage_message}" | more
164 exit 1
165 ;;
166 esac
167
168 # If the variable is supposed to be boolean, make sure the value
169 # given is either "yes" or "no". If not, make sure some value
170 # was given.
171 case "${boolean_opts}" in
172 *:${optvar}:* )
173 case "${val}" in
174 y | ye | yes ) val=yes ;;
175 n | no ) val=no ;;
176 * )
177 echo "The \`-${optvar}' option (\`-${opt}') is supposed to have a boolean
178 value - set it to either \`yes' or \`no'." >&2
179 exit 1
180 ;;
181 esac
182 ;;
183 *)
184 if [ "${valomitted}" = "yes" ]; then
185 if [ $# = 1 ]; then
186 (echo "${progname}: You must give a value for the \`-${opt}' option, as in
187 \`-${opt}=FOO'."
188 echo "${short_usage}") | more
189 exit 1
190 fi
191 shift; val="$1"
192 fi
193 ;;
194 esac
195
196 eval "${optvar}=\"${val}\""
197 ;;
198 *)
199 machine=${arg}
200 ;;
201 esac
202 shift
203 done
204
205 if [ "${machine}" = "" ]; then
206 (echo "You must specify a machine name as an argument to ${progname}."
207 echo "${short_usage}") | more
208 exit 1
209 fi
210
211 # Canonicalize the machine name.
212 echo "Checking the machine."
213 machine=`./config.sub "${machine}"`
214
215 # Given the canonicalized machine name, set machfile and opsysfile to
216 # the names of the m/*.h and s/*.h files we should use.
217 echo ${machine}
218 case "${machine}" in
219
220 ## Alliant machines.
221 ## Strictly speaking, we need the version of the alliant operating
222 ## system to choose the right machine file, but currently the
223 ## configuration name doesn't tell us enough to choose the right
224 ## one; we need to give alliants their own operating system name to
225 ## do this right. When someone cares, they can help us.
226 fx80-alliant-* )
227 machfile=m/alliant4.h opsysfile=s/bsd4-2.h
228 ;;
229 i860-alliant-* )
230 machfile=m/alliant-2800.h opsysfile=s/bsd4-3.h
231 ;;
232
233 ## DECstations.
234 mips-*-ultrix* )
235 machfile=m/pmax.h opsysfile=s/bsd4-3.h
236 ;;
237 mips-*-osf* )
238 machfile=m/pmax.h opsysfile=s/osf1.h
239 ;;
240
241 ## HP 9000 series 200 or 300.
242 m68*-hp-bsd* )
243 machfile=m/hp9000s300.h opsysfile=s/bsd4-3.h
244 ;;
245 ## If it's running an unspecified version of HP/UX, assume version 8.
246 m68*-hp-hpux7 )
247 machfile=m/hp9000s300.h opsysfile=s/hpux.h
248 ;;
249 m68*-hp-hpux* )
250 machfile=m/hp9000s300.h opsysfile=s/hpux8.h
251 ;;
252
253 ## HP 9000 series 800, running HP/UX.
254 hppa1.0-hp-hpux* )
255 machfile=m/hp9000s800.h opsysfile=s/hpux.h
256 ;;
257
258 ## Suns.
259 *-sun-sunos* | *-sun-bsd* )
260 case "${machine}" in
261 m68*-sunos1* ) machfile=m/sun1.h ;;
262 m68*-sunos2* ) machfile=m/sun2.h ;;
263 m68* ) machfile=m/sun3.h ;;
264 i[34]86* ) machfile=m/sun386.h ;;
265 * ) machfile=m/sparc.h ;;
266 esac
267 case "${machine}" in
268 *-sunos4.0* ) opsysfile=s/sunos4-0.h ;;
269 *-sunos4* | *-sunos ) opsysfile=s/sunos4-1.h ;;
270 * ) opsysfile=s/bsd4-2.h ;;
271 esac
272 ;;
273
274 * )
275 (echo "${progname}: Emacs hasn't been ported to the machine \`${machine}'."
276 echo "${progname}: Check \`etc/MACHINES' for recognized machine names.") \
277 >&2
278 ;;
279
280 esac
281
282 if [ ! "${prefix}" ]; then
283 prefix="/usr/local"
284 fi
285
286 if [ ! "${emacsdir}" ]; then
287 emacsdir="${prefix}/emacs-19.0"
288 fi
289
290 if [ ! "${datadir}" ]; then
291 datadir="${emacsdir}/etc"
292 fi
293
294 if [ ! "${lispdir}" ]; then
295 lispdir="${emacsdir}/lisp"
296 fi
297
298 if [ ! "${locallisppath}" ]; then
299 locallisppath="${emacsdir}/local-lisp"
300 fi
301
302 if [ ! "${lisppath}" ]; then
303 lisppath="${locallisppath}:${lispdir}"
304 fi
305
306 if [ ! "${buildlisppath}" ]; then
307 buildlisppath=../lisp
308 fi
309
310 if [ ! "${statedir}" ]; then
311 statedir="${emacsdir}"
312 fi
313
314 if [ ! "${lockdir}" ]; then
315 lockdir="${statedir}/lock"
316 fi
317
318 if [ "${libdir}" = "" ]; then
319 libdir="${emacsdir}/arch-lib"
320 fi
321
322 if [ ! "${mandir}" ]; then
323 mandir="/usr/man/man1"
324 fi
325
326 if [ ! "${infodir}" ]; then
327 infodir="${prefix}/info"
328 fi
329
330 echo "Checking window system."
331 indow_system=''
332 case "${with_x}" in
333 yes )
334 window_system=${window_system}x11
335 ;;
336 no )
337 window_system=${window_system}none
338 esac
339 case "${with_x11}" in
340 yes )
341 window_system=${window_system}x11
342 ;;
343 esac
344 case "${with_x10}" in
345 yes )
346 window_system=${window_system}x10
347 ;;
348 esac
349
350 case "${window_system}" in
351 "none" | "x11" | "x10" ) ;;
352 "" )
353 echo " No window system specifed. Looking for X Windows."
354 window_system=none
355 if [ -r /usr/lib/libX11.a -o -d /usr/include/X11 ]; then
356 window_system=x11
357 fi
358 ;;
359 * )
360 echo "Don\'t specify the window system more than once." >&2
361 exit 1
362 ;;
363 esac
364
365 case "${window_system}" in
366 x11 )
367 have_x_windows=yes
368 have_x11=yes
369 ;;
370 x10 )
371 have_x_windows=yes
372 have_x11=no
373 ;;
374 none )
375 have_x_windows=no
376 have_x11=no
377 ;;
378 esac
379
380 # If we're using X11, we should use the X menu package.
381 have_x_menu=no
382 case ${have_x11} in
383 yes )
384 have_x_menu=yes
385 ;;
386 esac
387
388 echo "Checking for GCC."
389 temppath=`echo $PATH | sed 's/^:/.:/
390 s/::/:.:/g
391 s/:$/:./
392 s/:/ /g'`
393 cc=`(
394 for dir in ${temppath}; do
395 if [ -f ${dir}/gcc ]; then echo gcc; exit 0; fi
396 done
397 echo cc
398 )`
399
400 case "${cc}" in
401 "gcc" )
402 # With GCC, both O and g should default to yes, no matter what
403 # the other is.
404 case "${O},${g}" in
405 , ) O=yes; g=yes ;;
406 ,* ) O=yes; ;;
407 *, ) g=yes ;;
408 esac
409 ;;
410 "*" )
411 # With other compilers, treat them as mutually exclusive,
412 # defaulting to debug.
413 case "${O},${g}" in
414 , ) O=no ; g=yes ;;
415 ,no ) O=yes; ;;
416 ,yes ) O=no ; ;;
417 no, ) g=yes ;;
418 yes, ) g=no ;;
419 esac
420 ;;
421 esac
422
423 # What is the return type of a signal handler? We run
424 # /usr/include/signal.h through cpp and grep for the declaration of
425 # the signal function. Yuck.
426 echo "Looking for return type of signal handler functions."
427 signal_h_file=''
428 if [ -r /usr/include/signal.h ]; then
429 signal_h_file=/usr/include/signal.h
430 elif [ -r /usr/include/sys/signal.h ]; then
431 signal_h_file=/usr/include/sys/signal.h
432 fi
433 sigtype=void
434 if [ "${signal_h_file}" ]; then
435 sigpattern='[ ]*([ ]*\*[ ]*signal[ ]*('
436
437 # We make a copy whose name ends in .c, so the compiler
438 # won't complain about having only been given a .h file.
439 tempcname="configure.tmp.$$.c"
440 cp ${signal_h_file} ${tempcname}
441 if ${cc} -E ${tempcname} | grep "int${sigpattern}" > /dev/null; then
442 sigtype=int
443 fi
444 rm -f ${tempcname}
445 fi
446
447 echo "Examining the machine- and system-dependent files to find out"
448 echo " - which libraries the lib-src programs will want, and"
449 echo " - whether the GNU malloc routines are usable."
450 tempcname="configure.tmp.$$.c"
451 echo '#include "src/'${opsysfile}'"
452 #include "src/'${machfile}'"
453 #ifndef LIBS_MACHINE
454 #define LIBS_MACHINE
455 #endif
456 #ifndef LIBS_SYSTEM
457 #define LIBS_SYSTEM
458 #endif
459 @configure@ libsrc_libs=LIBS_MACHINE LIBS_SYSTEM
460 #ifdef SYSTEM_MALLOC
461 @configure@ system_malloc=yes
462 #else
463 @configure@ system_malloc=no
464 #endif
465 ' > ${tempcname}
466 eval `${cc} -E ${tempcname} \
467 | grep '@configure@' \
468 | sed -e 's/^@configure@//'`
469 rm ${tempcname}
470
471 # Do the opsystem or machine files prohibit the use of the GNU malloc?
472 if [ "${system_malloc}" = "yes" ]; then
473 gnu_malloc=no
474 gnu_malloc_reason="
475 (The GNU allocators don't work with this machine and/or operating system.)"
476 fi
477
478 if [ ! "${rel_alloc}" ]; then
479 rel_alloc=${gnu_malloc}
480 fi
481
482 rm -f config.status
483 set -e
484
485 # Make the proper settings in the config file.
486 echo "Making src/config.h from src/config.h.in"
487 case "${g}" in
488 "yes" ) c_switch_site="${c_switch_site} -g" ;;
489 esac
490 case "${O}" in
491 "yes" ) c_switch_site="${c_switch_site} -O" ;;
492 esac
493 sed_flags="-e 's:@machine@:${machfile}:'"
494 sed_flags="${sed_flags} -e 's:@opsystem@:${opsysfile}:'"
495
496 for flag in `echo ${config_h_opts} | tr ':' ' '`; do
497 # Note that SYSV `tr' doesn't handle character ranges.
498 cflagname=`echo ${flag} \
499 | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
500 val=`eval echo '$'${flag}`
501 case ${val} in
502 no | "")
503 f="-e 's:.*#define ${cflagname}.*:/\\* #define ${cflagname} \\*/:'"
504 ;;
505 yes)
506 f="-e 's:.*#define ${cflagname}.*:#define ${cflagname}:'"
507 ;;
508 *)
509 f="-e 's:.*#define ${cflagname}.*:#define ${cflagname} ${val}:'"
510 ;;
511 esac
512 sed_flags="${sed_flags} ${f}"
513 done
514
515 rm -f src/config.h.tmp
516 eval '/bin/sed '${sed_flags}' < src/config.h.in > src/config.h.tmp'
517 ./move-if-change src/config.h.tmp src/config.h
518 # Remind people not to edit this.
519 chmod -w src/config.h
520
521 # Modify the parameters in the top makefile.
522 echo "Producing ./Makefile from ./Makefile.in."
523 rm -f Makefile.tmp
524 (echo "# This file is generated by \`${progname}' from \`./Makefile.in'.
525 # If you are thinking about editing it, you should seriously consider
526 # editing \`./Makefile.in' itself, or running \`${progname}' instead."
527 /bin/sed < Makefile.in \
528 -e '/^# DIST: /d' \
529 -e 's;^\(prefix=\).*$;\1'"${prefix};" \
530 -e 's;^\(bindir=\).*$;\1'"${bindir};" \
531 -e 's;^\(emacsdir=\).*$;\1'"${emacsdir};" \
532 -e 's;^\(datadir=\).*$;\1'"${datadir};" \
533 -e 's;^\(lispdir=\).*$;\1'"${lispdir};" \
534 -e 's;^\(locallisppath=\).*$;\1'"${locallisppath};" \
535 -e 's;^\(lisppath=\).*$;\1'"${lisppath};" \
536 -e 's;^\(buildlisppath=\).*$;\1'"${buildlisppath};" \
537 -e 's;^\(statedir=\).*$;\1'"${statedir};" \
538 -e 's;^\(lockdir=\).*$;\1'"${lockdir};" \
539 -e 's;^\(libdir=\).*$;\1'"${libdir};" \
540 -e 's;^\(mandir=\).*$;\1'"${mandir};" \
541 -e 's;^\(infodir=\).*$;\1'"${infodir};" \
542 ) > ./Makefile.tmp
543 ./move-if-change Makefile.tmp Makefile
544 # Remind people not to edit this.
545 chmod -w ./Makefile
546
547 # Modify the parameters in the `build-install' script.
548 echo "Producing ./build-install from ./build-install.in."
549 rm -f ./build-install.tmp
550 (echo "# This file is generated by \`${progname}' from \`./build-install.in'.
551 # If you are thinking about editing it, you should seriously consider
552 # editing \`./build-install.in' itself, or running \`${progname}' instead."
553 /bin/sed < build-install.in \
554 -e 's;^\(prefix=\).*$;\1'"${prefix};" \
555 -e 's;^\(bindir=\).*$;\1'"${bindir};" \
556 -e 's;^\(lisppath=\).*$;\1'"${lisppath};" \
557 -e 's;^\(datadir=\).*$;\1'"${datadir};" \
558 -e 's;^\(lockdir=\).*$;\1'"${lockdir};" \
559 -e 's;^\(libdir=\).*$;\1'"${libdir};") > ./build-install.tmp
560 ./move-if-change build-install.tmp build-install
561 # Remind people not to edit this.
562 chmod -w build-install
563 chmod +x build-install
564
565 # Modify the parameters in the src makefile.
566 echo "Producing src/Makefile from src/Makefile.in."
567 rm -f src/Makefile.tmp
568 (echo "# This file is generated by \`${progname}' from \`Makefile.in'.
569 # If you are thinking about editing it, you should seriously consider
570 # editing \`Makefile.in' itself, or running \`${progname}' instead."
571 /bin/sed < src/Makefile.in \
572 -e '/^# DIST: /d' \
573 -e 's;^\(CC[ ]*=\).*$;\1'"${cc};") > src/Makefile.tmp
574 ./move-if-change src/Makefile.tmp src/Makefile
575 # Remind people not to edit this.
576 chmod -w src/Makefile
577
578 # Modify the parameters in the lib-src makefile.
579 echo "Producing lib-src/Makefile from lib-src/Makefile.in."
580 rm -f lib-src/Makefile.tmp
581 (echo "# This file is generated by \`${progname}' from \`Makefile.in'.
582 # If you are thinking about editing it, you should seriously consider
583 # editing \`Makefile.in' itself, or running \`${progname}' instead."
584 /bin/sed < lib-src/Makefile.in \
585 -e '/^# DIST: /d' \
586 -e 's;^\(CFLAGS=\).*$;\1'"${c_switch_site};" \
587 -e 's;^\(LOADLIBES=\).*$;\1'"${libsrc_libs};" \
588 -e 's;^\(CC=\).*$;\1'"${cc};") > lib-src/Makefile.tmp
589 ./move-if-change lib-src/Makefile.tmp lib-src/Makefile
590 # Remind people not to edit this.
591 chmod -w lib-src/Makefile
592
593
594 # Create a verbal description of what we have done.
595 message="Configured for \`${machine}'.
596 The following values have been set in ./Makefile and ./build-install:
597 \`make install' or \`build-install' will place executables in
598 ${bindir}.
599 Emacs's lisp search path will be
600 \`${lisppath}'.
601 Emacs will look for its architecture-independent data in
602 ${datadir}.
603 Emacs will look for its utility programs and other architecture-
604 dependent data in
605 ${libdir}.
606 Emacs will keep track of file-locking in
607 ${lockdir}.
608 The following values have been set in src/config.h:
609 Should Emacs use the GNU version of malloc? ${gnu_malloc}${gnu_malloc_reason}
610 Should Emacs use the relocating allocator for buffers? ${rel_alloc}
611 Should Emacs support a floating point data type? ${lisp_float_type}
612 What window system should Emacs use? ${window_system}
613 What compiler should emacs be built with? ${cc}
614 Should the compilation use \`-g' and/or \`-O'? ${c_switch_site- neither}"
615
616 # Document the damage we have done by writing config.status.
617
618 echo '#!/bin/sh' > config.status
619
620 echo "# This file is generated by \`${progname}.'
621 # If you are thinking about editing it, you should seriously consider
622 # running \`${progname}' instead.
623 " >> config.status
624 echo "${message}" | sed -e 's/^/# /' >> config.status
625 echo "'${progname}' ${arguments} "'$@' >> config.status
626 # Remind people not to edit this.
627 chmod -w config.status
628 chmod +x config.status
629
630 # Print the description.
631 echo
632 echo "${message}"
633
634 exit 0