generate_mapfile.py (2290B)
1 #!/usr/bin/env python 2 3 # This Source Code Form is subject to the terms of the Mozilla Public 4 # License, v. 2.0. If a copy of the MPL was not distributed with this 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 6 7 # This script processes NSS .def files according to the rules defined in 8 # a comment at the top of each one. The files are used to define the 9 # exports from NSS shared libraries, with -DEFFILE on Windows, a linker 10 # script on Linux, or with -exported_symbols_list on OS X. 11 # 12 # The NSS build system processes them using a series of sed replacements, 13 # but the Mozilla build system is already running a Python script to generate 14 # the file so it's simpler to just do the replacement in Python. 15 # 16 # One difference between the NSS build system and Mozilla's is that 17 # Mozilla's supports building on Linux for Windows using MinGW. MinGW 18 # expects all lines containing ;+ removed and all ;- tokens removed. 19 20 import buildconfig 21 22 23 def main(output, input): 24 is_darwin = buildconfig.substs["OS_ARCH"] == "Darwin" 25 is_mingw = "WINNT" == buildconfig.substs["OS_ARCH"] and buildconfig.substs.get( 26 "GCC_USE_GNU_LD" 27 ) 28 29 with open(input, encoding="utf-8") as f: 30 for line in f: 31 line = line.rstrip() 32 # On everything except MinGW, remove all lines containing ';-' 33 if not is_mingw and ";-" in line: 34 continue 35 # On OS X, remove all lines containing ';+' 36 if is_darwin and ";+" in line: 37 continue 38 # Remove the string ' DATA '. 39 line = line.replace(" DATA ", "") 40 # Remove the string ';+' 41 if not is_mingw: 42 line = line.replace(";+", "") 43 # Remove the string ';;' 44 line = line.replace(";;", "") 45 # If a ';' is present, remove everything after it, 46 # and on OS X, remove it as well. 47 i = line.find(";") 48 if i != -1: 49 if is_darwin or is_mingw: 50 line = line[:i] 51 else: 52 line = line[: i + 1] 53 # On OS X, symbols get an underscore in front. 54 if line and is_darwin: 55 output.write("_") 56 output.write(line) 57 output.write("\n")