network/w3m: Added (text-mode web browser)

Signed-off-by: dsomero <xgizzmo@slackbuilds.org>
This commit is contained in:
Felix Pfeifer 2010-08-28 08:08:34 -04:00 committed by Erik Hanson
parent 0c218fe9a0
commit f5287105ec
11 changed files with 406 additions and 0 deletions

13
network/w3m/README Normal file
View file

@ -0,0 +1,13 @@
w3m is a World Wide Web (WWW) text based client. It has English and
Japanese help files and an option menu and can be configured to use
either language. It will display hypertext markup language (HTML)
documents containing links to files residing on the local system, as
well as files residing on remote systems. It can display HTML tables,
frames, and images, and supports tabbed browsing. In addition, it can
be used as a "pager" in much the same manner as "more" or "less".
This buildscript includes some security and bug fix patches. However
the actual stable version of w3m is more than 3 years old. You should
not use it as your default browser, it is only here as an optional
dependency for SuperCollider.
This requires gc.

View file

@ -0,0 +1,11 @@
--- Makefile.in.old 2007-05-29 17:31:04.000000000 +0530
+++ Makefile.in 2010-02-17 14:19:08.000000000 +0530
@@ -193,7 +193,7 @@
$(CC) $(CFLAGS) -DDUMMY -c -o $@ $?
$(IMGDISPLAY): w3mimgdisplay.o $(ALIB) w3mimg/w3mimg.a
- $(CC) $(CFLAGS) -o $(IMGDISPLAY) w3mimgdisplay.o w3mimg/w3mimg.a $(LDFLAGS) $(LIBS) $(IMGLDFLAGS)
+ $(CC) $(CFLAGS) -o $(IMGDISPLAY) w3mimgdisplay.o w3mimg/w3mimg.a $(LDFLAGS) $(LIBS) $(IMGLDFLAGS) -lX11
w3mimgdisplay.o: w3mimgdisplay.c w3mimg/w3mimg.h
$(CC) $(CFLAGS) $(IMGCFLAGS) -o $@ -c $(srcdir)/w3mimgdisplay.c

View file

@ -0,0 +1,24 @@
diff -ruN w3m-0.4.1.orig/scripts/w3mhelp.cgi.in w3m-0.4.1/scripts/w3mhelp.cgi.in
--- w3m-0.4.1.orig/scripts/w3mhelp.cgi.in 2003-06-12 21:03:09.000000000 +0900
+++ w3m-0.4.1/scripts/w3mhelp.cgi.in 2003-06-12 21:25:44.000000000 +0900
@@ -51,6 +51,12 @@
}
}
+if ($lang eq 'ja') {
+ $help_charset='EUC-JP';
+} else {
+ $help_charset='UTF-8';
+}
+
%f = %keyfunc;
%keyfunc = ();
while (($key, $fname) = each %f) {
@@ -88,6 +94,7 @@
<HTML>
<HEAD>
+<META http-equiv="Content-Type" content="text/html; charset=$help_charset">
<TITLE>w3m help page</TITLE>
</HEAD>
<BODY>

View file

@ -0,0 +1,23 @@
Patch by Robert Scheck <redhat@linuxnetz.de> for w3m >= 0.5.1, which makes
w3m rebuildable using gcc 4.
--- w3m-0.5.1/istream.c 2003-10-20 18:41:56.000000000 +0200
+++ w3m-0.5.1/istream.c.gcc4 2005-03-15 12:18:36.000000000 +0100
@@ -37,7 +37,7 @@
{
int len;
base->stream.cur = base->stream.next = 0;
- len = base->read(base->handle, base->stream.buf, base->stream.size);
+ len = (base->read) (base->handle, base->stream.buf, base->stream.size);
if (len <= 0)
base->iseos = TRUE;
else
@@ -320,7 +320,7 @@
len = buffer_read(&base->stream, buf->ptr, count);
rest = count - len;
if (MUST_BE_UPDATED(base)) {
- len = base->read(base->handle, &buf->ptr[len], rest);
+ len = (base->read) (base->handle, &buf->ptr[len], rest);
if (len <= 0) {
base->iseos = TRUE;
len = 0;

View file

@ -0,0 +1,124 @@
diff -urN w3m-0.5.2/configure.ac w3m-0.5.2.fixed/configure.ac
--- w3m-0.5.2/configure.ac 2004-04-29 00:19:25.000000000 +0600
+++ w3m-0.5.2.fixed/configure.ac 2005-09-24 16:39:11.000000000 +0600
@@ -97,6 +97,7 @@
AC_SUBST(USE_W3M)
AC_CHECK_LIB(gpm, Gpm_Open, [AC_DEFINE(USE_GPM)
W3M_LIBS="$W3M_LIBS -lgpm"])
+ AC_CHECK_LIB(gpm, Gpm_Wgetch, AC_DEFINE(HAVE_GPM_WGETCH))
AC_SUBST(USE_SYSMOUSE)
AC_TRY_CPP([#include <machine/console.h>
MOUSE_GETINFO], [AC_DEFINE(USE_SYSMOUSE)])
diff -urN w3m-0.5.2/gpm-libcurses.c w3m-0.5.2.fixed/gpm-libcurses.c
--- w3m-0.5.2/gpm-libcurses.c 1970-01-01 05:00:00.000000000 +0500
+++ w3m-0.5.2.fixed/gpm-libcurses.c 2005-09-24 18:18:30.000000000 +0600
@@ -0,0 +1,84 @@
+/*
+ * libcurses.c - client library - curses level (gpm-Linux)
+ *
+ * Copied from GPM by Alexander E. Patrakov
+ * Copyright 1994,1995 rubini@linux.it (Alessandro Rubini)
+ * Copyright 2002 nico@schottelius.org (Nico Schottelius)
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <unistd.h> /* select(); */
+#include <sys/time.h> /* timeval */
+#include <sys/types.h> /* socket() */
+
+#include "config.h"
+#if defined(USE_GPM) && !defined(HAVE_GPM_WGETCH)
+
+extern int getch();
+
+#include <gpm.h>
+#include <errno.h>
+
+#define SELECT_TIME 86400 /* one day */
+
+int Gpm_Wgetch(void * dummy)
+{
+fd_set selSet;
+int max, flag, result;
+int fd=STDIN_FILENO;
+static Gpm_Event ev;
+
+ if (!gpm_flag || gpm_fd==-1) return getch();
+ if (gpm_morekeys) return (*gpm_handler)(&ev,gpm_data);
+ gpm_hflag=0;
+
+ max = (gpm_fd>fd) ? gpm_fd : fd;
+
+/*...................................................................*/
+ if (gpm_fd>=0) /* linux */
+ while(1)
+ {
+ if (gpm_visiblepointer) GPM_DRAWPOINTER(&ev);
+ do
+ {
+ FD_ZERO(&selSet);
+ FD_SET(fd,&selSet);
+ FD_SET(gpm_fd,&selSet);
+ gpm_timeout.tv_sec=SELECT_TIME;
+ errno = 0;
+ flag=select(max+1,&selSet,(fd_set *)NULL,(fd_set *)NULL,&gpm_timeout);
+ }
+ while (!flag);
+
+ if (flag==-1)
+ continue;
+
+ if (FD_ISSET(fd,&selSet))
+ return getch();
+
+ if (Gpm_GetEvent(&ev) && gpm_handler
+ && (result=(*gpm_handler)(&ev,gpm_data)))
+ {
+ gpm_hflag=1;
+ return result;
+ }
+ }
+ return 0;
+}
+#endif
+
diff -urN w3m-0.5.2/Makefile.in w3m-0.5.2.fixed/Makefile.in
--- w3m-0.5.2/Makefile.in 2004-04-26 23:04:48.000000000 +0600
+++ w3m-0.5.2.fixed/Makefile.in 2005-09-24 16:48:54.000000000 +0600
@@ -85,11 +85,11 @@
SRCS=main.c file.c buffer.c display.c etc.c search.c linein.c table.c local.c \
form.c map.c frame.c rc.c menu.c mailcap.c image.c \
symbol.c entity.c terms.c url.c ftp.c mimehead.c regex.c news.c \
- func.c cookie.c history.c backend.c $(KEYBIND_SRC)
+ func.c cookie.c history.c backend.c gpm-libcurses.c $(KEYBIND_SRC)
OBJS=main.o file.o buffer.o display.o etc.o search.o linein.o table.o local.o\
form.o map.o frame.o rc.o menu.o mailcap.o image.o \
symbol.o entity.o terms.o url.o ftp.o mimehead.o regex.o news.o \
- func.o cookie.o history.o backend.o $(KEYBIND_OBJ)
+ func.o cookie.o history.o backend.o gpm-libcurses.o $(KEYBIND_OBJ)
LSRCS=anchor.c parsetagx.c tagtable.c istream.c
LOBJS=anchor.o parsetagx.o tagtable.o istream.o
LLOBJS=version.o
diff -urN w3m-0.5.2/config.h.in w3m-0.5.2.fixed/config.h.in
--- w3m-0.5.2/config.h.in 2004-04-04 22:47:20.000000000 +0600
+++ w3m-0.5.2.fixed/config.h.in 2005-09-24 16:50:43.000000000 +0600
@@ -231,3 +231,4 @@
#define INFLATE_NAME "inflate"
+#undef HAVE_GPM_WGETCH
#endif /* CONFIG_H_SEEN */

View file

@ -0,0 +1,12 @@
diff -ruN w3m-0.5.1.orig/acinclude.m4 w3m-0.5.1/acinclude.m4
--- w3m-0.5.1.orig/acinclude.m4 2006-03-06 18:24:38.000000000 +0900
+++ w3m-0.5.1/acinclude.m4 2006-03-06 18:27:55.000000000 +0900
@@ -394,7 +394,7 @@
[lib=$1
AC_MSG_CHECKING(for -l$lib)
extlib="not found"
- for dir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib
+ for dir in /lib64 /lib /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib
do
if test -f $dir/lib$lib.a -o -f $dir/lib$lib.so ; then
LIBS="$LIBS -l$lib"

View file

@ -0,0 +1,54 @@
Index: w3m-0.5.2/istream.c
===================================================================
--- w3m-0.5.2.orig/istream.c
+++ w3m-0.5.2/istream.c
@@ -447,8 +447,17 @@ ssl_check_cert_ident(X509 * x, char *hos
if (!seen_dnsname)
seen_dnsname = Strnew();
+ /* replace \0 to make full string visible to user */
+ if (sl != strlen(sn)) {
+ int i;
+ for (i = 0; i < sl; ++i) {
+ if (!sn[i])
+ sn[i] = '!';
+ }
+ }
Strcat_m_charp(seen_dnsname, sn, " ", NULL);
- if (ssl_match_cert_ident(sn, sl, hostname))
+ if (sl == strlen(sn) /* catch \0 in SAN */
+ && ssl_match_cert_ident(sn, sl, hostname))
break;
}
}
@@ -466,16 +475,27 @@ ssl_check_cert_ident(X509 * x, char *hos
if (match_ident == FALSE && ret == NULL) {
X509_NAME *xn;
char buf[2048];
+ int slen;
xn = X509_get_subject_name(x);
- if (X509_NAME_get_text_by_NID(xn, NID_commonName,
- buf, sizeof(buf)) == -1)
+ slen = X509_NAME_get_text_by_NID(xn, NID_commonName, buf, sizeof(buf));
+ if ( slen == -1)
/* FIXME: gettextize? */
ret = Strnew_charp("Unable to get common name from peer cert");
- else if (!ssl_match_cert_ident(buf, strlen(buf), hostname))
+ else if (slen != strlen(buf)
+ || !ssl_match_cert_ident(buf, strlen(buf), hostname)) {
+ /* replace \0 to make full string visible to user */
+ if (slen != strlen(buf)) {
+ int i;
+ for (i = 0; i < slen; ++i) {
+ if (!buf[i])
+ buf[i] = '!';
+ }
+ }
/* FIXME: gettextize? */
ret = Sprintf("Bad cert ident %s from %s", buf, hostname);
+ }
else
match_ident = TRUE;
}

View file

@ -0,0 +1,24 @@
verify SSL certificates by default. SSL support really is pointless without doing that.
Also disable use of SSLv2 by default as it's insecure, deprecated, dead since last century.
Index: w3m-0.5.2/fm.h
===================================================================
--- w3m-0.5.2.orig/fm.h
+++ w3m-0.5.2/fm.h
@@ -1120,7 +1120,7 @@ global int view_unseenobject init(TRUE);
#endif
#if defined(USE_SSL) && defined(USE_SSL_VERIFY)
-global int ssl_verify_server init(FALSE);
+global int ssl_verify_server init(TRUE);
global char *ssl_cert_file init(NULL);
global char *ssl_key_file init(NULL);
global char *ssl_ca_path init(NULL);
@@ -1129,7 +1129,7 @@ global int ssl_path_modified init(FALSE)
#endif /* defined(USE_SSL) &&
* defined(USE_SSL_VERIFY) */
#ifdef USE_SSL
-global char *ssl_forbid_method init(NULL);
+global char *ssl_forbid_method init("2");
#endif
global int is_redisplay init(FALSE);

19
network/w3m/slack-desc Normal file
View file

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description. Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in. You must
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
|-----handy-ruler--------------------------------------------------------|
w3m: w3m (text-mode browser)
w3m:
w3m: w3m is a World Wide Web (WWW) text based client. It has English and
w3m: Japanese help files and an option menu and can be configured to use
w3m: either language. It will display hypertext markup language (HTML)
w3m: documents containing links to files residing on the local system, as
w3m: well as files residing on remote systems. It can display HTML tables,
w3m: frames, and images, and supports tabbed browsing. In addition, it can
w3m: be used as a "pager" in much the same manner as "more" or "less".
w3m:
w3m: Homepage: http://w3m.sourceforge.net/

View file

@ -0,0 +1,92 @@
#!/bin/sh
# Slackware build script for w3m
# Written by slakmagik <jsun@freeshell.org>
# Released under the WTFPL
PRGNAM=w3m
VERSION=0.5.2
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
arm*) ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 \
-o -perm 400 \) -exec chmod 644 {} \;
# Fix segfaulting bug
patch -p1 < $CWD/patches/w3m-0.5.2-gpm_fix-1.patch
patch -p0 < $CWD/patches/bug_566101_Fix-DSO-X11.patch
patch -p1 < $CWD/patches/w3m-0.4.1-helpcharset.patch
patch -p1 < $CWD/patches/w3m-0.5.1-gcc4.patch
patch -p1 < $CWD/patches/w3m-0.5.2-multilib.patch
patch -p1 < $CWD/patches/w3m-0.5.2-nulcn.patch
patch -p1 < $CWD/patches/w3m-0.5.2-ssl_verify_server_on.patch
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--mandir=/usr/man \
--enable-keymap=lynx \
--enable-gopher \
--build=$ARCH-slackware-linux \
--host=$ARCH-slackware-linux
make
make DESTDIR=$PKG install
find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $(find $PKG/usr/man -type l); do ln -s $(readlink $i).gz $i.gz; rm $i; done
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a [ACNT]* doc/* $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

10
network/w3m/w3m.info Normal file
View file

@ -0,0 +1,10 @@
PRGNAM="w3m"
VERSION="0.5.2"
HOMEPAGE="http://w3m.sourceforge.net/"
DOWNLOAD="http://downloads.sourceforge.net/w3m/w3m-0.5.2.tar.gz"
MD5SUM="ba06992d3207666ed1bf2dcf7c72bf58"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
MAINTAINER="Felix Pfeifer"
EMAIL="pfeifer[dot]felix[at]googlemail[dot]com"
APPROVED="dsomero"