summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@theqtcompany.com>2016-07-18 10:49:23 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2016-07-18 15:17:39 +0000
commitf9934043034266ec73326147c685f7d8cc9129ba (patch)
tree7d4415927f47587894b8c8c7c8526ae79b85637c
parentef8a372bf586a79509ca20e0c8cc966fcd103c4e (diff)
Update to newer FPDF upstream version
This required extending the gyp2pri "parser" to add dependencies recursively and to have really primitive condition handling for targets. Change-Id: Icd343ec2be492c0cf4cfd013bf2d4594fe7ba5c3 Reviewed-by: Tobias Koenig <tobias.koenig@kdab.com>
-rw-r--r--.gitignore6
-rw-r--r--src/3rdparty/gyp2pri.py93
m---------src/3rdparty/pdfium0
-rw-r--r--src/lib/lib.pro7
-rw-r--r--src/pdf/jsbridge.cpp40
-rw-r--r--src/pdf/pdf.pro2
-rw-r--r--src/pdf/qpdfdocument.cpp2
-rw-r--r--src/pdf/qpdfdocument_p.h6
8 files changed, 86 insertions, 70 deletions
diff --git a/.gitignore b/.gitignore
index 6ee91f2..661b124 100644
--- a/.gitignore
+++ b/.gitignore
@@ -275,3 +275,9 @@ src/qml/udis86_itab.c
src/qml/udis86_itab.h
src/lib/pdfium.pri
+src/lib/agg.pri
+src/lib/freetype.pri
+src/lib/lcms2.pri
+src/lib/libjpeg.pri
+src/lib/libopenjpeg.pri
+src/lib/zlib.pri
diff --git a/src/3rdparty/gyp2pri.py b/src/3rdparty/gyp2pri.py
index 7eedb4d..ef9860f 100644
--- a/src/3rdparty/gyp2pri.py
+++ b/src/3rdparty/gyp2pri.py
@@ -1,8 +1,9 @@
-import sys, ast, os
+import sys, ast, os, argparse
class Gyp(object):
- def __init__(self, fileName):
+ def __init__(self, fileName, gypVariables):
self.fileName = fileName
+ self.gypVariables = gypVariables
with open(fileName, "r") as f:
self.variables = ast.literal_eval(f.read())
@@ -10,6 +11,16 @@ class Gyp(object):
for t in self.variables["targets"]:
if t["target_name"] == name:
return t;
+
+ for condition in self.variables["conditions"] or []:
+ check = condition[0]
+ vars = condition[1]
+ try:
+ if eval(check, None, self.gypVariables):
+ for t in vars["targets"] or []:
+ if t["target_name"] == name:
+ return t;
+ except: pass
return None
def target_defaults(self):
@@ -61,6 +72,7 @@ class ProFileSection(object):
self.config.append(cfg)
def addInclude(self, path):
+ path = path.replace("<(DEPTH)", "")
self.includes.append("$$PWD/" + path)
def generate(self):
@@ -102,42 +114,67 @@ class ProFile(ProFileSection):
result += "\n}\n"
return result
-gyp = Gyp(sys.argv[1])
+def addDependencies(gyp, proFile, gypTarget, variables):
+ for dep in gypTarget.get("dependencies") or []:
+ target = None
+ baseDir = None
+ for key, value in variables.iteritems():
+ name = "<(" + key + ")"
+ replacement = value
+ dep = dep.replace(name, replacement)
+ if ".gyp:" in dep:
+ targetFileName = dep[:dep.index(":")]
+ fileName = os.path.dirname(gyp.fileName) + "/" + targetFileName
+ subDep = dep[dep.index(":") + 1:]
+ target = Gyp(fileName, variables).target(subDep)
+ baseDir = os.path.relpath(os.path.dirname(fileName), os.path.dirname(gyp.fileName))
+ else:
+ target = gyp.target(dep)
+ if not target:
+ return
+ if target["target_name"] == "javascript":
+ continue
+ if target["target_name"] == "jsapi":
+ continue
+ pro.addSources(target["sources"], baseDir)
+
+ if "conditions" in target:
+ for condition in target["conditions"]:
+ if condition[0] == "OS==\"win\"":
+ scope = ProFileSection("win32")
+ scope.addSources(condition[1]["sources"])
+ pro.addScope(scope)
+
+ addDependencies(gyp, proFile, target, variables)
+
+optionParser = argparse.ArgumentParser()
+optionParser.add_argument("--gyp-var", action="append")
+optionParser.add_argument("input")
+optionParser.add_argument("mainTarget")
+optionParser.add_argument("output")
+config = optionParser.parse_args()
+
+variables = {}
+for var in config.gyp_var or []:
+ key, value = var.split("=")
+ variables[key] = value
+
+gyp = Gyp(config.input, variables)
-mainTarget = gyp.target(sys.argv[2])
+mainTarget = gyp.target(config.mainTarget)
pro = ProFile()
+print(mainTarget)
pro.addSources(mainTarget["sources"])
-for dep in mainTarget["dependencies"]:
- target = None
- baseDir = None
- if ".gyp:" in dep:
- fileName = os.path.dirname(gyp.fileName) + "/" + dep[:dep.index(":")]
- subDep = dep[dep.index(":") + 1:]
- target = Gyp(fileName).target(subDep)
- baseDir = os.path.relpath(os.path.dirname(fileName), os.path.dirname(gyp.fileName))
- else:
- target = gyp.target(dep)
- if target["target_name"] == "javascript":
- continue
- if target["target_name"] == "jsapi":
- continue
- pro.addSources(target["sources"], baseDir)
-
- if "conditions" in target:
- for condition in target["conditions"]:
- if condition[0] == "OS==\"win\"":
- scope = ProFileSection("win32")
- scope.addSources(condition[1]["sources"])
- pro.addScope(scope)
+addDependencies(gyp, pro, mainTarget, variables)
target_defaults = gyp.target_defaults()
pro.addDefines(target_defaults["defines"])
if "include_dirs" in target_defaults:
for path in target_defaults["include_dirs"]:
- pro.addInclude(os.path.relpath(os.path.dirname(gyp.fileName) + "/" + path, os.path.dirname(sys.argv[3])))
+ pro.addInclude(os.path.relpath(os.path.dirname(gyp.fileName) + "/" + path, os.path.dirname(config.output)))
-with open(sys.argv[3], "w") as f:
+with open(config.output, "w") as f:
f.write(pro.generate())
diff --git a/src/3rdparty/pdfium b/src/3rdparty/pdfium
-Subproject aa7b4ede03764a5701a477b601720a32c88d8e4
+Subproject 8d5315004400be520bd988c1789e3b0a800fb10
diff --git a/src/lib/lib.pro b/src/lib/lib.pro
index 355077c..ca04bb3 100644
--- a/src/lib/lib.pro
+++ b/src/lib/lib.pro
@@ -9,10 +9,15 @@ load(qt_helper_lib)
unix:!mac: CONFIG -= debug_and_release
VPATH += ../3rdparty/pdfium
+VPATH += ../3rdparty/pdfium/third_party
-system(python ../3rdparty/gyp2pri.py ../3rdparty/pdfium/pdfium.gyp pdfium $$OUT_PWD/pdfium.pri)
+system(python ../3rdparty/gyp2pri.py --gyp-var libjpeg_gyp_path=third_party/third_party.gyp --gyp-var pdf_use_skia=0 ../3rdparty/pdfium/pdfium.gyp pdfium $$OUT_PWD/pdfium.pri)
+system(python ../3rdparty/gyp2pri.py ../3rdparty/pdfium/third_party/third_party.gyp fx_freetype $$OUT_PWD/freetype.pri)
include($$OUT_PWD/pdfium.pri)
+DEFINES += FT2_BUILD_LIBRARY
+include($$OUT_PWD/freetype.pri)
+
win32: LIBS_PRIVATE += -ladvapi32 -lgdi32 -luser32
mac: LIBS_PRIVATE += -framework AppKit -framework CoreFoundation
diff --git a/src/pdf/jsbridge.cpp b/src/pdf/jsbridge.cpp
index 3959c3e..a0a8386 100644
--- a/src/pdf/jsbridge.cpp
+++ b/src/pdf/jsbridge.cpp
@@ -2,41 +2,7 @@
#include <qglobal.h>
#include "fsdk_mgr.h"
-#include "javascript/IJavaScript.h"
+#include "fpdfsdk/javascript/ijs_context.h"
+#include "fpdfsdk/javascript/ijs_runtime.h"
+#include "fpdfsdk/javascript/JS_Runtime_Stub.cpp"
-CJS_RuntimeFactory::~CJS_RuntimeFactory()
-{
-}
-
-IFXJS_Runtime* CJS_RuntimeFactory::NewJSRuntime(CPDFDoc_Environment* pApp)
-{
- Q_UNUSED(pApp);
- return 0;
-}
-
-void CJS_RuntimeFactory::DeleteJSRuntime(IFXJS_Runtime* pRuntime)
-{
- Q_UNUSED(pRuntime);
-}
-
-void CJS_RuntimeFactory::AddRef()
-{
- m_nRef++;
-}
-
-void CJS_RuntimeFactory::Release()
-{
- if (--m_nRef) {
- // ### Shutdown
- }
-}
-
-CJS_GlobalData* CJS_RuntimeFactory::NewGlobalData(CPDFDoc_Environment* pApp)
-{
- Q_UNUSED(pApp);
- return 0;
-}
-
-void CJS_RuntimeFactory::ReleaseGlobalData()
-{
-}
diff --git a/src/pdf/pdf.pro b/src/pdf/pdf.pro
index 811a946..67504ec 100644
--- a/src/pdf/pdf.pro
+++ b/src/pdf/pdf.pro
@@ -4,6 +4,8 @@ QT_PRIVATE += network
TEMPLATE = lib
CONFIG += c++11
INCLUDEPATH += ../3rdparty/pdfium/fpdfsdk/include
+INCLUDEPATH += ../3rdparty/pdfium
+INCLUDEPATH += ../3rdparty/pdfium/third_party/freetype/include
load(qt_module)
LIBS_PRIVATE += -L$$MODULE_BASE_OUTDIR/lib -lqtpdfium$$qtPlatformTargetSuffix()
diff --git a/src/pdf/qpdfdocument.cpp b/src/pdf/qpdfdocument.cpp
index b48bbda..eade98a 100644
--- a/src/pdf/qpdfdocument.cpp
+++ b/src/pdf/qpdfdocument.cpp
@@ -193,7 +193,7 @@ void QPdfDocumentPrivate::checkComplete()
emit q->documentLoadFinished();
}
-bool QPdfDocumentPrivate::fpdf_IsDataAvail(_FX_FILEAVAIL *pThis, size_t offset, size_t size)
+FPDF_BOOL QPdfDocumentPrivate::fpdf_IsDataAvail(_FX_FILEAVAIL *pThis, size_t offset, size_t size)
{
QPdfDocumentPrivate *d = static_cast<QPdfDocumentPrivate*>(pThis);
return offset + size <= static_cast<quint64>(d->device->size());
diff --git a/src/pdf/qpdfdocument_p.h b/src/pdf/qpdfdocument_p.h
index 7850c65..0a60afb 100644
--- a/src/pdf/qpdfdocument_p.h
+++ b/src/pdf/qpdfdocument_p.h
@@ -1,8 +1,8 @@
#ifndef QPDFDOCUMENT_P_H
#define QPDFDOCUMENT_P_H
-#include "fpdfview.h"
-#include "fpdf_dataavail.h"
+#include "public/fpdfview.h"
+#include "public/fpdf_dataavail.h"
#include "qpdfdocument.h"
#include <QPointer>
@@ -43,7 +43,7 @@ public:
void tryLoadDocument();
void checkComplete();
- static bool fpdf_IsDataAvail(struct _FX_FILEAVAIL* pThis, size_t offset, size_t size);
+ static FPDF_BOOL fpdf_IsDataAvail(struct _FX_FILEAVAIL* pThis, size_t offset, size_t size);
static int fpdf_GetBlock(void* param, unsigned long position, unsigned char* pBuf, unsigned long size);
static void fpdf_AddSegment(struct _FX_DOWNLOADHINTS* pThis, size_t offset, size_t size);
void updateLastError();