summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2021-04-07 13:44:00 -0400
committerGitHub <noreply@github.com>2021-04-07 10:44:00 -0700
commitdb0f181ec13b0e218c16a965358942557d21bd38 (patch)
tree6310b7b3229e582c7f7b7d9fcfa71d70f7e941fa
parent64d8e4f5adba23d995416f492e3ce3822d31e200 (diff)
downloadspack-db0f181ec13b0e218c16a965358942557d21bd38.tar.gz
spack-db0f181ec13b0e218c16a965358942557d21bd38.tar.bz2
spack-db0f181ec13b0e218c16a965358942557d21bd38.tar.xz
spack-db0f181ec13b0e218c16a965358942557d21bd38.zip
New package: mmv (#22815)
-rw-r--r--var/spack/repos/builtin/packages/mmv/better-diagnostics-for-directories-584850.diff22
-rw-r--r--var/spack/repos/builtin/packages/mmv/format-security.diff17
-rw-r--r--var/spack/repos/builtin/packages/mmv/man-page-examples.diff54
-rw-r--r--var/spack/repos/builtin/packages/mmv/man-page-fixes.diff361
-rw-r--r--var/spack/repos/builtin/packages/mmv/man-page-warning-149873.diff45
-rw-r--r--var/spack/repos/builtin/packages/mmv/package.py44
-rw-r--r--var/spack/repos/builtin/packages/mmv/patches-as-of-mmv-1.01b-15.diff368
-rw-r--r--var/spack/repos/builtin/packages/mmv/utime.diff21
8 files changed, 932 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/mmv/better-diagnostics-for-directories-584850.diff b/var/spack/repos/builtin/packages/mmv/better-diagnostics-for-directories-584850.diff
new file mode 100644
index 0000000000..57044a7405
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mmv/better-diagnostics-for-directories-584850.diff
@@ -0,0 +1,22 @@
+Description: Provide better diagnostic for directories
+ Provides better diagnostic when renaming directories. Based on patch
+ by Ulrich Eckhardt <doomster@knuut.de>.
+Debian-Bug: 584850
+Author: Axel Beckert <abe@debian.org>
+
+Index: mmv/mmv.c
+===================================================================
+--- mmv.orig/mmv.c 2012-09-16 20:03:04.269626454 +0200
++++ mmv/mmv.c 2012-09-16 20:06:18.220733497 +0200
+@@ -1215,7 +1215,11 @@
+ getstat(pathbuf, ffrom);
+ if ((ffrom->fi_stflags & FI_ISDIR) ? !dirs : !fils)
+ #endif
++ {
++ if (verbose)
++ printf("ignoring directory %s\n", ffrom->fi_name);
+ return(0);
++ }
+
+ if (needslash) {
+ strcpy(pathend + *pk, SLASHSTR);
diff --git a/var/spack/repos/builtin/packages/mmv/format-security.diff b/var/spack/repos/builtin/packages/mmv/format-security.diff
new file mode 100644
index 0000000000..3b813f1acd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mmv/format-security.diff
@@ -0,0 +1,17 @@
+Description: Fixes build failure with -Werror=format-security
+ ("format not a string literal and no format arguments")
+Author: Axel Beckert <abe@debian.org>
+
+Index: mmv/mmv.c
+===================================================================
+--- mmv.orig/mmv.c 2012-09-16 18:51:28.000000000 +0200
++++ mmv/mmv.c 2012-09-16 18:59:20.600733584 +0200
+@@ -2828,7 +2828,7 @@
+ static FILE *tty = NULL;
+ int c, r;
+
+- fprintf(stderr, m);
++ fprintf(stderr, "%s", m);
+ if (tty == NULL && (tty = fopen(TTY, "r")) == NULL) {
+ fprintf(stderr, "Can not open %s to get reply.\n", TTY);
+ if (failact == -1)
diff --git a/var/spack/repos/builtin/packages/mmv/man-page-examples.diff b/var/spack/repos/builtin/packages/mmv/man-page-examples.diff
new file mode 100644
index 0000000000..706f88af57
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mmv/man-page-examples.diff
@@ -0,0 +1,54 @@
+Description: Add examples section to man page
+ This patch adds several examples of common mmv usage to the man page
+Debian-Bug: 380327
+Author: Axel Beckert <abe@debian.org>
+Last-Update: 2012-12-29
+
+Index: mmv/mmv.1
+===================================================================
+--- mmv.orig/mmv.1 2012-12-29 02:20:59.510075480 +0100
++++ mmv/mmv.1 2012-12-29 02:39:33.591699513 +0100
+@@ -35,6 +35,43 @@
+ .B mmvpatch
+ [\fBexecutable\fP]
+ \}
++.SH "EXAMPLES"
++Rename all
++.I *.jpeg
++files in the current directory to
++\fI*.jpg\fR:
++
++.in +3
++mmv '*.jpeg' '#1.jpg'
++.in -3
++
++Replace the first occurrence of
++.I abc
++with
++.I xyz
++in all files in the current directory:
++
++.in +3
++mmv '*abc*' '#1xyz#2'
++.in -3
++
++Rename files ending in \fI.html.en\fR, \fI.html.de\fR, etc. to ending
++in \fI.en.html\fR, \fI.de.html\fR, etc. in the current directory:
++
++.in +3
++mmv '*.html.??' '#1.#2#3.html'
++.in -3
++
++Rename music files from
++.I <track no.> - <interpreter> - <song title>.ogg
++to
++.I <interpreter> - <track no.> - <song title>.ogg
++in the current directory:
++
++.in +3
++mmv '* - * - *.ogg' '#2 - #1 - #3.ogg'
++.in -3
++
+ .SH "DESCRIPTION"
+ .I Mmv
+ moves (or copies,
diff --git a/var/spack/repos/builtin/packages/mmv/man-page-fixes.diff b/var/spack/repos/builtin/packages/mmv/man-page-fixes.diff
new file mode 100644
index 0000000000..55696ba80c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mmv/man-page-fixes.diff
@@ -0,0 +1,361 @@
+Description: Man page fixes as of mmv 1.01b-15
+ This patch contains the man-page fixes as of mmv 1.01b-15 when it has
+ been converted to the source format "3.0 (quilt)"
+Author: Multiple Authors. See changelog for details.
+Reviewed-By: Axel Beckert <abe@debian.org>
+Last-Update: 2012-12-29
+
+--- mmv-1.01b.orig/mmv.1
++++ mmv-1.01b/mmv.1
+@@ -2,7 +2,7 @@
+ .\" To print the MS-DOS version, use option -rO2.
+ .\" Under System V, take out the '.\" ' from the next line.
+ .\" .nr O 1
+-.TH MMV 1 "November 20, 1989 (v1.0)"
++.TH MMV 1 "November 20, 2001 (v1.0lfs)"
+ .ie !'\nO'2' \{\
+ .SH NAME
+ mmv \- move/copy/append/link multiple files by wildcard patterns
+@@ -21,13 +21,14 @@ mmv \- move/copy/append multiple files b
+ \}
+ .SH SYNOPSIS
+ .B mmv
+-.if '\nO'2' [\fB-m\fP|\fBx\fP|\fBr\fP|\fBc\fP|\fBo\fP|\fBa\fP|\fBz\fP]
+-.if '\nO'0' [\fB-m\fP|\fBx\fP|\fBr\fP|\fBc\fP|\fBo\fP|\fBa\fP|\fBl\fP|\fBs\fP]
+-.if '\nO'1' [\fB-m\fP|\fBx\fP|\fBr\fP|\fBc\fP|\fBo\fP|\fBa\fP|\fBl\fP]
+-[\fB-h\fP]
+-[\fB-d\fP|\fBp\fP]
+-[\fB-g\fP|\fBt\fP]
+-[\fB-v\fP|\fBn\fP]
++.if '\nO'2' [\fB\-m\fP|\fBx\fP|\fBr\fP|\fBc\fP|\fBo\fP|\fBa\fP|\fBz\fP]
++.if '\nO'0' [\fB\-m\fP|\fBx\fP|\fBr\fP|\fBc\fP|\fBo\fP|\fBa\fP|\fBl\fP|\fBs\fP]
++.if '\nO'1' [\fB\-m\fP|\fBx\fP|\fBr\fP|\fBc\fP|\fBo\fP|\fBa\fP|\fBl\fP]
++[\fB\-h\fP]
++[\fB\-d\fP|\fBp\fP]
++[\fB\-g\fP|\fBt\fP]
++[\fB\-v\fP|\fBn\fP]
++[\fB\-\-\fP]
+ [\fBfrom to\fP]
+ .if '\nO'2' \{\
+ .br
+@@ -56,6 +57,9 @@ from the entire set of actions specified
+ and gives the user the choice of either
+ proceeding by avoiding the offending parts
+ or aborting.
++.I mmv
++does support large files (LFS) but it does *NOT* support
++sparse files (i.e. it explodes them).
+
+ .ce
+ The Task Options
+@@ -71,7 +75,7 @@ If none of these are specified,
+ .ie '\nO'2' \{\
+ a default (patchable by
+ .IR mmvpatch ,
+-and initially -x)
++and initially \-x)
+ determines the task.
+ \}
+ .el \{\
+@@ -81,18 +85,18 @@ was invoked (argv[0]):
+
+ command name default task
+
+- mmv -x
++ mmv \-x
+ .br
+- mcp -c
++ mcp \-c
+ .br
+- mad -a
++ mad \-a
+ .br
+- mln -l
++ mln \-l
+ \}
+ .PP
+ The task option choices are:
+ .TP
+--m :
++\-m :
+ move source file to target name.
+ Both must be on the same device.
+ Will not move directories.
+@@ -102,8 +106,8 @@ moves the link without checking if the l
+ directory is different than the old.
+ \}
+ .TP
+--x :
+-same as -m, except cross-device moves are done
++\-x :
++same as \-m, except cross-device moves are done
+ by copying, then deleting source.
+ When copying, sets the
+ .ie !'\nO'2' permission bits
+@@ -111,7 +115,7 @@ When copying, sets the
+ and file modification time
+ of the target file to that of the source file.
+ .TP
+--r :
++\-r :
+ rename source file or directory to target name.
+ The target name must not include a path:
+ the file remains in the same directory in all cases.
+@@ -119,7 +123,7 @@ This option is the only way of renaming
+ .IR mmv .
+ .if '\nO'2' It is only available under DOS version 3.0 or higher.
+ .TP
+--c :
++\-c :
+ copy source file to target name.
+ Sets the file modification time and
+ .ie !'\nO'2' permission bits
+@@ -128,7 +132,7 @@ of the target file to that of the source
+ regardless of whether the target file already exists.
+ Chains and cycles (to be explained below) are not allowed.
+ .TP
+--o :
++\-o :
+ overwrite target name with source file.
+ .ie '\nO'2' \{\
+ If target file exists, its attributes are left unchanged.
+@@ -146,38 +150,38 @@ and the execute permission bits copied f
+ In either case, the file modification time is set to the current time.
+ \}
+ .TP
+--a :
++\-a :
+ append contents of source file to target name.
+ Target file modification time is set to the current time.
+ If target file does not exist,
+ it is created with
+ .ie '\nO'2' attributes
+ .el permission bits
+-set as under -o.
+-Unlike all other options, -a allows multiple source files to have the
+-same target name, e.g. "mmv -a
++set as under \-o.
++Unlike all other options, \-a allows multiple source files to have the
++same target name, e.g. "mmv \-a
+ .ie '\nO'2' *.c
+ .el \\*.c
+ big" will append all ".c" files to "big".
+-Chains and cycles are also allowed, so "mmv -a f f" will double up "f".
++Chains and cycles are also allowed, so "mmv \-a f f" will double up "f".
+ .ie '\nO'2' \{\
+ .TP
+--z :
+-same as -a, but if the target file exists, and its last character is a ^Z,
++\-z :
++same as \-a, but if the target file exists, and its last character is a ^Z,
+ and the source file is not empty,
+ this ^Z is truncated before doing the append.
+ \}
+ .el \{\
+ .TP
+--l :
++\-l :
+ link target name to source file.
+ Both must be on the same device,
+ and the source must not be a directory.
+ Chains and cycles are not allowed.
+ .if '\nO'0' \{\
+ .TP
+--s :
+-same as -l, but use symbolic links instead of hard links.
++\-s :
++same as \-l, but use symbolic links instead of hard links.
+ For the resulting link to aim back at the source,
+ either the source name must begin with a '/',
+ or the target must reside in either the current or the source directory.
+@@ -190,7 +194,7 @@ and the source can be a directory.
+ Only one of these option may be given,
+ and it applies to all matching files.
+ Remaining options need not be given separately,
+-i.e. "mmv -mk" is allowed.
++i.e. "mmv \-mk" is allowed.
+
+ .ce
+ Multiple Pattern Pairs
+@@ -232,7 +236,7 @@ a b
+ a c
+ .in -3
+
+-would give the error message "a -> c : no match" because file "a"
++would give the error message "a \-> c : no match" because file "a"
+ (even if it exists)
+ was already matched by the first pattern pair.
+
+@@ -255,10 +259,10 @@ matching any single character,
+ and matching any one of a set of characters.
+ .PP
+ Between the '[' and ']', a range from character 'a' through character 'z'
+-is specified with "a-z".
++is specified with "a\-z".
+ The set of matching characters can be negated by inserting
+ a '^' after the '['.
+-Thus, "[^b-e2-5_]"
++Thus, "[^b\-e2\-5_]"
+ will match any character but 'b' through 'e', '2' through '5', and '_'.
+ .if '\nO'2' \{\
+ .PP
+@@ -305,13 +309,13 @@ However, the '~' is not treated as a wil
+ in the sense that it is not assigned a wildcard index (see below).
+ \}
+ .PP
+-Since matching a directory under a task option other than -r or -s
++Since matching a directory under a task option other than \-r or \-s
+ would result in an error,
+-tasks other than -r and -s
++tasks other than \-r and \-s
+ match directories only against completely explicit
+ .I from
+ patterns (i.e. not containing wildcards).
+-Under -r and -s, this applies only to "." and "..".
++Under \-r and \-s, this applies only to "." and "..".
+ .PP
+ .ie '\nO'2' \{\
+ Hidden and system files are also only matched
+@@ -324,7 +328,7 @@ Files beginning with '.' are only matche
+ .I from
+ patterns that begin with an explicit '.'.
+ \}
+-However, if -h is specified, they are matched normally.
++However, if \-h is specified, they are matched normally.
+ .if !'\nO'2' \{\
+ .PP
+ Warning: since the shell normally expands wildcards
+@@ -332,8 +336,9 @@ before passing the command-line argument
+ .IR mmv ,
+ it is usually necessary to enclose the command-line
+ .I from
+-pattern
+-in quotes.
++and
++.I to
++patterns in quotes.
+ \}
+
+ .ce
+@@ -363,7 +368,7 @@ pattern is "abc*.*" and the
+ pattern is "xyz#2.#1",
+ then "abc.txt" is targeted to "xyztxt.".
+ (The first '*' matched "", and the second matched "txt".)
+-Similarly, for the pattern pair ";*.[clp]" -> "#1#3\*(SL#2",
++Similarly, for the pattern pair ";*.[clp]" \-> "#1#3\*(SL#2",
+ "foo1\*(SLfoo2\*(SLprog.c" is targeted to "foo1\*(SLfoo2\*(SLc\*(SLprog".
+ Note that there is no '\*(SL' following the "#1" in the
+ .I to
+@@ -397,7 +402,7 @@ expands the '~' in the exact same manner
+ does not expand it at all).
+ \}
+ .PP
+-For all task options other than -r, if the target name is a directory,
++For all task options other than \-r, if the target name is a directory,
+ the real target name is formed by appending
+ a '\*(SL' followed by the last component
+ of the source file name.
+@@ -434,7 +439,7 @@ a b
+ .br
+ b c
+
+-specifies the chain "a" -> "b" -> "c".
++specifies the chain "a" \-> "b" \-> "c".
+ A cycle is a chain where the last target name
+ refers back to the first source file,
+ e.g. "mmv a a".
+@@ -461,9 +466,9 @@ Furthermore,
+ .I mmv
+ checks if any of its actions will result
+ in the destruction of existing files.
+-If the -d (delete) option is specified,
++If the \-d (delete) option is specified,
+ all file deletions or overwrites are done silently.
+-Under -p (protect), all deletions or overwrites
++Under \-p (protect), all deletions or overwrites
+ (except those specified with "(*)" on the standard input, see below)
+ are treated as errors.
+ And if neither option is specified,
+@@ -487,16 +492,16 @@ Once all errors are detected,
+ queries the user whether he wishes
+ to continue by avoiding the erroneous actions or to abort altogether.
+ This and all other queries may be avoided by specifying either the
+--g (go) or -t (terminate) option.
++\-g (go) or \-t (terminate) option.
+ The former will resolve all difficulties by avoiding the erroneous actions;
+ the latter will abort
+ .I mmv
+ if any errors are detected.
+ Specifying either of them defaults
+ .I mmv
+-to -p, unless -d is specified
++to \-p, unless \-d is specified
+ (see above).
+-Thus, -g and -t are most useful when running
++Thus, \-g and \-t are most useful when running
+ .I mmv
+ in the background or in
+ a shell script,
+@@ -508,28 +513,28 @@ Reports
+ Once the actions to be performed are determined,
+ .I mmv
+ performs them silently,
+-unless either the -v (verbose) or -n (no-execute) option is specified.
++unless either the \-v (verbose) or \-n (no-execute) option is specified.
+ The former causes
+ .I mmv
+ to report each performed action
+ on the standard output as
+
+-a -> b : done.
++a \-> b : done.
+
+ Here, "a" and "b" would be replaced by the source and target names,
+ respectively.
+ If the action deletes the old target,
+ a "(*)" is inserted after the the target name.
+-Also, the "->" symbol is modified when a cycle has to be broken:
++Also, the "\->" symbol is modified when a cycle has to be broken:
+ the '>' is changed to a '^' on the action prior to which the old target
+ is renamed to a temporary,
+-and the '-' is changed to a '=' on the action where the temporary is used.
++and the '\-' is changed to a '=' on the action where the temporary is used.
+ .PP
+-Under -n, none of the actions are performed,
++Under \-n, none of the actions are performed,
+ but messages like the above are printed on the standard output
+ with the ": done." omitted.
+ .PP
+-The output generated by -n can (after editing, if desired)
++The output generated by \-n can (after editing, if desired)
+ be fed back to
+ .I mmv
+ on the standard input
+@@ -545,9 +550,9 @@ To facilitate this,
+ ignores lines on the standard input that look
+ like its own error and "done" messages,
+ as well as all lines beginning with white space,
+-and will accept pattern pairs with or without the intervening "->"
+-(or "-^", "=>", or "=^").
+-Lines with "(*)" after the target pattern have the effect of enabling -d
++and will accept pattern pairs with or without the intervening "\->"
++(or "\-^", "=>", or "=^").
++Lines with "(*)" after the target pattern have the effect of enabling \-d
+ for the files matching this pattern only,
+ so that such deletions are done silently.
+ When feeding
+@@ -596,11 +601,11 @@ on a copy of
+ .I mmv
+ named as follows:
+
+- -x, -m, -r mmv.exe
++ \-x, \-m, \-r mmv.exe
+ .br
+- -c, -o mcp.exe
++ \-c, \-o mcp.exe
+ .br
+- -a, -z mad.exe
++ \-a, \-z mad.exe
+ .PP
+ .I Mmvpatch
+ also determines the best way to uniquely identify directories.
diff --git a/var/spack/repos/builtin/packages/mmv/man-page-warning-149873.diff b/var/spack/repos/builtin/packages/mmv/man-page-warning-149873.diff
new file mode 100644
index 0000000000..4f4815e310
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mmv/man-page-warning-149873.diff
@@ -0,0 +1,45 @@
+Description: Add warnings about #149873 to man page
+ This patch adds warnings about issues with spaces in patterns and
+ files when patterns are read from STDIN to the man page
+Debian-Bug: 149873
+Author: Axel Beckert <abe@debian.org>
+Last-Update: 2012-12-29
+
+Index: mmv/mmv.1
+===================================================================
+--- mmv.orig/mmv.1 2012-12-29 02:44:07.591288928 +0100
++++ mmv/mmv.1 2012-12-29 02:56:01.425012596 +0100
+@@ -234,7 +234,7 @@
+ i.e. "mmv \-mk" is allowed.
+
+ .ce
+-Multiple Pattern Pairs
++Multiple Pattern Pairs / Reading Patterns from STDIN
+ .PP
+ Multiple
+ .I from
+@@ -277,6 +277,11 @@
+ (even if it exists)
+ was already matched by the first pattern pair.
+
++\fBWARNING:\fR This operation mode does \fBnot\fR work if the patterns
++itself contain \fBspaces\fR. See
++.I http://bugs.debian.org/149873
++for details.
++
+ .ce
+ The \fIFrom\fP Pattern
+ .PP
+@@ -592,6 +597,12 @@
+ Lines with "(*)" after the target pattern have the effect of enabling \-d
+ for the files matching this pattern only,
+ so that such deletions are done silently.
++
++\fBWARNING:\fR This means that \fBunexpected things\fR may happen if
++\fBfiles\fR matched by the patterns contain \fBspaces\fR. See
++.I http://bugs.debian.org/149873
++for details.
++
+ When feeding
+ .I mmv
+ its own output,
diff --git a/var/spack/repos/builtin/packages/mmv/package.py b/var/spack/repos/builtin/packages/mmv/package.py
new file mode 100644
index 0000000000..ade641a1aa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mmv/package.py
@@ -0,0 +1,44 @@
+# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+import os
+from spack import *
+
+
+class Mmv(MakefilePackage):
+ """Move/Copy/Append/Link multiple files mmv is a program to
+ move/copy/append/link multiple files according to a set of wildcard
+ patterns. This multiple action is performed safely, i.e. without any
+ unexpected deletion of files due to collisions of target names with
+ existing filenames or with other target names. """
+
+ homepage = "https://packages.debian.org/source/buster/mmv"
+ url = "http://deb.debian.org/debian/pool/main/m/mmv/mmv_1.01b.orig.tar.gz"
+
+ version('1.01b', sha256='0399c027ea1e51fd607266c1e33573866d4db89f64a74be8b4a1d2d1ff1fdeef')
+
+ patch('better-diagnostics-for-directories-584850.diff')
+ patch('format-security.diff')
+ patch('man-page-examples.diff')
+ patch('man-page-fixes.diff')
+ patch('man-page-warning-149873.diff')
+ patch('patches-as-of-mmv-1.01b-15.diff')
+ patch('utime.diff')
+
+ def build(self, spec, prefix):
+ cc = Executable(self.compiler.cc)
+ cc('-DIS_SYSV', '-DHAS_DIRENT', '-DHAS_RENAME', '-O2', '-o', 'mmv', 'mmv.c')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('mmv', prefix.bin)
+ os.symlink(join_path(prefix.bin, 'mmv'), 'mad')
+ os.symlink(join_path(prefix.bin, 'mmv'), 'mcp')
+ os.symlink(join_path(prefix.bin, 'mmv'), 'mln')
+ mkdirp(prefix.man1)
+ install('mmv.1', prefix.man1)
+ os.symlink(join_path(prefix.man1, 'mmv.1'), 'mad.1')
+ os.symlink(join_path(prefix.man1, 'mmv.1'), 'mcp.1')
+ os.symlink(join_path(prefix.man1, 'mmv.1'), 'mln.1')
diff --git a/var/spack/repos/builtin/packages/mmv/patches-as-of-mmv-1.01b-15.diff b/var/spack/repos/builtin/packages/mmv/patches-as-of-mmv-1.01b-15.diff
new file mode 100644
index 0000000000..1c186b2cc2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mmv/patches-as-of-mmv-1.01b-15.diff
@@ -0,0 +1,368 @@
+Description: Patches as of mmv 1.01b-15
+ This patch contains the functional patches as of mmv 1.01b-15 when it
+ has been converted to the source format "3.0 (quilt)"
+Author: Multiple Authors. See changelog for details.
+Reviewed-By: Axel Beckert <abe@debian.org>
+Last-Update: 2012-12-29
+
+--- mmv-1.01b.orig/mmv.c
++++ mmv-1.01b/mmv.c
+@@ -62,7 +62,8 @@ static char USAGE[] =
+ %s [-m|x%s|c|o|a|z] [-h] [-d|p] [-g|t] [-v|n] [from to]\n\
+ \n\
+ Use #N in the ``to'' pattern to get the string matched\n\
+-by the N'th ``from'' pattern wildcard.\n";
++by the N'th ``from'' pattern wildcard.\n\
++Use -- as the end of options.\n";
+
+ #define OTHEROPT (_osmajor < 3 ? "" : "|r")
+
+@@ -75,7 +76,9 @@ Use #[l|u]N in the ``to'' pattern to get
+ string matched by the N'th ``from'' pattern wildcard.\n\
+ \n\
+ A ``from'' pattern containing wildcards should be quoted when given\n\
+-on the command line.\n";
++on the command line. Also you may need to quote ``to'' pattern.\n\
++\n\
++Use -- as the end of options.\n";
+
+ #ifdef IS_SYSV
+ #define OTHEROPT ""
+@@ -85,6 +88,7 @@ on the command line.\n";
+
+ #endif
+
++#include <unistd.h>
+ #include <stdio.h>
+ #include <ctype.h>
+
+@@ -120,14 +124,12 @@ extern unsigned _stklen = 10000;
+ #else
+ /* for various flavors of UN*X */
+
++#include <libgen.h>
++#include <stdlib.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/file.h>
+
+-extern char *getenv();
+-extern long lseek();
+-extern char *malloc();
+-
+ #ifdef HAS_DIRENT
+ #include <dirent.h>
+ typedef struct dirent DIRENTRY;
+@@ -390,7 +392,7 @@ static int movealias(/* REP *first, REP
+ static int snap(/* REP *first, REP *p */);
+ static void showdone(/* REP *fin */);
+ static void breakout(/* */);
+-static int breakrep(/* */);
++static void breakrep(int);
+ static void breakstat(/* */);
+ static void quit(/* */);
+ static int copymove(/* REP *p */);
+@@ -436,9 +438,11 @@ static CHUNK *freechunks = NULL;
+ static SLICER slicer[2] = {{NULL, NULL, 0}, {NULL, NULL, 0}};
+
+ static int badreps = 0, paterr = 0, direrr, failed = 0, gotsig = 0, repbad;
+-static FILE *outfile = stdout;
++static FILE *outfile;
+
++#ifdef IS_MSDOS
+ static char IDF[] = "$$mmvdid.";
++#endif
+ static char TEMP[] = "$$mmvtmp.";
+ static char TOOLONG[] = "(too long)";
+ static char EMPTY[] = "(empty)";
+@@ -456,12 +460,12 @@ char pathbuf[MAXPATH];
+ char fullrep[MAXPATH + 1];
+ static char *(start[MAXWILD]);
+ static int len[MAXWILD];
+-static char hasdot[MAXWILD];
+ static REP mistake;
+ #define MISTAKE (&mistake)
+
+ #ifdef IS_MSDOS
+
++static char hasdot[MAXWILD];
+ static int olddevflag, curdisk, maxdisk;
+ static struct {
+ char ph_banner[30];
+@@ -497,6 +501,8 @@ int main(argc, argv)
+ {
+ char *frompat, *topat;
+
++ outfile = stdout;
++
+ init();
+ procargs(argc, argv, &frompat, &topat);
+ domatch(frompat, topat);
+@@ -560,7 +566,7 @@ static void procargs(argc, argv, pfrompa
+ char **pfrompat, **ptopat;
+ {
+ char *p, c;
+- char *cmdname = argv[0];
++ char *cmdname = basename(argv[0]);
+
+ #ifdef IS_MSDOS
+ #define CMDNAME (patch.ph_name)
+@@ -575,6 +581,11 @@ static void procargs(argc, argv, pfrompa
+ for (argc--, argv++; argc > 0 && **argv == '-'; argc--, argv++)
+ for (p = *argv + 1; *p != '\0'; p++) {
+ c = mylower(*p);
++ if (c == '-') {
++ argc--;
++ argv++;
++ goto endargs;
++ }
+ if (c == 'v' && !noex)
+ verbose = 1;
+ else if (c == 'n' && !verbose)
+@@ -618,7 +629,8 @@ static void procargs(argc, argv, pfrompa
+ }
+ }
+
+- if (op == DFLT)
++endargs:
++ if (op == DFLT) {
+ if (strcmp(cmdname, MOVENAME) == 0)
+ op = XMOVE;
+ else if (strcmp(cmdname, COPYNAME) == 0)
+@@ -629,6 +641,8 @@ static void procargs(argc, argv, pfrompa
+ op = HARDLINK;
+ else
+ op = DFLTOP;
++ }
++
+ if (
+ op & DIRMOVE &&
+ #ifdef IS_MSDOS
+@@ -775,7 +789,7 @@ static void matchpat()
+ static int parsepat()
+ {
+ char *p, *lastname, c;
+- int totwilds, instage, x, havedot;
++ int totwilds, instage, x;
+ static char TRAILESC[] = "%s -> %s : trailing %c is superfluous.\n";
+
+ lastname = from;
+@@ -999,20 +1013,16 @@ static int parsepat()
+ printf(TRAILESC, from, to, ESC);
+ return(-1);
+ }
++#ifdef IS_MSDOS
+ default:
+ if (
+-#ifdef IS_MSDOS
+ c <= ' ' || c >= 127 ||
+ strchr(":/\\*?[]=+;,\"|<>", c) != NULL
+-#else
+- c & 0x80
+-#endif
+ ) {
+ printf("%s -> %s : illegal character '%c' (0x%02X).\n",
+ from, to, c, c);
+ return(-1);
+ }
+-#ifdef IS_MSDOS
+ if (isupper(c))
+ *p = c + ('a' - 'A');
+ #endif
+@@ -1042,7 +1052,7 @@ static int dostage(lastend, pathend, sta
+ DIRINFO *di;
+ HANDLE *h, *hto;
+ int prelen, litlen, nfils, i, k, flags, try;
+- FILEINFO **pf, *fdel;
++ FILEINFO **pf, *fdel = NULL;
+ char *nto, *firstesc;
+ REP *p;
+ int wantdirs, ret = 1, laststage = (stage + 1 == nstages);
+@@ -1172,11 +1182,12 @@ static int trymatch(ffrom, pat)
+ if (*p == '.' || (!matchall && ffrom->fi_attrib & (FA_HIDDEN | FA_SYSTEM)))
+ return(strcmp(pat, p) == 0);
+ #else
+- if (*p == '.')
++ if (*p == '.') {
+ if (p[1] == '\0' || (p[1] == '.' && p[2] == '\0'))
+ return(strcmp(pat, p) == 0);
+ else if (!matchall && *pat != '.')
+ return(0);
++ }
+ #endif
+ return(-1);
+ }
+@@ -1312,7 +1323,7 @@ static int checkto(hfrom, f, phto, pnto,
+ {
+ char tpath[MAXPATH + 1];
+ char *pathend;
+- FILEINFO *fdel;
++ FILEINFO *fdel = NULL;
+ int hlen, tlen;
+
+ if (op & DIRMOVE) {
+@@ -1405,7 +1416,9 @@ static char *getpath(tpath)
+ static int badname(s)
+ char *s;
+ {
++#ifdef IS_MSDOS
+ char *ext;
++#endif
+
+ return (
+ #ifdef IS_MSDOS
+@@ -1715,20 +1728,19 @@ static HANDLE *checkdir(p, pathend, whic
+ struct stat dstat;
+ DIRID d;
+ DEVID v;
+- DIRINFO **newdirs, *di;
+- int nfils;
+- FILEINFO **fils;
++ DIRINFO *di = NULL;
+ char *myp, *lastslash = NULL;
+ int sticky;
+ HANDLE *h;
+
+- if (hsearch(p, which, &h))
++ if (hsearch(p, which, &h)) {
+ if (h->h_di == NULL) {
+ direrr = h->h_err;
+ return(NULL);
+ }
+ else
+ return(h);
++ }
+
+ if (*p == '\0')
+ myp = ".";
+@@ -1899,7 +1911,10 @@ static int match(pat, s, start1, len1)
+ char *pat, *s, **start1;
+ int *len1;
+ {
+- char c, *olds;
++ char c;
++#ifdef IS_MSDOS
++ char *olds;
++#endif
+
+ *start1 = 0;
+ for(;;)
+@@ -2376,9 +2391,9 @@ static void goonordie()
+ static void doreps()
+ {
+ char *fstart;
+- int k, printaliased = 0, alias;
++ int k, printaliased = 0, alias = 0;
+ REP *first, *p;
+- long aliaslen;
++ long aliaslen = 0l;
+
+ #ifdef IS_MSDOS
+ ctrlbrk(breakrep);
+@@ -2396,11 +2411,12 @@ static void doreps()
+ }
+ strcpy(fullrep, p->r_hto->h_name);
+ strcat(fullrep, p->r_nto);
+- if (!noex && (p->r_flags & R_ISCYCLE))
++ if (!noex && (p->r_flags & R_ISCYCLE)) {
+ if (op & APPEND)
+ aliaslen = appendalias(first, p, &printaliased);
+ else
+ alias = movealias(first, p, &printaliased);
++ }
+ strcpy(pathbuf, p->r_hfrom->h_name);
+ fstart = pathbuf + strlen(pathbuf);
+ if ((p->r_flags & R_ISALIASED) && !(op & APPEND))
+@@ -2459,7 +2475,7 @@ static long appendalias(first, p, pprint
+ REP *first, *p;
+ int *pprintaliased;
+ {
+- long ret;
++ long ret = 0l;
+
+ #ifdef IS_MSDOS
+ int fd;
+@@ -2578,10 +2594,10 @@ static void breakout()
+ }
+
+
+-static int breakrep()
++static void breakrep(int signum)
+ {
+ gotsig = 1;
+- return(1);
++ return;
+ }
+
+
+@@ -2624,11 +2640,12 @@ static int copymove(p)
+
+ static int copy(ff, len)
+ FILEINFO *ff;
+- long len;
++ off_t len;
+ {
+- char buf[BUFSIZE], c;
++ char buf[BUFSIZE];
+ int f, t, k, mode, perm;
+ #ifdef IS_MSDOS
++ char c;
+ struct ftime tim;
+ #else
+ #ifdef IS_SYSV
+@@ -2672,7 +2689,7 @@ static int copy(ff, len)
+ return(-1);
+ }
+ if (op & APPEND)
+- lseek(t, 0L, 2);
++ lseek(t, (off_t)0, SEEK_END);
+ #ifdef IS_MSDOS
+ if (op & ZAPPEND && filelength(t) != 0) {
+ if (lseek(t, -1L, 1) == -1L || read(t, &c, 1) != 1) {
+@@ -2684,10 +2701,10 @@ static int copy(ff, len)
+ lseek(t, -1L, 1);
+ }
+ #endif
+- if ((op & APPEND) && len != -1L) {
++ if ((op & APPEND) && len != (off_t)-1) {
+ while (
+ len != 0 &&
+- (k = read(f, buf, len > BUFSIZE ? BUFSIZE : (unsigned)len)) > 0 &&
++ (k = read(f, buf, (len > BUFSIZE) ? BUFSIZE : (size_t)len)) > 0 &&
+ write(t, buf, k) == k
+ )
+ len -= k;
+@@ -2711,7 +2728,9 @@ static int copy(ff, len)
+ tim.modtime = fstat.st_mtime,
+ #else
+ tim[0].tv_sec = fstat.st_atime,
++ tim[0].tv_usec = 0,
+ tim[1].tv_sec = fstat.st_mtime,
++ tim[1].tv_usec = 0,
+ #endif
+ utimes(fullrep, tim)
+ )
+Index: mmv/Makefile
+===================================================================
+--- mmv.orig/Makefile 2012-09-16 18:24:31.375886230 +0200
++++ mmv/Makefile 2012-09-16 18:24:46.260122528 +0200
+@@ -1,16 +1,16 @@
+ # Possible defines in CONF:
+ # IS_MSDOS IS_SYSV IS_V7 IS_BSD HAS_DIRENT HAS_RENAME MV_DIR
+
+-CC =gcc -traditional
++CC =gcc
+ LD =$(CC)
+ CONF =-DIS_SYSV -DHAS_DIRENT -DHAS_RENAME
+-CFLAGS =-O2 -m486 $(CONF)
++CFLAGS =-O2 $(CONF)
+ LDFLAGS =-s -N
+
+ #IBIN =$(LOCAL)$(ARCH)/bin
+ #IMAN =$(LOCAL)$(ANY)/man
+ IBIN=$(DESTDIR)/usr/bin/
+-IMAN=$(DESTDIR)/usr/man/
++IMAN=$(DESTDIR)/usr/share/man/
+
+ mmv: mmv.o
+
diff --git a/var/spack/repos/builtin/packages/mmv/utime.diff b/var/spack/repos/builtin/packages/mmv/utime.diff
new file mode 100644
index 0000000000..1fcf49b8db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mmv/utime.diff
@@ -0,0 +1,21 @@
+--- mmv-1.01b.orig/mmv.c
++++ mmv-1.01b/mmv.c
+@@ -123,6 +123,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/file.h>
++#include <utime.h>
+
+ extern char *getenv();
+ extern long lseek();
+@@ -192,10 +193,6 @@
+ #ifdef IS_SYSV
+
+ /* for System V and Version 7*/
+-struct utimbuf {
+- time_t actime;
+- time_t modtime;
+-};
+ #define utimes(f, t) utime((f), &(t))
+
+ #ifndef HAS_RENAME