From 88f8f66524a6f62263ca721e7289c3218e450f2c Mon Sep 17 00:00:00 2001 From: Hib Eris Date: Wed, 27 Jan 2010 08:11:31 +0100 Subject: [PATCH] [windows] Guess texmf.cnf location from mktexpk executable Fixes bgo#602910. --- backend/dvi/Makefile.am | 2 ++ backend/dvi/dvi-document.c | 7 +++- backend/dvi/mdvi-lib/mdvi.h | 2 +- backend/dvi/mdvi-lib/private.h | 1 + backend/dvi/mdvi-lib/setup.c | 5 ++- backend/dvi/texmfcnf.c | 64 ++++++++++++++++++++++++++++++++++ backend/dvi/texmfcnf.h | 34 ++++++++++++++++++ 7 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 backend/dvi/texmfcnf.c create mode 100644 backend/dvi/texmfcnf.h diff --git a/backend/dvi/Makefile.am b/backend/dvi/Makefile.am index 93aad731..95b034eb 100644 --- a/backend/dvi/Makefile.am +++ b/backend/dvi/Makefile.am @@ -18,6 +18,8 @@ libdvidocument_la_SOURCES = \ dvi-document.h \ cairo-device.c \ cairo-device.h \ + texmfcnf.c \ + texmfcnf.h \ fonts.c \ fonts.h diff --git a/backend/dvi/dvi-document.c b/backend/dvi/dvi-document.c index 5c4ecea5..d1411a8e 100644 --- a/backend/dvi/dvi-document.c +++ b/backend/dvi/dvi-document.c @@ -20,6 +20,7 @@ #include "config.h" #include "dvi-document.h" +#include "texmfcnf.h" #include "ev-document-thumbnails.h" #include "ev-document-misc.h" #include "ev-file-exporter.h" @@ -239,10 +240,14 @@ dvi_document_class_init (DviDocumentClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); + gchar *texmfcnf; gobject_class->finalize = dvi_document_finalize; - mdvi_init_kpathsea ("evince", MDVI_MFMODE, MDVI_FALLBACK_FONT, MDVI_DPI); + texmfcnf = get_texmfcnf(); + mdvi_init_kpathsea ("evince", MDVI_MFMODE, MDVI_FALLBACK_FONT, MDVI_DPI, texmfcnf); + g_free(texmfcnf); + mdvi_register_special ("Color", "color", NULL, dvi_document_do_color_special, 1); mdvi_register_fonts (); diff --git a/backend/dvi/mdvi-lib/mdvi.h b/backend/dvi/mdvi-lib/mdvi.h index 78244a4c..e8c58e2f 100644 --- a/backend/dvi/mdvi-lib/mdvi.h +++ b/backend/dvi/mdvi-lib/mdvi.h @@ -490,7 +490,7 @@ extern void flush_font_metrics __PROTO((void)); extern void mdvi_sort_pages __PROTO((DviContext *, DviPageSort)); -extern void mdvi_init_kpathsea __PROTO((const char *, const char *, const char *, int)); +extern void mdvi_init_kpathsea __PROTO((const char *, const char *, const char *, int, const char *)); extern DviContext* mdvi_init_context __PROTO((DviParams *, DviPageSpec *, const char *)); extern void mdvi_destroy_context __PROTO((DviContext *)); diff --git a/backend/dvi/mdvi-lib/private.h b/backend/dvi/mdvi-lib/private.h index 5995f492..6564c253 100644 --- a/backend/dvi/mdvi-lib/private.h +++ b/backend/dvi/mdvi-lib/private.h @@ -39,6 +39,7 @@ #include #include #include +#include #define ISSP(p) (*(p) == ' ' || *(p) == '\t') #define SKIPSP(p) while(ISSP(p)) p++ diff --git a/backend/dvi/mdvi-lib/setup.c b/backend/dvi/mdvi-lib/setup.c index 1e60a5bd..a75f0282 100644 --- a/backend/dvi/mdvi-lib/setup.c +++ b/backend/dvi/mdvi-lib/setup.c @@ -26,7 +26,8 @@ #include "private.h" void mdvi_init_kpathsea(const char *program, - const char *mfmode, const char *font, int dpi) + const char *mfmode, const char *font, int dpi, + const char *texmfcnf) { const char *p; @@ -41,5 +42,7 @@ void mdvi_init_kpathsea(const char *program, kpse_set_program_enabled(kpse_pk_format, 1, kpse_src_compile); kpse_set_program_enabled(kpse_tfm_format, 1, kpse_src_compile); kpse_set_program_enabled(kpse_ofm_format, 1, kpse_src_compile); + if (texmfcnf != NULL) + xputenv("TEXMFCNF", texmfcnf); } diff --git a/backend/dvi/texmfcnf.c b/backend/dvi/texmfcnf.c new file mode 100644 index 00000000..72fbff23 --- /dev/null +++ b/backend/dvi/texmfcnf.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010, Hib Eris + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" + +#include "texmfcnf.h" + +#include +#include +#ifdef G_OS_WIN32 +#include +#endif + +gchar * +get_texmfcnf(void) +{ + char *env = getenv("TEXMFCNF"); + if (env) + return g_strdup(env); + +#ifdef G_OS_WIN32 + gchar *texmfcnf = NULL; + TCHAR path[_MAX_PATH]; + + if (SearchPath(NULL, "mktexpk", ".exe", _MAX_PATH, path, NULL)) + { + gchar *sdir, *sdir_parent, *sdir_grandparent; + const gchar *texmfcnf_fmt = "{%s,%s,%s}{,{/share,}/texmf{-local,}/web2c}"; + + sdir = g_path_get_dirname(path); + sdir_parent = g_path_get_dirname(sdir); + sdir_grandparent = g_path_get_dirname(sdir_parent); + + texmfcnf = g_strdup_printf(texmfcnf_fmt, + sdir, sdir_parent, sdir_grandparent); + + g_free(sdir); + g_free(sdir_parent); + g_free(sdir_grandparent); + } + return texmfcnf; +#else + return NULL; +#endif +} + + + + diff --git a/backend/dvi/texmfcnf.h b/backend/dvi/texmfcnf.h new file mode 100644 index 00000000..e5c81cbd --- /dev/null +++ b/backend/dvi/texmfcnf.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2010, Hib Eris + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef TEXMFCNF_H +#define TEXMFCNF_H + +#include + +G_BEGIN_DECLS + +gchar *get_texmfcnf(void); + +G_END_DECLS + +#endif /* TEXMFCNF_H */ + + + + -- 2.43.0