Index: trunk/src/bldprogs/scm.cpp
===================================================================
--- trunk/src/bldprogs/scm.cpp	(revision 69259)
+++ trunk/src/bldprogs/scm.cpp	(revision 69261)
@@ -354,20 +354,28 @@
 };
 
-
+static PFNSCMREWRITER const g_aRewritersFor_Images[] =
+{
+    rewrite_SvnNoExecutable,
+    rewrite_SvnBinary,
+};
+
+#define SCM_CFG_ENTRY(a_aRewriters, a_fBinary, a_szFilePatterns) \
+    { RT_ELEMENTS(a_aRewriters), &a_aRewriters[0], a_fBinary, a_szFilePatterns }
 static SCMCFGENTRY const g_aConfigs[] =
 {
-    { RT_ELEMENTS(g_aRewritersFor_Makefile_kup), &g_aRewritersFor_Makefile_kup[0], "Makefile.kup" },
-    { RT_ELEMENTS(g_aRewritersFor_Makefile_kmk), &g_aRewritersFor_Makefile_kmk[0], "Makefile.kmk|Config.kmk" },
-    { RT_ELEMENTS(g_aRewritersFor_C_and_CPP),    &g_aRewritersFor_C_and_CPP[0],    "*.c|*.cpp|*.C|*.CPP|*.cxx|*.cc|*.m|*.mm" },
-    { RT_ELEMENTS(g_aRewritersFor_H_and_HPP),    &g_aRewritersFor_H_and_HPP[0],    "*.h|*.hpp" },
-    { RT_ELEMENTS(g_aRewritersFor_RC),           &g_aRewritersFor_RC[0],           "*.rc" },
-    { RT_ELEMENTS(g_aRewritersFor_ASM),          &g_aRewritersFor_ASM[0],          "*.asm|*.mac" },
-    { RT_ELEMENTS(g_aRewritersFor_DEF),          &g_aRewritersFor_DEF[0],          "*.def" },
-    { RT_ELEMENTS(g_aRewritersFor_ShellScripts), &g_aRewritersFor_ShellScripts[0], "*.sh|configure" },
-    { RT_ELEMENTS(g_aRewritersFor_BatchFiles),   &g_aRewritersFor_BatchFiles[0],   "*.bat|*.cmd|*.btm" },
-    { RT_ELEMENTS(g_aRewritersFor_BasicScripts), &g_aRewritersFor_BasicScripts[0], "*.vbs|*.vb" },
-    { RT_ELEMENTS(g_aRewritersFor_SedScripts),   &g_aRewritersFor_SedScripts[0],   "*.sed" },
-    { RT_ELEMENTS(g_aRewritersFor_Python),       &g_aRewritersFor_Python[0],       "*.py" },
-    { RT_ELEMENTS(g_aRewritersFor_ScmSettings),  &g_aRewritersFor_ScmSettings[0],  "*.scm-settings" },
+    SCM_CFG_ENTRY(g_aRewritersFor_Makefile_kup, false, "Makefile.kup" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_Makefile_kmk, false, "Makefile.kmk|Config.kmk" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_C_and_CPP,    false, "*.c|*.cpp|*.C|*.CPP|*.cxx|*.cc|*.m|*.mm" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_H_and_HPP,    false, "*.h|*.hpp" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_RC,           false, "*.rc" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_ASM,          false, "*.asm|*.mac" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_DEF,          false, "*.def" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_ShellScripts, false, "*.sh|configure" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_BatchFiles,   false, "*.bat|*.cmd|*.btm" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_BasicScripts, false, "*.vbs|*.vb" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_SedScripts,   false, "*.sed" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_Python,       false, "*.py" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_ScmSettings,  false, "*.scm-settings" ),
+    SCM_CFG_ENTRY(g_aRewritersFor_Images,       true,  "*.png|*.bmp|*.jpg" ),
 };
 
@@ -1402,5 +1410,5 @@
         return rc;
     }
-    if (ScmStreamIsText(&Stream1))
+    if (ScmStreamIsText(&Stream1) || pCfg->fBinary)
     {
         ScmVerboseBanner(pState, 3);
@@ -1461,5 +1469,5 @@
                              * If rewritten, write it back to disk.
                              */
-                            if (fModified)
+                            if (fModified && !pCfg->fBinary)
                             {
                                 if (!g_fDryRun)
@@ -1481,4 +1489,6 @@
                                 g_cFilesModified++;
                             }
+                            else if (fModified)
+                                rc = RTMsgErrorRc(VERR_INTERNAL_ERROR, "Rewriters modified binary file! Impossible!");
 
                             /*
Index: trunk/src/bldprogs/scm.h
===================================================================
--- trunk/src/bldprogs/scm.h	(revision 69259)
+++ trunk/src/bldprogs/scm.h	(revision 69261)
@@ -192,4 +192,7 @@
 FNSCMREWRITER rewrite_AdjustTrailingLines;
 FNSCMREWRITER rewrite_SvnNoExecutable;
+FNSCMREWRITER rewrite_SvnNoKeyword;
+FNSCMREWRITER rewrite_SvnNoEolStyle;
+FNSCMREWRITER rewrite_SvnBinary;
 FNSCMREWRITER rewrite_SvnKeywords;
 FNSCMREWRITER rewrite_Copyright_CstyleComment;
@@ -220,4 +223,6 @@
     /** Pointer to an array of rewriters. */
     PFNSCMREWRITER const  *papfnRewriter;
+    /** Set if the entry handles binaries.  */
+    bool            fBinary;
     /** File pattern (simple).  */
     const char     *pszFilePattern;
Index: trunk/src/bldprogs/scmrw.cpp
===================================================================
--- trunk/src/bldprogs/scmrw.cpp	(revision 69259)
+++ trunk/src/bldprogs/scmrw.cpp	(revision 69261)
@@ -723,5 +723,5 @@
 
 /**
- * Make sure there is no svn:executable keyword on the current file.
+ * Make sure there is no svn:executable property on the current file.
  *
  * @returns false - the state carries these kinds of changes.
@@ -746,4 +746,107 @@
             ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
     }
+    return false;
+}
+
+/**
+ * Make sure there is no svn:keywords property on the current file.
+ *
+ * @returns false - the state carries these kinds of changes.
+ * @param   pState              The rewriter state.
+ * @param   pIn                 The input stream.
+ * @param   pOut                The output stream.
+ * @param   pSettings           The settings.
+ */
+bool rewrite_SvnNoKeywords(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    RT_NOREF2(pIn, pOut);
+    if (   !pSettings->fSetSvnExecutable
+        || !ScmSvnIsInWorkingCopy(pState))
+        return false;
+
+    int rc = ScmSvnQueryProperty(pState, "svn:keywords", NULL);
+    if (RT_SUCCESS(rc))
+    {
+        ScmVerbose(pState, 2, " * removing svn:keywords\n");
+        rc = ScmSvnDelProperty(pState, "svn:keywords");
+        if (RT_FAILURE(rc))
+            ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
+    }
+    return false;
+}
+
+/**
+ * Make sure there is no svn:eol-style property on the current file.
+ *
+ * @returns false - the state carries these kinds of changes.
+ * @param   pState              The rewriter state.
+ * @param   pIn                 The input stream.
+ * @param   pOut                The output stream.
+ * @param   pSettings           The settings.
+ */
+bool rewrite_SvnNoEolStyle(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    RT_NOREF2(pIn, pOut);
+    if (   !pSettings->fSetSvnExecutable
+        || !ScmSvnIsInWorkingCopy(pState))
+        return false;
+
+    int rc = ScmSvnQueryProperty(pState, "svn:eol-style", NULL);
+    if (RT_SUCCESS(rc))
+    {
+        ScmVerbose(pState, 2, " * removing svn:eol-style\n");
+        rc = ScmSvnDelProperty(pState, "svn:eol-style");
+        if (RT_FAILURE(rc))
+            ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
+    }
+    return false;
+}
+
+/**
+ * Makes sure the svn properties are appropriate for a binary.
+ *
+ * @returns false - the state carries these kinds of changes.
+ * @param   pState              The rewriter state.
+ * @param   pIn                 The input stream.
+ * @param   pOut                The output stream.
+ * @param   pSettings           The settings.
+ */
+bool rewrite_SvnBinary(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    RT_NOREF2(pIn, pOut);
+    if (   !pSettings->fSetSvnExecutable
+        || !ScmSvnIsInWorkingCopy(pState))
+        return false;
+
+    /* remove svn:eol-style and svn:keywords */
+    static const char * const s_apszRemove[] = { "svn:eol-style", "svn:keywords" };
+    for (uint32_t i = 0; i < RT_ELEMENTS(s_apszRemove); i++)
+    {
+        char *pszValue;
+        int rc = ScmSvnQueryProperty(pState, s_apszRemove[i], &pszValue);
+        if (RT_SUCCESS(rc))
+        {
+            ScmVerbose(pState, 2, " * removing %s=%s\n", s_apszRemove[i], pszValue);
+            RTStrFree(pszValue);
+            rc = ScmSvnDelProperty(pState, s_apszRemove[i]);
+            if (RT_FAILURE(rc))
+                ScmError(pState, rc, "ScmSvnSetProperty(,%s): %Rrc\n", s_apszRemove[i], rc);
+        }
+        else if (rc != VERR_NOT_FOUND)
+            ScmError(pState, rc, "ScmSvnQueryProperty: %Rrc\n", rc);
+    }
+
+    /* Make sure there is a svn:mime-type set. */
+    int rc = ScmSvnQueryProperty(pState, "svn:mime-type", NULL);
+    if (rc == VERR_NOT_FOUND)
+    {
+        ScmVerbose(pState, 2, " * settings svn:mime-type\n");
+        rc = ScmSvnSetProperty(pState, "svn:mime-type", "application/octet-stream");
+        if (RT_FAILURE(rc))
+            ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
+    }
+    else if (RT_FAILURE(rc))
+        ScmError(pState, rc, "ScmSvnQueryProperty: %Rrc\n", rc);
+
     return false;
 }
@@ -800,5 +903,4 @@
     return false;
 }
-
 
 /**
