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