view build-ins.in @ 24102:1086aa5db591

Major rewrite to support cleaner method of dumping; a static "bss" section is used for heap space during preload, and bss data is now written to the proper section area when dumping. (need_to_recreate_heap): Renamed to using_dynamic_heap. (heap_index_in_executable): Obsolete variable removed. (data_section): New variable. (data_start_va): Renamed to data_start. (data_start_file): Obsolete variable removed. (bss_section): (extra_bss_size): (bss_section_static): (bss_start_static): (bss_size_static): (extra_bss_size_static): (heap_section): New variables. (_start): Remove code based on old unexec method. Call init_heap to initialize sbrk heap. (close_file_data): Update size of file when closing, so that unexec doesn't have to work out exact size in advance. (get_bss_info_from_map_file): (get_section_size): Obsolete functions removed. (rva_to_section): Fix minor bug, and add a work-around for a bug in very old linkers. (offset_to_section): (relocate_offset): New functions. (OFFSET_TO_RVA): (RVA_TO_OFFSET): (RVA_TO_SECTION_OFFSET): (PTR_TO_RVA): (PTR_TO_OFFSET): (OFFSET_TO_PTR): New macros. (get_section_info): Modify to support new unexec method; determines address ranges in process that need dumping, and COFF sections where data will be dumped. Allows for static and global bss data to be in separate ranges. No longer relies on knowledge of section names. (copy_executable_and_dump_data_section): Renamed copy_executable_and_dump_data. Completely rewritten to copy executable section by section, so that raw data areas can be expanded to hold dumped data as necessary. Allows for bss data to be in same section as initialized data. Reduces size of static heap section to that used during preload. (dump_bss_and_heap): (w32_fatal_reload_error): (read_in_bss): (map_in_heap): Obsolete functions removed. (unexec): Rounds off preload heap to nearest page rather than virtual allocation unit. Modified to match other changes.
author Andrew Innes <andrewi@gnu.org>
date Sun, 17 Jan 1999 19:21:24 +0000
parents 1541c518f769
children
line wrap: on
line source

#!/bin/sh -x
#
#Shell script for building and installing Emacs.

# ==================== Where To Install Things ====================

# The default location for installation.  Everything is placed in
# subdirectories of this directory.  This directory must exist when
# you start installation.  The default values for many of the
# variables below are expressed in terms of this one, so you may not
# need to change them.
prefix=/usr/local

# Where to install Emacs and other binaries that people will want to
# run directly (like etags).
bindir=${prefix}/bin

# A directory under which we will install many of Emacs's files.  The
# default values for many of the variables below are expressed in
# terms of this one, so you may not need to change them.
emacsdir=${prefix}/emacs-19.0

# Where to install and expect the architecture-independent data files
# (like the tutorial and the Zippy database).
datadir=${emacsdir}/etc

# Where to install the elisp files distributed with Emacs.  Strictly
# speaking, all the elisp files should go under datadir (above), since
# both elisp source and compiled elisp are completely portable, but
# it's traditional to give the lisp files their own subdirectory.
lispdir=${emacsdir}/lisp

# Directories Emacs should search for elisp files specific to this
# site (i.e. customizations), before consulting ${lispdir}.  This
# should be a colon-separated list of directories.
locallisppath=${emacsdir}/local-lisp

# Where Emacs will search to find its elisp files.  Before changing
# this, check to see if your purpose wouldn't better be served by
# changing locallisppath.  This should be a colon-separated list of
# directories.
lisppath=${locallisppath}:${lispdir}

# Where Emacs will search for its elisp files before dumping.  This is
# only used during the process of compiling Emacs, to help Emacs find
# its lisp files before they've been installed in their final
# location.  It's usually identical to lisppath, except that the entry
# for the directory containing the installed lisp files has been
# replaced with ../lisp.  This should be a colon-separated list of
# directories.
dumplisppath=../lisp

# Where to install and expect the files that Emacs modifies as it
# runs.	 These files are all architecture-independent.	Right now,
# the only such data is the locking directory.
statedir=${emacsdir}

# Where to create and expect the locking directory, where the Emacs
# locking code keeps track of which files are currently being edited.
lockdir=${statedir}/lock

# Where to install and expect executable files to be run by Emacs
# rather than directly by users, and other architecture-dependent
# data.
libdir=${emacsdir}/arch-lib

# Where to install Emacs's man pages.
mandir=/usr/man/man1

# Where to install and expect the info files describing Emacs.	In the
# past, this defaulted to a subdirectory of ${prefix}/lib/emacs, but
# since there are now many packages documented with the texinfo
# system, it is inappropriate to imply that it is part of Emacs.
infodir=${prefix}/info

removenullpaths="sed -e 's/^://' -e 's/:"'$'"//' -e 's/::/:/'"

lisppath=`echo ${lisppath} | ${removenullpaths}` ;		\
dumplisppath=`echo ${dumplisppath} | ${removenullpaths}` ;	\
/bin/sed < src/paths.h.in > src/paths.h				\
-e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'$${lisppath}'";'		\
-e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "'$${dumplisppath}'";'	\
-e 's;\(#.*PATH_EXEC\).*$$;\1 "${libdir}";'			\
-e 's;\(#.*PATH_DATA\).*$$;\1 "${datadir}";'			\
-e 's;\(#.*PATH_LOCK\).*$$;\1 "${lockdir}/";'

(cd lib-src; make) || exit 1
(cd src; make) || exit 1

# Subdirectories to install, and where they'll go.
copydir=arch-lib etc info lisp
copydests=${libdir} ${datadir} ${infodir} ${lispdir}

# If any of the directories are below ${emacsdir} or ${statedir}, create them.
for dir in ${copydests}; do
  case "${dir}" in
    ${emacsdir}/* )
      if [ ! -d ${emacsdir} ]; then
	mkdir ${emacsdir}
	chmod 777 ${emacsdir}
      fi
    ;;
    ${statedir}/* )
      if [ ! -d ${statedir} ]; then
	mkdir ${statedir}
	chmod 777 ${statedir}
      fi
    ;;
  esac
done

set ${copydests}
for dir in ${copydir} ; do
  dest=$1 ; shift
  mv ${dir} ${dest}
  if [ $? != 0 ]; then
    echo mv ${dir} to ${dest} failed -- using tar to copy.
    if [ `/bin/pwd`/${dir} != `(cd ${dest}; /bin/pwd)` ] ; then
      (cd ${dir}; tar cf - . ) | (cd ${dest}; umask 0; tar xf - )
      if [ $? != 0 ]; then
	echo "tar-copying ${dir} to ${dest} failed too.  I give up."
	exit 1
      fi
      for subdir in `find ${dest} -type d ! -name RCS -print` ; do
	rm -rf ${subdir}/RCS
	rm -f  ${subdir}/\#*
	rm -f  ${subdir}/*~
      done
    fi
  fi
done

cp ${libdir}/[ce]tags ${bindir}
mv src/emacs ${BINDIR}/emacs
rm src/temacs
chmod 777 ${bindir}/[ce]tags ${bindir}/emacs