Index: /trunk/src/bldprogs/scm.cpp
===================================================================
--- /trunk/src/bldprogs/scm.cpp	(revision 69431)
+++ /trunk/src/bldprogs/scm.cpp	(revision 69432)
@@ -542,5 +542,4 @@
     SCM_CFG_ENTRY(g_aRewritersFor_Makefile_kup,     false, "Makefile.kup" ),
     SCM_CFG_ENTRY(g_aRewritersFor_Makefile_kmk,     false, "*.kmk" ),
-    SCM_CFG_ENTRY(g_aRewritersFor_OtherMakefiles,   false, "Makefile" ),
     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" ),
@@ -569,4 +568,6 @@
     SCM_CFG_ENTRY(g_aRewritersFor_QtUiFiles,        false, "*.ui" ),
     SCM_CFG_ENTRY(g_aRewritersFor_SifFiles,         false, "*.sif" ),
+    /* Should be last. */
+    SCM_CFG_ENTRY(g_aRewritersFor_OtherMakefiles,   false, "Makefile|makefile|GNUmakefile|SMakefile" ),
     /* Must be be last: */
     SCM_CFG_ENTRY(g_aRewritersFor_FileLists,        false, "files_*" ),
@@ -1232,4 +1233,63 @@
                 continue;
 
+            /* Deal with escaped newlines. */
+            size_t  iFirstLine  = ~(size_t)0;
+            char   *pszFreeLine = NULL;
+            if (   pchLine[cchLine - 1] == '\\'
+                && (   cchLine < 2
+                    || pchLine[cchLine - 2] != '\\') )
+            {
+                iFirstLine = ScmStreamTellLine(&Stream);
+
+                cchLine--;
+                while (cchLine > 0 && RT_C_IS_SPACE(pchLine[cchLine - 1]))
+                    cchLine--;
+
+                size_t cchTotal = cchLine;
+                pszFreeLine = RTStrDupN(pchLine, cchLine);
+                if (pszFreeLine)
+                {
+                    /* Append following lines. */
+                    while ((pchLine = ScmStreamGetLine(&Stream, &cchLine, &enmEol)) != NULL)
+                    {
+                        while (cchLine > 0 && RT_C_IS_SPACE(*pchLine))
+                            pchLine++, cchLine--;
+
+                        bool const fDone = cchLine == 0
+                                        || pchLine[cchLine - 1] != '\\'
+                                        || (cchLine >= 2 && pchLine[cchLine - 2] == '\\');
+                        if (!fDone)
+                        {
+                            cchLine--;
+                            while (cchLine > 0 && RT_C_IS_SPACE(pchLine[cchLine - 1]))
+                                cchLine--;
+                        }
+
+                        rc = RTStrRealloc(&pszFreeLine, cchTotal + 1 + cchLine + 1);
+                        if (RT_FAILURE(rc))
+                            break;
+                        pszFreeLine[cchTotal++] = ' ';
+                        memcpy(&pszFreeLine[cchTotal], pchLine, cchLine);
+                        cchTotal += cchLine;
+                        pszFreeLine[cchTotal] = '\0';
+
+                        if (fDone)
+                            break;
+                    }
+                }
+                else
+                    rc = VERR_NO_STR_MEMORY;
+
+                if (RT_FAILURE(rc))
+                {
+                    RTStrFree(pszFreeLine);
+                    rc = RTMsgErrorRc(VERR_NO_MEMORY, "%s: Ran out of memory deal with escaped newlines");
+                    break;
+                }
+
+                pchLine = pszFreeLine;
+                cchLine = cchTotal;
+            }
+
             /* What kind of line is it? */
             const char *pchColon = (const char *)memchr(pchLine, ':', cchLine);
@@ -1238,7 +1298,10 @@
             else
                 rc = scmSettingsBaseParseStringN(&pSettings->Base, pchLine, cchLine, szAbsPath, cchDir);
+            if (pszFreeLine)
+                RTStrFree(pszFreeLine);
             if (RT_FAILURE(rc))
             {
-                RTMsgError("%s:%d: %Rrc\n", pszFilename, ScmStreamTellLine(&Stream), rc);
+                RTMsgError("%s:%d: %Rrc\n",
+                           pszFilename, iFirstLine == ~(size_t)0 ? ScmStreamTellLine(&Stream) : iFirstLine, rc);
                 break;
             }
