|
@@ -0,0 +1,99 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+# -*- coding: UTF-8 -*-
|
|
|
+
|
|
|
+# Copyright (c) 2023 The ungoogled-chromium Authors. All rights reserved.
|
|
|
+# Use of this source code is governed by a BSD-style license that can be
|
|
|
+# found in the LICENSE file.
|
|
|
+"""
|
|
|
+Generate standalone script that performs the domain substitution.
|
|
|
+"""
|
|
|
+
|
|
|
+from pathlib import Path
|
|
|
+import argparse
|
|
|
+import re
|
|
|
+
|
|
|
+
|
|
|
+def make_domain_substitution_script(regex_path, files_path, output_path):
|
|
|
+ """
|
|
|
+ Generate a standalone shell script (which uses Perl) that performs
|
|
|
+ domain substitution on the appropriate files.
|
|
|
+
|
|
|
+ regex_path is a pathlib.Path to domain_regex.list
|
|
|
+ files_path is a pathlib.Path to domain_substitution.list
|
|
|
+ output_path is a pathlib.Path to the output file.
|
|
|
+
|
|
|
+ Raises FileNotFoundError if the regex or file lists do not exist.
|
|
|
+ Raises FileExistsError if the output file already exists.
|
|
|
+ """
|
|
|
+ if not regex_path.exists():
|
|
|
+ raise FileNotFoundError(regex_path)
|
|
|
+ if not files_path.exists():
|
|
|
+ raise FileNotFoundError(files_path)
|
|
|
+ if output_path.exists():
|
|
|
+ raise FileExistsError(output_path)
|
|
|
+
|
|
|
+ regex_list = tuple(filter(len, regex_path.read_text().splitlines()))
|
|
|
+ files_list = tuple(filter(len, files_path.read_text().splitlines()))
|
|
|
+
|
|
|
+ # Convert the Python-style regexes into a Perl s/// op
|
|
|
+ perl_replace_list = ['s#' + re.sub(r'\\g<(\d+)>', r'${\1}', x) + '#g' for x in regex_list]
|
|
|
+
|
|
|
+ files_list_str = '\n'.join(files_list)
|
|
|
+ perl_replace_list_str = '\n'.join([f' {x};' for x in perl_replace_list])
|
|
|
+
|
|
|
+ with open(output_path, 'w') as out:
|
|
|
+ out.write("""#!/bin/sh -e
|
|
|
+#
|
|
|
+# This script performs domain substitution on the Chromium source files.
|
|
|
+#
|
|
|
+# Generated by make_domsub_script.py, part of the ungoogled-chromium project:
|
|
|
+# https://github.com/ungoogled-software/ungoogled-chromium.git
|
|
|
+#
|
|
|
+
|
|
|
+# Check that we are inside the Chromium source tree
|
|
|
+test -f build/config/compiler/BUILD.gn
|
|
|
+
|
|
|
+# These filenames may contain spaces and/or other unusual characters
|
|
|
+print_file_list() {
|
|
|
+ cat <<'__END__'
|
|
|
+%s
|
|
|
+__END__
|
|
|
+}
|
|
|
+
|
|
|
+echo "Creating backup archive ..."
|
|
|
+
|
|
|
+backup=domain-substitution.orig.tar
|
|
|
+print_file_list | tar cf $backup --verbatim-files-from --files-from=-
|
|
|
+
|
|
|
+echo "Applying ungoogled-chromium domain substitution to %d files ..."
|
|
|
+
|
|
|
+print_file_list | xargs -d '\\n' perl -0777 -C0 -pwi -e '
|
|
|
+%s
|
|
|
+'
|
|
|
+
|
|
|
+# end
|
|
|
+""" % (files_list_str, len(files_list), perl_replace_list_str))
|
|
|
+
|
|
|
+
|
|
|
+def _callback(args):
|
|
|
+ """CLI Callback"""
|
|
|
+ make_domain_substitution_script(args.regex, args.files, args.output)
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ """CLI Entrypoint"""
|
|
|
+ parser = argparse.ArgumentParser()
|
|
|
+ parser.set_defaults(callback=_callback)
|
|
|
+
|
|
|
+ parser.add_argument('-r', '--regex', type=Path, required=True, help='Path to domain_regex.list')
|
|
|
+ parser.add_argument(
|
|
|
+ '-f', '--files', type=Path, required=True, help='Path to domain_substitution.list')
|
|
|
+ parser.add_argument(
|
|
|
+ '-o', '--output', type=Path, required=True, help='Path to script file to create')
|
|
|
+
|
|
|
+ args = parser.parse_args()
|
|
|
+ args.callback(args)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main()
|