# The ones that do not have to link with lcrypto, lz nor xdiff.
 SIMPLE_PROGRAMS = \
-       git-stripspace$X git-daemon$X
+       git-daemon$X
 
 # ... and all the rest that could be moved out of bindir to gitexecdir
 PROGRAMS = \
 
 BUILT_INS = git-log$X git-whatchanged$X git-show$X \
        git-count-objects$X git-diff$X git-push$X git-mailsplit$X \
-       git-grep$X git-add$X git-rm$X git-rev-list$X \
+       git-grep$X git-add$X git-rm$X git-rev-list$X git-stripspace$X \
        git-check-ref-format$X git-rev-parse$X git-mailinfo$X \
        git-init-db$X git-tar-tree$X git-upload-tar$X git-format-patch$X \
        git-ls-files$X git-ls-tree$X git-get-tar-commit-id$X \
        builtin-read-tree.o builtin-commit-tree.o builtin-mailinfo.o \
        builtin-apply.o builtin-show-branch.o builtin-diff-files.o \
        builtin-diff-index.o builtin-diff-stages.o builtin-diff-tree.o \
-       builtin-cat-file.o builtin-mailsplit.o
+       builtin-cat-file.o builtin-mailsplit.o builtin-stripspace.o
 
 GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
 LIBS = $(GITLIBS) -lz
 
--- /dev/null
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include "builtin.h"
+
+/*
+ * Remove empty lines from the beginning and end.
+ *
+ * Turn multiple consecutive empty lines into just one
+ * empty line.  Return true if it is an incomplete line.
+ */
+static int cleanup(char *line)
+{
+       int len = strlen(line);
+
+       if (len && line[len-1] == '\n') {
+               if (len == 1)
+                       return 0;
+               do {
+                       unsigned char c = line[len-2];
+                       if (!isspace(c))
+                               break;
+                       line[len-2] = '\n';
+                       len--;
+                       line[len] = 0;
+               } while (len > 1);
+               return 0;
+       }
+       return 1;
+}
+
+void stripspace(FILE *in, FILE *out)
+{
+       int empties = -1;
+       int incomplete = 0;
+       char line[1024];
+
+       while (fgets(line, sizeof(line), in)) {
+               incomplete = cleanup(line);
+
+               /* Not just an empty line? */
+               if (line[0] != '\n') {
+                       if (empties > 0)
+                               fputc('\n', out);
+                       empties = 0;
+                       fputs(line, out);
+                       continue;
+               }
+               if (empties < 0)
+                       continue;
+               empties++;
+       }
+       if (incomplete)
+               fputc('\n', out);
+}
+
+int cmd_stripspace(int argc, const char **argv, char **envp)
+{
+       stripspace(stdin, stdout);
+       return 0;
+}
 
 
 extern int cmd_mailinfo(int argc, const char **argv, char **envp);
 extern int mailinfo(FILE *in, FILE *out, int ks, const char *encoding, const char *msg, const char *patch);
+
+extern int cmd_stripspace(int argc, const char **argv, char **envp);
+extern void stripspace(FILE *in, FILE *out);
 #endif
 
                { "rev-parse", cmd_rev_parse },
                { "write-tree", cmd_write_tree },
                { "mailsplit", cmd_mailsplit },
-               { "mailinfo", cmd_mailinfo }
+               { "mailinfo", cmd_mailinfo },
+               { "stripspace", cmd_stripspace }
        };
        int i;
 
 
+++ /dev/null
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-/*
- * Remove empty lines from the beginning and end.
- *
- * Turn multiple consecutive empty lines into just one
- * empty line.  Return true if it is an incomplete line.
- */
-static int cleanup(char *line)
-{
-       int len = strlen(line);
-
-       if (len && line[len-1] == '\n') {
-               if (len == 1)
-                       return 0;
-               do {
-                       unsigned char c = line[len-2];
-                       if (!isspace(c))
-                               break;
-                       line[len-2] = '\n';
-                       len--;
-                       line[len] = 0;
-               } while (len > 1);
-               return 0;
-       }
-       return 1;
-}
-
-int main(int argc, char **argv)
-{
-       int empties = -1;
-       int incomplete = 0;
-       char line[1024];
-
-       while (fgets(line, sizeof(line), stdin)) {
-               incomplete = cleanup(line);
-
-               /* Not just an empty line? */
-               if (line[0] != '\n') {
-                       if (empties > 0)
-                               putchar('\n');
-                       empties = 0;
-                       fputs(line, stdout);
-                       continue;
-               }
-               if (empties < 0)
-                       continue;
-               empties++;
-       }
-       if (incomplete)
-               putchar('\n');
-       return 0;
-}