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