Автор Гілка: Рецепт: Виправлення прокрутки в xpdf 3.03 (gcc 4.4, Slackware)  (Прочитано 14112 раз)

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Переказ наступного:
http://www.linuxquestions.org/questions/slackware-14/xpdf-is-slow-879908/page2.html

(Щоб самому не забути, а може знадобиться й іншим.)

Можливо ви помітили, що xpdf 3.02 в Slackware 13.1, 13.37 якось повільно прокручує сторінки. Це пов'язано з невеликою похибкою в коді з числами з рухомою точкою (наскільки я зрозумів), яку виявляє gcc 4.4. В інших дистрибутивах може бути те саме (перевірте). Це легко виправити. Ось перелік дій для Slackware (їх доволі легко адаптувати для компіляції xpdf для власного дистрибутиву, подивіться файл xpdf.SlackBuild).

1. Завантажуємо вихідні тексти xpdf та додаткові файли для побудови програми:

wget -r ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.1/source/xap/xpdf/
cd slackware.mirrors.tds.net/pub/slackware/slackware-13.1/source/xap/xpdf/

2. Створюємо файл-латку з наступним змістом:

--- xpdf-3.02.orig/xpdf/PDFCore.h
+++ xpdf-3.02/xpdf/PDFCore.h
@@ -40,6 +40,7 @@ class PDFCore;
 #define zoomPage  -1
 #define zoomWidth -2
 #define defZoom   125
+#define EPSILON   1.0e-7   // 32-bit floating point machine precision
 
 //------------------------------------------------------------------------
 
--- xpdf-3.02.orig/xpdf/PDFCore.cc
+++ xpdf-3.02/xpdf/PDFCore.cc
@@ -445,7 +445,7 @@ void PDFCore::update(int topPageA, int s
   // object
   if (force || pages->getLength() == 0 ||
       (!continuousMode && topPageA != topPage) ||
-      zoomA != zoom || dpiA != dpi || rotateA != rotate) {
+      zoomA != zoom || fabs( dpiA - dpi ) > EPSILON || rotateA != rotate) {
     needUpdate = gTrue;
     setSelection(0, 0, 0, 0, 0);
     while (pages->getLength() > 0) {

(взято з http://recipes.gobolinux.org/r/?list=Xpdf&ver=3.02-r2&file=03-float.patch )

Зберігаємо його як xpdf-3.02-float.patch разом з іншими латками в каталозі patches.

3. Редагуємо xpdf.SlackBuild, додаючи наступну команду:

...
zcat $CWD/patches/xpdf_3.02-1.3.diff.gz | patch -p1 --verbose || exit 1
zcat $CWD/patches/xpdfrc.diff.gz | patch -p1 --verbose || exit 1
# Латка прокручування:
cat $CWD/patches/xpdf-3.02-float.patch | patch -p1 --verbose || exit 1

...

3. Як root виконуємо xpdf.SlackBuild, після чого за допомогою pkgtool видаляємо старий xpdf та встановлюємо новий:

pkgtool
installpkg /tmp/xpdf-3.02pl6-i486-4.txz

OT: http://www.gobolinux.org - цікавий проект.
« Змінено: 2011-11-19 01:04:09 від tech »