Move config file modification flag handling to the Config class

Signed-off-by: Gabor Mezei <gabor.mezei@arm.com>
diff --git a/scripts/config.py b/scripts/config.py
index 17dac4f..7b815e4 100755
--- a/scripts/config.py
+++ b/scripts/config.py
@@ -101,21 +101,29 @@
 
         If name is not known, raise KeyError.
         """
-        self.settings[name].value = value
+        setting = self.settings[name]
+        if setting.configfile and setting != value:
+            setting.configfile.modified = True
 
-    def set(self, name, value=None):
+        setting.value = value
+
+    def set(self, name, value=None, configfile=None):
         """Set name to the given value and make it active.
 
         If value is None and name is already known, don't change its value.
-        If value is None and name is not known, set its value to the empty
-        string.
+        If value is None and name is not known, set its value.
         """
         if name in self.settings:
+            setting = self.settings[name]
+            if setting.configfile and (setting.value != value or not setting.active):
+                setting.configfile.modified = True
             if value is not None:
-                self.settings[name].value = value
-            self.settings[name].active = True
+                setting.value = value
+            setting.active = True
         else:
-            self.settings[name] = Setting(True, name, value=value)
+            self.settings[name] = Setting(True, name, value=value, configfile=configfile)
+            if configfile:
+                self.settings[name].configfile.modified = True
 
     def unset(self, name):
         """Make name unset (inactive).
@@ -589,6 +597,7 @@
                               for (active, name, value, section)
                               in self.configfile.parse_file()})
 
+    #pylint: disable=arguments-differ
     def set(self, name, value=None):
         """Set name to the given value and make it active."""
 
@@ -626,6 +635,7 @@
                               for (active, name, value, section)
                               in self.configfile.parse_file()})
 
+    #pylint: disable=arguments-differ
     def set(self, name, value='1'):
         """Set name to the given value and make it active."""
 
@@ -684,10 +694,7 @@
         else:
             return self.mbedtls_configfile
 
-    def __setitem__(self, name, value):
-        super().__setitem__(name, value)
-        self.settings[name].configfile.modified = True
-
+    #pylint: disable=arguments-differ
     def set(self, name, value=None):
         """Set name to the given value and make it active."""
 
@@ -703,15 +710,10 @@
             if not value:
                 value = '1'
 
-        if name in self.settings:
-            setting = self.settings[name]
-            if not setting.active or (value is not None and setting.value != value):
-                configfile.modified = True
-        else:
+        if name not in self.settings:
             configfile.templates.append((name, '', '#define ' + name + ' '))
-            configfile.modified = True
 
-        super().set(name, value)
+        super().set(name, value, configfile)
 
     def write(self, mbedtls_file=None, crypto_file=None):
         """Write the whole configuration to the file it was read from.