2 # Configuration script for GNU Emacs
3 # Copyright (C) 1992 Free Software Foundation, Inc.
5 #This file is part of GNU Emacs.
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)
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.
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.
21 # Shell script to edit files and make symlinks in preparation for
24 # Usage: configure machine
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.
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.
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:^\./::'`"
44 short_usage
="Type \`${progname} -usage' for more information about options."
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'.
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
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.
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
76 # The option names defined here are actually the shell variable names.
77 # They should have `_' in place of `-'.
80 with_x:with_x11:with_x10:\
82 prefix:bindir:emacsdir:datadir:lispdir:locallisppath:\
83 lisppath:buildlisppath:statedir:lockdir:libdir:mandir:infodir:\
91 have_x_windows:have_x11:have_x_menu:\
92 c_switch_site:sigtype:gnu_malloc:rel_alloc:lisp_float_type:\
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.
108 # Record all the arguments, so we can save them in config.status.
111 echo "Examining options."
112 while [ $# != 0 ]; do
116 # Separate the switch name from the value it's being given.
119 opt
=`echo ${arg} | sed 's:^-*\([^=]*\)=.*$:\1:'`
120 val
=`echo ${arg} | sed 's:^-*[^=]*=\(.*\)$:\1:'`
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:'`
133 # Also change `-' in the option name to `_'.
134 opt
="`echo ${opt} | tr - _`"
136 # Make sure the argument is valid and unambiguous.
138 *:${opt}:* ) # Exact match.
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) \
151 *:${opt}*:* ) # Unambigous prefix.
152 optvar
=`echo ${options} | sed 's/^.*:\('${opt}'[^:]*\):.*$/\1/'`
155 (echo "\`-${opt}' is not a valid option."
156 echo "${short_usage}") |
more
163 echo "${usage_message}" |
more
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
171 case "${boolean_opts}" in
174 y | ye |
yes ) val
=yes ;;
177 echo "The \`-${optvar}' option (\`-${opt}') is supposed to have a boolean
178 value - set it to either \`yes' or \`no'." >&2
184 if [ "${valomitted}" = "yes" ]; then
186 (echo "${progname}: You must give a value for the \`-${opt}' option, as in
188 echo "${short_usage}") |
more
196 eval "${optvar}=\"${val}\""
205 if [ "${machine}" = "" ]; then
206 (echo "You must specify a machine name as an argument to ${progname}."
207 echo "${short_usage}") |
more
211 # Canonicalize the machine name.
212 echo "Checking the machine."
213 machine
=`./config.sub "${machine}"`
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.
220 ## Strictly speaking, we need the version of the alliant operating
221 ## system to choose the right machine file, but currently the
222 ## configuration name doesn't tell us enough to choose the right
223 ## one; we need to give alliants their own operating system name to
224 ## do this right. When someone cares, they can help us.
226 machfile
=m
/alliant4.h opsysfile
=s
/bsd4-2.h
229 machfile
=m
/alliant-2800.h opsysfile
=s
/bsd4-3.h
234 machfile
=m
/pmax.h opsysfile
=s
/bsd4-3.h
237 machfile
=m
/pmax.h opsysfile
=s
/osf1.h
240 ## HP 9000 series 200 or 300.
242 machfile
=m
/hp9000s300.h opsysfile
=s
/bsd4-3.h
244 ## If it's running an unspecified version of HP/UX, assume version 8.
246 machfile
=m
/hp9000s300.h opsysfile
=s
/hpux.h
249 machfile
=m
/hp9000s300.h opsysfile
=s
/hpux8.h
252 ## HP 9000 series 800, running HP/UX.
254 machfile
=m
/hp9000s800.h opsysfile
=s
/hpux.h
258 *-sun-sunos* |
*-sun-bsd* )
260 m68
*-sunos1* ) machfile
=m
/sun1.h
;;
261 m68
*-sunos2* ) machfile
=m
/sun2.h
;;
262 m68
* ) machfile
=m
/sun3.h
;;
263 i
[34]86* ) machfile
=m
/sun386.h
;;
264 * ) machfile
=m
/sparc.h
;;
267 *-sunos4.0
* ) opsysfile
=s
/sunos4-0.h
;;
268 *-sunos4* |
*-sunos ) opsysfile
=s
/sunos4-1.h
;;
269 * ) opsysfile
=s
/bsd4-2.h
;;
274 (echo "${progname}: Emacs hasn't been ported to the machine \`${machine}'."
275 echo "${progname}: Check \`etc/MACHINES' for recognized machine names.") \
281 if [ ! "${prefix}" ]; then
285 if [ ! "${emacsdir}" ]; then
286 emacsdir
="${prefix}/emacs-19.0"
289 if [ ! "${datadir}" ]; then
290 datadir
="${emacsdir}/etc"
293 if [ ! "${lispdir}" ]; then
294 lispdir
="${emacsdir}/lisp"
297 if [ ! "${locallisppath}" ]; then
298 locallisppath
="${emacsdir}/local-lisp"
301 if [ ! "${lisppath}" ]; then
302 lisppath
="${locallisppath}:${lispdir}"
305 if [ ! "${buildlisppath}" ]; then
306 buildlisppath
=..
/lisp
309 if [ ! "${statedir}" ]; then
310 statedir
="${emacsdir}"
313 if [ ! "${lockdir}" ]; then
314 lockdir
="${statedir}/lock"
317 if [ "${libdir}" = "" ]; then
318 libdir
="${emacsdir}/arch-lib"
321 if [ ! "${mandir}" ]; then
322 mandir
="/usr/man/man1"
325 if [ ! "${infodir}" ]; then
326 infodir
="${prefix}/info"
329 echo "Checking window system."
333 window_system
=${window_system}x11
336 window_system
=${window_system}none
338 case "${with_x11}" in
340 window_system
=${window_system}x11
343 case "${with_x10}" in
345 window_system
=${window_system}x10
349 case "${window_system}" in
350 "none" |
"x11" |
"x10" ) ;;
352 echo " No window system specifed. Looking for X Windows."
354 if [ -r /usr
/lib
/libX11.a
-o -d /usr
/include
/X11
]; then
359 echo "Don\'t specify the window system more than once." >&2
364 case "${window_system}" in
379 # If we're using X11, we should use the X menu package.
387 echo "Checking for GCC."
388 temppath
=`echo $PATH | sed 's/^:/.:/
393 for dir in ${temppath}; do
394 if [ -f ${dir}/gcc ]; then echo gcc; exit 0; fi
401 # With GCC, both O and g should default to yes, no matter what
410 # With other compilers, treat them as mutually exclusive,
411 # defaulting to debug.
422 # What is the return type of a signal handler? We run
423 # /usr/include/signal.h through cpp and grep for the declaration of
424 # the signal function. Yuck.
425 echo "Looking for return type of signal handler functions."
427 if [ -r /usr
/include
/signal.h
]; then
428 signal_h_file
=/usr
/include
/signal.h
429 elif [ -r /usr
/include
/sys
/signal.h
]; then
430 signal_h_file
=/usr
/include
/sys
/signal.h
433 if [ "${signal_h_file}" ]; then
434 sigpattern
='[ ]*([ ]*\*[ ]*signal[ ]*('
436 # We make a copy whose name ends in .c, so the compiler
437 # won't complain about having only been given a .h file.
438 tempcname
="configure.tmp.$$.c"
439 cp ${signal_h_file} ${tempcname}
440 if ${cc} -E ${tempcname} | grep "int${sigpattern}" > /dev/null; then
446 echo "Examining the machine- and system-dependent files to
find out
"
447 echo " - which libraries the lib-src programs will want
, and
"
448 echo " - whether the GNU malloc routines are usable.
"
449 tempcname="configure.tmp.$$.c
"
450 echo '#include "src
/'${opsysfile}'"
451 #include "src
/'${machfile}'"
458 @configure@ libsrc_libs=LIBS_MACHINE LIBS_SYSTEM
460 @configure@ system_malloc=yes
462 @configure@ system_malloc=no
465 eval `${cc} -E ${tempcname} \
466 | grep '@configure@' \
467 | sed -e 's/^@configure@//'`
470 # Do the opsystem or machine files prohibit the use of the GNU malloc?
471 if [ "${system_malloc}" = "yes" ]; then
474 (The GNU allocators don
't work with this machine and/or operating system.)"
477 if [ ! "${rel_alloc}" ]; then
478 rel_alloc=${gnu_malloc}
484 # Make the proper settings in the config file.
485 echo "Making src/config.h from src/config.h.in"
487 "yes" ) c_switch_site="${c_switch_site} -g" ;;
490 "yes" ) c_switch_site="${c_switch_site} -O" ;;
492 sed_flags="-e 's
:@machine@
:${machfile}:'"
493 sed_flags="${sed_flags} -e 's
:@opsystem@
:${opsysfile}:'"
495 for flag in `echo ${config_h_opts} | tr ':' ' '`; do
496 # Note that SYSV `tr' doesn
't handle character ranges.
497 cflagname=`echo ${flag} \
498 | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
499 val=`eval echo '$
'${flag}`
502 f="-e 's
:.
*#define ${cflagname}.*:/\\* #define ${cflagname} \\*/:'"
505 f
="-e 's:.*#define ${cflagname}.*:#define ${cflagname}:'"
508 f
="-e 's:.*#define ${cflagname}.*:#define ${cflagname} ${val}:'"
511 sed_flags
="${sed_flags} ${f}"
514 rm -f src
/config.h.tmp
515 eval '/bin/sed '${sed_flags}' < src/config.h.in > src/config.h.tmp'
516 .
/move-if-change src
/config.h.tmp src
/config.h
517 # Remind people not to edit this.
518 chmod -w src
/config.h
520 # Modify the parameters in the top makefile.
521 echo "Producing ./Makefile from ./Makefile.in."
523 (echo "# This file is generated by \`${progname}' from \`./Makefile.in'.
524 # If you are thinking about editing it, you should seriously consider
525 # editing \`./Makefile.in' itself, or running \`${progname}' instead."
526 /bin
/sed < Makefile.
in \
528 -e 's;^\(prefix=\).*$;\1'"${prefix};" \
529 -e 's;^\(bindir=\).*$;\1'"${bindir};" \
530 -e 's;^\(emacsdir=\).*$;\1'"${emacsdir};" \
531 -e 's;^\(datadir=\).*$;\1'"${datadir};" \
532 -e 's;^\(lispdir=\).*$;\1'"${lispdir};" \
533 -e 's;^\(locallisppath=\).*$;\1'"${locallisppath};" \
534 -e 's;^\(lisppath=\).*$;\1'"${lisppath};" \
535 -e 's;^\(buildlisppath=\).*$;\1'"${buildlisppath};" \
536 -e 's;^\(statedir=\).*$;\1'"${statedir};" \
537 -e 's;^\(lockdir=\).*$;\1'"${lockdir};" \
538 -e 's;^\(libdir=\).*$;\1'"${libdir};" \
539 -e 's;^\(mandir=\).*$;\1'"${mandir};" \
540 -e 's;^\(infodir=\).*$;\1'"${infodir};" \
542 .
/move-if-change Makefile.tmp Makefile
543 # Remind people not to edit this.
546 # Modify the parameters in the `build-install' script.
547 echo "Producing ./build-install from ./build-install.in."
548 rm -f .
/build-install.tmp
549 (echo "# This file is generated by \`${progname}' from \`./build-install.in'.
550 # If you are thinking about editing it, you should seriously consider
551 # editing \`./build-install.in' itself, or running \`${progname}' instead."
552 /bin
/sed < build-install.
in \
553 -e 's;^\(prefix=\).*$;\1'"${prefix};" \
554 -e 's;^\(bindir=\).*$;\1'"${bindir};" \
555 -e 's;^\(lisppath=\).*$;\1'"${lisppath};" \
556 -e 's;^\(datadir=\).*$;\1'"${datadir};" \
557 -e 's;^\(lockdir=\).*$;\1'"${lockdir};" \
558 -e 's;^\(libdir=\).*$;\1'"${libdir};") > .
/build-install.tmp
559 .
/move-if-change build-install.tmp build-install
560 # Remind people not to edit this.
561 chmod -w build-install
562 chmod +x build-install
564 # Modify the parameters in the src makefile.
565 echo "Producing src/Makefile from src/Makefile.in."
566 rm -f src
/Makefile.tmp
567 (echo "# This file is generated by \`${progname}' from \`Makefile.in'.
568 # If you are thinking about editing it, you should seriously consider
569 # editing \`Makefile.in' itself, or running \`${progname}' instead."
570 /bin
/sed < src
/Makefile.
in \
572 -e 's;^\(CC[ ]*=\).*$;\1'"${cc};") > src
/Makefile.tmp
573 .
/move-if-change src
/Makefile.tmp src
/Makefile
574 # Remind people not to edit this.
575 chmod -w src
/Makefile
577 # Modify the parameters in the lib-src makefile.
578 echo "Producing lib-src/Makefile from lib-src/Makefile.in."
579 rm -f lib-src
/Makefile.tmp
580 (echo "# This file is generated by \`${progname}' from \`Makefile.in'.
581 # If you are thinking about editing it, you should seriously consider
582 # editing \`Makefile.in' itself, or running \`${progname}' instead."
583 /bin
/sed < lib-src
/Makefile.
in \
585 -e 's;^\(CONFIG_CFLAGS=\).*$;\1'"${c_switch_site};" \
586 -e 's;^\(LOADLIBES=\).*$;\1'"${libsrc_libs};" \
587 -e 's;^\(CC=\).*$;\1'"${cc};") > lib-src
/Makefile.tmp
588 .
/move-if-change lib-src
/Makefile.tmp lib-src
/Makefile
589 # Remind people not to edit this.
590 chmod -w lib-src
/Makefile
593 # Create a verbal description of what we have done.
594 message
="Configured for \`${machine}'.
595 The following values have been set in ./Makefile and ./build-install:
596 \`make install' or \`build-install' will place executables in
598 Emacs's lisp search path will be
600 Emacs will look for its architecture-independent data in
602 Emacs will look for its utility programs and other architecture-
605 Emacs will keep track of file-locking in
607 The following values have been set in src/config.h:
608 Should Emacs use the GNU version of malloc? ${gnu_malloc}${gnu_malloc_reason}
609 Should Emacs use the relocating allocator for buffers? ${rel_alloc}
610 Should Emacs support a floating point data type? ${lisp_float_type}
611 What window system should Emacs use? ${window_system}
612 What compiler should emacs be built with? ${cc}
613 Should the compilation use \`-g' and/or \`-O'? ${c_switch_site- neither}"
615 # Document the damage we have done by writing config.status.
617 echo '#!/bin/sh' > config.status
619 echo "# This file is generated by \`${progname}.'
620 # If you are thinking about editing it, you should seriously consider
621 # running \`${progname}' instead.
623 echo "${message}" |
sed -e 's/^/# /' >> config.status
624 echo "'${progname}' ${arguments} "'$@' >> config.status
625 # Remind people not to edit this.
626 chmod -w config.status
627 chmod +x config.status
629 # Print the description.