#!/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')