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.
Jeremiah On Feb 18, 2013 8:24 AM, "Richard Shann" <richard.sh...@virgin.net> 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" <richard.sh...@virgin.net> > > > 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 > > > > > > > > > > >
_______________________________________________ Denemo-devel mailing list Denemo-devel@gnu.org https://lists.gnu.org/mailman/listinfo/denemo-devel