| 1 | #!/bin/sh |
| 2 | |
| 3 | #### make-dist: create an Emacs distribution tar file from the current |
| 4 | #### source tree. This basically creates a duplicate directory |
| 5 | #### structure, and then hard links into it only those files that should |
| 6 | #### be distributed. This means that if you add a file with an odd name, |
| 7 | #### you should make sure that this script will include it. |
| 8 | |
| 9 | # Copyright (C) 1995, 1997, 1998, 2000, 2001, 2002, 2005 |
| 10 | # Free Software Foundation, Inc. |
| 11 | # |
| 12 | # This file is part of GNU Emacs. |
| 13 | # |
| 14 | # GNU Emacs is free software; you can redistribute it and/or modify |
| 15 | # it under the terms of the GNU General Public License as published by |
| 16 | # the Free Software Foundation; either version 2, or (at your option) |
| 17 | # any later version. |
| 18 | # |
| 19 | # GNU Emacs is distributed in the hope that it will be useful, |
| 20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 22 | # GNU General Public License for more details. |
| 23 | # |
| 24 | # You should have received a copy of the GNU General Public License |
| 25 | # along with GNU Emacs; see the file COPYING. If not, write to the |
| 26 | # Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
| 27 | # Boston, MA 02111-1307, USA. |
| 28 | |
| 29 | progname="$0" |
| 30 | |
| 31 | ### Exit if a command fails. |
| 32 | #set -e |
| 33 | |
| 34 | ### Print out each line we read, for debugging's sake. |
| 35 | #set -v |
| 36 | |
| 37 | LANGUAGE=C |
| 38 | LC_ALL=C |
| 39 | LC_MESSAGES= |
| 40 | LANG= |
| 41 | export LANGUAGE LC_ALL LC_MESSAGES LANG |
| 42 | |
| 43 | ## Don't restrict access to any files. |
| 44 | umask 0 |
| 45 | |
| 46 | update=yes |
| 47 | check=yes |
| 48 | clean_up=no |
| 49 | make_tar=no |
| 50 | newer="" |
| 51 | |
| 52 | while [ $# -gt 0 ]; do |
| 53 | case "$1" in |
| 54 | ## This option tells make-dist to delete the staging directory |
| 55 | ## when done. It is useless to use this unless you make a tar file. |
| 56 | "--clean-up" ) |
| 57 | clean_up=yes |
| 58 | ;; |
| 59 | ## This option tells make-dist to make a tar file. |
| 60 | "--tar" ) |
| 61 | make_tar=yes |
| 62 | ;; |
| 63 | ## This option tells make-dist not to recompile or do analogous things. |
| 64 | "--no-update" ) |
| 65 | update=no |
| 66 | ;; |
| 67 | ## This option says don't check for bad file names, etc. |
| 68 | "--no-check" ) |
| 69 | check=no |
| 70 | ;; |
| 71 | ## This option tells make-dist to make the distribution normally, then |
| 72 | ## remove all files older than the given timestamp file. This is useful |
| 73 | ## for creating incremental or patch distributions. |
| 74 | "--newer") |
| 75 | newer="$2" |
| 76 | new_extension=".new" |
| 77 | shift |
| 78 | ;; |
| 79 | ## This option tells make-dist to use `compress' instead of gzip. |
| 80 | ## Normally, make-dist uses gzip whenever it is present. |
| 81 | "--compress") |
| 82 | default_gzip="compress" |
| 83 | ;; |
| 84 | |
| 85 | "--snapshot") |
| 86 | clean_up=yes |
| 87 | make_tar=yes |
| 88 | update=no |
| 89 | check=no |
| 90 | ;; |
| 91 | |
| 92 | "--help") |
| 93 | echo "Usage: ${progname} [options]" |
| 94 | echo "" |
| 95 | echo " --clean-up delete staging directories when done" |
| 96 | echo " --compress use compress instead of gzip" |
| 97 | echo " --newer=TIME don't include files older than TIME" |
| 98 | echo " --no-check don't check for bad file names etc." |
| 99 | echo " --no-update don't recompile or do analogous things" |
| 100 | echo " --snapshot same as --clean-up --no-update --tar --no-check" |
| 101 | echo " --tar make a tar file" |
| 102 | echo "" |
| 103 | exit 0 |
| 104 | ;; |
| 105 | |
| 106 | * ) |
| 107 | echo "${progname}: Unrecognized argument: $1" >&2 |
| 108 | exit 1 |
| 109 | ;; |
| 110 | esac |
| 111 | shift |
| 112 | done |
| 113 | |
| 114 | ### Make sure we're running in the right place. |
| 115 | if [ ! -d src -o ! -f src/lisp.h -o ! -d lisp -o ! -f lisp/version.el ]; then |
| 116 | echo "${progname}: Can't find \`src/lisp.h' and \`lisp/version.el'." >&2 |
| 117 | echo "${progname} must be run in the top directory of the Emacs" >&2 |
| 118 | echo "distribution tree. cd to that directory and try again." >&2 |
| 119 | exit 1 |
| 120 | fi |
| 121 | |
| 122 | ### Find where to run Emacs. |
| 123 | ### (We don't accept EMACS=t as an answer, since that probably only means |
| 124 | ### that the shell is running in an Emacs window.) |
| 125 | if [ $update = yes ]; |
| 126 | then |
| 127 | unset EMACS_UNIBYTE |
| 128 | if [ -f src/emacs ]; |
| 129 | then |
| 130 | EMACS=`pwd`/src/emacs |
| 131 | else |
| 132 | if [ "x$EMACS" = "x" -o "x$EMACS" = "xt" ]; |
| 133 | then |
| 134 | echo You must specify the EMACS environment variable 2>&1 |
| 135 | exit 1 |
| 136 | fi |
| 137 | fi |
| 138 | fi |
| 139 | |
| 140 | ### Find out which version of Emacs this is. |
| 141 | shortversion=`grep 'defconst[ ]*emacs-version' lisp/version.el \ |
| 142 | | sed -e 's/^.*"\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/'` |
| 143 | version=`grep 'defconst[ ]*emacs-version' lisp/version.el \ |
| 144 | | sed -e 's/^[^"]*"\([^"]*\)".*$/\1/'` |
| 145 | if [ ! "${version}" ]; then |
| 146 | echo "${progname}: can't find current Emacs version in \`./lisp/version.el'" >&2 |
| 147 | exit 1 |
| 148 | fi |
| 149 | |
| 150 | echo Version numbers are $version and $shortversion |
| 151 | |
| 152 | if [ $update = yes ]; |
| 153 | then |
| 154 | if grep -s "@set EMACSVER *${shortversion}" ./man/emacs.texi > /dev/null; then |
| 155 | true |
| 156 | else |
| 157 | echo "You must update the version number in \`./man/emacs.texi'" |
| 158 | sleep 5 |
| 159 | fi |
| 160 | fi |
| 161 | |
| 162 | ### Make sure we don't already have a directory emacs-${version}. |
| 163 | |
| 164 | emacsname="emacs-${version}${new_extension}" |
| 165 | |
| 166 | if [ -d ${emacsname} ] |
| 167 | then |
| 168 | echo Directory "${emacsname}" already exists >&2 |
| 169 | exit 1 |
| 170 | fi |
| 171 | |
| 172 | ### Make sure the subdirectory is available. |
| 173 | tempparent="make-dist.tmp.$$" |
| 174 | if [ -d ${tempparent} ]; then |
| 175 | echo "${progname}: staging directory \`${tempparent}' already exists. |
| 176 | Perhaps a previous invocation of \`${progname}' failed to clean up after |
| 177 | itself. Check that directories whose names are of the form |
| 178 | \`make-dist.tmp.NNNNN' don't contain any important information, remove |
| 179 | them, and try again." >&2 |
| 180 | exit 1 |
| 181 | fi |
| 182 | |
| 183 | ### Find where to run Emacs. |
| 184 | if [ $check = yes ]; |
| 185 | then |
| 186 | ### Check for .elc files with no corresponding .el file. |
| 187 | ls -1 lisp/[a-zA-Z]*.el lisp/[a-z]*/[a-zA-Z0-9]*.el \ |
| 188 | leim/[a-z]*/[a-z]*.el | sed 's/\.el$/.elc/' > /tmp/el |
| 189 | ls -1 lisp/[a-zA-Z]*.elc lisp/[a-z]*/[a-zA-Z0-9]*.elc \ |
| 190 | leim/[a-z]*/[a-z]*.elc > /tmp/elc |
| 191 | bogosities="`comm -13 /tmp/el /tmp/elc`" |
| 192 | if [ "${bogosities}" != "" ]; then |
| 193 | echo "The following .elc files have no corresponding .el files:" |
| 194 | echo "${bogosities}" |
| 195 | fi |
| 196 | rm -f /tmp/el /tmp/elc |
| 197 | |
| 198 | ### Check for .el files with no corresponding .elc file. |
| 199 | ls -1 lisp/[a-zA-Z]*.el lisp/[a-z]*/[a-zA-Z0-9]*.el \ |
| 200 | leim/[a-z]*/[a-z]*.el > /tmp/el |
| 201 | ls -1 lisp/[a-zA-Z]*.elc lisp/[a-z]*/[a-zA-Z0-9]*.elc \ |
| 202 | leim/[a-z]*/[a-z]*.elc | sed 's/\.elc$/.el/' > /tmp/elc |
| 203 | losers="`comm -23 /tmp/el /tmp/elc`" |
| 204 | bogosities= |
| 205 | for file in $losers; do |
| 206 | if ! grep -q "no-byte-compile: t" $file; then |
| 207 | case $file in |
| 208 | site-init.el | site-load.el | site-start.el | default.el) |
| 209 | ;; |
| 210 | *) |
| 211 | bogosities="$file $bogosities" |
| 212 | ;; |
| 213 | esac |
| 214 | fi |
| 215 | done |
| 216 | if [ x"${bogosities}" != x"" ]; then |
| 217 | echo "The following .el files have no corresponding .elc files:" |
| 218 | echo "${bogosities}" |
| 219 | fi |
| 220 | rm -f /tmp/el /tmp/elc |
| 221 | |
| 222 | ### Check for .el files that would overflow the 14-char limit if compiled. |
| 223 | long=`find lisp leim -name '[a-zA-Z0-9]??????????*.el' -print` |
| 224 | if [ "$long" != "" ]; then |
| 225 | echo "The following .el file names are too long:" |
| 226 | echo "$long" |
| 227 | fi |
| 228 | fi |
| 229 | |
| 230 | ### Make sure configure is newer than configure.in. |
| 231 | if [ "x`ls -t configure configure.in | sed q`" != "xconfigure" ]; then |
| 232 | echo "\`./configure.in' is newer than \`./configure'" >&2 |
| 233 | echo "Running autoconf" >&2 |
| 234 | autoconf || { x=$?; echo Autoconf FAILED! >&2; exit $x; } |
| 235 | fi |
| 236 | |
| 237 | ### Make sure src/config-in.stamp is newer than configure.in. |
| 238 | if [ "x`ls -t src/stamp-h.in configure.in | sed q`" != "xsrc/stamp-h.in" ]; then |
| 239 | echo "\`./configure.in' is newer than \`./src/stamp-h.in'" >&2 |
| 240 | echo "Running autoheader" >&2 |
| 241 | autoheader || { x=$?; echo Autoheader FAILED! >&2; exit $x; } |
| 242 | rm -f src/stamp-h.in |
| 243 | echo timestamp > src/stamp-h.in |
| 244 | fi |
| 245 | |
| 246 | if [ $update = yes ]; |
| 247 | then |
| 248 | echo "Updating Info files" |
| 249 | (cd man; make -f Makefile.in srcdir=. info) |
| 250 | (cd lispref; make -f Makefile.in srcdir=. info) |
| 251 | (cd lispintro; make -f Makefile.in SHELL=/bin/sh srcdir=. info VPATH=.) |
| 252 | |
| 253 | echo "Updating finder, custom and autoload data" |
| 254 | (cd lisp; make updates EMACS="$EMACS") |
| 255 | |
| 256 | if test -f leim/leim-list.el; then |
| 257 | echo "Updating leim-list.el" |
| 258 | (cd leim; make leim-list.el EMACS="$EMACS") |
| 259 | fi |
| 260 | |
| 261 | echo "Recompiling Lisp files" |
| 262 | $EMACS -batch -f batch-byte-recompile-directory lisp leim |
| 263 | fi |
| 264 | |
| 265 | echo "Making lisp/MANIFEST" |
| 266 | |
| 267 | (cd lisp; |
| 268 | files=`echo [!=]*.el | sed -e 's/ subdirs.el / /' -e 's/ default.el / /'` |
| 269 | for dir in [!=]*; do |
| 270 | if [ -d $dir ] && [ $dir != term ] && [ $dir != CVS ] && [ $dir != RCS ] |
| 271 | then |
| 272 | echo $dir |
| 273 | thisdir=`echo $dir/[!=]*.el | sed -e 's/ subdirs.el / /'` |
| 274 | files="$files $thisdir" |
| 275 | fi |
| 276 | done |
| 277 | for file in $files |
| 278 | do sed -n 's/^;;; //p; q' $file |
| 279 | done | sort > MANIFEST) |
| 280 | |
| 281 | echo "Creating staging directory: \`${tempparent}'" |
| 282 | |
| 283 | mkdir ${tempparent} |
| 284 | tempdir="${tempparent}/${emacsname}" |
| 285 | |
| 286 | ### This trap ensures that the staging directory will be cleaned up even |
| 287 | ### when the script is interrupted in mid-career. |
| 288 | if [ "${clean_up}" = yes ]; then |
| 289 | trap "echo 'Interrupted...cleaning up the staging directory'; rm -rf ${tempparent}; exit 1" 1 2 15 |
| 290 | fi |
| 291 | |
| 292 | echo "Creating top directory: \`${tempdir}'" |
| 293 | mkdir ${tempdir} |
| 294 | |
| 295 | ### We copy in the top-level files before creating the subdirectories in |
| 296 | ### hopes that this will make the top-level files appear first in the |
| 297 | ### tar file; this means that people can start reading the INSTALL and |
| 298 | ### README while the rest of the tar file is still unpacking. Whoopee. |
| 299 | echo "Making links to top-level files" |
| 300 | ln AUTHORS FTP INSTALL README BUGS move-if-change ${tempdir} |
| 301 | ln ChangeLog Makefile.in configure configure.in ${tempdir} |
| 302 | ln config.bat make-dist update-subdirs vpath.sed ${tempdir} |
| 303 | ### Copy these files; they're cross-filesystem symlinks. |
| 304 | cp mkinstalldirs ${tempdir} |
| 305 | cp config.sub ${tempdir} |
| 306 | cp config.guess ${tempdir} |
| 307 | cp install-sh ${tempdir} |
| 308 | |
| 309 | echo "Updating version number in README" |
| 310 | (cd ${tempdir} |
| 311 | awk \ |
| 312 | '$1 " " $2 " " $3 " " $4 " " $5 == "This directory tree holds version" { $6 = version; print $0 } |
| 313 | $1 " " $2 " " $3 " " $4 " " $5 != "This directory tree holds version"' \ |
| 314 | version=${version} README > tmp.README |
| 315 | mv -f tmp.README README) |
| 316 | |
| 317 | |
| 318 | echo "Creating subdirectories" |
| 319 | for subdir in lisp site-lisp lispref lispintro \ |
| 320 | leim leim/CXTERM-DIC leim/MISC-DIC \ |
| 321 | leim/SKK-DIC leim/ja-dic leim/quail \ |
| 322 | src src/m src/s src/bitmaps lib-src oldXMenu lwlib \ |
| 323 | nt nt/inc nt/inc/sys nt/inc/arpa nt/inc/netinet nt/icons \ |
| 324 | etc etc/e etc/images etc/images/gnus etc/images/smilies \ |
| 325 | etc/tree-widget etc/tree-widget/default etc/tree-widget/folder \ |
| 326 | info man msdos vms mac mac/inc mac/inc/sys \ |
| 327 | mac/src mac/Emacs.app mac/Emacs.app/Contents \ |
| 328 | mac/Emacs.app/Contents/MacOS mac/Emacs.app/Contents/Resources \ |
| 329 | mac/Emacs.app/Contents/Resources/English.lproj |
| 330 | do |
| 331 | echo " ${tempdir}/${subdir}" |
| 332 | mkdir ${tempdir}/${subdir} |
| 333 | done |
| 334 | |
| 335 | echo "Making links to \`lisp' and its subdirectories" |
| 336 | ### Don't distribute TAGS, =*.el files, site-init.el, site-load.el, or default.el. |
| 337 | (cd lisp |
| 338 | ln [a-zA-Z]*.el ../${tempdir}/lisp |
| 339 | ln [a-zA-Z]*.elc ../${tempdir}/lisp |
| 340 | ln [a-zA-Z]*.dat ../${tempdir}/lisp |
| 341 | for img in [a-zA-Z]*.xpm [a-zA-Z]*.xbm [a-zA-Z]*.pbm; do |
| 342 | # If there are no images, the shell won't expand the pattern. |
| 343 | if [ -f $img ]; then |
| 344 | ln $img ../${tempdir}/lisp |
| 345 | fi |
| 346 | done |
| 347 | ## simula.el doesn't keep abbreviations in simula.defns any more. |
| 348 | ## ln [a-zA-Z]*.defns ../${tempdir}/lisp |
| 349 | ln ChangeLog ChangeLog.*[0-9] ../${tempdir}/lisp |
| 350 | ln Makefile.in makefile.w32-in ../${tempdir}/lisp |
| 351 | test -f README && ln README ../${tempdir}/lisp |
| 352 | (cd ../${tempdir}/lisp |
| 353 | rm -f TAGS =* |
| 354 | rm -f site-init site-init.el site-init.elc |
| 355 | rm -f site-load site-load.el site-load.elc |
| 356 | rm -f site-start site-start.el site-start.elc |
| 357 | rm -f default default.el default.elc |
| 358 | ) |
| 359 | |
| 360 | ## Find all subdirs of lisp dir |
| 361 | for file in `find . -type d -print`; do |
| 362 | case $file in |
| 363 | . | .. | */Old | */CVS | */RCS | */=*) |
| 364 | ;; |
| 365 | *) |
| 366 | if [ -d $file ]; then |
| 367 | subdirs="$file $subdirs" |
| 368 | fi |
| 369 | ;; |
| 370 | esac |
| 371 | done |
| 372 | |
| 373 | for file in $subdirs; do |
| 374 | echo " lisp/$file" |
| 375 | mkdir ../${tempdir}/lisp/$file |
| 376 | ln $file/[a-zA-Z0-9]*.el ../${tempdir}/lisp/$file |
| 377 | ln $file/[a-zA-Z0-9]*.elc ../${tempdir}/lisp/$file |
| 378 | for img in $file/[a-zA-Z]*.xpm $file/[a-zA-Z]*.xbm $file/[a-zA-Z]*.pbm; do |
| 379 | if [ -f $img ]; then |
| 380 | ln $img ../${tempdir}/lisp/$file |
| 381 | fi |
| 382 | done |
| 383 | if [ -f $file/README ]; then |
| 384 | ln $file/README ../${tempdir}/lisp/$file |
| 385 | fi |
| 386 | |
| 387 | if [ -f $file/ChangeLog ]; then |
| 388 | ln $file/ChangeLog ../${tempdir}/lisp/$file |
| 389 | for f in $file/ChangeLog.*[0-9]; do |
| 390 | if [ -f $f ]; then |
| 391 | ln $f ../${tempdir}/lisp/$file |
| 392 | fi |
| 393 | done |
| 394 | fi |
| 395 | done ) |
| 396 | |
| 397 | echo "Making links to \`leim' and its subdirectories" |
| 398 | ### Don't distribute TAGS, or =*.el files. |
| 399 | (cd leim |
| 400 | ln makefile.w32-in ../${tempdir}/leim |
| 401 | ln ChangeLog README ../${tempdir}/leim |
| 402 | |
| 403 | ln CXTERM-DIC/*.tit ../${tempdir}/leim/CXTERM-DIC |
| 404 | ln SKK-DIC/README SKK-DIC/SKK-JISYO.L ../${tempdir}/leim/SKK-DIC |
| 405 | ln MISC-DIC/*.* ../${tempdir}/leim/MISC-DIC |
| 406 | ln ja-dic/*.el ja-dic/*.elc ../${tempdir}/leim/ja-dic |
| 407 | ln Makefile.in ../${tempdir}/leim/Makefile.in |
| 408 | ln leim-ext.el ../${tempdir}/leim/leim-ext.el |
| 409 | ## Lisp files that start with a capital are generated from TIT |
| 410 | ## dictionaries so we don't distribute them. |
| 411 | ln quail/[a-z]*.el quail/[a-z]*.elc ../${tempdir}/leim/quail |
| 412 | rm -f ../${tempdir}/leim/quail/quick-b5.* |
| 413 | rm -f ../${tempdir}/leim/quail/quick-cns.* |
| 414 | rm -f ../${tempdir}/leim/quail/tsang-b5.* |
| 415 | rm -f ../${tempdir}/leim/quail/tsang-cns.* |
| 416 | |
| 417 | cd ../${tempdir}/leim |
| 418 | rm -f TAGS =* */=*) |
| 419 | |
| 420 | echo "Making links to \`src'" |
| 421 | ### Don't distribute =*.[ch] files, or the configured versions of |
| 422 | ### config.in, paths.in, or Makefile.in, or TAGS. |
| 423 | (cd src |
| 424 | echo " (It is ok if ln fails in some cases.)" |
| 425 | ln [a-zA-Z]*.c ../${tempdir}/src |
| 426 | ln [a-zA-Z]*.h ../${tempdir}/src |
| 427 | ln [a-zA-Z]*.s ../${tempdir}/src |
| 428 | ln [a-zA-Z]*.in ../${tempdir}/src |
| 429 | ln [a-zA-Z]*.opt ../${tempdir}/src |
| 430 | ## If we ended up with a symlink, or if we did not get anything |
| 431 | ## due to a cross-device symlink, copy the file. |
| 432 | for file in [a-zA-Z]*.[hcs] [a-zA-Z]*.in [a-zA-Z]*.opt; do |
| 433 | if test -f ../${tempdir}/src/$file; then |
| 434 | # test -f appears to succeed for a symlink |
| 435 | if test -L ../${tempdir}/src/$file; then |
| 436 | rm ../${tempdir}/src/$file |
| 437 | cp -p $file ../${tempdir}/src |
| 438 | chmod a-w ../${tempdir}/src/$file |
| 439 | fi |
| 440 | else |
| 441 | rm ../${tempdir}/src/$file |
| 442 | cp -p $file ../${tempdir}/src |
| 443 | chmod a-w ../${tempdir}/src/$file |
| 444 | fi |
| 445 | done |
| 446 | ln README ChangeLog ChangeLog.*[0-9] ../${tempdir}/src |
| 447 | ln makefile.w32-in ../${tempdir}/src |
| 448 | ln .gdbinit .dbxinit ../${tempdir}/src |
| 449 | cd ../${tempdir}/src |
| 450 | rm -f config.h epaths.h Makefile Makefile.c |
| 451 | rm -f =* TAGS) |
| 452 | |
| 453 | echo "Making links to \`src/bitmaps'" |
| 454 | (cd src/bitmaps |
| 455 | ln README *.xbm ../../${tempdir}/src/bitmaps) |
| 456 | |
| 457 | echo "Making links to \`src/m'" |
| 458 | (cd src/m |
| 459 | # We call files for miscellaneous input (to linker etc) .inp. |
| 460 | ln README [a-zA-Z0-9]*.h *.inp ../../${tempdir}/src/m) |
| 461 | |
| 462 | echo "Making links to \`src/s'" |
| 463 | (cd src/s |
| 464 | ln README [a-zA-Z0-9]*.h ../../${tempdir}/src/s) |
| 465 | |
| 466 | echo "Making links to \`lib-src'" |
| 467 | (cd lib-src |
| 468 | ln [a-zA-Z]*.[chy] ../${tempdir}/lib-src |
| 469 | ln ChangeLog Makefile.in README testfile vcdiff ../${tempdir}/lib-src |
| 470 | ln grep-changelog rcs2log rcs-checkin ../${tempdir}/lib-src |
| 471 | ln makefile.w32-in ../${tempdir}/lib-src |
| 472 | ## If we ended up with a symlink, or if we did not get anything |
| 473 | ## due to a cross-device symlink, copy the file. |
| 474 | for file in [a-zA-Z]*.[chy]; do |
| 475 | if test -f ../${tempdir}/lib-src/$file; then |
| 476 | # test -f appears to succeed for a symlink |
| 477 | if test -L ../${tempdir}/lib-src/$file; then |
| 478 | rm ../${tempdir}/lib-src/$file |
| 479 | cp $file ../${tempdir}/lib-src |
| 480 | chmod a-w ../${tempdir}/lib-src/$file |
| 481 | fi |
| 482 | else |
| 483 | rm ../${tempdir}/lib-src/$file |
| 484 | cp $file ../${tempdir}/lib-src |
| 485 | chmod a-w ../${tempdir}/lib-src/$file |
| 486 | fi |
| 487 | done |
| 488 | cd ../${tempdir}/lib-src |
| 489 | rm -f Makefile.c |
| 490 | rm -f =* TAGS) |
| 491 | |
| 492 | echo "Making links to \`nt'" |
| 493 | (cd nt |
| 494 | ln emacs.rc config.nt [a-z]*.c ../${tempdir}/nt |
| 495 | ln nmake.defs gmake.defs subdirs.el ../${tempdir}/nt |
| 496 | ln [a-z]*.bat [a-z]*.h ../${tempdir}/nt |
| 497 | ln ChangeLog INSTALL README makefile.w32-in ../${tempdir}/nt) |
| 498 | |
| 499 | echo "Making links to \`nt/inc'" |
| 500 | (cd nt/inc |
| 501 | ln [a-z]*.h ../../${tempdir}/nt/inc) |
| 502 | |
| 503 | echo "Making links to \`nt/inc/sys'" |
| 504 | (cd nt/inc/sys |
| 505 | ln [a-z]*.h ../../../${tempdir}/nt/inc/sys) |
| 506 | |
| 507 | echo "Making links to \`nt/inc/arpa'" |
| 508 | (cd nt/inc/arpa |
| 509 | ln [a-z]*.h ../../../${tempdir}/nt/inc/arpa) |
| 510 | |
| 511 | echo "Making links to \`nt/inc/netinet'" |
| 512 | (cd nt/inc/netinet |
| 513 | ln [a-z]*.h ../../../${tempdir}/nt/inc/netinet) |
| 514 | |
| 515 | echo "Making links to \`nt/icons'" |
| 516 | (cd nt/icons |
| 517 | ln [a-z]*.ico ../../${tempdir}/nt/icons |
| 518 | ln [a-z]*.cur ../../${tempdir}/nt/icons) |
| 519 | |
| 520 | echo "Making links to \`mac'" |
| 521 | (cd mac |
| 522 | ln ChangeLog INSTALL README *.xml *.MPW ../${tempdir}/mac) |
| 523 | |
| 524 | echo "Making links to \`mac/inc'" |
| 525 | (cd mac/inc |
| 526 | ln [a-z]*.h ../../${tempdir}/mac/inc) |
| 527 | |
| 528 | echo "Making links to \`mac/inc/sys'" |
| 529 | (cd mac/inc/sys |
| 530 | ln [a-z]*.h ../../../${tempdir}/mac/inc/sys) |
| 531 | |
| 532 | echo "Making links to \`mac/src'" |
| 533 | (cd mac/src |
| 534 | ln [a-z]*.c *.r ../../${tempdir}/mac/src) |
| 535 | |
| 536 | echo "Making links to \`mac/Emacs.app/Contents'" |
| 537 | (cd mac/Emacs.app/Contents |
| 538 | ln Info.plist PkgInfo ../../../${tempdir}/mac/Emacs.app/Contents) |
| 539 | |
| 540 | echo "Making links to \`mac/Emacs.app/Contents/Resources/English.lproj'" |
| 541 | (cd mac/Emacs.app/Contents/Resources/English.lproj |
| 542 | ln InfoPlist.strings ../../../../../${tempdir}/mac/Emacs.app/Contents/Resources/English.lproj) |
| 543 | |
| 544 | echo "Making links to \`msdos'" |
| 545 | (cd msdos |
| 546 | ln ChangeLog emacs.ico emacs.pif ../${tempdir}/msdos |
| 547 | ln is_exec.c sigaction.c mainmake mainmake.v2 sed*.inp ../${tempdir}/msdos |
| 548 | cd ../${tempdir}/msdos |
| 549 | rm -f =*) |
| 550 | |
| 551 | echo "Making links to \`oldXMenu'" |
| 552 | (cd oldXMenu |
| 553 | ln *.c *.h *.in ../${tempdir}/oldXMenu |
| 554 | ln README Imakefile ChangeLog ../${tempdir}/oldXMenu |
| 555 | ln compile.com descrip.mms ../${tempdir}/oldXMenu) |
| 556 | |
| 557 | echo "Making links to \`lwlib'" |
| 558 | (cd lwlib |
| 559 | ln *.c *.h *.in ../${tempdir}/lwlib |
| 560 | ln README ChangeLog ../${tempdir}/lwlib) |
| 561 | |
| 562 | echo "Making links to \`etc'" |
| 563 | ### Don't distribute = files, TAGS, DOC files, backups, autosaves, or |
| 564 | ### tex litter. |
| 565 | ### Don't distribute gfdl.1, since no man page references it. |
| 566 | (cd etc |
| 567 | files=`ls -d * | grep -v CVS | grep -v RCS | grep -v 'Old' | grep -v '^e$' \ |
| 568 | | grep -v '^images$' | grep -v '^tree-widget$'` |
| 569 | ln $files ../${tempdir}/etc |
| 570 | ## If we ended up with a symlink, or if we did not get anything |
| 571 | ## due to a cross-device symlink, copy the file. |
| 572 | for file in $files; do |
| 573 | if test -f ../${tempdir}/etc/$file; then |
| 574 | # test -f appears to succeed for a symlink |
| 575 | if test -L ../${tempdir}/etc/$file; then |
| 576 | rm ../${tempdir}/etc/$file |
| 577 | cp $file ../${tempdir}/etc |
| 578 | chmod a-w ../${tempdir}/etc/$file |
| 579 | fi |
| 580 | else |
| 581 | rm ../${tempdir}/etc/$file |
| 582 | cp $file ../${tempdir}/etc |
| 583 | chmod a-w ../${tempdir}/etc/$file |
| 584 | fi |
| 585 | done |
| 586 | cd ../${tempdir}/etc |
| 587 | rm -f fns*.el gfdl.1 |
| 588 | rm -f DOC* *~ \#*\# *.dvi *.log *.orig *.rej *,v =* core |
| 589 | rm -f TAGS) |
| 590 | |
| 591 | echo "Making links to \`etc/e'" |
| 592 | (cd etc/e |
| 593 | ln `ls -d * | grep -v CVS | grep -v RCS` ../../${tempdir}/etc/e |
| 594 | cd ../../${tempdir}/etc/e |
| 595 | rm -f *~ \#*\# *,v =* core) |
| 596 | |
| 597 | for dir in etc/images/gnus etc/images/smilies \ |
| 598 | etc/tree-widget/default etc/tree-widget/folder ; do |
| 599 | echo "Making links to \`${dir}'" |
| 600 | (cd ${dir} |
| 601 | ln `ls -d * | grep -v CVS | grep -v RCS` ../../../${tempdir}/${dir} |
| 602 | cd ../../../${tempdir}/${dir} |
| 603 | rm -f *~ \#*\# *,v =* core) |
| 604 | done |
| 605 | |
| 606 | echo "Making links to \`info'" |
| 607 | # Don't distribute backups or autosaves. |
| 608 | (cd info |
| 609 | ln `find . -type f -print | grep -v CVS | grep -v RCS | grep -v cvsignore` ../${tempdir}/info |
| 610 | #ln [a-zA-Z]* ../${tempdir}/info |
| 611 | cd ../${tempdir}/info |
| 612 | # Avoid an error when expanding the wildcards later. |
| 613 | ln emacs dummy~ ; ln emacs \#dummy\# |
| 614 | rm -f *~ \#*\# core) |
| 615 | |
| 616 | echo "Making links to \`man'" |
| 617 | (cd man |
| 618 | ln *.texi *.aux *.cps *.fns *.kys *.vrs ../${tempdir}/man |
| 619 | test -f README && ln README ../${tempdir}/man |
| 620 | test -f Makefile.in && ln Makefile.in ../${tempdir}/man |
| 621 | ln ChangeLog ../${tempdir}/man |
| 622 | test -f split-man && ln split-man ../${tempdir}/man |
| 623 | cp texinfo.tex ../${tempdir}/man |
| 624 | cd ../${tempdir}/man |
| 625 | rm -f \#*\# =* *~ core emacs-index* *.Z *.z xmail |
| 626 | rm -f emacs.?? termcap.?? gdb.?? *.log *.toc *.dvi *.oaux) |
| 627 | |
| 628 | echo "Making links to \`lispref'" |
| 629 | (cd lispref |
| 630 | ln `ls -1 *.texi` ../${tempdir}/lispref |
| 631 | ln *.aux *.cps *.fns *.kys *.vrs ../${tempdir}/lispref |
| 632 | ln *.txt *.el spellfile tindex.pl ../${tempdir}/lispref |
| 633 | test -f README && ln README ../${tempdir}/lispref |
| 634 | test -f Makefile.in && ln Makefile.in ../${tempdir}/lispref |
| 635 | ln ChangeLog ../${tempdir}/lispref |
| 636 | cd ../${tempdir}/lispref |
| 637 | rm -f \#*\# =* *~ core elisp-index* *.Z *.z xmail |
| 638 | rm -f elisp.?? *.log *.toc *.dvi *.oaux) |
| 639 | |
| 640 | echo "Making links to \`lispintro'" |
| 641 | (cd lispintro |
| 642 | ln *.texi *.aux *.cps *.fns *.kys *.vrs *.eps ../${tempdir}/lispintro |
| 643 | test -f texinfo.tex && ln texinfo.tex ../${tempdir}/lispintro |
| 644 | test -f README && ln README ../${tempdir}/lispintro |
| 645 | test -f Makefile.in && ln Makefile.in ../${tempdir}/lispintro |
| 646 | ln ChangeLog ../${tempdir}/lispintro |
| 647 | cd ../${tempdir}/lispintro |
| 648 | rm -f \#*\# =* *~ core *.Z *.z xmail |
| 649 | rm -f emacs-lisp-intro.?? *.log *.toc *.dvi *.oaux) |
| 650 | |
| 651 | echo "Making links to \`vms'" |
| 652 | (cd vms |
| 653 | test -f README && ln README ../${tempdir}/vms |
| 654 | cd ../${tempdir}/vms |
| 655 | rm -f *~) |
| 656 | |
| 657 | ### It would be nice if they could all be symlinks to top-level copy, but |
| 658 | ### you're not supposed to have any symlinks in distribution tar files. |
| 659 | echo "Making sure copying notices are all copies of \`COPYING'" |
| 660 | for subdir in . etc info leim lib-src lisp lwlib mac msdos nt src; do |
| 661 | rm -f ${tempdir}/${subdir}/COPYING |
| 662 | cp COPYING ${tempdir}/${subdir} |
| 663 | done |
| 664 | |
| 665 | #### Make sure that there aren't any hard links between files in the |
| 666 | #### distribution; people with afs can't deal with that. Okay, |
| 667 | #### actually we just re-copy anything with a link count greater |
| 668 | #### than two. (Yes, strictly greater than 2 is correct; since we |
| 669 | #### created these files by linking them in from the original tree, |
| 670 | #### they'll have exactly two links normally.) |
| 671 | #### |
| 672 | #### Commented out since it's not strictly necessary; it should suffice |
| 673 | #### to just break the link on alloca.c. |
| 674 | #echo "Breaking intra-tree links." |
| 675 | #find ${tempdir} ! -type d -links +2 \ |
| 676 | # -exec cp -p {} $$ \; -exec rm -f {} \; -exec mv $$ {} \; |
| 677 | rm -f $tempdir/lib-src/alloca.c |
| 678 | cp $tempdir/src/alloca.c $tempdir/lib-src/alloca.c |
| 679 | |
| 680 | if [ "${newer}" ]; then |
| 681 | echo "Removing files older than $newer" |
| 682 | ## We remove .elc files unconditionally, on the theory that anyone picking |
| 683 | ## up an incremental distribution already has a running Emacs to byte-compile |
| 684 | ## them with. |
| 685 | find ${tempparent} \( -name '*.elc' -o ! -newer ${newer} \) -exec rm -f {} \; |
| 686 | fi |
| 687 | |
| 688 | if [ "${make_tar}" = yes ]; then |
| 689 | if [ "${default_gzip}" = "" ]; then |
| 690 | echo "Looking for gzip" |
| 691 | temppath=`echo $PATH | sed 's/^:/.:/ |
| 692 | s/::/:.:/g |
| 693 | s/:$/:./ |
| 694 | s/:/ /g'` |
| 695 | default_gzip=`( |
| 696 | for dir in ${temppath}; do |
| 697 | if [ -f ${dir}/gzip ]; then echo 'gzip --best'; exit 0; fi |
| 698 | done |
| 699 | echo compress |
| 700 | )` |
| 701 | fi |
| 702 | case "${default_gzip}" in |
| 703 | compress* ) gzip_extension=.Z ;; |
| 704 | * ) gzip_extension=.gz ;; |
| 705 | esac |
| 706 | echo "Creating tar file" |
| 707 | (cd ${tempparent} ; tar cvf - ${emacsname} ) \ |
| 708 | | ${default_gzip} \ |
| 709 | > ${emacsname}.tar${gzip_extension} |
| 710 | fi |
| 711 | |
| 712 | if [ "${clean_up}" = yes ]; then |
| 713 | echo "Cleaning up the staging directory" |
| 714 | rm -rf ${tempparent} |
| 715 | else |
| 716 | (cd ${tempparent}; mv ${emacsname} ..) |
| 717 | rm -rf ${tempparent} |
| 718 | fi |
| 719 | |
| 720 | # arch-tag: 26e3eb50-a394-4ab2-82b2-d8e5af500de7 |
| 721 | ### make-dist ends here |