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