summaryrefslogtreecommitdiffstats
path: root/trinity-base/kdebase-kioslaves/files/kdebase-3.5.13.2-fix-mandb-support-in-kio-man.patch
blob: 4e981bc91cdc667fc030cfbd4839de9b744df86b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d36ee0e..e91f8e8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -220,15 +220,6 @@ if( BUILD_STARTKDE )
 endif()
 
 
-##### Determine whether older manpage support is used ##########
-
-if( EXISTS "/usr/sbin/makewhatis" )
-  set( WITH_MAKEWHATIS "1" )
-  message( STATUS "Selected makewhatis for kio-man on your system" )
-else()
-  message( STATUS "Selected man-db for kio-man on your system" )
-endif()
-
 ##### Checks for a distribution-specific 1st menu item, generally a control center
 if(EXISTS "/usr/share/applications/YaST.desktop")
   set( KICKOFF_DIST_CONFIG_SHORTCUT1 "/usr/share/applications/YaST.desktop" )
diff --git a/config.h.cmake b/config.h.cmake
index d41643b..7a86d97 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -182,9 +182,6 @@
 // Defined when wanting ksmserver shutdown debugging timing markers in .xsession-errors
 #cmakedefine BUILD_PROFILE_SHUTDOWN 1
 
-// Use makewhatis manpage support
-#cmakedefine WITH_MAKEWHATIS "@WITH_MAKEWHATIS@"
-
 // Kickoff menu
 #cmakedefine KICKOFF_DIST_CONFIG_SHORTCUT1 "@KICKOFF_DIST_CONFIG_SHORTCUT1@"
 #cmakedefine KICKOFF_DIST_CONFIG_SHORTCUT2 "@KICKOFF_DIST_CONFIG_SHORTCUT2@"
diff --git a/kioslave/man/kio_man.cpp b/kioslave/man/kio_man.cpp
index 63fed2e..4da85ba 100644
--- a/kioslave/man/kio_man.cpp
+++ b/kioslave/man/kio_man.cpp
@@ -580,48 +580,64 @@ char *MANProtocol::readManPage(const char *_filename)
             kdDebug(7107) << "resolved to " << filename << endl;
         }
         lastdir = filename.left(filename.findRev('/'));
-    
-#ifdef WITH_MAKEWHATIS
-        TQIODevice *fd= KFilterDev::deviceForFile(filename);
 
-        if ( !fd || !fd->open(IO_ReadOnly))
-        {
-           delete fd;
-           return 0;
-        }
-        TQByteArray array(fd->readAll());
-        kdDebug(7107) << "read " << array.size() << endl;
-        fd->close();
-        delete fd;
+        size_t len;
 
-        if (array.isEmpty())
-            return 0;
+        if( hasManRecode() ) {
+            myStdStream = TQString::null;
+            KProcess proc;
 
-        const int len = array.size();
-        buf = new char[len + 4];
-        tqmemmove(buf + 1, array.data(), len);
-#else
-        myStdStream = TQString::null;
-        KProcess proc;
-        /* TODO: detect availability of 'man --recode' so that this can go
-         * upstream */
-        proc << "man" << "--recode" << "UTF-8" << filename;
+            proc << "man" << "--recode" << "UTF-8" << filename;
 
-        TQApplication::connect(&proc, TQT_SIGNAL(receivedStdout (KProcess *, char *, int)),
-                              this, TQT_SLOT(slotGetStdOutputUtf8(KProcess *, char *, int)));
-        proc.start(KProcess::Block, KProcess::All);
+            TQApplication::connect(&proc, TQT_SIGNAL(receivedStdout (KProcess *, char *, int)),
+                                   this, TQT_SLOT(slotGetStdOutputUtf8(KProcess *, char *, int)));
+            proc.start(KProcess::Block, KProcess::All);
+
+            const TQCString cstr=myStdStream.utf8();
+            len = cstr.size() != 0 ? cstr.size() - 1 : 0;
+            buf = new char[len + 4];
+            tqmemmove(buf + 1, cstr.data(), len);
+        } else {
+            TQIODevice *fd= KFilterDev::deviceForFile(filename);
+
+            if ( !fd || !fd->open(IO_ReadOnly))
+            {
+               delete fd;
+               return 0;
+            }
+            TQByteArray array(fd->readAll());
+            kdDebug(7107) << "read " << array.size() << endl;
+            fd->close();
+            delete fd;
+
+            if (array.isEmpty())
+                return 0;
+
+            len = array.size();
+            buf = new char[len + 4];
+            tqmemmove(buf + 1, array.data(), len);
+        }
 
-        const TQCString cstr=myStdStream.utf8();
-        const int len = cstr.size()-1;
-        buf = new char[len + 4];
-        tqmemmove(buf + 1, cstr.data(), len);
-#endif
         buf[0]=buf[len]='\n'; // Start and end with a end of line
         buf[len+1]=buf[len+2]='\0'; // Two NUL characters at end
     }
     return buf;
 }
 
+bool MANProtocol::hasManRecode(bool force) {
+    static bool rv=0, wasChecked=0;
+    if ( !wasChecked || force ) {
+        KProcess proc;
+        // lets' try to recode the man page of man. 
+        // that should be enough to be sure that man-db is installed.
+        proc << "man" << "--recode" << "UTF-8" << "man";
+
+        proc.start(KProcess::Block, KProcess::All);
+        rv = proc.exitStatus() == 0;
+        wasChecked = 1;
+    }
+    return rv;
+}
 
 void MANProtocol::outputError(const TQString& errmsg)
 {
diff --git a/kioslave/man/kio_man.h b/kioslave/man/kio_man.h
index 617245f..1a28dcf 100644
--- a/kioslave/man/kio_man.h
+++ b/kioslave/man/kio_man.h
@@ -66,6 +66,7 @@ private slots:
 private:
     void checkManPaths();
     TQStringList manDirectories();
+    static bool hasManRecode(bool force=0);
     TQMap<TQString, TQString> buildIndexMap(const TQString& section);
     bool addWhatIs(TQMap<TQString, TQString>& i, const TQString& f, const TQString& mark);
     void parseWhatIs( TQMap<TQString, TQString> &i, TQTextStream &t, const TQString &mark );