[poppler] 2 commits - CMakeLists.txt config.h.cmake configure.ac makefile.vc poppler/GlobalParams.cc poppler/GlobalParams.h poppler/GlobalParamsWin.cc

Albert Astals Cid aacid at kemper.freedesktop.org
Wed Jan 13 14:25:49 PST 2010


 CMakeLists.txt             |    8 ++++-
 config.h.cmake             |    6 ++++
 configure.ac               |   65 ++++++++++++++++++++++++++++++++++++++++++-
 makefile.vc                |    2 -
 poppler/GlobalParams.cc    |   67 ++++++++++++++++++++++++++++++++++++++++++---
 poppler/GlobalParams.h     |    7 ++--
 poppler/GlobalParamsWin.cc |    5 +++
 7 files changed, 151 insertions(+), 9 deletions(-)

New commits:
commit 350ff407e06a961f2a5b9d203cb8e78ce09313a0
Author: Hib Eris <hib at hiberis.nl>
Date:   Wed Jan 13 22:20:41 2010 +0000

    Make poppler (optionally) relocatable on Windows

diff --git a/configure.ac b/configure.ac
index b22f467..dae0a1e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -76,6 +76,32 @@ AC_ARG_ENABLE(fixedpoint,
 [  --enable-fixedpoint     use fixed point (instead of double precision) arithmetic in the Splash backend],
 AC_DEFINE(USE_FIXEDPOINT, [1], [Use fixed point arithmetic]))
 
+dnl Relocation support
+AC_ARG_ENABLE(relocatable,
+    AC_HELP_STRING([--disable-relocatable],
+                   [Hardcode the poppler library location (on Windows).]),
+    enable_relocatable=$enableval,
+    [if test x$os_win32 = xyes; then
+         # default to yes on native Windows.
+         enable_relocatable="yes"
+     else
+         # default to no everywhere else.
+         enable_relocatable="no"
+     fi
+    ]
+)
+
+if test x$enable_relocatable = xyes; then
+    if test x$os_win32 = xyes; then
+     AC_DEFINE([ENABLE_RELOCATABLE],
+               [1],[Do not hardcode the library location])
+    else
+        AC_MSG_ERROR(
+               [Invalid setting for relocatable, only supported on windows])
+
+    fi
+fi
+
 AC_DEFINE_DIR(POPPLER_DATADIR, "{datarootdir}/poppler", [Poppler data dir])
 
 dnl ##### Checks for header files.
diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc
index a91ecc1..493159d 100644
--- a/poppler/GlobalParams.cc
+++ b/poppler/GlobalParams.cc
@@ -45,6 +45,7 @@
 #endif
 #ifdef _WIN32
 #  include <shlobj.h>
+#  include <mbstring.h>
 #endif
 #include "goo/gmem.h"
 #include "goo/GooString.h"
@@ -141,6 +142,62 @@ DisplayFontParam::~DisplayFontParam() {
   }
 }
 
+#if ENABLE_RELOCATABLE && defined(_WIN32)
+
+/* search for data relative to where we are installed */
+
+static HMODULE hmodule;
+
+extern "C" {
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+	 DWORD     fdwReason,
+	 LPVOID    lpvReserved)
+{
+  switch (fdwReason)
+    {
+    case DLL_PROCESS_ATTACH:
+      hmodule = hinstDLL;
+      break;
+    }
+
+  return TRUE;
+}
+}
+
+static char *
+get_poppler_datadir (void)
+{
+  static char retval[_MAX_PATH];
+  static int beenhere = 0;
+
+  unsigned char *p;
+
+  if (beenhere)
+    return retval;
+
+  if (!GetModuleFileName (hmodule, (CHAR *) retval, sizeof(retval) - 20))
+    return POPPLER_DATADIR;
+
+  p = _mbsrchr ((const unsigned char *) retval, '\\');
+  *p = '\0';
+  p = _mbsrchr ((const unsigned char *) retval, '\\');
+  if (p) {
+    if (stricmp ((const char *) (p+1), "bin") == 0)
+      *p = '\0';
+  }
+  strcat (retval, "\\share\\poppler");
+
+  beenhere = 1;
+
+  return retval;
+}
+
+#undef POPPLER_DATADIR
+#define POPPLER_DATADIR get_poppler_datadir ()
+
+#endif
+
 #ifdef _WIN32
 
 //------------------------------------------------------------------------
commit 36b67b002db802bfad553720e2114b76b07bb614
Author: Hib Eris <hib at hiberis.nl>
Date:   Wed Jan 13 22:17:03 2010 +0000

    Make fontconfig optional with mingw compiler

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 61d5d8a..0cd32df 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,6 +30,13 @@ option(ENABLE_ZLIB "TODO" OFF)
 option(USE_EXCEPTIONS "Throw exceptions to deal with not enough memory and similar problems." OFF)
 option(USE_FIXEDPOINT "Use fixed point arithmetic in the Splash backend" OFF)
 option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF)
+if(MSVC)
+  option(WITH_FONTCONFIGURATION_WIN32 "Select win32 font configuration backend" ON)
+  option(WITH_FONTCONFIGURATION_FONTCONFIG "Select fontconfig font configuration backend" OFF)
+else(MSVC)
+  option(WITH_FONTCONFIGURATION_WIN32 "Select win32 font configuration backend" OFF)
+  option(WITH_FONTCONFIGURATION_FONTCONFIG "Select fontconfig font configuration backend" ON)
+endif(MSVC)
 
 set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
 
@@ -271,7 +278,6 @@ endif(PNG_FOUND)
 
 if(MSVC)
 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-set(poppler_SRCS ${poppler_SRCS} poppler/GlobalParamsWin.cc)
 add_library(poppler STATIC ${poppler_SRCS})
 else(MSVC)
 add_library(poppler SHARED ${poppler_SRCS})
diff --git a/config.h.cmake b/config.h.cmake
index 7150789..9527fd5 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -160,6 +160,12 @@
 /* Version number of package */
 #define VERSION "${POPPLER_VERSION}"
 
+/* Use fontconfig font configuration backend */
+#cmakedefine WITH_FONTCONFIGURATION_FONTCONFIG 1
+
+/* Use win32 font configuration backend */
+#cmakedefine WITH_FONTCONFIGURATION_WIN32 1
+
 /* Define to 1 if the X Window System is missing or not being used. */
 /* #undef X_DISPLAY_MISSING */
 
diff --git a/configure.ac b/configure.ac
index 29efd70..b22f467 100644
--- a/configure.ac
+++ b/configure.ac
@@ -47,6 +47,7 @@ case "$host_os" in
     create_shared_lib="-no-undefined"
   ;;
   mingw*)
+    os_win32=yes
     win32_libs="-lgdi32"
     create_shared_lib="-no-undefined"
     auto_import_flags="-Wl,--enable-auto-import"
@@ -239,7 +240,42 @@ fi
 AC_SUBST(FREETYPE_CFLAGS)
 AC_SUBST(FREETYPE_LIBS)
 
-PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.0.0)
+AC_MSG_CHECKING([which font configuration to use])
+AC_ARG_WITH([font_configuration],
+   [AS_HELP_STRING([--with-font-configuration=fontconfig|win32],
+                   [Select font configuration backend])],
+   [],
+   [if test x$os_win32 = xyes; then
+        # default to win32 on native Windows.
+        with_font_configuration=win32
+    else
+        # default to fontconig everywhere else.
+        with_font_configuration=fontconfig
+    fi
+   ]
+)
+AC_MSG_RESULT([$with_font_configuration])
+
+case $with_font_configuration in
+  win32)
+     AC_DEFINE([WITH_FONTCONFIGURATION_WIN32],
+               [1],[Use win32 font configuration backend])
+     # Set the minimum required Internet Explorer version to 5.0
+     CPPFLAGS="$CPPFLAGS -D_WIN32_IE=0x0500"
+     ;;
+  fontconfig)
+     AC_DEFINE([WITH_FONTCONFIGURATION_FONTCONFIG],
+               [1],[Use fontconfig font configuration backend])
+     PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.0.0)
+     ;;
+  *)
+     AC_MSG_ERROR(
+               [Invalid font configuration setting: $with_font_configuration])
+     ;;
+esac
+
+AM_CONDITIONAL(BUILD_WITH_WIN32_FONTCONFIGURATION,
+               test x$with_font_configuration = xwin32)
 
 AC_ARG_ENABLE(splash-output,
               AC_HELP_STRING([--disable-splash-output],
@@ -566,6 +602,7 @@ poppler-qt4.pc])
 
 echo ""
 echo "Building poppler with support for:"
+echo "  font configuration: $with_font_configuration"
 echo "  splash output:      $enable_splash_output"
 echo "  cairo output:       $enable_cairo_output"
 echo "  abiword output:     $enable_abiword_output"
diff --git a/makefile.vc b/makefile.vc
index 1cacd2f..9d43828 100644
--- a/makefile.vc
+++ b/makefile.vc
@@ -62,6 +62,7 @@ LIBS = $(LIBS) kernel32.lib advapi32.lib user32.lib gdi32.lib
 
 LDFLAGS = $(LDFLAGS) /nologo /DEBUG
 
+CFLAGS = $(CFLAGS) /D "WITH_FONTCONFIGURATION_WIN32=1"
 #CFLAGS = $(CFLAGS) /D "USE_FIXEDPOINT"
 
 !if "$(TARGET)"=="rel"
@@ -87,7 +88,6 @@ POPPLER_OBJS=$(O)\Annot.obj $(O)\Array.obj $(O)\BuiltinFont.obj $(O)\BuiltinFont
 	$(O)\Decrypt.obj $(O)\Dict.obj $(O)\Error.obj \
 	$(O)\FontEncodingTables.obj $(O)\FontInfo.obj $(O)\Form.obj $(O)\Function.obj \
 	$(O)\Gfx.obj $(O)\GfxFont.obj $(O)\GfxState.obj $(O)\GlobalParams.obj \
-	$(O)\GlobalParamsWin.obj \
 	$(O)\JArithmeticDecoder.obj $(O)\JBIG2Stream.obj $(O)\JPXStream.obj \
 	$(O)\Lexer.obj $(O)\Link.obj $(O)\NameToCharCode.obj $(O)\Object.obj \
 	$(O)\Outline.obj $(O)\OutputDev.obj $(O)\PDFDoc.obj $(O)\PDFDocEncoding.obj \
diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc
index 2813b98..a91ecc1 100644
--- a/poppler/GlobalParams.cc
+++ b/poppler/GlobalParams.cc
@@ -22,6 +22,7 @@
 // Copyright (C) 2009 Petr Gajdos <pgajdos at novell.com>
 // Copyright (C) 2009 William Bader <williambader at hotmail.com>
 // Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
+// Copyright (C) 2010 Hib Eris <hib at hiberis.nl>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -557,7 +558,7 @@ GlobalParams::GlobalParams(const char *customPopplerDataDir)
   UnicodeMap *map;
   int i;
 
-#ifndef _MSC_VER  
+#if WITH_FONTCONFIGURATION_FONTCONFIG
   FcInit();
   FCcfg = FcConfigGetCurrent();
 #endif
@@ -962,7 +963,7 @@ static GBool findModifier(const char *name, const char *modifier, const char **s
   }
 }
 
-#ifndef _MSC_VER
+#if WITH_FONTCONFIGURATION_FONTCONFIG
 static FcPattern *buildFcPattern(GfxFont *font)
 {
   int weight = -1,
@@ -1110,7 +1111,7 @@ static FcPattern *buildFcPattern(GfxFont *font)
 /* if you can't or don't want to use Fontconfig, you need to implement
    this function for your platform. For Windows, it's in GlobalParamsWin.cc
 */
-#ifndef _MSC_VER
+#if WITH_FONTCONFIGURATION_FONTCONFIG
 DisplayFontParam *GlobalParams::getDisplayFont(GfxFont *font) {
   DisplayFontParam *dfp;
   FcPattern *p=0;
@@ -1170,6 +1171,9 @@ fin:
   return dfp;
 }
 #endif
+#if WITH_FONTCONFIGURATION_WIN32
+#include "GlobalParamsWin.cc"
+#endif
 
 GBool GlobalParams::getPSExpandSmaller() {
   GBool f;
diff --git a/poppler/GlobalParams.h b/poppler/GlobalParams.h
index b422e0c..37539a6 100644
--- a/poppler/GlobalParams.h
+++ b/poppler/GlobalParams.h
@@ -21,6 +21,7 @@
 // Copyright (C) 2009 Jonathan Kew <jonathan_kew at sil.org>
 // Copyright (C) 2009 Petr Gajdos <pgajdos at novell.com>
 // Copyright (C) 2009 William Bader <williambader at hotmail.com>
+// Copyright (C) 2010 Hib Eris <hib at hiberis.nl>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -37,7 +38,7 @@
 #include <assert.h>
 #include "poppler-config.h"
 #include <stdio.h>
-#ifndef _MSC_VER
+#if WITH_FONTCONFIGURATION_FONTCONFIG
 #include <fontconfig/fontconfig.h>
 #endif
 #include "goo/gtypes.h"
@@ -169,7 +170,7 @@ public:
 
   void setBaseDir(char *dir);
 
-#ifdef _MSC_VER
+#if WITH_FONTCONFIGURATION_WIN32
   void setupBaseFonts(char *dir);
 #endif
 
@@ -352,7 +353,7 @@ private:
   UnicodeMapCache *unicodeMapCache;
   CMapCache *cMapCache;
   
-#ifndef _MSC_VER
+#if WITH_FONTCONFIGURATION_FONTCONFIG
   FcConfig *FCcfg;
 #endif
 
diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc
index 19ea546..2333ddb 100644
--- a/poppler/GlobalParamsWin.cc
+++ b/poppler/GlobalParamsWin.cc
@@ -1,5 +1,7 @@
 /* Written by Krzysztof Kowalczyk (http://blog.kowalczyk.info)
    but mostly based on xpdf code.
+   
+   // Copyright (C) 2010 Hib Eris <hib at hiberis.nl>
 
 TODO: instead of a fixed mapping defined in displayFontTab, it could
 scan the whole fonts directory, parse TTF files and build font
@@ -13,6 +15,9 @@ description for all fonts available in Windows. That's how MuPDF works.
 #endif
 
 #include <windows.h>
+#if !(_WIN32_IE >= 0x0500)
+#error "_WIN32_IE must be defined >= 0x0500 for SHGFP_TYPE_CURRENT from shlobj.h"
+#endif
 #include <shlobj.h>
 #include <string.h>
 #include <stdio.h>


More information about the poppler mailing list