summaryrefslogtreecommitdiffstats
path: root/security/generate_mapfile.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /security/generate_mapfile.py
parentInitial commit. (diff)
downloadfirefox-esr-upstream.tar.xz
firefox-esr-upstream.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--security/generate_mapfile.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/security/generate_mapfile.py b/security/generate_mapfile.py
new file mode 100644
index 0000000000..244f499f74
--- /dev/null
+++ b/security/generate_mapfile.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# This script processes NSS .def files according to the rules defined in
+# a comment at the top of each one. The files are used to define the
+# exports from NSS shared libraries, with -DEFFILE on Windows, a linker
+# script on Linux, or with -exported_symbols_list on OS X.
+#
+# The NSS build system processes them using a series of sed replacements,
+# but the Mozilla build system is already running a Python script to generate
+# the file so it's simpler to just do the replacement in Python.
+#
+# One difference between the NSS build system and Mozilla's is that
+# Mozilla's supports building on Linux for Windows using MinGW. MinGW
+# expects all lines containing ;+ removed and all ;- tokens removed.
+
+import buildconfig
+
+
+def main(output, input):
+ is_darwin = buildconfig.substs["OS_ARCH"] == "Darwin"
+ is_mingw = "WINNT" == buildconfig.substs["OS_ARCH"] and buildconfig.substs.get(
+ "GCC_USE_GNU_LD"
+ )
+
+ with open(input, "r", encoding="utf-8") as f:
+ for line in f:
+ line = line.rstrip()
+ # On everything except MinGW, remove all lines containing ';-'
+ if not is_mingw and ";-" in line:
+ continue
+ # On OS X, remove all lines containing ';+'
+ if is_darwin and ";+" in line:
+ continue
+ # Remove the string ' DATA '.
+ line = line.replace(" DATA ", "")
+ # Remove the string ';+'
+ if not is_mingw:
+ line = line.replace(";+", "")
+ # Remove the string ';;'
+ line = line.replace(";;", "")
+ # If a ';' is present, remove everything after it,
+ # and on OS X, remove it as well.
+ i = line.find(";")
+ if i != -1:
+ if is_darwin or is_mingw:
+ line = line[:i]
+ else:
+ line = line[: i + 1]
+ # On OS X, symbols get an underscore in front.
+ if line and is_darwin:
+ output.write("_")
+ output.write(line)
+ output.write("\n")