Skip to content

Commit

Permalink
reinstate wkhtmltopdf; odoo still uses it and removing it is complicated
Browse files Browse the repository at this point in the history
  • Loading branch information
sthen committed Dec 14, 2024
1 parent 57ca21c commit 22abc11
Show file tree
Hide file tree
Showing 26 changed files with 877 additions and 0 deletions.
1 change: 1 addition & 0 deletions textproc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,7 @@
SUBDIR += vislcg3
SUBDIR += wdg-sgml-lib
SUBDIR += wdiff
SUBDIR += wkhtmltopdf
SUBDIR += xerces-c
SUBDIR += xlsx2csv
SUBDIR += xml2rfc
Expand Down
128 changes: 128 additions & 0 deletions textproc/wkhtmltopdf/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
ONLY_FOR_ARCHS = amd64 i386
USE_WXNEEDED = Yes
USE_NOBTCFI = Yes

DPB_PROPERTIES = parallel nojunk

COMMENT = convert HTML to PDF using Webkit

DIST_TUPLE = github wkhtmltopdf wkhtmltopdf 024b2b2bb459dd904d15b911d04c6df4ff2c9031 . \
github wkhtmltopdf qt aa2e3129f8ef05dfa72c4b183feb8b7e1927ac8a qt
PKGNAME = wkhtmltopdf-0.12.6.1

SHARED_LIBS = wkhtmltox 2.0 # 0.12

CATEGORIES = textproc

HOMEPAGE = http://wkhtmltopdf.org/

# LGPLv3
PERMIT_PACKAGE = Yes

WANTLIB += X11 Xext Xrender c fontconfig freetype iconv jpeg m
WANTLIB += png pthread z ${COMPILER_LIBCXX}

WANTLIB += icui18n # dlopen()d via QLibrary

COMPILER = base-clang ports-gcc

LIB_DEPENDS = converters/libiconv \
graphics/png \
graphics/jpeg \
textproc/icu4c

USE_GMAKE = Yes
MAKE_FLAGS = LIBwkhtmltox_VERSION=${LIBwkhtmltox_VERSION}
MAKE_ENV += WRKBUILD=${WRKBUILD} \
PORTS_CC="${CC}" PORTS_CXX="${CXX}"
CONFIGURE_ENV = PORTS_CC="${CC}" PORTS_CXX="${CXX}"
FAKE_FLAGS = INSTALL_ROOT=${WRKINST}${TRUEPREFIX}

SEPARATE_BUILD = Yes
NO_TEST = Yes

do-configure:
mkdir -p ${WRKBUILD}/qt
# qt config options taken from scripts/build.py
cd ${WRKBUILD}/qt && \
env -i ${CONFIGURE_ENV} ${WRKSRC}/qt/configure \
--prefix=${WRKBUILD}/qt \
-opensource \
-confirm-license \
-fast \
-release \
-static \
-graphicssystem raster \
-webkit \
-exceptions \
-xmlpatterns \
-system-zlib \
-system-libpng \
-system-libjpeg \
-no-libmng \
-no-libtiff \
-no-accessibility \
-no-stl \
-no-qt3support \
-no-phonon \
-no-phonon-backend \
-no-opengl \
-no-declarative \
-no-script \
-no-scripttools \
-no-sql-ibase \
-no-sql-mysql \
-no-sql-odbc \
-no-sql-psql \
-no-sql-sqlite \
-no-sql-sqlite2 \
-no-mmx \
-no-3dnow \
-no-sse \
-no-sse2 \
-no-multimedia \
-nomake demos \
-nomake docs \
-nomake examples \
-nomake tools \
-nomake tests \
-nomake translations \
-xrender \
-largefile \
-iconv \
-openssl \
-no-rpath \
-no-dbus \
-no-nis \
-no-cups \
-no-pch \
-no-gtkstyle \
-no-nas-sound \
-no-sm \
-no-xshape \
-no-xinerama \
-no-xcursor \
-no-xfixes \
-no-xrandr \
-no-mitshm \
-no-xinput \
-no-xkb \
-no-glib \
-no-gstreamer \
-D ENABLE_VIDEO=0 \
-no-openvg \
-no-xsync \
-no-audio-backend \
-no-sse3 \
-no-ssse3 \
-no-sse4.1 \
-no-sse4.2 \
-no-avx \
-no-neon
cd ${WRKBUILD} && env -i ${CONFIGURE_ENV} qt/bin/qmake \
${WRKSRC}/wkhtmltopdf.pro

pre-build:
cd ${WRKBUILD}/qt && env -i ${MAKE_ENV} ${MAKE_PROGRAM} ${MAKE_FLAGS}

.include <bsd.port.mk>
4 changes: 4 additions & 0 deletions textproc/wkhtmltopdf/distinfo
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
SHA256 (wkhtmltopdf-qt-aa2e3129f8ef05dfa72c4b183feb8b7e1927ac8a.tar.gz) = AezJHYvbOlPD44iMfgiupsDqOKaS9mbhbCDxsypnUb4=
SHA256 (wkhtmltopdf-wkhtmltopdf-024b2b2bb459dd904d15b911d04c6df4ff2c9031.tar.gz) = vDM0SI+FmqeWlRVN39hWj0ct8I0gNQ0GQWeBBl08VzQ=
SIZE (wkhtmltopdf-qt-aa2e3129f8ef05dfa72c4b183feb8b7e1927ac8a.tar.gz) = 173057171
SIZE (wkhtmltopdf-wkhtmltopdf-024b2b2bb459dd904d15b911d04c6df4ff2c9031.tar.gz) = 524596
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- qt/config.tests/unix/gnu-libiconv/gnu-libiconv.cpp.orig Wed Dec 9 20:22:20 2015
+++ qt/config.tests/unix/gnu-libiconv/gnu-libiconv.cpp Wed Dec 9 20:22:28 2015
@@ -48,7 +48,7 @@ int main(int, char **)
{
iconv_t x = iconv_open("", "");

- const char *inp;
+ char *inp;
char *outp;
size_t inbytes, outbytes;
iconv(x, &inp, &inbytes, &outp, &outbytes);
21 changes: 21 additions & 0 deletions textproc/wkhtmltopdf/patches/patch-qt_configure
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Index: qt/configure
--- qt/configure.orig
+++ qt/configure
@@ -3427,7 +3427,7 @@ else
CFG_FRAMEWORK=no
fi

-QMAKE_CONF_COMPILER=`getXQMakeConf QMAKE_CXX`
+QMAKE_CONF_COMPILER="${PORTS_CXX}"
TEST_COMPILER="$CXX"

[ -z "$TEST_COMPILER" ] && TEST_COMPILER=$QMAKE_CONF_COMPILER
@@ -7754,6 +7754,8 @@ case "$XPLATFORM" in
*-g++*)
# Check gcc's version
case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in
+ [1-9][0-9].*)
+ ;;
12*|11*|10*|9*|8*|7*|6*|5*|4*|3.4*)
;;
3.3*)
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
Index: qt/mkspecs/openbsd-g++/qmake.conf
--- qt/mkspecs/openbsd-g++/qmake.conf.orig
+++ qt/mkspecs/openbsd-g++/qmake.conf
@@ -8,7 +8,7 @@ TEMPLATE = app
CONFIG += qt warn_on release link_prl gdb_dwarf_index
QT += core gui

-QMAKE_CC = gcc
+QMAKE_CC = ${PORTS_CC}
QMAKE_LEX = flex
QMAKE_LEXFLAGS =
QMAKE_YACC = yacc
@@ -24,12 +24,12 @@ QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
QMAKE_CFLAGS_THREAD = -pthread

-QMAKE_CXX = g++
-QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
+QMAKE_CXX = ${PORTS_CXX}
+QMAKE_CXXFLAGS = $$QMAKE_CFLAGS --std=gnu++98
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE --std=gnu++98
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_STATIC_LIB
@@ -45,10 +45,10 @@ QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
QMAKE_INCDIR_OPENGL = /usr/X11R6/include
QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib

-QMAKE_LINK = g++
-QMAKE_LINK_SHLIB = g++
-QMAKE_LINK_C = gcc
-QMAKE_LINK_C_SHLIB = gcc
+QMAKE_LINK = $$QMAKE_CXX
+QMAKE_LINK_SHLIB = $$QMAKE_CXX
+QMAKE_LINK_C = $$QMAKE_CC
+QMAKE_LINK_C_SHLIB = $$QMAKE_CC
QMAKE_LINK_SHLIB_CMD = $$QMAKE_LINK_SHLIB $(LFLAGS) \
$$QMAKE_CFLAGS_SHLIB $$QMAKE_LFLAGS \
-o $(TARGETD) $(OBJECTS) $(OBJMOC) $(LIBS)
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
--- qt/qmake/generators/unix/unixmake2.cpp.orig Thu Jul 2 13:46:37 2015
+++ qt/qmake/generators/unix/unixmake2.cpp Sun Dec 13 11:47:43 2015
@@ -247,10 +247,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
} else if(!project->isEmpty("QMAKE_SYMBIAN_SHLIB")) {
t << "TARGETD = " << escapeFilePath(var("TARGET")) << endl;
} else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
- t << "TARGETD = " << escapeFilePath(var("TARGET_x.y.z")) << endl;
- t << "TARGET0 = " << escapeFilePath(var("TARGET_")) << endl;
- t << "TARGET1 = " << escapeFilePath(var("TARGET_x")) << endl;
- t << "TARGET2 = " << escapeFilePath(var("TARGET_x.y")) << endl;
+ t << "LIB" << var("OBSD_TARGET_NAME") << "_VERSION = " << var("OBSD_TARGET_VERSION") << endl;
+ t << "TARGETD = " << var("OBSD_TARGET_x.y") << endl;
} else {
t << "TARGETD = " << escapeFilePath(var("TARGET_x")) << endl;
t << "TARGET0 = " << escapeFilePath(var("TARGET_")) << endl;
@@ -572,31 +570,22 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << endl << endl;
} else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
t << "\n\t"
- << "-$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)" << "\n\t"
<< var("QMAKE_LINK_SHLIB_CMD") << "\n\t";
- t << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET0)") << "\n\t"
- << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET1)") << "\n\t"
- << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET2)");
if(!destdir.isEmpty())
t << "\n\t"
<< "-$(DEL_FILE) " << destdir << "$(TARGET)\n\t"
- << "-$(DEL_FILE) " << destdir << "$(TARGET0)\n\t"
- << "-$(DEL_FILE) " << destdir << "$(TARGET1)\n\t"
- << "-$(DEL_FILE) " << destdir << "$(TARGET2)\n\t"
- << "-$(MOVE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) " << destdir;
+ << "-$(MOVE) $(TARGET) " << destdir;
if(!project->isEmpty("QMAKE_POST_LINK"))
t << "\n\t" << var("QMAKE_POST_LINK");
t << endl << endl;
} else {
t << "\n\t"
- << "-$(DEL_FILE) $(TARGET) $(TARGET0)" << "\n\t"
+ << "-$(DEL_FILE) $(TARGET)" << "\n\t"
<< var("QMAKE_LINK_SHLIB_CMD") << "\n\t";
- t << varGlue("QMAKE_LN_SHLIB",""," "," $(TARGET) $(TARGET0)");
if(!destdir.isEmpty())
t << "\n\t"
<< "-$(DEL_FILE) " << destdir << "$(TARGET)\n\t"
- << "-$(DEL_FILE) " << destdir << "$(TARGET0)\n\t"
- << "-$(MOVE) $(TARGET) $(TARGET0) " << destdir;
+ << "-$(MOVE) $(TARGET) " << destdir;
if(!project->isEmpty("QMAKE_POST_LINK"))
t << "\n\t" << var("QMAKE_POST_LINK");
t << endl << endl;
@@ -1019,6 +1008,13 @@ void UnixMakefileGenerator::init2()
project->values("VER_MAJ").append(l[0]);
project->values("VER_MIN").append(l[1]);
project->values("VER_PAT").append(l[2]);
+ project->values("OBSD_TARGET_NAME").append(project->first("TARGET"));
+ project->values("OBSD_TARGET_VERSION").append(project->first("VER_MAJ") + "." + project->first("VER_MIN"));
+ // for (portable) Makefiles
+ project->values("OBSD_TARGET_x.y").append("lib" + project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB") + ".$(LIB" + project->first("TARGET") + "_VERSION)");
+ // for libtool files, to be updated by SUBST_CMD in OpenBSD ports
+ project->values("OBSD_SUBST_x.y").append("lib" + project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB") + ".${LIB" + project->first("TARGET") + "_VERSION}");
+
if(project->isEmpty("QMAKE_FRAMEWORK_VERSION"))
project->values("QMAKE_FRAMEWORK_VERSION").append(project->values("VER_MAJ").first());

@@ -1159,7 +1155,7 @@ void UnixMakefileGenerator::init2()
project->first("VER_MIN") + "." +
project->first("VER_PAT"));
}
- project->values("TARGET") = project->values("TARGET_x.y.z");
+ project->values("TARGET") = project->values("OBSD_TARGET_x.y");
}
if(project->isEmpty("QMAKE_LN_SHLIB"))
project->values("QMAKE_LN_SHLIB").append("ln -s");
@@ -1304,18 +1300,31 @@ UnixMakefileGenerator::writeLibtoolFile()
<< QT_VERSION_STR << ") on: " << QDateTime::currentDateTime().toString();
t << "\n";

- t << "# The name that we can dlopen(3).\n"
- << "dlname='" << var(project->isActiveConfig("plugin") ? "TARGET" : "TARGET_x")
- << "'\n\n";
+ t << "# The name that we can dlopen(3).\ndlname='";
+ if(project->isActiveConfig("plugin")) {
+ t << var("TARGET");
+ } else {
+#ifdef __OpenBSD__
+ t << var("OBSD_SUBST_x.y");
+#else
+ t << var("TARGET_x");
+#endif
+ }
+ t << "'\n\n";

t << "# Names of this library.\n";
t << "library_names='";
if(project->isActiveConfig("plugin")) {
t << var("TARGET");
} else {
- if (project->isEmpty("QMAKE_HPUX_SHLIB"))
- t << var("TARGET_x.y.z") << " ";
- t << var("TARGET_x") << " " << var("TARGET_");
+ if (project->isEmpty("QMAKE_HPUX_SHLIB")) {
+#ifdef __OpenBSD__
+ t << var("OBSD_SUBST_x.y") << " ";
+#else
+ t << var("TARGET_x.y.z") << " " << var("TARGET_x") << " ";
+#endif
+ }
+ t << var("TARGET_");
}
t << "'\n\n";

@@ -1330,7 +1339,7 @@ UnixMakefileGenerator::writeLibtoolFile()
libs << "QMAKE_LIBS"; //obvious one
t << "dependency_libs='";
for(QStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it)
- t << project->values((*it)).join(" ") << " ";
+ t << project->values((*it)).join(" ").replace('(', '{').replace(')', '}') << " ";
t << "'\n\n";

t << "# Version information for " << lname << "\n";
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- qt/qmake/generators/unix/unixmake.cpp.orig Mon Dec 14 19:17:46 2015
+++ qt/qmake/generators/unix/unixmake.cpp Mon Dec 14 19:17:54 2015
@@ -757,7 +757,7 @@ UnixMakefileGenerator::defaultInstall(const QString &t
if(project->isEmpty("QMAKE_CYGWIN_SHLIB")) {
if(!project->isActiveConfig("staticlib") && !project->isActiveConfig("plugin")) {
if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
- links << "$(TARGET0)" << "$(TARGET1)" << "$(TARGET2)";
+ //links << "$(TARGET0)" << "$(TARGET1)" << "$(TARGET2)";
} else {
links << "$(TARGET0)";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
--- qt/src/3rdparty/webkit/Source/JavaScriptCore/heap/MachineStackMarker.cpp.orig Wed Dec 9 20:20:38 2015
+++ qt/src/3rdparty/webkit/Source/JavaScriptCore/heap/MachineStackMarker.cpp Wed Dec 9 20:21:52 2015
@@ -380,8 +380,10 @@ static size_t getPlatformThreadRegisters(const Platfor
#elif USE(PTHREADS)
pthread_attr_init(&regs);
#if HAVE(PTHREAD_NP_H) || OS(NETBSD)
+#ifndef __OpenBSD__
// e.g. on FreeBSD 5.4, [email protected]
pthread_attr_get_np(platformThread, &regs);
+#endif
#else
// FIXME: this function is non-portable; other POSIX systems may have different np alternatives
pthread_getattr_np(platformThread, &regs);
@@ -432,7 +434,14 @@ static inline void* otherThreadStackPointer(const Plat
#elif USE(PTHREADS)
void* stackBase = 0;
size_t stackSize = 0;
+#if defined(__OpenBSD__)
+ stack_t ss;
+ int rc = pthread_stackseg_np(pthread_self(), &ss);
+ stackBase = (void*)((size_t) ss.ss_sp - ss.ss_size);
+ stackSize = ss.ss_size;
+#else
int rc = pthread_attr_getstack(&regs, &stackBase, &stackSize);
+#endif
(void)rc; // FIXME: Deal with error code somehow? Seems fatal.
ASSERT(stackBase);
return static_cast<char*>(stackBase) + stackSize;
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Index: qt/src/3rdparty/webkit/Source/JavaScriptCore/jit/JITStubs.cpp
--- qt/src/3rdparty/webkit/Source/JavaScriptCore/jit/JITStubs.cpp.orig
+++ qt/src/3rdparty/webkit/Source/JavaScriptCore/jit/JITStubs.cpp
@@ -79,7 +79,7 @@ namespace JSC {
#define THUMB_FUNC_PARAM(name)
#endif

-#if (OS(LINUX) || OS(FREEBSD)) && CPU(X86_64)
+#if (OS(LINUX) || OS(FREEBSD) || OS(OPENBSD)) && (CPU(X86) || CPU(X86_64))
#define SYMBOL_STRING_RELOCATION(name) #name "@plt"
#elif OS(DARWIN) || (CPU(X86_64) && COMPILER(MINGW) && !GCC_VERSION_AT_LEAST(4, 5, 0))
#define SYMBOL_STRING_RELOCATION(name) "_" #name
Loading

0 comments on commit 22abc11

Please sign in to comment.