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