54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
# Copyright 2022 The PDFium Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
"""Utilities for working with the PDFium tree's root directory."""
|
|
|
|
import os
|
|
import sys
|
|
|
|
|
|
class RootDirectoryFinder:
|
|
"""Finds the PDFium tree's root directories.
|
|
|
|
The implementation expects that either:
|
|
1. PDFium is a standalone checkout.
|
|
2. PDFium is part of another tree within a "third_party/pdfium" directory.
|
|
|
|
Attributes:
|
|
pdfium_root: The path to the root of the PDFium tree.
|
|
source_root: The path to the root of the source tree. May differ from
|
|
`pdfium_root` if PDFium is a third-party dependency in another tree.
|
|
"""
|
|
|
|
def __init__(self):
|
|
# Expect `self_dir` to be ".../testing/tools".
|
|
self_dir = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
self.pdfium_root = _remove_path_suffix(self_dir, ('testing', 'tools'))
|
|
if not self.pdfium_root:
|
|
raise Exception('Cannot find testing/tools within PDFium root directory')
|
|
|
|
# In a Chromium checkout, expect `self.pdfium_root` to be
|
|
# ".../third_party/pdfium".
|
|
self.source_root = _remove_path_suffix(self.pdfium_root,
|
|
('third_party', 'pdfium'))
|
|
if not self.source_root:
|
|
self.source_root = self.pdfium_root
|
|
|
|
|
|
def _remove_path_suffix(path, expected_suffix):
|
|
for expected_part in reversed(expected_suffix):
|
|
if os.path.basename(path) != expected_part:
|
|
return None
|
|
path = os.path.dirname(path)
|
|
return path
|
|
|
|
|
|
def add_source_directory_to_import_path(source_directory_path):
|
|
"""Adds a source root-relative directory to end of the import path."""
|
|
root_finder = RootDirectoryFinder()
|
|
path = os.path.realpath(
|
|
os.path.join(root_finder.source_root, source_directory_path))
|
|
if path not in sys.path:
|
|
sys.path.append(path)
|