diff --git a/network/w3m/README b/network/w3m/README new file mode 100644 index 0000000000..6fe3b43392 --- /dev/null +++ b/network/w3m/README @@ -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. diff --git a/network/w3m/patches/bug_566101_Fix-DSO-X11.patch b/network/w3m/patches/bug_566101_Fix-DSO-X11.patch new file mode 100644 index 0000000000..4f41fc885f --- /dev/null +++ b/network/w3m/patches/bug_566101_Fix-DSO-X11.patch @@ -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 diff --git a/network/w3m/patches/w3m-0.4.1-helpcharset.patch b/network/w3m/patches/w3m-0.4.1-helpcharset.patch new file mode 100644 index 0000000000..be787e12a3 --- /dev/null +++ b/network/w3m/patches/w3m-0.4.1-helpcharset.patch @@ -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 @@ + + + ++ + w3m help page + + diff --git a/network/w3m/patches/w3m-0.5.1-gcc4.patch b/network/w3m/patches/w3m-0.5.1-gcc4.patch new file mode 100644 index 0000000000..39e232c133 --- /dev/null +++ b/network/w3m/patches/w3m-0.5.1-gcc4.patch @@ -0,0 +1,23 @@ +Patch by Robert Scheck 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; diff --git a/network/w3m/patches/w3m-0.5.2-gpm_fix-1.patch b/network/w3m/patches/w3m-0.5.2-gpm_fix-1.patch new file mode 100644 index 0000000000..74c645d348 --- /dev/null +++ b/network/w3m/patches/w3m-0.5.2-gpm_fix-1.patch @@ -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 + 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 ++#include ++#include /* select(); */ ++#include /* timeval */ ++#include /* socket() */ ++ ++#include "config.h" ++#if defined(USE_GPM) && !defined(HAVE_GPM_WGETCH) ++ ++extern int getch(); ++ ++#include ++#include ++ ++#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 */ diff --git a/network/w3m/patches/w3m-0.5.2-multilib.patch b/network/w3m/patches/w3m-0.5.2-multilib.patch new file mode 100644 index 0000000000..e0853f6c5b --- /dev/null +++ b/network/w3m/patches/w3m-0.5.2-multilib.patch @@ -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" diff --git a/network/w3m/patches/w3m-0.5.2-nulcn.patch b/network/w3m/patches/w3m-0.5.2-nulcn.patch new file mode 100644 index 0000000000..bc67ab8c68 --- /dev/null +++ b/network/w3m/patches/w3m-0.5.2-nulcn.patch @@ -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; + } diff --git a/network/w3m/patches/w3m-0.5.2-ssl_verify_server_on.patch b/network/w3m/patches/w3m-0.5.2-ssl_verify_server_on.patch new file mode 100644 index 0000000000..64319517fb --- /dev/null +++ b/network/w3m/patches/w3m-0.5.2-ssl_verify_server_on.patch @@ -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); diff --git a/network/w3m/slack-desc b/network/w3m/slack-desc new file mode 100644 index 0000000000..a99ba2add1 --- /dev/null +++ b/network/w3m/slack-desc @@ -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/ diff --git a/network/w3m/w3m.SlackBuild b/network/w3m/w3m.SlackBuild new file mode 100644 index 0000000000..f5c2f813ec --- /dev/null +++ b/network/w3m/w3m.SlackBuild @@ -0,0 +1,92 @@ +#!/bin/sh + +# Slackware build script for w3m +# Written by slakmagik +# 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} diff --git a/network/w3m/w3m.info b/network/w3m/w3m.info new file mode 100644 index 0000000000..3946728f91 --- /dev/null +++ b/network/w3m/w3m.info @@ -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"