Evince reuires a patch because of a change in api in poppler. Do you not have a patch for evince to build against poppler? It should be up on the denemo.org server if not.
On Feb 18, 2013 8:24 AM, "Richard Shann" <
address@hidden> wrote:
I have made progress hacking evince to not build the evince executable
(just hacking the Makefile.in files directly).
Now Denemo is linking to evince statically (with libpdfdocument
resolving the register_evince_backend()) but there seems to be no
poppler library to link to. What does poppler.mk build?
As it is Denemo fails to link now because
/home/rshann/mxe/usr/i686-pc-mingw32/lib/evince/3/backends/libpdfdocument.a(ev-poppler.o): In function `Z29pdf_document_images_get_imageP17_EvDocumentImagesP8_EvImage':
/home/rshann/mxe/tmp-evince/evince-2.32.0/backend/pdf/ev-poppler.cc:1368: undefined reference to `poppler_document_get_page'
Do you know what needs to be done with poppler to get this resolved?
Richard
On Mon, 2013-02-18 at 10:42 +0000, Richard Shann wrote:
> On Sun, 2013-02-17 at 13:51 -0600, Jeremiah Benham wrote:
> > For me it was in the usr/i686*/bin dir. I made a symbolic link into
> > usr/bin. This allowed me to proceed.
>
> Well, I haven't got that working, but I think I have discovered that the
> code modifications needed to link in the pdf backend statically are
> actually very small. Below is the entire ev-module.c file, in which
> there are just two small changes indicated by #if 0 #else #endif
> What these do is to skip the loading of the dll and instead expect the
> function register_evince_backend() to be statically linked (it is
> defined in backend/pdf/ev-poppler.cc).
>
> If I try to make evince with this version of ev-module.c it fails
> because it tries to build the executable evince (which we don't need).
> This is expected, since it will not have libpdfdocument.a on its link
> line.
>
> I tried to make it not build the executable, but I can't find the right
> way to adjust the Makefile stuff.
>
> I wonder if you could take this version of ev-module.c and substitute it
> in the libdocument directory and then adjust the make system so that it
> will build evince? (Either disabling the build of the executable, or
> adding backend/pdf/xxxx.o to the object files included in libevince.
> I am not really expecting that this will then be the job done - I
> imagine there may be a few wrinkles, but with a make system doing the
> right thing I am fairly confident we can build a static evince.
>
> Richard
> Below is ev-module.c cut and pasted, but I attach it as well as that is
> better for file transmission.
>
> /*
> * ev-module.c
> * This file is part of Evince
> *
> * Copyright (C) 2005 - Paolo Maggi
> *
> * This program is free software; you can redistribute it and/or modify
> * it under the terms of the GNU General Public License as published by
> * the Free Software Foundation; either version 2 of the License, or
> * (at your option) any later version.
> *
> * This program is distributed in the hope that it will be useful,
> * but WITHOUT ANY WARRANTY; without even the implied warranty of
> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> * GNU General Public License for more details.
> *
> * You should have received a copy of the GNU General Public License
> * along with this program; if not, write to the Free Software
> * Foundation, Inc., 51 Franklin Street, Fifth Floor,
> * Boston, MA 02110-1301, USA.
> */
>
> /* This is a modified version of ephy-module.c from Epiphany source
> code.
> * Here the original copyright assignment:
> *
> * Copyright (C) 2003 Marco Pesenti Gritti
> * Copyright (C) 2003, 2004 Christian Persch
> *
> */
>
> /*
> * Modified by the gedit Team, 2005. See the AUTHORS file for a
> * list of people on the gedit Team.
> * See the ChangeLog files for a list of changes.
> *
> * $Id: gedit-module.c 5367 2006-12-17 14:29:49Z pborelli $
> */
>
> /* Modified by evince team */
>
> #include "config.h"
>
> #include "ev-module.h"
>
> #include <gmodule.h>
>
> typedef struct _EvModuleClass EvModuleClass;
>
> struct _EvModuleClass {
> GTypeModuleClass parent_class;
> };
>
> struct _EvModule {
> GTypeModule parent_instance;
>
> GModule *library;
> gboolean resident;
>
> gchar *path;
> GType type;
> };
>
> typedef GType (*EvModuleRegisterFunc) (GTypeModule *);
>
> static void ev_module_init (EvModule *action);
> static void ev_module_class_init (EvModuleClass *class);
>
> G_DEFINE_TYPE (EvModule, ev_module, G_TYPE_TYPE_MODULE)
>
> static gboolean
> ev_module_load (GTypeModule *gmodule)
> {
> EvModule *module = EV_MODULE (gmodule);
> EvModuleRegisterFunc register_func;
> #if 0
> module->library = g_module_open (module->path, 0);
>
> if (!module->library) {
> g_warning ("%s", g_module_error ());
>
> return FALSE;
> }
>
> /* extract symbols from the lib */
> if (!g_module_symbol (module->library,
> "register_evince_backend",
> (void *) ®ister_func)) {
> g_warning ("%s", g_module_error ());
> g_module_close (module->library);
>
> return FALSE;
> }
>
> /* symbol can still be NULL even though g_module_symbol
> * returned TRUE */
> if (!register_func) {
> g_warning ("Symbol 'register_evince_backend' should not
> be NULL");
> g_module_close (module->library);
>
> return FALSE;
> }
> #else
> extern GType register_evince_backend (GTypeModule *module);
> register_func = register_evince_backend;
> #endif
> module->type = register_func (gmodule);
>
> if (module->type == 0) {
> g_warning ("Invalid evince backend contained by module %
> s", module->path);
>
> return FALSE;
> }
> #if 0
> if (module->resident)
> g_module_make_resident (module->library);
> #endif
> return TRUE;
> }
>
> static void
> ev_module_unload (GTypeModule *gmodule)
> {
> #if 0
> EvModule *module = EV_MODULE (gmodule);
>
> g_module_close (module->library);
>
> module->library = NULL;
> module->type = 0;
> #else
> g_warning("Nothing done for ev_module_unload");
> #endif
> }
>
> const gchar *
> ev_module_get_path (EvModule *module)
> {
> g_return_val_if_fail (EV_IS_MODULE (module), NULL);
>
> return module->path;
> }
>
> GObject *
> ev_module_new_object (EvModule *module)
> {
> g_return_val_if_fail (EV_IS_MODULE (module), NULL);
>
> if (module->type == 0)
> return NULL;
>
> return g_object_new (module->type, NULL);
> }
>
> GType
> ev_module_get_object_type (EvModule *module)
> {
> g_return_val_if_fail (EV_IS_MODULE (module), 0);
>
> return module->type;
> }
>
> static void
> ev_module_init (EvModule *module)
> {
> }
>
> static void
> ev_module_finalize (GObject *object)
> {
> EvModule *module = EV_MODULE (object);
>
> g_free (module->path);
>
> G_OBJECT_CLASS (ev_module_parent_class)->finalize (object);
> }
>
> static void
> ev_module_class_init (EvModuleClass *class)
> {
> GObjectClass *object_class = G_OBJECT_CLASS (class);
> GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (class);
>
> object_class->finalize = ev_module_finalize;
>
> module_class->load = ev_module_load;
> module_class->unload = ev_module_unload;
> }
>
> EvModule *
> ev_module_new (const gchar *path,
> gboolean resident)
> {
> EvModule *result;
>
> g_return_val_if_fail (path != NULL && path[0] != '\0', NULL);
>
> result = g_object_new (EV_TYPE_MODULE, NULL);
>
> g_type_module_set_name (G_TYPE_MODULE (result), path);
> result->path = g_strdup (path);
> result->resident = resident;
>
> return result;
> }
>
> >
> > Jeremiah
> >
> > On Feb 17, 2013 1:10 PM, "Richard Shann" <address@hidden>
> > wrote:
> > On Sun, 2013-02-17 at 17:09 +0000, Richard Shann wrote:
> > > On Sun, 2013-02-17 at 08:03 -0600, Jeremiah Benham wrote:
> > > > I am sure we will encounter an issue or two. Theoretically
> > though, we
> > > > should only have to create such a system like this once.
> > Then we will
> > > > only have to occasionally add update the dependencies now
> > and then. I
> > > > think if we are going to do dynamic, we should fork our
> > own mxe on
> > > > github. We can create a sed script to replace
> > --disable-shared
> > > > --enable-shared and --enable-static to --disable-static on
> > all the
> > > > src/*.mk.
> > > Well, of the two routes (hacking evince or converting mxe to
> > build dlls)
> > > I feel more confident about the first and I suspect you
> > would be better
> > > at the second. The advantage of the first is that we would
> > get mxe
> > > support as the libraries change over time, the disadvantage
> > would be we
> > > would be on our own with any changes we might want to follow
> > in evince.
> > > I guess we should push ahead with seeing which is feasible.
> > I'll look
> > > some more at evince - in principle I just need to replace
> > the g*module*
> > > stuff with stuff to point directly at the ev-poppler.cc
> > code, bringing
> > > that in to directly linked sources.
> >
> > Well, I fell at the first hurdle. I wanted to build evince on
> > Debian
> > first to trace what it did, and it would not configure for
> > lack of
> > glib-compile-schemas. So I built glib and that generated
> > glib-compile-schemas (it isn't present on my Debian box) and I
> > put it in
> > the path, but it still says it can't find it... sigh!
> >
> > Richard
> >
> >
>