Update error generation

Adapt the `generate_errors.pl` to handle `PSA_WANT` macros and
update to handle SHA3 macros.

Signed-off-by: Gabor Mezei <gabor.mezei@arm.com>
diff --git a/scripts/generate_errors.pl b/scripts/generate_errors.pl
index aae1fc8..499307b 100755
--- a/scripts/generate_errors.pl
+++ b/scripts/generate_errors.pl
@@ -96,8 +96,8 @@
     }
 }
 
-my $ll_old_define = "";
-my $hl_old_define = "";
+my @ll_old_define = ("", "", "");
+my @hl_old_define = ("", "", "");
 
 my $ll_code_check = "";
 my $hl_code_check = "";
@@ -129,6 +129,14 @@
     $define_name = "SSL_TLS" if ($define_name eq "SSL");
     $define_name = "PEM_PARSE,PEM_WRITE" if ($define_name eq "PEM");
     $define_name = "PKCS7" if ($define_name eq "PKCS7");
+    $define_name = "ALG_SHA3_224,ALG_SHA3_256,ALG_SHA3_384,ALG_SHA3_512"
+                   if ($define_name eq "SHA3");
+
+    my $define_prefix = "MBEDTLS_";
+    $define_prefix = "PSA_WANT_" if ($module_name eq "SHA3");
+
+    my $define_suffix = "_C";
+    $define_suffix = "" if ($module_name eq "SHA3");
 
     my $include_name = $module_name;
     $include_name =~ tr/A-Z/a-z/;
@@ -154,26 +162,30 @@
     if ($found_ll)
     {
         $code_check = \$ll_code_check;
-        $old_define = \$ll_old_define;
+        $old_define = \@ll_old_define;
         $white_space = '        ';
     }
     else
     {
         $code_check = \$hl_code_check;
-        $old_define = \$hl_old_define;
+        $old_define = \@hl_old_define;
         $white_space = '        ';
     }
 
-    if ($define_name ne ${$old_define})
+    my $old_define_name   = \${$old_define}[0];
+    my $old_define_prefix = \${$old_define}[1];
+    my $old_define_suffix = \${$old_define}[2];
+
+    if ($define_name ne ${$old_define_name})
     {
-        if (${$old_define} ne "")
+        if (${$old_define_name} ne "")
         {
             ${$code_check} .= "#endif /* ";
             $first = 0;
-            foreach my $dep (split(/,/, ${$old_define}))
+            foreach my $dep (split(/,/, ${$old_define_name}))
             {
-                ${$code_check} .= " || " if ($first++);
-                ${$code_check} .= "MBEDTLS_${dep}_C";
+                ${$code_check} .= " || \n          " if ($first++);
+                ${$code_check} .= "${$old_define_prefix}${dep}${$old_define_suffix}";
             }
             ${$code_check} .= " */\n\n";
         }
@@ -183,42 +195,44 @@
         $first = 0;
         foreach my $dep (split(/,/, ${define_name}))
         {
-            ${$code_check} .= " || " if ($first);
-            $headers       .= " || " if ($first++);
+            ${$code_check} .= " || \\\n    " if ($first);
+            $headers       .= " || \\\n    " if ($first++);
 
-            ${$code_check} .= "defined(MBEDTLS_${dep}_C)";
-            $headers       .= "defined(MBEDTLS_${dep}_C)" if
-                                                    ($include_name ne "");
+            ${$code_check} .= "defined(${define_prefix}${dep}${define_suffix})";
+            $headers       .= "defined(${define_prefix}${dep}${define_suffix})"
+                              if ($include_name ne "");
         }
         ${$code_check} .= "\n";
         $headers .= "\n#include \"mbedtls/${include_name}.h\"\n".
                     "#endif\n\n" if ($include_name ne "");
-        ${$old_define} = $define_name;
+        ${$old_define_name}   = $define_name;
+        ${$old_define_prefix} = $define_prefix;
+        ${$old_define_suffix} = $define_suffix;
     }
 
     ${$code_check} .= "${white_space}case -($error_name):\n".
                       "${white_space}    return( \"$module_name - $description\" );\n"
 };
 
-if ($ll_old_define ne "")
+if ($ll_old_define[0] ne "")
 {
     $ll_code_check .= "#endif /* ";
     my $first = 0;
-    foreach my $dep (split(/,/, $ll_old_define))
+    foreach my $dep (split(/,/, $ll_old_define[0]))
     {
-        $ll_code_check .= " || " if ($first++);
-        $ll_code_check .= "MBEDTLS_${dep}_C";
+        $ll_code_check .= " || \n          " if ($first++);
+        $ll_code_check .= "${ll_old_define[1]}${dep}${ll_old_define[2]}";
     }
     $ll_code_check .= " */\n";
 }
-if ($hl_old_define ne "")
+if ($hl_old_define[0] ne "")
 {
     $hl_code_check .= "#endif /* ";
     my $first = 0;
-    foreach my $dep (split(/,/, $hl_old_define))
+    foreach my $dep (split(/,/, $hl_old_define[0]))
     {
-        $hl_code_check .= " || " if ($first++);
-        $hl_code_check .= "MBEDTLS_${dep}_C";
+        $hl_code_check .= " || \n          " if ($first++);
+        $hl_code_check .= "${hl_old_define[1]}${dep}${hl_old_define[2]}";
     }
     $hl_code_check .= " */\n";
 }