xref: /aosp_15_r20/external/pdfium/update_pdfium.py (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker#!/usr/bin/python
2*3ac0a46fSAndroid Build Coastguard Worker
3*3ac0a46fSAndroid Build Coastguard Workerimport urllib2
4*3ac0a46fSAndroid Build Coastguard Workerimport os
5*3ac0a46fSAndroid Build Coastguard Workerimport sys
6*3ac0a46fSAndroid Build Coastguard Workerfrom subprocess import call
7*3ac0a46fSAndroid Build Coastguard Worker
8*3ac0a46fSAndroid Build Coastguard WorkerCHROMIUM_VERSION_TRACKING_URL = "https://omahaproxy.appspot.com/all"
9*3ac0a46fSAndroid Build Coastguard WorkerCHROMIUM_BUILD_TYPE = "stable"
10*3ac0a46fSAndroid Build Coastguard WorkerCHROMIUM_OS = "android"
11*3ac0a46fSAndroid Build Coastguard Worker
12*3ac0a46fSAndroid Build Coastguard WorkerCHROMIUM_SOURCE_URL = "https://chromium.googlesource.com/chromium/src/+/refs/tags"
13*3ac0a46fSAndroid Build Coastguard WorkerCHROMIUM_DEPS_FILE = "DEPS"
14*3ac0a46fSAndroid Build Coastguard Worker
15*3ac0a46fSAndroid Build Coastguard WorkerPDFIUM_GIT_REPO = "https://pdfium.googlesource.com/pdfium.git"
16*3ac0a46fSAndroid Build Coastguard Worker
17*3ac0a46fSAndroid Build Coastguard WorkerMAKE_FILES = ["Android.bp",
18*3ac0a46fSAndroid Build Coastguard Worker              "constants/Android.bp",
19*3ac0a46fSAndroid Build Coastguard Worker              "core/fdrm/Android.bp",
20*3ac0a46fSAndroid Build Coastguard Worker              "core/fpdfapi/cmaps/Android.bp",
21*3ac0a46fSAndroid Build Coastguard Worker              "core/fpdfapi/edit/Android.bp",
22*3ac0a46fSAndroid Build Coastguard Worker              "core/fpdfapi/font/Android.bp",
23*3ac0a46fSAndroid Build Coastguard Worker              "core/fpdfapi/page/Android.bp",
24*3ac0a46fSAndroid Build Coastguard Worker              "core/fpdfapi/parser/Android.bp",
25*3ac0a46fSAndroid Build Coastguard Worker              "core/fpdfapi/render/Android.bp",
26*3ac0a46fSAndroid Build Coastguard Worker              "core/fpdfdoc/Android.bp",
27*3ac0a46fSAndroid Build Coastguard Worker              "core/fpdftext/Android.bp",
28*3ac0a46fSAndroid Build Coastguard Worker              "core/fxcodec/Android.bp",
29*3ac0a46fSAndroid Build Coastguard Worker              "core/fxcrt/Android.bp",
30*3ac0a46fSAndroid Build Coastguard Worker              "core/fxge/Android.bp",
31*3ac0a46fSAndroid Build Coastguard Worker              "fpdfsdk/Android.bp",
32*3ac0a46fSAndroid Build Coastguard Worker              "fpdfsdk/formfiller/Android.bp",
33*3ac0a46fSAndroid Build Coastguard Worker              "fpdfsdk/pwl/Android.bp",
34*3ac0a46fSAndroid Build Coastguard Worker              "fxjs/Android.bp",
35*3ac0a46fSAndroid Build Coastguard Worker              "third_party/Android.bp"]
36*3ac0a46fSAndroid Build Coastguard Worker
37*3ac0a46fSAndroid Build Coastguard WorkerOWNERS_FILES = ["OWNERS", "docs/OWNERS", "third_party/base/numerics/OWNERS"]
38*3ac0a46fSAndroid Build Coastguard Worker
39*3ac0a46fSAndroid Build Coastguard WorkerCOPY_FILES = [os.path.basename(__file__), ".git", "MODULE_LICENSE_BSD"] + MAKE_FILES
40*3ac0a46fSAndroid Build Coastguard WorkerREMOVE_FILES = [os.path.basename(__file__), ".git", ".gitignore"] + OWNERS_FILES
41*3ac0a46fSAndroid Build Coastguard Worker
42*3ac0a46fSAndroid Build Coastguard Workerdef getStableChromiumVersion():
43*3ac0a46fSAndroid Build Coastguard Worker   """ :return the latest chromium version """
44*3ac0a46fSAndroid Build Coastguard Worker
45*3ac0a46fSAndroid Build Coastguard Worker   chromiumVersions = urllib2.urlopen(CHROMIUM_VERSION_TRACKING_URL)
46*3ac0a46fSAndroid Build Coastguard Worker
47*3ac0a46fSAndroid Build Coastguard Worker   for chromiumVersionStr in chromiumVersions.read().split("\n"):
48*3ac0a46fSAndroid Build Coastguard Worker       chromiumVersion = chromiumVersionStr.split(",")
49*3ac0a46fSAndroid Build Coastguard Worker
50*3ac0a46fSAndroid Build Coastguard Worker       if chromiumVersion[0] == CHROMIUM_OS and chromiumVersion[1] == CHROMIUM_BUILD_TYPE:
51*3ac0a46fSAndroid Build Coastguard Worker           return chromiumVersion[2]
52*3ac0a46fSAndroid Build Coastguard Worker
53*3ac0a46fSAndroid Build Coastguard Worker   raise Exception("Could not find latest %s chromium version for %s at %s"
54*3ac0a46fSAndroid Build Coastguard Worker                   % (CHROMIUM_BUILD_TYPE, CHROMIUM_OS, CHROMIUM_VERSION_TRACKING_URL))
55*3ac0a46fSAndroid Build Coastguard Worker
56*3ac0a46fSAndroid Build Coastguard Worker
57*3ac0a46fSAndroid Build Coastguard Workerdef getPdfiumRevision():
58*3ac0a46fSAndroid Build Coastguard Worker    """ :return the pdfium version used by the latest chromium version """
59*3ac0a46fSAndroid Build Coastguard Worker
60*3ac0a46fSAndroid Build Coastguard Worker    try:
61*3ac0a46fSAndroid Build Coastguard Worker        deps = urllib2.urlopen("%s/%s/%s" % (CHROMIUM_SOURCE_URL, getStableChromiumVersion(),
62*3ac0a46fSAndroid Build Coastguard Worker                                             CHROMIUM_DEPS_FILE))
63*3ac0a46fSAndroid Build Coastguard Worker
64*3ac0a46fSAndroid Build Coastguard Worker        # I seem to not be able to get the raw file, hence grep the html file
65*3ac0a46fSAndroid Build Coastguard Worker        return deps.read().split("pdfium_revision&")[1].split("'")[1]
66*3ac0a46fSAndroid Build Coastguard Worker    except Exception as e:
67*3ac0a46fSAndroid Build Coastguard Worker        raise Exception("Could not extract pdfium revision from %s/%s/%s: %s"
68*3ac0a46fSAndroid Build Coastguard Worker                       % (CHROMIUM_SOURCE_URL, getStableChromiumVersion(), CHROMIUM_DEPS_FILE, e))
69*3ac0a46fSAndroid Build Coastguard Worker
70*3ac0a46fSAndroid Build Coastguard Worker
71*3ac0a46fSAndroid Build Coastguard Workerdef downloadPdfium(newDir, rev):
72*3ac0a46fSAndroid Build Coastguard Worker    """ Download the newest version of pdfium to the new directory
73*3ac0a46fSAndroid Build Coastguard Worker
74*3ac0a46fSAndroid Build Coastguard Worker    :param newDir: The new files
75*3ac0a46fSAndroid Build Coastguard Worker    :param rev: The revision to change to
76*3ac0a46fSAndroid Build Coastguard Worker    """
77*3ac0a46fSAndroid Build Coastguard Worker
78*3ac0a46fSAndroid Build Coastguard Worker    call(["git", "clone", PDFIUM_GIT_REPO, newDir])
79*3ac0a46fSAndroid Build Coastguard Worker    os.chdir(newDir)
80*3ac0a46fSAndroid Build Coastguard Worker    call(["git", "reset", "--hard", rev])
81*3ac0a46fSAndroid Build Coastguard Worker
82*3ac0a46fSAndroid Build Coastguard Worker
83*3ac0a46fSAndroid Build Coastguard Workerdef removeFiles(newDir):
84*3ac0a46fSAndroid Build Coastguard Worker    """ Remove files that should not be checked in from the original download
85*3ac0a46fSAndroid Build Coastguard Worker
86*3ac0a46fSAndroid Build Coastguard Worker    :param newDir: The new files
87*3ac0a46fSAndroid Build Coastguard Worker    """
88*3ac0a46fSAndroid Build Coastguard Worker
89*3ac0a46fSAndroid Build Coastguard Worker    for fileName in REMOVE_FILES:
90*3ac0a46fSAndroid Build Coastguard Worker        call(["rm", "-rf", os.path.join(newDir, fileName)])
91*3ac0a46fSAndroid Build Coastguard Worker
92*3ac0a46fSAndroid Build Coastguard Worker
93*3ac0a46fSAndroid Build Coastguard Workerdef copyFiles(currentDir, newDir):
94*3ac0a46fSAndroid Build Coastguard Worker    """ Copy files needed to make pdfium work with android
95*3ac0a46fSAndroid Build Coastguard Worker
96*3ac0a46fSAndroid Build Coastguard Worker    :param currentDir: The current files
97*3ac0a46fSAndroid Build Coastguard Worker    :param newDir: The new files
98*3ac0a46fSAndroid Build Coastguard Worker    """
99*3ac0a46fSAndroid Build Coastguard Worker
100*3ac0a46fSAndroid Build Coastguard Worker    for fileName in COPY_FILES:
101*3ac0a46fSAndroid Build Coastguard Worker        call(["cp", "-r", os.path.join(currentDir, fileName), os.path.join(newDir, fileName)])
102*3ac0a46fSAndroid Build Coastguard Worker
103*3ac0a46fSAndroid Build Coastguard Worker
104*3ac0a46fSAndroid Build Coastguard Workerdef exchange(currentDir, newDir, oldDir):
105*3ac0a46fSAndroid Build Coastguard Worker    """ Update current to new and save current in old.
106*3ac0a46fSAndroid Build Coastguard Worker
107*3ac0a46fSAndroid Build Coastguard Worker    :param currentDir: The current files
108*3ac0a46fSAndroid Build Coastguard Worker    :param newDir: The new files
109*3ac0a46fSAndroid Build Coastguard Worker    :param oldDir: The old files
110*3ac0a46fSAndroid Build Coastguard Worker    """
111*3ac0a46fSAndroid Build Coastguard Worker
112*3ac0a46fSAndroid Build Coastguard Worker    call(["mv", currentDir, oldDir])
113*3ac0a46fSAndroid Build Coastguard Worker    call(["mv", newDir, currentDir])
114*3ac0a46fSAndroid Build Coastguard Worker
115*3ac0a46fSAndroid Build Coastguard Worker
116*3ac0a46fSAndroid Build Coastguard Workerif __name__ == "__main__":
117*3ac0a46fSAndroid Build Coastguard Worker   rev = getPdfiumRevision()
118*3ac0a46fSAndroid Build Coastguard Worker   targetDir = os.path.dirname(os.path.realpath(__file__))
119*3ac0a46fSAndroid Build Coastguard Worker   newDir = targetDir + ".new"
120*3ac0a46fSAndroid Build Coastguard Worker   oldDir = targetDir + ".old"
121*3ac0a46fSAndroid Build Coastguard Worker
122*3ac0a46fSAndroid Build Coastguard Worker   try:
123*3ac0a46fSAndroid Build Coastguard Worker       downloadPdfium(newDir, rev)
124*3ac0a46fSAndroid Build Coastguard Worker       removeFiles(newDir)
125*3ac0a46fSAndroid Build Coastguard Worker       copyFiles(targetDir, newDir)
126*3ac0a46fSAndroid Build Coastguard Worker       exchange(targetDir, newDir, oldDir)
127*3ac0a46fSAndroid Build Coastguard Worker       print("Updated pdfium to " + rev + " (Chrome " + getStableChromiumVersion() + "). Old files "
128*3ac0a46fSAndroid Build Coastguard Worker             "are in " + oldDir + ". Please verify if build files need to be updated.")
129*3ac0a46fSAndroid Build Coastguard Worker
130*3ac0a46fSAndroid Build Coastguard Worker       sys.exit(0)
131*3ac0a46fSAndroid Build Coastguard Worker   except:
132*3ac0a46fSAndroid Build Coastguard Worker       call(["rm", "-rf", newDir])
133*3ac0a46fSAndroid Build Coastguard Worker       sys.exit(1)
134*3ac0a46fSAndroid Build Coastguard Worker
135