Home | History | Annotate | Download | only in vendor
      1 #! /bin/sh
      2 # depcomp - compile a program generating dependencies as side-effects
      3 
      4 scriptversion=2007-03-29.01
      5 
      6 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
      7 # Foundation, Inc.
      8 
      9 # This program is free software; you can redistribute it and/or modify
     10 # it under the terms of the GNU General Public License as published by
     11 # the Free Software Foundation; either version 2, or (at your option)
     12 # any later version.
     13 
     14 # This program is distributed in the hope that it will be useful,
     15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17 # GNU General Public License for more details.
     18 
     19 # You should have received a copy of the GNU General Public License
     20 # along with this program; if not, write to the Free Software
     21 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
     22 # 02110-1301, USA.
     23 
     24 # As a special exception to the GNU General Public License, if you
     25 # distribute this file as part of a program that contains a
     26 # configuration script generated by Autoconf, you may include it under
     27 # the same distribution terms that you use for the rest of that program.
     28 
     29 # Originally written by Alexandre Oliva <oliva (at] dcc.unicamp.br>.
     30 
     31 case $1 in
     32   '')
     33      echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
     34      exit 1;
     35      ;;
     36   -h | --h*)
     37     cat <<\EOF
     38 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
     39 
     40 Run PROGRAMS ARGS to compile a file, generating dependencies
     41 as side-effects.
     42 
     43 Environment variables:
     44   depmode     Dependency tracking mode.
     45   source      Source file read by `PROGRAMS ARGS'.
     46   object      Object file output by `PROGRAMS ARGS'.
     47   DEPDIR      directory where to store dependencies.
     48   depfile     Dependency file to output.
     49   tmpdepfile  Temporary file to use when outputing dependencies.
     50   libtool     Whether libtool is used (yes/no).
     51 
     52 Report bugs to <bug-automake (at] gnu.org>.
     53 EOF
     54     exit $?
     55     ;;
     56   -v | --v*)
     57     echo "depcomp $scriptversion"
     58     exit $?
     59     ;;
     60 esac
     61 
     62 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
     63   echo "depcomp: Variables source, object and depmode must be set" 1>&2
     64   exit 1
     65 fi
     66 
     67 # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
     68 depfile=${depfile-`echo "$object" |
     69   sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
     70 tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
     71 
     72 rm -f "$tmpdepfile"
     73 
     74 # Some modes work just like other modes, but use different flags.  We
     75 # parameterize here, but still list the modes in the big case below,
     76 # to make depend.m4 easier to write.  Note that we *cannot* use a case
     77 # here, because this file can only contain one case statement.
     78 if test "$depmode" = hp; then
     79   # HP compiler uses -M and no extra arg.
     80   gccflag=-M
     81   depmode=gcc
     82 fi
     83 
     84 if test "$depmode" = dashXmstdout; then
     85    # This is just like dashmstdout with a different argument.
     86    dashmflag=-xM
     87    depmode=dashmstdout
     88 fi
     89 
     90 case "$depmode" in
     91 gcc3)
     92 ## gcc 3 implements dependency tracking that does exactly what
     93 ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
     94 ## it if -MD -MP comes after the -MF stuff.  Hmm.
     95 ## Unfortunately, FreeBSD c89 acceptance of flags depends upon
     96 ## the command line argument order; so add the flags where they
     97 ## appear in depend2.am.  Note that the slowdown incurred here
     98 ## affects only configure: in makefiles, %FASTDEP% shortcuts this.
     99   for arg
    100   do
    101     case $arg in
    102     -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
    103     *)  set fnord "$@" "$arg" ;;
    104     esac
    105     shift # fnord
    106     shift # $arg
    107   done
    108   "$@"
    109   stat=$?
    110   if test $stat -eq 0; then :
    111   else
    112     rm -f "$tmpdepfile"
    113     exit $stat
    114   fi
    115   mv "$tmpdepfile" "$depfile"
    116   ;;
    117 
    118 gcc)
    119 ## There are various ways to get dependency output from gcc.  Here's
    120 ## why we pick this rather obscure method:
    121 ## - Don't want to use -MD because we'd like the dependencies to end
    122 ##   up in a subdir.  Having to rename by hand is ugly.
    123 ##   (We might end up doing this anyway to support other compilers.)
    124 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
    125 ##   -MM, not -M (despite what the docs say).
    126 ## - Using -M directly means running the compiler twice (even worse
    127 ##   than renaming).
    128   if test -z "$gccflag"; then
    129     gccflag=-MD,
    130   fi
    131   "$@" -Wp,"$gccflag$tmpdepfile"
    132   stat=$?
    133   if test $stat -eq 0; then :
    134   else
    135     rm -f "$tmpdepfile"
    136     exit $stat
    137   fi
    138   rm -f "$depfile"
    139   echo "$object : \\" > "$depfile"
    140   alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    141 ## The second -e expression handles DOS-style file names with drive letters.
    142   sed -e 's/^[^:]*: / /' \
    143       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
    144 ## This next piece of magic avoids the `deleted header file' problem.
    145 ## The problem is that when a header file which appears in a .P file
    146 ## is deleted, the dependency causes make to die (because there is
    147 ## typically no way to rebuild the header).  We avoid this by adding
    148 ## dummy dependencies for each header file.  Too bad gcc doesn't do
    149 ## this for us directly.
    150   tr ' ' '
    151 ' < "$tmpdepfile" |
    152 ## Some versions of gcc put a space before the `:'.  On the theory
    153 ## that the space means something, we add a space to the output as
    154 ## well.
    155 ## Some versions of the HPUX 10.20 sed can't process this invocation
    156 ## correctly.  Breaking it into two sed invocations is a workaround.
    157     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
    158   rm -f "$tmpdepfile"
    159   ;;
    160 
    161 hp)
    162   # This case exists only to let depend.m4 do its work.  It works by
    163   # looking at the text of this script.  This case will never be run,
    164   # since it is checked for above.
    165   exit 1
    166   ;;
    167 
    168 sgi)
    169   if test "$libtool" = yes; then
    170     "$@" "-Wp,-MDupdate,$tmpdepfile"
    171   else
    172     "$@" -MDupdate "$tmpdepfile"
    173   fi
    174   stat=$?
    175   if test $stat -eq 0; then :
    176   else
    177     rm -f "$tmpdepfile"
    178     exit $stat
    179   fi
    180   rm -f "$depfile"
    181 
    182   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
    183     echo "$object : \\" > "$depfile"
    184 
    185     # Clip off the initial element (the dependent).  Don't try to be
    186     # clever and replace this with sed code, as IRIX sed won't handle
    187     # lines with more than a fixed number of characters (4096 in
    188     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
    189     # the IRIX cc adds comments like `#:fec' to the end of the
    190     # dependency line.
    191     tr ' ' '
    192 ' < "$tmpdepfile" \
    193     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
    194     tr '
    195 ' ' ' >> $depfile
    196     echo >> $depfile
    197 
    198     # The second pass generates a dummy entry for each header file.
    199     tr ' ' '
    200 ' < "$tmpdepfile" \
    201    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
    202    >> $depfile
    203   else
    204     # The sourcefile does not contain any dependencies, so just
    205     # store a dummy comment line, to avoid errors with the Makefile
    206     # "include basename.Plo" scheme.
    207     echo "#dummy" > "$depfile"
    208   fi
    209   rm -f "$tmpdepfile"
    210   ;;
    211 
    212 aix)
    213   # The C for AIX Compiler uses -M and outputs the dependencies
    214   # in a .u file.  In older versions, this file always lives in the
    215   # current directory.  Also, the AIX compiler puts `$object:' at the
    216   # start of each line; $object doesn't have directory information.
    217   # Version 6 uses the directory in both cases.
    218   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    219   test "x$dir" = "x$object" && dir=
    220   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
    221   if test "$libtool" = yes; then
    222     tmpdepfile1=$dir$base.u
    223     tmpdepfile2=$base.u
    224     tmpdepfile3=$dir.libs/$base.u
    225     "$@" -Wc,-M
    226   else
    227     tmpdepfile1=$dir$base.u
    228     tmpdepfile2=$dir$base.u
    229     tmpdepfile3=$dir$base.u
    230     "$@" -M
    231   fi
    232   stat=$?
    233 
    234   if test $stat -eq 0; then :
    235   else
    236     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
    237     exit $stat
    238   fi
    239 
    240   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
    241   do
    242     test -f "$tmpdepfile" && break
    243   done
    244   if test -f "$tmpdepfile"; then
    245     # Each line is of the form `foo.o: dependent.h'.
    246     # Do two passes, one to just change these to
    247     # `$object: dependent.h' and one to simply `dependent.h:'.
    248     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
    249     # That's a tab and a space in the [].
    250     sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    251   else
    252     # The sourcefile does not contain any dependencies, so just
    253     # store a dummy comment line, to avoid errors with the Makefile
    254     # "include basename.Plo" scheme.
    255     echo "#dummy" > "$depfile"
    256   fi
    257   rm -f "$tmpdepfile"
    258   ;;
    259 
    260 icc)
    261   # Intel's C compiler understands `-MD -MF file'.  However on
    262   #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
    263   # ICC 7.0 will fill foo.d with something like
    264   #    foo.o: sub/foo.c
    265   #    foo.o: sub/foo.h
    266   # which is wrong.  We want:
    267   #    sub/foo.o: sub/foo.c
    268   #    sub/foo.o: sub/foo.h
    269   #    sub/foo.c:
    270   #    sub/foo.h:
    271   # ICC 7.1 will output
    272   #    foo.o: sub/foo.c sub/foo.h
    273   # and will wrap long lines using \ :
    274   #    foo.o: sub/foo.c ... \
    275   #     sub/foo.h ... \
    276   #     ...
    277 
    278   "$@" -MD -MF "$tmpdepfile"
    279   stat=$?
    280   if test $stat -eq 0; then :
    281   else
    282     rm -f "$tmpdepfile"
    283     exit $stat
    284   fi
    285   rm -f "$depfile"
    286   # Each line is of the form `foo.o: dependent.h',
    287   # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
    288   # Do two passes, one to just change these to
    289   # `$object: dependent.h' and one to simply `dependent.h:'.
    290   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
    291   # Some versions of the HPUX 10.20 sed can't process this invocation
    292   # correctly.  Breaking it into two sed invocations is a workaround.
    293   sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
    294     sed -e 's/$/ :/' >> "$depfile"
    295   rm -f "$tmpdepfile"
    296   ;;
    297 
    298 hp2)
    299   # The "hp" stanza above does not work with aCC (C++) and HP's ia64
    300   # compilers, which have integrated preprocessors.  The correct option
    301   # to use with these is +Maked; it writes dependencies to a file named
    302   # 'foo.d', which lands next to the object file, wherever that
    303   # happens to be.
    304   # Much of this is similar to the tru64 case; see comments there.
    305   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    306   test "x$dir" = "x$object" && dir=
    307   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
    308   if test "$libtool" = yes; then
    309     tmpdepfile1=$dir$base.d
    310     tmpdepfile2=$dir.libs/$base.d
    311     "$@" -Wc,+Maked
    312   else
    313     tmpdepfile1=$dir$base.d
    314     tmpdepfile2=$dir$base.d
    315     "$@" +Maked
    316   fi
    317   stat=$?
    318   if test $stat -eq 0; then :
    319   else
    320      rm -f "$tmpdepfile1" "$tmpdepfile2"
    321      exit $stat
    322   fi
    323 
    324   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
    325   do
    326     test -f "$tmpdepfile" && break
    327   done
    328   if test -f "$tmpdepfile"; then
    329     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
    330     # Add `dependent.h:' lines.
    331     sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
    332   else
    333     echo "#dummy" > "$depfile"
    334   fi
    335   rm -f "$tmpdepfile" "$tmpdepfile2"
    336   ;;
    337 
    338 tru64)
    339    # The Tru64 compiler uses -MD to generate dependencies as a side
    340    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
    341    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
    342    # dependencies in `foo.d' instead, so we check for that too.
    343    # Subdirectories are respected.
    344    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    345    test "x$dir" = "x$object" && dir=
    346    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
    347 
    348    if test "$libtool" = yes; then
    349       # With Tru64 cc, shared objects can also be used to make a
    350       # static library.  This mechanism is used in libtool 1.4 series to
    351       # handle both shared and static libraries in a single compilation.
    352       # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
    353       #
    354       # With libtool 1.5 this exception was removed, and libtool now
    355       # generates 2 separate objects for the 2 libraries.  These two
    356       # compilations output dependencies in $dir.libs/$base.o.d and
    357       # in $dir$base.o.d.  We have to check for both files, because
    358       # one of the two compilations can be disabled.  We should prefer
    359       # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
    360       # automatically cleaned when .libs/ is deleted, while ignoring
    361       # the former would cause a distcleancheck panic.
    362       tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
    363       tmpdepfile2=$dir$base.o.d          # libtool 1.5
    364       tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
    365       tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
    366       "$@" -Wc,-MD
    367    else
    368       tmpdepfile1=$dir$base.o.d
    369       tmpdepfile2=$dir$base.d
    370       tmpdepfile3=$dir$base.d
    371       tmpdepfile4=$dir$base.d
    372       "$@" -MD
    373    fi
    374 
    375    stat=$?
    376    if test $stat -eq 0; then :
    377    else
    378       rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
    379       exit $stat
    380    fi
    381 
    382    for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
    383    do
    384      test -f "$tmpdepfile" && break
    385    done
    386    if test -f "$tmpdepfile"; then
    387       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
    388       # That's a tab and a space in the [].
    389       sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    390    else
    391       echo "#dummy" > "$depfile"
    392    fi
    393    rm -f "$tmpdepfile"
    394    ;;
    395 
    396 #nosideeffect)
    397   # This comment above is used by automake to tell side-effect
    398   # dependency tracking mechanisms from slower ones.
    399 
    400 dashmstdout)
    401   # Important note: in order to support this mode, a compiler *must*
    402   # always write the preprocessed file to stdout, regardless of -o.
    403   "$@" || exit $?
    404 
    405   # Remove the call to Libtool.
    406   if test "$libtool" = yes; then
    407     while test $1 != '--mode=compile'; do
    408       shift
    409     done
    410     shift
    411   fi
    412 
    413   # Remove `-o $object'.
    414   IFS=" "
    415   for arg
    416   do
    417     case $arg in
    418     -o)
    419       shift
    420       ;;
    421     $object)
    422       shift
    423       ;;
    424     *)
    425       set fnord "$@" "$arg"
    426       shift # fnord
    427       shift # $arg
    428       ;;
    429     esac
    430   done
    431 
    432   test -z "$dashmflag" && dashmflag=-M
    433   # Require at least two characters before searching for `:'
    434   # in the target name.  This is to cope with DOS-style filenames:
    435   # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
    436   "$@" $dashmflag |
    437     sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
    438   rm -f "$depfile"
    439   cat < "$tmpdepfile" > "$depfile"
    440   tr ' ' '
    441 ' < "$tmpdepfile" | \
    442 ## Some versions of the HPUX 10.20 sed can't process this invocation
    443 ## correctly.  Breaking it into two sed invocations is a workaround.
    444     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
    445   rm -f "$tmpdepfile"
    446   ;;
    447 
    448 dashXmstdout)
    449   # This case only exists to satisfy depend.m4.  It is never actually
    450   # run, as this mode is specially recognized in the preamble.
    451   exit 1
    452   ;;
    453 
    454 makedepend)
    455   "$@" || exit $?
    456   # Remove any Libtool call
    457   if test "$libtool" = yes; then
    458     while test $1 != '--mode=compile'; do
    459       shift
    460     done
    461     shift
    462   fi
    463   # X makedepend
    464   shift
    465   cleared=no
    466   for arg in "$@"; do
    467     case $cleared in
    468     no)
    469       set ""; shift
    470       cleared=yes ;;
    471     esac
    472     case "$arg" in
    473     -D*|-I*)
    474       set fnord "$@" "$arg"; shift ;;
    475     # Strip any option that makedepend may not understand.  Remove
    476     # the object too, otherwise makedepend will parse it as a source file.
    477     -*|$object)
    478       ;;
    479     *)
    480       set fnord "$@" "$arg"; shift ;;
    481     esac
    482   done
    483   obj_suffix="`echo $object | sed 's/^.*\././'`"
    484   touch "$tmpdepfile"
    485   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
    486   rm -f "$depfile"
    487   cat < "$tmpdepfile" > "$depfile"
    488   sed '1,2d' "$tmpdepfile" | tr ' ' '
    489 ' | \
    490 ## Some versions of the HPUX 10.20 sed can't process this invocation
    491 ## correctly.  Breaking it into two sed invocations is a workaround.
    492     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
    493   rm -f "$tmpdepfile" "$tmpdepfile".bak
    494   ;;
    495 
    496 cpp)
    497   # Important note: in order to support this mode, a compiler *must*
    498   # always write the preprocessed file to stdout.
    499   "$@" || exit $?
    500 
    501   # Remove the call to Libtool.
    502   if test "$libtool" = yes; then
    503     while test $1 != '--mode=compile'; do
    504       shift
    505     done
    506     shift
    507   fi
    508 
    509   # Remove `-o $object'.
    510   IFS=" "
    511   for arg
    512   do
    513     case $arg in
    514     -o)
    515       shift
    516       ;;
    517     $object)
    518       shift
    519       ;;
    520     *)
    521       set fnord "$@" "$arg"
    522       shift # fnord
    523       shift # $arg
    524       ;;
    525     esac
    526   done
    527 
    528   "$@" -E |
    529     sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
    530        -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
    531     sed '$ s: \\$::' > "$tmpdepfile"
    532   rm -f "$depfile"
    533   echo "$object : \\" > "$depfile"
    534   cat < "$tmpdepfile" >> "$depfile"
    535   sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
    536   rm -f "$tmpdepfile"
    537   ;;
    538 
    539 msvisualcpp)
    540   # Important note: in order to support this mode, a compiler *must*
    541   # always write the preprocessed file to stdout, regardless of -o,
    542   # because we must use -o when running libtool.
    543   "$@" || exit $?
    544   IFS=" "
    545   for arg
    546   do
    547     case "$arg" in
    548     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
    549 	set fnord "$@"
    550 	shift
    551 	shift
    552 	;;
    553     *)
    554 	set fnord "$@" "$arg"
    555 	shift
    556 	shift
    557 	;;
    558     esac
    559   done
    560   "$@" -E |
    561   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
    562   rm -f "$depfile"
    563   echo "$object : \\" > "$depfile"
    564   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
    565   echo "	" >> "$depfile"
    566   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
    567   rm -f "$tmpdepfile"
    568   ;;
    569 
    570 none)
    571   exec "$@"
    572   ;;
    573 
    574 *)
    575   echo "Unknown depmode $depmode" 1>&2
    576   exit 1
    577   ;;
    578 esac
    579 
    580 exit 0
    581 
    582 # Local Variables:
    583 # mode: shell-script
    584 # sh-indentation: 2
    585 # eval: (add-hook 'write-file-hooks 'time-stamp)
    586 # time-stamp-start: "scriptversion="
    587 # time-stamp-format: "%:y-%02m-%02d.%02H"
    588 # time-stamp-end: "$"
    589 # End:
    590