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. When this
32 # script is invoked from the config.status script, a new ./ gets added
33 # to the the front of the path, resulting in a "././" prefix. That
34 # prefix is then recorded in the resulting config.status file, so
35 # basically each time config.status is used, it prepends another "./"
36 # to the filename. This wouldn't be a problem, except that since
37 # progname gets recorded in all the Makefiles this script produces,
38 # move-if-changed thinks they're different when they're not.
39 progname
="`echo $0 | sed 's:^\(\./\)*::'`"
41 short_usage
="Type \`${progname} -usage' for more information about options."
43 usage_message
="Usage: ${progname} MACHINENAME [-OPTION[=VALUE] ...]
45 This message needs to be updated.
47 Set compilation and installation parameters for GNU Emacs, and report.
48 MACHINENAME is the machine to build for. See \`etc/MACHINES'.
50 -opsystem=SYSTEM - operating system to build for; see \`etc/MACHINES'.
51 -prefix=DIR - where to install Emacs's library files
52 These options have reasonable defaults (in []s), and may not be needed:
53 -g, -O - Passed to the compiler. If omitted, use -O only.
54 -cc=COMPILER - Which compiler to use. Defaults to gcc if available.
55 -libdir=DIR - where to look for arch-dependent library files
56 -datadir=DIR - where to look for architecture-independent library files
57 -bindir=DIR - where to install the Emacs executable, and some friends
58 -lisppath=PATH - colon-separated list of Elisp directories
59 -lockdir=DIR - where Emacs should do its file-locking stuff
60 -window_system=none or [x11, if it is installed] - what window system to use
61 -have_x_menu=yes or [no] - include menu support under X11
62 -gnu_malloc=[yes] or no - use the GNU memory allocator
63 -rel_alloc=[yes] or no - use compacting allocator for buffers
64 -highpri=N - run at N points higher-than-normal priority
65 -lisp_float_type=[yes] or no - Support native floating point in Elisp
66 If successful, ${progname} leaves its status in config.status. If
67 unsuccessful after disturbing the status quo, config.status is removed."
69 if [ ! -r .
/src
/lisp.h
]; then
70 echo "${progname}: Can't find Emacs sources in \`./src'.
71 Run this config script in the top directory of the Emacs source tree." 1>&2
79 prefix:bindir:emacsdir:datadir:lispdir:locallisppath:\
80 lisppath:buildlisppath:statedir:lockdir:libdir:mandir:infodir:\
81 gnu_malloc:rel_alloc:highpri:lisp_float_type:\
82 window_system:have_x_menu:\
87 gnu_malloc:rel_alloc:lisp_float_type:have_x_menu:\
91 highpri:gnu_malloc:rel_alloc:lisp_float_type:\
92 have_x_windows:have_x11:have_x_menu:\
93 c_switch_site:sigtype:\
101 # The default values for the following options are guessed at after other
102 # options have been checked and given values, so we set them to null here.
110 # Record all the arguments, so we can save them in config.status.
113 echo "Examining options."
114 while [ $# != 0 ]; do
118 # Separate the switch name from the value it's being given.
121 opt
=`echo ${arg} | sed 's:^-\([^=]*\)=.*$:\1:'`
122 val
=`echo ${arg} | sed 's:^-[^=]*=\(.*\)$:\1:'`
126 # If FOO is a boolean argument, -FOO is equivalent to
127 # -FOO=yes. Otherwise, the value comes from the next
128 # argument - see below.
129 opt
=`echo ${arg} | sed 's:^-\(.*\)$:\1:'`
135 # Make sure the argument is valid and unambiguous.
137 *:${opt}:* ) # Exact match.
140 *:${opt}*:${opt}*:* ) # Ambiguous prefix.
141 echo "\`-${opt}' is an ambiguous switch; it could be any of the following:"
142 echo `echo ${options} | tr ':' '\012' | grep '^'${opt}`
146 *:${opt}*:* ) # Unambigous prefix.
147 optvar
=`echo ${options} | sed 's/^.*:\('${opt}'[^:]*\):.*$/\1/'`
150 (echo "\`-${opt}' is not a valid option."
151 echo "${short_usage}") |
more
158 echo "${usage_message}" |
more
163 # If the variable is supposed to be boolean, make sure the value
164 # given is either "yes" or "no". If not, make sure some value
166 case "${boolean_opts}" in
169 y | ye |
yes ) val
=yes ;;
172 echo "The \`-${optvar}' option (\`-${opt}') is supposed to have a boolean
173 value - set it to either \`yes' or \`no'." 1>&2
179 if [ "${valomitted}" = "yes" ]; then
181 (echo "${progname}: You must give a value for the \`-${opt}' option, as in
183 echo "${short_usage}") |
more
191 eval "${optvar}=\"${val}\""
200 if [ "${machine}" = "" ]; then
201 (echo "You must specify a machine name as an argument to ${progname}."
202 echo "${short_usage}") |
more
206 echo "Checking the machine."
207 machfile
="m/${machine}.h"
208 if [ ! -r src
/${machfile} ]; then
209 echo "${progname}: Emacs has no configuration info for the machine called
210 \`${machine}'. Look at etc/MACHINES for the names of machines
211 that Emacs has been ported to." 1>&2
215 echo "Checking the operating system."
216 if [ "${opsystem}" = "" ]; then
218 echo " No operating system explicitly specified."
219 echo " Guessing, based on machine."
220 # Get the default operating system to go with the specified machine.
221 opsystem
=`grep 'USUAL-OPSYS="' src/${machfile} \
222 | sed 's/^.*USUAL-OPSYS="\([^"]*\)".*$/\1/'`
224 if [ "${opsystem}" = "" ]; then
225 echo "${progname}: Emacs's configuration files don't suggest what operating
226 system a \`${machine}' machine might run. Try specifying the
227 operating system explicitly by passing ${progname} an
228 \`-opsystem=SYSTEM-NAME' flag. Look at etc/MACHINES for the
229 names of operating systems that Emacs has been ported to." 1>&2
233 if [ "${opsystem}" = "note" ]; then
234 echo "The \`${machine}' machine can be used with more than one operating
235 system, and Emacs's configuration info isn't clever enough to figure
236 out which one you're running. Run ${progname} with -machine and
237 -opsystem arguments as specified below for the appropriate system.
238 (This information comes from the file \`etc/MACHINES' - see that
239 file for more detail.)
242 sed < src
/${machfile} -e '1,/NOTE-START/d' -e '/NOTE-END/,$d' |
more
247 opsysfile
="s/${opsystem}.h"
248 if [ ! -r src
/${opsysfile} ]; then
249 echo "${progname}: Emacs's configuration files say that the default
250 operating system for the machine \`${machine}' is \`${opsystem}',
251 but there is no configuration file for \`${opsystem}', so Emacs's
252 default info is screwed up. Try specifying the operating system
253 explicitly by passing ${progname} an \`-opsystem=SYSTEM-NAME' flag." 1>&2
257 opsysfile
="s/${opsystem}.h"
258 if [ ! -r src
/${opsysfile} ]; then
259 echo "${progname}: Emacs has no configuration info for the operating system
260 \`${opsystem}'. Look at etc/MACHINES for the names of operating
261 systems that Emacs has been ported to." 1>&2
266 if [ ! "${prefix}" ]; then
270 if [ ! "${emacsdir}" ]; then
271 emacsdir
="${prefix}/emacs-19.0"
274 if [ ! "${datadir}" ]; then
275 datadir
="${emacsdir}/etc"
278 if [ ! "${lispdir}" ]; then
279 lispdir
="${emacsdir}/lisp"
282 if [ ! "${locallisppath}" ]; then
283 locallisppath
="${emacsdir}/local-lisp"
286 if [ ! "${lisppath}" ]; then
287 lisppath
="${locallisppath}:${lispdir}"
290 if [ ! "${buildlisppath}" ]; then
291 buildlisppath
=..
/lisp
294 if [ ! "${statedir}" ]; then
295 statedir
="${emacsdir}"
298 if [ ! "${lockdir}" ]; then
299 lockdir
="${statedir}/lock"
302 if [ "${libdir}" = "" ]; then
303 libdir
="${emacsdir}/arch-lib"
306 if [ ! "${mandir}" ]; then
307 mandir
="/usr/man/man1"
310 if [ ! "${infodir}" ]; then
311 infodir
="${prefix}/info"
314 echo "Checking window system."
315 window_system
="`echo ${window_system} | tr A-Z a-z`"
316 case "${window_system}" in
317 "none" |
"x11" |
"x10" ) ;;
318 "x" ) window_system
=x11
;;
320 echo " No window system specifed. Looking for X Windows."
322 if [ -r /usr
/lib
/libX11.a
-a -d /usr
/include
/X11
]; then
327 echo "The \`-window_system' option must be set to \`none' or \`X11'." 1>&2
332 case "${window_system}" in
347 if [ "${have_x_menu}" = "" ]; then
351 echo "Checking for GCC."
354 temppath
=`echo $PATH | sed 's/^:/.:/
359 for dir in ${temppath}; do
360 if [ -f ${dir}/gcc ]; then echo gcc; exit 0; fi
369 # With GCC, both O and g should default to yes, no matter what
378 # With other compilers, treat them as mutually exclusive,
379 # defaulting to debug.
390 # What is the return type of a signal handler? We run
391 # /usr/include/signal.h through cpp and grep for the declaration of
392 # the signal function. Yuck.
393 echo "Looking for return type of signal handler functions."
395 if [ -r /usr
/include
/signal.h
]; then
396 signal_h_file
=/usr
/include
/signal.h
397 elif [ -r /usr
/include
/sys
/signal.h
]; then
398 signal_h_file
=/usr
/include
/sys
/signal.h
401 if [ "${signal_h_file}" ]; then
402 sigpattern
='[ ]*([ ]*\*[ ]*signal[ ]*('
404 # We make a symbolic link whose name ends in .c, so the compiler
405 # won't complain about having only been given a .h file.
406 tempcname
="configure.tmp.$$.c"
407 ln -s ${signal_h_file} ${tempcname}
408 if ${cc} -E ${tempcname} | grep "int${sigpattern}" > /dev/null; then
414 echo "Examining the machine- and system-dependent files to
find out
"
415 echo " - which libraries the lib-src programs will want
, and
"
416 echo " - whether the GNU malloc routines are usable.
"
417 tempcname="configure.tmp.$$.c
"
418 echo '#include "src
/'${machfile}'"
419 #include "src
/'${opsysfile}'"
426 @configure@ libsrc_libs=LIBS_MACHINE LIBS_SYSTEM
428 @configure@ system_malloc=yes
430 @configure@ system_malloc=no
433 eval `${cc} -E ${tempcname} \
434 | grep '@configure@' \
435 | sed -e 's/^@configure@//'`
438 # Do the opsystem or machine files prohibit the use of the GNU malloc?
439 if [ "${system_malloc}" = "yes" ]; then
442 (The GNU allocators don
't work with this machine and/or operating system.)"
445 if [ ! "${rel_alloc}" ]; then
446 rel_alloc=${gnu_malloc}
452 # Make the proper settings in the config file.
453 echo "Making src/config.h from src/config.h.in"
454 if [ "${highpri}" != "" ]; then
455 highpri="(-${highpri})"
458 "yes" ) c_switch_site="${c_switch_site} -g" ;;
461 "yes" ) c_switch_site="${c_switch_site} -O" ;;
463 sed_flags="-e 's
:@machine@
:${machfile}:'"
464 sed_flags="${sed_flags} -e 's
:@opsystem@
:${opsysfile}:'"
465 for flag in `echo ${config_h_opts} | tr ':' ' '`; do
466 cflagname=`echo ${flag} \
467 | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
468 val=`eval echo '$
'${flag}`
471 f="-e 's
:.
*#define ${cflagname}.*:/\\* #define ${cflagname} \\*/:'"
474 f
="-e 's:.*#define ${cflagname}.*:#define ${cflagname}:'"
477 f
="-e 's:.*#define ${cflagname}.*:#define ${cflagname} ${val}:'"
480 sed_flags
="${sed_flags} ${f}"
482 rm -f src
/config.h.tmp
483 eval '/bin/sed '${sed_flags}' < src/config.h.in > src/config.h.tmp'
484 .
/move-if-change src
/config.h.tmp src
/config.h
485 # Remind people not to edit this.
486 chmod -w src
/config.h
488 # Modify the parameters in the top makefile.
489 echo "Producing ./Makefile from ./Makefile.in."
491 (echo "# This file is generated by \`${progname}' from \`./Makefile.in'.
492 # If you are thinking about editing it, you should seriously consider
493 # editing \`./Makefile.in' itself, or running \`${progname}' instead."
494 /bin
/sed < Makefile.
in \
496 -e 's;^\(prefix=\).*$;\1'"${prefix};" \
497 -e 's;^\(bindir=\).*$;\1'"${bindir};" \
498 -e 's;^\(emacsdir=\).*$;\1'"${emacsdir};" \
499 -e 's;^\(datadir=\).*$;\1'"${datadir};" \
500 -e 's;^\(lispdir=\).*$;\1'"${lispdir};" \
501 -e 's;^\(locallisppath=\).*$;\1'"${locallisppath};" \
502 -e 's;^\(lisppath=\).*$;\1'"${lisppath};" \
503 -e 's;^\(buildlisppath=\).*$;\1'"${buildlisppath};" \
504 -e 's;^\(statedir=\).*$;\1'"${statedir};" \
505 -e 's;^\(lockdir=\).*$;\1'"${lockdir};" \
506 -e 's;^\(libdir=\).*$;\1'"${libdir};" \
507 -e 's;^\(mandir=\).*$;\1'"${mandir};" \
508 -e 's;^\(infodir=\).*$;\1'"${infodir};" \
510 .
/move-if-change Makefile.tmp Makefile
511 # Remind people not to edit this.
514 # Modify the parameters in the `build-install' script.
515 echo "Producing ./build-install from ./build-install.in."
516 rm -f .
/build-install.tmp
517 (echo "# This file is generated by \`${progname}' from \`./build-install.in'.
518 # If you are thinking about editing it, you should seriously consider
519 # editing \`./build-install.in' itself, or running \`${progname}' instead."
520 /bin
/sed < build-install.
in \
521 -e 's;^\(prefix=\).*$;\1'"${prefix};" \
522 -e 's;^\(bindir=\).*$;\1'"${bindir};" \
523 -e 's;^\(lisppath=\).*$;\1'"${lisppath};" \
524 -e 's;^\(datadir=\).*$;\1'"${datadir};" \
525 -e 's;^\(lockdir=\).*$;\1'"${lockdir};" \
526 -e 's;^\(libdir=\).*$;\1'"${libdir};") > .
/build-install.tmp
527 .
/move-if-change build-install.tmp build-install
528 # Remind people not to edit this.
529 chmod -w build-install
530 chmod +x build-install
532 # Modify the parameters in the src makefile.
533 echo "Producing src/Makefile from src/Makefile.in."
534 rm -f src
/Makefile.tmp
535 (echo "# This file is generated by \`${progname}' from \`Makefile.in'.
536 # If you are thinking about editing it, you should seriously consider
537 # editing \`Makefile.in' itself, or running \`${progname}' instead."
538 /bin
/sed < src
/Makefile.
in \
539 -e 's;^\(CC[ ]*=\).*$;\1'"${cc};") > src
/Makefile.tmp
540 .
/move-if-change src
/Makefile.tmp src
/Makefile
541 # Remind people not to edit this.
542 chmod -w src
/Makefile
544 # Modify the parameters in the lib-src makefile.
545 echo "Producing lib-src/Makefile from lib-src/Makefile.in."
546 rm -f lib-src
/Makefile.tmp
547 (echo "# This file is generated by \`${progname}' from \`Makefile.in'.
548 # If you are thinking about editing it, you should seriously consider
549 # editing \`Makefile.in' itself, or running \`${progname}' instead."
550 /bin
/sed < lib-src
/Makefile.
in \
551 -e 's;^\(CFLAGS=\).*$;\1'"${c_switch_site};" \
552 -e 's;^\(LOADLIBES=\).*$;\1'"${libsrc_libs};" \
553 -e 's;^\(CC=\).*$;\1'"${cc};") > lib-src
/Makefile.tmp
554 .
/move-if-change lib-src
/Makefile.tmp lib-src
/Makefile
555 # Remind people not to edit this.
556 chmod -w lib-src
/Makefile
559 # Create a verbal description of what we have done.
560 if [ "${highpri}" ]; then
561 desc_highpri
="${highpri}"
565 message
="# Configured for machine \`${machine}' running \`${opsystem}'.
566 # The following values have been set in ./Makefile and ./build-install:
567 # Executables will be placed in
569 # Emacs's lisp search path will be
571 # Emacs will look for its architecture-independent data in
573 # Emacs will look for its utility programs and other architecture-
576 # Emacs will keep track of file-locking in
578 # The following values have been set in src/config.h:
579 # At how much higher than normal priority should Emacs run? ${desc_highpri}
580 # Should Emacs use the GNU version of malloc? ${gnu_malloc}${gnu_malloc_reason}
581 # Should Emacs use the relocating allocator for buffers? ${rel_alloc}
582 # Should Emacs support a floating point Elisp type? ${lisp_float_type}
583 # What window system should Emacs use? ${window_system}
584 # Should Emacs support mouse menus, which require X11? ${have_x_menu}
585 # What compiler should emacs be built with? ${cc}
586 # Should the compilation use \`-g' and/or \`-O'? ${c_switch_site- neither}"
588 # Document the damage we have done by writing config.status.
590 echo '#!/bin/sh' > config.status
592 echo "# This file is generated by \`${progname}.'
593 # If you are thinking about editing it, you should seriously consider
594 # running \`${progname}' instead.
596 echo "${message}" >> config.status
597 echo "'./${progname}' ${arguments} "'$@' >> config.status
598 # Remind people not to edit this.
599 chmod -w config.status
600 chmod +x config.status
602 # Print the description.
604 echo "${message}" |
sed -e 's/^# //'