aboutsummaryrefslogtreecommitdiffstats
path: root/wlp
diff options
context:
space:
mode:
Diffstat (limited to 'wlp')
-rw-r--r--wlp/C/Makefile43
-rw-r--r--wlp/C/commands.l75
-rw-r--r--wlp/C/commands.y110
-rw-r--r--wlp/C/macro.h44
-rw-r--r--wlp/C/structs.c164
-rw-r--r--wlp/C/structs.h35
-rw-r--r--wlp/C/test.c113
-rw-r--r--wlp/C/wlp.c183
-rw-r--r--wlp/C/yytest.c25
-rw-r--r--wlp/Makefile42
-rw-r--r--wlp/README12
-rw-r--r--wlp/module/Makefile.pre.in310
-rw-r--r--wlp/module/Makefile.pre.in.OLD304
-rw-r--r--wlp/module/Setup.in88
-rwxr-xr-xwlp/module/makesetup261
-rw-r--r--wlp/module/patch13
16 files changed, 1822 insertions, 0 deletions
diff --git a/wlp/C/Makefile b/wlp/C/Makefile
new file mode 100644
index 0000000..6bc8fc3
--- /dev/null
+++ b/wlp/C/Makefile
@@ -0,0 +1,43 @@
+CC=gcc
+AR=ar
+FLEX=flex
+YACC=bison
+
+CCOPTS=-Wall -ansi
+CCSHARED=-fPIC
+AROPTS=-rs
+FLEXOPTS=
+YACCOPTS=-d
+
+SRCDIR=.
+BINDIR=.
+
+OBJFILE=structs.o commands.tab.o lex.yy.o
+
+all: archive bin
+
+# archive file for python module
+archive: structs bison flex /usr/lib/libfl.a macro.h structs.h commands.tab.h
+ $(AR) $(AROPTS) $(BINDIR)/wlp.a $(OBJFILE) \
+ /usr/lib/libfl.a
+
+# binary (executable) file for testing
+executable: bin
+
+bin: structs bison flex /usr/lib/libfl.a macro.h structs.h commands.tab.h
+ $(CC) $(CCSHARED) $(CCOPTS) $(OBJFILE) \
+ yytest.c /usr/lib/libfl.a -o ./yytest
+
+flex:
+ $(FLEX) $(FLEXOPTS) commands.l
+ $(CC) $(CCSHARED) -c lex.yy.c -o lex.yy.o
+
+bison:
+ $(YACC) $(YACCOPTS) -d commands.y -b commands
+ $(CC) $(CCSHARED) -c commands.tab.c -o commands.tab.o
+
+structs:
+ $(CC) $(CCSHARED) $(CCOPTS) -c structs.c -o structs.o
+
+clean:
+ -rm $(OBJFILE) lex.yy.c commands.tab.h commands.tab.c wlp.a yytest
diff --git a/wlp/C/commands.l b/wlp/C/commands.l
new file mode 100644
index 0000000..8f0f28e
--- /dev/null
+++ b/wlp/C/commands.l
@@ -0,0 +1,75 @@
+%{
+/* Lex analyzer for bison grammar */
+
+#include "commands.tab.h"
+/*#define DEBUG*/
+#include "macro.h"
+%}
+
+OWNER "<"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9._-]+">"
+VAL ['`"][a-zA-Z0-9@_+.<>() -]+['`"]
+VAR [a-zA-Z0-9_<>-]+[:]?
+
+%option noyywrap
+
+%%
+
+
+
+
+{OWNER} {
+ DBG("OWNER %s\n",yytext);
+ yylval.text=yytext;
+ return(OWNERID);
+ }
+
+
+{VAL} {
+ DBG("VAL %s\n",yytext);
+ yylval.text=yytext;
+ return(VALID);
+ }
+
+{VAR} {
+ DBG("VAR %s\n",yytext);
+ yylval.text=yytext;
+ return(VARID);
+ }
+
+
+"{" |
+"}" |
+"=" {
+ yylval.text=yytext;
+ return(*yytext);
+ }
+
+
+"#"[^\n]* |
+"\n" |
+[[:space:]] ; /* comments 'til EOL and strip all spaces and \n */
+
+
+"." {
+ DBG("NOTSTR %s\n",yytext);
+ yylval.text=yytext;
+ return(ERROR);
+ }
+
+
+%%
+
+#include "structs.h"
+
+extern struct wlp_list_t *list;
+
+int parse(FILE *file)
+{
+ struct wlp_node_t *tmp;
+ int count;
+ yyin=file;
+
+ DBG("go!\n");
+ yyparse();
+ DBG("EOF found\n");
+}
diff --git a/wlp/C/commands.y b/wlp/C/commands.y
new file mode 100644
index 0000000..8b720d7
--- /dev/null
+++ b/wlp/C/commands.y
@@ -0,0 +1,110 @@
+
+%{
+/*#define YYSTYPE char**/
+/*#define DEBUG*/
+#include "macro.h"
+%}
+
+%union {
+ char *text;
+ char c;
+}
+
+%token <text> VARID
+%token <text> VALID
+%token <text> OWNERID
+
+%token ERROR
+%token EOFTOK
+
+
+%{
+char left[80], right[80], owner[80];
+char type = 0; /*unused*/
+%}
+
+%%
+
+
+block:
+ blockstatement
+ | block blockstatement
+ ;
+
+blockstatement:
+ owner '{' commandline '}'
+ ;
+
+commandline:
+ command | commandline command
+ ;
+
+command:
+ varpart '=' valpart { found(left,right,owner); }
+ ;
+
+owner:
+ OWNERID {
+ DBG("Owner %s\n",$1);
+ strncpy(owner,$1,strlen($1)+1);
+ }
+ ;
+
+varpart:
+ VARID {
+ DBG("Left %s\n",$1);
+ strncpy(left,$1,strlen($1)+1);
+ }
+ ;
+
+valpart:
+ VALID {
+ DBG("Right %s\n",$1);
+ strncpy(right,$1,strlen($1)+1);
+ }
+ ;
+
+%%
+
+#include <ctype.h>
+#include <stdio.h>
+#include "structs.h"
+
+extern struct wlp_list_t *list;
+
+int yyerror (char *s) /* Called by yyparse on error */
+{
+ printf ("error: %s\n", s);
+ return 1;
+}
+
+int found(const char* left, const char* right, const char *owner)
+{
+ static struct wlp_node_t *node;
+
+ /* alloc node with non-empty fields (ie alloc them too)*/
+ node = wlpn_alloc(FALSE);
+ if(!node) {
+ DBG("wlpn_alloc in found returned NULL\n");
+ }
+
+ strncpy(node->right,right,strlen(right));
+ strncpy(node->left,left,strlen(left));
+ strncpy(node->owner,owner,strlen(owner));
+
+ #ifndef WITHQUOTES
+ /* remove quotes of value part */
+ node->right += 1;
+ node->right[strlen(node->right)-1] = '\0';
+ #endif
+ #ifndef WITHANGBRACKETS
+ /* remove angle brackets of owner part */
+ node->owner += 1;
+ node->owner[strlen(node->owner)-1] = '\0';
+ #endif
+
+ if(!list)
+ list = wlpl_init(node);
+ else
+ wlpn_add(list,node);
+}
diff --git a/wlp/C/macro.h b/wlp/C/macro.h
new file mode 100644
index 0000000..303b3c6
--- /dev/null
+++ b/wlp/C/macro.h
@@ -0,0 +1,44 @@
+/*
+ * macro.h - Copyright 2000, 2001 Cosimo Alfarano <Alfarano@CS.UniBo.It>
+ * You can use this software under the terms of the GPL. If we meet some day,
+ * and you think this stuff is worth it, you can buy me a beer in return.
+ *
+ * Thanks to md for this useful formula. Beer is beer.
+ */
+
+
+#ifndef _macro_h_
+#define _macro_h_
+
+#define LINELEN 2048
+#define TRUE 1
+#define FALSE 0
+
+/*
+#define WITHQUOTES
+#define WITHANGBRACKETS
+*/
+
+#define ERR(a,b...) fprintf(stderr, a, ## b)
+
+/* Define it for debug info on stderr (better if in .c module ...) */
+/*
+#ifndef DEBUG
+ #define DEBUG
+#endif
+*/
+
+
+#ifdef DEBUG
+ #define DBG(a...) fprintf(stderr, ## a)
+ /* for a verbose debug*/
+ #define VDBG(a,b...) fprintf(stderr, "%s(): " a, __FUNCTION__ , ## b)
+#else
+ #define DBG(a...)
+ #define VDBG(a...)
+#endif
+
+
+#endif
+
+/* EOF */
diff --git a/wlp/C/structs.c b/wlp/C/structs.c
new file mode 100644
index 0000000..8c33443
--- /dev/null
+++ b/wlp/C/structs.c
@@ -0,0 +1,164 @@
+/*
+ * structs.c - Copyright 2000 by Cosimo Alfarano <Alfarano@CS.UniBo.It>
+ * You can use this software under the terms of the GPL. If we meet some day,
+ * and you think this stuff is worth it, you can buy me a beer in return.
+ *
+ * Thanks to md for this useful formula. Beer is beer.
+ */
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "structs.h"
+#include "macro.h"
+
+struct wlp_node_t *wlpn_add(struct wlp_list_t *list,struct wlp_node_t *node)
+{
+ struct wlp_node_t *ret;
+
+ if(node) {
+ node->next = list->head;
+ node->prev = list->tail;
+
+ list->tail->next = node;
+ list->head->prev = node;
+
+ list->tail = node;
+
+ list->count++;
+
+ ret = node;
+ } else {
+ DBG("cannot add %s %s to list. NULL pointer?\n",
+ node->left,node->right);
+ ret = NULL;
+ }
+
+ return ret;
+}
+
+void wlpn_free(struct wlp_node_t *node)
+{
+ free(node->left);
+ free(node->right);
+ free(node->owner);
+ free(node);
+}
+
+
+struct wlp_node_t *wlpn_alloc(const char empty)
+{
+ static struct wlp_node_t *node;
+
+ node = calloc(sizeof(struct wlp_node_t),1);
+
+ if (!node) {
+ perror("wlpn_create malloc");
+
+ /* calloc set *node to zero, it I don't want alloc anything,
+ leave it untouched, else alloc fields */
+ } else if (!empty) {
+ node->left = calloc(LINELEN+1,1);
+ if (!node->left) {
+ perror("wlpn_create malloc (left)");
+ free(node);
+ node = NULL;
+ }
+
+ /*if node is NULL, previous calloc returned error...*/
+ if(node && !(node->right = calloc(LINELEN+1,1))) {
+ perror("wlpn_create malloc (right)");
+ free(node);
+ node = NULL;
+ }
+
+ if(node && !(node->owner = calloc(LINELEN+1,1))) {
+ perror("wlpn_create malloc (owner)");
+ free(node);
+ node = NULL;
+ }
+ }
+ return node;
+}
+
+struct wlp_list_t *wlpl_init(struct wlp_node_t *node)
+{
+ static struct wlp_list_t *list;
+
+ list = malloc(sizeof(struct wlp_list_t));
+
+ if (list) {
+ list->head = node;
+ list->tail = list->head;
+
+ list->head->next = list->head;
+ list->head->prev = list->head;
+
+ list->count=1;
+ } else {
+ perror("wlpl_init malloc");
+ return NULL;
+ }
+
+ return list;
+}
+
+
+struct wlp_node_t *wlpn_searchowner(struct wlp_list_t *mbl,const char *owner)
+{
+ struct wlp_node_t *ret;
+
+ DBG("searching for %s\n",owner);
+
+ if(!mbl)
+ ret = NULL;
+ else {
+ int found = FALSE;
+ ret = mbl->head;
+
+ do {
+ if(!strcmp(owner,ret->owner)) {
+ DBG("found!\n");
+ found = TRUE;
+ } else {
+ DBG("not found: %s\n",ret->onwer);
+ ret = ret->next;
+ }
+ } while(ret != mbl->head && !found);
+
+ if(!found)
+ ret = NULL;
+ }
+
+ DBG("%s\n", (ret)?ret->owner:"not found");
+
+ return ret;
+}
+
+
+struct wlp_node_t *wlpn_extract(struct wlp_list_t *list,struct wlp_node_t *node)
+{
+ struct wlp_node_t *ret;
+
+ if(list && node) {
+ node->prev->next = node->next;
+ node->next->prev = node->prev;
+
+ if(list->tail == node)
+ list->tail = node->prev;
+ if(list->head == node)
+ list->head = node->next;
+
+ list->count--;
+
+ ret = node;
+ } else {
+ DBG("wlpn_extract: list addr %l and node %l (one is NULL)\n",list,addr)
+ ret = NULL;
+ }
+
+ return ret;
+}
diff --git a/wlp/C/structs.h b/wlp/C/structs.h
new file mode 100644
index 0000000..92036a7
--- /dev/null
+++ b/wlp/C/structs.h
@@ -0,0 +1,35 @@
+/*
+ * structs.h - Copyright 2000, 2001 by Cosimo Alfarano <Alfarano@CS.UniBo.It>
+ * You can use this software under the terms of the GPL. If we meet some day,
+ * and you think this stuff is worth it, you can buy me a beer in return.
+ *
+ * Thanks to md for this useful formula. Beer is beer.
+ */
+
+#ifndef _structs_h_
+#define _structs_h_
+
+typedef struct wlp_node_t {
+ char *left,*right;
+ char *owner;
+ char type; /* unused */
+ struct wlp_node_t *next, *prev;
+} wlp_node_t;
+
+typedef struct wlp_list_t {
+ int count;
+ struct wlp_node_t *head, *tail;
+} wlp_list_t;
+
+
+/* white list parser data structure manipulation */
+struct wlp_list_t *wlpl_init(struct wlp_node_t *node);
+struct wlp_node_t *wlpn_alloc(const char empty);
+void wlpn_free(struct wlp_node_t *node);
+struct wlp_node_t *wlpn_add(struct wlp_list_t *wlpl,struct wlp_node_t *wlpn);
+struct wlp_node_t *wlpn_extract(struct wlp_list_t *wlpl,struct wlp_node_t *wlpn);
+/*struct wlp_node_t *wlpn_search(struct wlp_list_t *wlpl,const char id);*/
+
+#endif /* _structs_h_ */
+
+/* EOF */
diff --git a/wlp/C/test.c b/wlp/C/test.c
new file mode 100644
index 0000000..47717b5
--- /dev/null
+++ b/wlp/C/test.c
@@ -0,0 +1,113 @@
+#include <python2.1/Python.h> /* should be modified to be pythonX.Y */
+#include <stdio.h>
+#include <unistd.h>
+
+#include "structs.h"
+#include "macro.h"
+
+/* first declare static functions */
+
+struct wlp_list_t *list;
+
+static FILE *fd = NULL;
+
+static PyObject *node2dict(struct wlp_node_t *node);
+
+static PyObject *wlp_setfilebyname(PyObject *self, PyObject *args) {
+ char *file;
+
+ DBG("setfilebyname\n");
+ if (!PyArg_ParseTuple(args, "s", &file))
+ return NULL;
+
+ fd = fopen(file,"r");
+
+ return Py_None;
+}
+
+static PyObject *wlp_setfilebyfd(PyObject *self, PyObject *args) {
+ PyObject *file = NULL;
+
+ if (!PyArg_ParseTuple(args, "O", &file))
+ return NULL;
+
+ if(!file)
+ return NULL;
+
+ if(!PyFile_Check(file))
+ return NULL;
+
+ fd = PyFile_AsFile(file);
+
+ return Py_None;
+
+}
+
+
+
+static PyObject *wlp_mklist(PyObject *self, PyObject *args) {
+ struct wlp_node_t *tmp;
+ int count;
+
+ PyObject *pylist = NULL;
+
+ DBG("a\n");
+ parse(fd);
+
+ DBG("count %d\n"list->count);
+ pylist = PyList_New(0);
+
+ DBG("a\n");
+ if(!pylist)
+ return NULL;
+
+ DBG("a\n");
+ if(list)
+ for(tmp = list->head, count=0;
+ tmp != list->head || count == 0;
+ tmp = tmp->next, count++) {
+ DBG("FOUND(%d) '%s' ('%s': '%s')\n",count,tmp->owner,tmp->left,tmp->right);
+ if(PyList_Append(pylist,node2dict(tmp))==-1) {
+ DBG("List failed\n");
+ return NULL;
+ }
+ DBG("a\n");
+ }
+
+ return pylist;
+}
+
+
+static PyObject *node2dict(struct wlp_node_t *node) {
+ PyObject *dict = PyDict_New();
+
+ if(!dict)
+ return NULL;
+
+ PyDict_SetItem(dict,
+ Py_BuildValue("s","owner"),
+ Py_BuildValue("s",node->owner));
+
+ PyDict_SetItem(dict,
+ Py_BuildValue("s",node->left),
+ Py_BuildValue("s",node->right));
+
+ return dict;
+
+}
+
+/* second a table with methods/functions matching */
+
+static PyMethodDef wlp_methods[] = {
+ {"mklist", wlp_mklist, METH_VARARGS},
+ {"setfilebyname", wlp_setfilebyname, METH_VARARGS},
+ {"setfilebyfd", wlp_setfilebyfd, METH_VARARGS},
+ {NULL,NULL}
+};
+
+
+/* last the init function, the only one non-static */
+
+void initwlp() {
+ (void) Py_InitModule("wlp",wlp_methods);
+}
diff --git a/wlp/C/wlp.c b/wlp/C/wlp.c
new file mode 100644
index 0000000..8c0779d
--- /dev/null
+++ b/wlp/C/wlp.c
@@ -0,0 +1,183 @@
+/*
+ * wlp.c - Copyright 2000, 2001 by Cosimo Alfarano <Alfarano@CS.UniBo.It>
+ * You can use this software under the terms of the GPL. If we meet some day,
+ * and you think this stuff is worth it, you can buy me a beer in return.
+ *
+ * Thanks to md for this useful formula. Beer is beer.
+ */
+
+//#include <python/Python.h>
+#include <Python.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "structs.h"
+#include "macro.h"
+
+
+static FILE *fd = NULL;
+
+struct wlp_list_t *list;
+
+static PyObject *node2dict(struct wlp_node_t *node);
+static PyObject *node2dict2(struct wlp_node_t *node);
+
+
+
+
+/*
+ * wlp_setfilebyname(): get FILE* fd from filename string.
+ */
+
+static PyObject *wlp_setfilebyname(PyObject *self, PyObject *args) {
+ char *file;
+
+
+ DBG("setfilebyname\n");
+ if (!PyArg_ParseTuple(args, "s", &file))
+ return NULL;
+
+ if(fd = fopen(file,"r")) {
+ return Py_None;
+ } else {
+ PyErr_SetFromErrno(PyExc_Exception);
+/*
+ PyErr_SetString(PyExc_Exception,
+ (errno<=sys_nerr-1)?
+ sys_errlist[errno]:
+ "Unknown Error on fopen() of confifuration file");
+*/
+ return NULL;
+ }
+}
+
+
+
+/*
+ * wlp_setfilebydf(): get FILE* fd from FileObject.
+ */
+
+static PyObject *wlp_setfilebyfd(PyObject *self, PyObject *args) {
+ PyObject *file = NULL;
+
+ if(!PyArg_ParseTuple(args, "O", &file))
+ return NULL;
+
+ if(!file)
+ return NULL;
+
+ if(!PyFile_Check(file))
+ return NULL;
+
+ fd = PyFile_AsFile(file);
+
+ return Py_None;
+}
+
+/*
+ * wlp_mkdict(): make a dictonary of the form
+ * {ownername: {var1: val1, var2: val2,...}}
+ */
+
+static PyObject *wlp_mkdict(PyObject *self, PyObject *args) {
+ PyObject *pydicttmp = NULL;
+ PyObject *pydict = PyDict_New();
+ struct wlp_node_t *tmp;
+ int count;
+
+ if(!pydict)
+ return NULL;
+
+ /* fopen()*/
+ if(fd)
+ parse(fd);
+ else
+ return Py_None;
+
+ if(list)
+ for(tmp = list->head, count = 0;
+ tmp != list->head || count == 0;
+ tmp = tmp->next, count++) {
+ DBG("FOUND(%d) '%s' ('%s': '%s')\n",count,tmp->owner,tmp->left,tmp->right);
+ pydicttmp = PyDict_GetItem(pydict,
+ PyString_FromString(tmp->owner));
+
+ if(!pydicttmp) {
+ DBG("%s: owner not found, create new item\n",
+ tmp->owner);
+ PyDict_SetItemString(pydict,
+ tmp->owner,
+ node2dict(tmp));
+ } else {
+ DBG("%s: owner found,appendig items\n",
+ tmp->owner);
+ PyDict_SetItemString(pydicttmp,
+ tmp->left,
+ Py_BuildValue("s",tmp->right));
+ PyDict_SetItemString(pydict,
+ tmp->owner,
+ pydicttmp);
+ }
+ }
+
+ return pydict;
+}
+
+/*
+ * node2dict(): transoform a wlp_node_t node in a python dictionary of the form
+ * { var: val }
+ * to be used by mkdict()
+ */
+
+static PyObject *node2dict(struct wlp_node_t *node) {
+ PyObject *dict = PyDict_New();
+
+ if(!dict)
+ dict = Py_None;
+ else {
+ PyDict_SetItem(dict,
+ Py_BuildValue("s",node->left),
+ Py_BuildValue("s",node->right));
+ }
+
+ return dict;
+
+}
+
+
+/*
+ * node2dict2(): transoform a wlp_node_t node in a python dictionary of the form
+ * { 'owner': ownername, var: val}
+ * it's currently unused (obsoleted)
+ */
+
+static PyObject *node2dict2(struct wlp_node_t *node) {
+ PyObject *dict = PyDict_New();
+
+ if(!dict)
+ dict = Py_None;
+ else {
+ PyDict_SetItem(dict,
+ Py_BuildValue("s","owner"),
+ Py_BuildValue("s",node->owner));
+
+ PyDict_SetItem(dict,
+ Py_BuildValue("s",node->left),
+ Py_BuildValue("s",node->right));
+ }
+
+ return dict;
+
+}
+
+static PyMethodDef wlp_methods[] = {
+ {"mkdict", wlp_mkdict, METH_VARARGS},
+ {"setfilebyname", wlp_setfilebyname, METH_VARARGS},
+ {"setfilebyfd", wlp_setfilebyfd, METH_VARARGS},
+ {NULL,NULL}
+};
+
+
+void initwlp() {
+ (void) Py_InitModule("wlp",wlp_methods);
+}
diff --git a/wlp/C/yytest.c b/wlp/C/yytest.c
new file mode 100644
index 0000000..74c6fe7
--- /dev/null
+++ b/wlp/C/yytest.c
@@ -0,0 +1,25 @@
+#include <stdio.h>
+
+#include "structs.h"
+#include "macro.h"
+
+
+
+int parse(FILE *file);
+
+struct wlp_list_t *list;
+
+int main(int argc,char **argv) {
+ struct wlp_node_t *tmp;
+ int count;
+
+ parse(NULL);
+
+ if(list)
+ for(tmp = list->head, count=0;
+ tmp != list->head || count == 0;
+ tmp = tmp->next, count++)
+ printf("FOUND(%d) '%s' '%s' '%s'\n",count,tmp->left,tmp->right,tmp->owner);
+
+ return(0);
+}
diff --git a/wlp/Makefile b/wlp/Makefile
new file mode 100644
index 0000000..4e180d1
--- /dev/null
+++ b/wlp/Makefile
@@ -0,0 +1,42 @@
+MODULEDIR=module
+CSRCDIR=C
+BINDIR=..
+
+# modules name without $(MODULEDIR)
+SOLIST=test.so
+
+
+
+all: bin
+
+bin: initmodule wlp makemodule
+ chmod 0644 $(MODULEDIR)/*.so
+ mv $(MODULEDIR)/*.so $(BINDIR)
+
+# Init Makefile & Co. file for building python module
+initmodule:
+ $(MAKE) -C $(MODULEDIR) -f Makefile.pre.in boot
+
+# The White List Parser Module
+wlp:
+ $(MAKE) -C $(CSRCDIR) archive
+
+# Really make python module as .so
+makemodule:
+ $(MAKE) -C $(MODULEDIR)
+
+
+
+clean: cleanmodule cleansrc
+ -rm $(BINDIR)/*.so
+
+cleansrc:
+ -$(MAKE) -C $(CSRCDIR) clean
+
+cleanmodule:
+ -$(MAKE) -C $(MODULEDIR) clean
+ -rm $(MODULEDIR)/Makefile.pre $(MODULEDIR)/Makefile
+ -rm $(MODULEDIR)/config.c
+ -rm $(MODULEDIR)/sedscript
+ -rm $(MODULEDIR)/Setup
+
diff --git a/wlp/README b/wlp/README
new file mode 100644
index 0000000..a2f97a0
--- /dev/null
+++ b/wlp/README
@@ -0,0 +1,12 @@
+To make wlp python module extension type 'make', it should be sufficient.
+If it doesn't work, please, send a bug report with full make output to
+author or package maintainer and/or (better) try manually to do this steps and
+reporting output of the one which give error via email:
+
+make -C module -f Makefile.pre.in boot # to initialiaze python module Makefile
+make -C src archive # to compile python .c extension
+make -C module # to really make .so python module
+
+Please, remeber to report full output.
+
+Cosimo Alfarano <alfarano@cs.unibo.it>
diff --git a/wlp/module/Makefile.pre.in b/wlp/module/Makefile.pre.in
new file mode 100644
index 0000000..05f108b
--- /dev/null
+++ b/wlp/module/Makefile.pre.in
@@ -0,0 +1,310 @@
+# Universal Unix Makefile for Python extensions
+# =============================================
+
+# Short Instructions
+# ------------------
+
+# 1. Build and install Python (1.5 or newer).
+# 2. "make -f Makefile.pre.in boot"
+# 3. "make"
+# You should now have a shared library.
+
+# Long Instructions
+# -----------------
+
+# Build *and install* the basic Python 1.5 distribution. See the
+# Python README for instructions. (This version of Makefile.pre.in
+# only withs with Python 1.5, alpha 3 or newer.)
+
+# Create a file Setup.in for your extension. This file follows the
+# format of the Modules/Setup.dist file; see the instructions there.
+# For a simple module called "spam" on file "spammodule.c", it can
+# contain a single line:
+# spam spammodule.c
+# You can build as many modules as you want in the same directory --
+# just have a separate line for each of them in the Setup.in file.
+
+# If you want to build your extension as a shared library, insert a
+# line containing just the string
+# *shared*
+# at the top of your Setup.in file.
+
+# Note that the build process copies Setup.in to Setup, and then works
+# with Setup. It doesn't overwrite Setup when Setup.in is changed, so
+# while you're in the process of debugging your Setup.in file, you may
+# want to edit Setup instead, and copy it back to Setup.in later.
+# (All this is done so you can distribute your extension easily and
+# someone else can select the modules they actually want to build by
+# commenting out lines in the Setup file, without editing the
+# original. Editing Setup is also used to specify nonstandard
+# locations for include or library files.)
+
+# Copy this file (Misc/Makefile.pre.in) to the directory containing
+# your extension.
+
+# Run "make -f Makefile.pre.in boot". This creates Makefile
+# (producing Makefile.pre and sedscript as intermediate files) and
+# config.c, incorporating the values for sys.prefix, sys.exec_prefix
+# and sys.version from the installed Python binary. For this to work,
+# the python binary must be on your path. If this fails, try
+# make -f Makefile.pre.in Makefile VERSION=1.5 installdir=<prefix>
+# where <prefix> is the prefix used to install Python for installdir
+# (and possibly similar for exec_installdir=<exec_prefix>).
+
+# Note: "make boot" implies "make clobber" -- it assumes that when you
+# bootstrap you may have changed platforms so it removes all previous
+# output files.
+
+# If you are building your extension as a shared library (your
+# Setup.in file starts with *shared*), run "make" or "make sharedmods"
+# to build the shared library files. If you are building a statically
+# linked Python binary (the only solution of your platform doesn't
+# support shared libraries, and sometimes handy if you want to
+# distribute or install the resulting Python binary), run "make
+# python".
+
+# Note: Each time you edit Makefile.pre.in or Setup, you must run
+# "make Makefile" before running "make".
+
+# Hint: if you want to use VPATH, you can start in an empty
+# subdirectory and say (e.g.):
+# make -f ../Makefile.pre.in boot srcdir=.. VPATH=..
+
+
+# === Bootstrap variables (edited through "make boot") ===
+
+# The prefix used by "make inclinstall libainstall" of core python
+installdir= /usr/local
+
+# The exec_prefix used by the same
+exec_installdir=$(installdir)
+
+# Source directory and VPATH in case you want to use VPATH.
+# (You will have to edit these two lines yourself -- there is no
+# automatic support as the Makefile is not generated by
+# config.status.)
+srcdir= .
+VPATH= .
+
+# === Variables that you may want to customize (rarely) ===
+
+# (Static) build target
+TARGET= python
+
+# Installed python binary (used only by boot target)
+PYTHON= python
+
+# Add more -I and -D options here
+CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS)
+
+# These two variables can be set in Setup to merge extensions.
+# See example[23].
+BASELIB=
+BASESETUP=
+
+# === Variables set by makesetup ===
+
+MODOBJS= _MODOBJS_
+MODLIBS= _MODLIBS_
+
+# === Definitions added by makesetup ===
+
+# === Variables from configure (through sedscript) ===
+
+VERSION= @VERSION@
+CC= @CC@
+LINKCC= @LINKCC@
+SGI_ABI= @SGI_ABI@
+OPT= @OPT@
+LDFLAGS= @LDFLAGS@
+LDLAST= @LDLAST@
+DEFS= @DEFS@
+LIBS= @LIBS@
+LIBM= @LIBM@
+LIBC= @LIBC@
+RANLIB= @RANLIB@
+MACHDEP= @MACHDEP@
+SO= @SO@
+LDSHARED= @LDSHARED@
+CCSHARED= @CCSHARED@
+LINKFORSHARED= @LINKFORSHARED@
+CXX= @CXX@
+
+# Install prefix for architecture-independent files
+prefix= /usr/local
+
+# Install prefix for architecture-dependent files
+exec_prefix= $(prefix)
+
+# Uncomment the following two lines for AIX
+#LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC)
+#LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp
+
+# === Fixed definitions ===
+
+# Shell used by make (some versions default to the login shell, which is bad)
+SHELL= /bin/sh
+
+# Expanded directories
+BINDIR= $(exec_installdir)/bin
+LIBDIR= $(exec_prefix)/lib
+MANDIR= $(installdir)/share/man
+INCLUDEDIR= $(installdir)/include
+SCRIPTDIR= $(prefix)/lib
+
+# Detailed destination directories
+BINLIBDEST= $(LIBDIR)/python$(VERSION)
+LIBDEST= $(SCRIPTDIR)/python$(VERSION)
+INCLUDEPY= $(INCLUDEDIR)/python$(VERSION)
+EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION)
+LIBP= $(exec_installdir)/lib/python$(VERSION)
+DESTSHARED= $(BINLIBDEST)/site-packages
+
+LIBPL= $(LIBP)/config
+
+PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a
+
+MAKESETUP= $(LIBPL)/makesetup
+MAKEFILE= $(LIBPL)/Makefile
+CONFIGC= $(LIBPL)/config.c
+CONFIGCIN= $(LIBPL)/config.c.in
+SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup
+
+SYSLIBS= $(LIBM) $(LIBC)
+
+ADDOBJS= $(LIBPL)/python.o config.o
+
+# Portable install script (configure doesn't always guess right)
+INSTALL= $(LIBPL)/install-sh -c
+# Shared libraries must be installed with executable mode on some systems;
+# rather than figuring out exactly which, we always give them executable mode.
+# Also, making them read-only seems to be a good idea...
+INSTALL_SHARED= ${INSTALL} -m 555
+
+# === Fixed rules ===
+
+# Default target. This builds shared libraries only
+default: sharedmods
+
+# Build everything
+all: static sharedmods
+
+# Build shared libraries from our extension modules
+sharedmods: $(SHAREDMODS)
+
+# Build a static Python binary containing our extension modules
+static: $(TARGET)
+$(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB)
+ $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \
+ $(ADDOBJS) lib.a $(PYTHONLIBS) \
+ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \
+ -o $(TARGET) $(LDLAST)
+
+install: sharedmods
+ if test ! -d $(DESTSHARED) ; then \
+ mkdir $(DESTSHARED) ; else true ; fi
+ -for i in X $(SHAREDMODS); do \
+ if test $$i != X; \
+ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \
+ fi; \
+ done
+
+# Build the library containing our extension modules
+lib.a: $(MODOBJS)
+ -rm -f lib.a
+ ar cr lib.a $(MODOBJS)
+ -$(RANLIB) lib.a
+
+# This runs makesetup *twice* to use the BASESETUP definition from Setup
+config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP)
+ $(MAKESETUP) \
+ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP)
+ $(MAKE) -f Makefile do-it-again
+
+# Internal target to run makesetup for the second time
+do-it-again:
+ $(MAKESETUP) \
+ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP)
+
+# Make config.o from the config.c created by makesetup
+config.o: config.c
+ $(CC) $(CFLAGS) -c config.c
+
+# Setup is copied from Setup.in *only* if it doesn't yet exist
+Setup:
+ cp $(srcdir)/Setup.in Setup
+
+# Make the intermediate Makefile.pre from Makefile.pre.in
+Makefile.pre: Makefile.pre.in sedscript
+ sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre
+
+# Shortcuts to make the sed arguments on one line
+P=prefix
+E=exec_prefix
+H=Generated automatically from Makefile.pre.in by sedscript.
+L=LINKFORSHARED
+
+# Make the sed script used to create Makefile.pre from Makefile.pre.in
+sedscript: $(MAKEFILE)
+ sed -n \
+ -e '1s/.*/1i\\/p' \
+ -e '2s%.*%# $H%p' \
+ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \
+ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \
+ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \
+ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \
+ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \
+ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \
+ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \
+ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \
+ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \
+ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \
+ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \
+ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \
+ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \
+ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \
+ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \
+ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \
+ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \
+ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \
+ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \
+ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \
+ $(MAKEFILE) >sedscript
+ echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript
+ echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript
+ echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript
+ echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript
+ echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript
+ echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript
+ echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript
+ if grep 's%@DEFS' sedscript >/dev/null 2>&1; then \
+ :; \
+ else \
+ echo "s%@DEFS[@]%%" >>sedscript; \
+ fi
+
+
+# Bootstrap target
+boot: clobber
+ VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \
+ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \
+ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \
+ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \
+ VERSION=$$VERSION \
+ installdir=$$installdir \
+ exec_installdir=$$exec_installdir \
+ Makefile
+
+# Handy target to remove intermediate files and backups
+clean:
+ -rm -f *.o *~
+
+# Handy target to remove everything that is easily regenerated
+clobber: clean
+ -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript
+ -rm -f *.so *.sl so_locations
+
+
+# Handy target to remove everything you don't want to distribute
+distclean: clobber
+ -rm -f Makefile Setup
diff --git a/wlp/module/Makefile.pre.in.OLD b/wlp/module/Makefile.pre.in.OLD
new file mode 100644
index 0000000..4f3f2bd
--- /dev/null
+++ b/wlp/module/Makefile.pre.in.OLD
@@ -0,0 +1,304 @@
+# Universal Unix Makefile for Python extensions
+# =============================================
+
+# Short Instructions
+# ------------------
+
+# 1. Build and install Python (1.5 or newer).
+# 2. "make -f Makefile.pre.in boot"
+# 3. "make"
+# You should now have a shared library.
+
+# Long Instructions
+# -----------------
+
+# Build *and install* the basic Python 1.5 distribution. See the
+# Python README for instructions. (This version of Makefile.pre.in
+# only withs with Python 1.5, alpha 3 or newer.)
+
+# Create a file Setup.in for your extension. This file follows the
+# format of the Modules/Setup.dist file; see the instructions there.
+# For a simple module called "spam" on file "spammodule.c", it can
+# contain a single line:
+# spam spammodule.c
+# You can build as many modules as you want in the same directory --
+# just have a separate line for each of them in the Setup.in file.
+
+# If you want to build your extension as a shared library, insert a
+# line containing just the string
+# *shared*
+# at the top of your Setup.in file.
+
+# Note that the build process copies Setup.in to Setup, and then works
+# with Setup. It doesn't overwrite Setup when Setup.in is changed, so
+# while you're in the process of debugging your Setup.in file, you may
+# want to edit Setup instead, and copy it back to Setup.in later.
+# (All this is done so you can distribute your extension easily and
+# someone else can select the modules they actually want to build by
+# commenting out lines in the Setup file, without editing the
+# original. Editing Setup is also used to specify nonstandard
+# locations for include or library files.)
+
+# Copy this file (Misc/Makefile.pre.in) to the directory containing
+# your extension.
+
+# Run "make -f Makefile.pre.in boot". This creates Makefile
+# (producing Makefile.pre and sedscript as intermediate files) and
+# config.c, incorporating the values for sys.prefix, sys.exec_prefix
+# and sys.version from the installed Python binary. For this to work,
+# the python binary must be on your path. If this fails, try
+# make -f Makefile.pre.in Makefile VERSION=1.5 installdir=<prefix>
+# where <prefix> is the prefix used to install Python for installdir
+# (and possibly similar for exec_installdir=<exec_prefix>).
+
+# Note: "make boot" implies "make clobber" -- it assumes that when you
+# bootstrap you may have changed platforms so it removes all previous
+# output files.
+
+# If you are building your extension as a shared library (your
+# Setup.in file starts with *shared*), run "make" or "make sharedmods"
+# to build the shared library files. If you are building a statically
+# linked Python binary (the only solution of your platform doesn't
+# support shared libraries, and sometimes handy if you want to
+# distribute or install the resulting Python binary), run "make
+# python".
+
+# Note: Each time you edit Makefile.pre.in or Setup, you must run
+# "make Makefile" before running "make".
+
+# Hint: if you want to use VPATH, you can start in an empty
+# subdirectory and say (e.g.):
+# make -f ../Makefile.pre.in boot srcdir=.. VPATH=..
+
+
+# === Bootstrap variables (edited through "make boot") ===
+
+# The prefix used by "make inclinstall libainstall" of core python
+installdir= /usr/local
+
+# The exec_prefix used by the same
+exec_installdir=$(installdir)
+
+# Source directory and VPATH in case you want to use VPATH.
+# (You will have to edit these two lines yourself -- there is no
+# automatic support as the Makefile is not generated by
+# config.status.)
+srcdir= .
+VPATH= .
+
+# === Variables that you may want to customize (rarely) ===
+
+# (Static) build target
+TARGET= python
+
+# Installed python binary (used only by boot target)
+PYTHON= python
+
+# Add more -I and -D options here
+CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS)
+
+# These two variables can be set in Setup to merge extensions.
+# See example[23].
+BASELIB=
+BASESETUP=
+
+# === Variables set by makesetup ===
+
+MODOBJS= _MODOBJS_
+MODLIBS= _MODLIBS_
+
+# === Definitions added by makesetup ===
+
+# === Variables from configure (through sedscript) ===
+
+VERSION= @VERSION@
+CC= @CC@
+LINKCC= @LINKCC@
+SGI_ABI= @SGI_ABI@
+OPT= @OPT@
+LDFLAGS= @LDFLAGS@
+LDLAST= @LDLAST@
+DEFS= @DEFS@
+LIBS= @LIBS@
+LIBM= @LIBM@
+LIBC= @LIBC@
+RANLIB= @RANLIB@
+MACHDEP= @MACHDEP@
+SO= @SO@
+LDSHARED= @LDSHARED@
+CCSHARED= @CCSHARED@
+LINKFORSHARED= @LINKFORSHARED@
+CXX= @CXX@
+
+# Install prefix for architecture-independent files
+prefix= /usr/local
+
+# Install prefix for architecture-dependent files
+exec_prefix= $(prefix)
+
+# Uncomment the following two lines for AIX
+#LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC)
+#LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp
+
+# === Fixed definitions ===
+
+# Shell used by make (some versions default to the login shell, which is bad)
+SHELL= /bin/sh
+
+# Expanded directories
+BINDIR= $(exec_installdir)/bin
+LIBDIR= $(exec_prefix)/lib
+MANDIR= $(installdir)/share/man
+INCLUDEDIR= $(installdir)/include
+SCRIPTDIR= $(prefix)/lib
+
+# Detailed destination directories
+BINLIBDEST= $(LIBDIR)/python$(VERSION)
+LIBDEST= $(SCRIPTDIR)/python$(VERSION)
+INCLUDEPY= $(INCLUDEDIR)/python$(VERSION)
+EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION)
+LIBP= $(exec_installdir)/lib/python$(VERSION)
+DESTSHARED= $(BINLIBDEST)/site-packages
+
+LIBPL= $(LIBP)/config
+
+PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a
+
+MAKESETUP= $(LIBPL)/makesetup
+MAKEFILE= $(LIBPL)/Makefile
+CONFIGC= $(LIBPL)/config.c
+CONFIGCIN= $(LIBPL)/config.c.in
+SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup
+
+SYSLIBS= $(LIBM) $(LIBC)
+
+ADDOBJS= $(LIBPL)/python.o config.o
+
+# Portable install script (configure doesn't always guess right)
+INSTALL= $(LIBPL)/install-sh -c
+# Shared libraries must be installed with executable mode on some systems;
+# rather than figuring out exactly which, we always give them executable mode.
+# Also, making them read-only seems to be a good idea...
+INSTALL_SHARED= ${INSTALL} -m 555
+
+# === Fixed rules ===
+
+# Default target. This builds shared libraries only
+default: sharedmods
+
+# Build everything
+all: static sharedmods
+
+# Build shared libraries from our extension modules
+sharedmods: $(SHAREDMODS)
+
+# Build a static Python binary containing our extension modules
+static: $(TARGET)
+$(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB)
+ $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \
+ $(ADDOBJS) lib.a $(PYTHONLIBS) \
+ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \
+ -o $(TARGET) $(LDLAST)
+
+install: sharedmods
+ if test ! -d $(DESTSHARED) ; then \
+ mkdir $(DESTSHARED) ; else true ; fi
+ -for i in X $(SHAREDMODS); do \
+ if test $$i != X; \
+ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \
+ fi; \
+ done
+
+# Build the library containing our extension modules
+lib.a: $(MODOBJS)
+ -rm -f lib.a
+ ar cr lib.a $(MODOBJS)
+ -$(RANLIB) lib.a
+
+# This runs makesetup *twice* to use the BASESETUP definition from Setup
+config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP)
+ $(MAKESETUP) \
+ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP)
+ $(MAKE) -f Makefile do-it-again
+
+# Internal target to run makesetup for the second time
+do-it-again:
+ $(MAKESETUP) \
+ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP)
+
+# Make config.o from the config.c created by makesetup
+config.o: config.c
+ $(CC) $(CFLAGS) -c config.c
+
+# Setup is copied from Setup.in *only* if it doesn't yet exist
+Setup:
+ cp $(srcdir)/Setup.in Setup
+
+# Make the intermediate Makefile.pre from Makefile.pre.in
+Makefile.pre: Makefile.pre.in sedscript
+ sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre
+
+# Shortcuts to make the sed arguments on one line
+P=prefix
+E=exec_prefix
+H=Generated automatically from Makefile.pre.in by sedscript.
+L=LINKFORSHARED
+
+# Make the sed script used to create Makefile.pre from Makefile.pre.in
+sedscript: $(MAKEFILE)
+ sed -n \
+ -e '1s/.*/1i\\/p' \
+ -e '2s%.*%# $H%p' \
+ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \
+ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \
+ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \
+ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \
+ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \
+ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \
+ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \
+ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \
+ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \
+ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \
+ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \
+ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \
+ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \
+ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \
+ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \
+ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \
+ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \
+ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \
+ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \
+ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \
+ $(MAKEFILE) >sedscript
+ echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript
+ echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript
+ echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript
+ echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript
+ echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript
+ echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript
+ echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript
+
+# Bootstrap target
+boot: clobber
+ VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \
+ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \
+ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \
+ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \
+ VERSION=$$VERSION \
+ installdir=$$installdir \
+ exec_installdir=$$exec_installdir \
+ Makefile
+
+# Handy target to remove intermediate files and backups
+clean:
+ -rm -f *.o *~
+
+# Handy target to remove everything that is easily regenerated
+clobber: clean
+ -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript
+ -rm -f *.so *.sl so_locations
+
+
+# Handy target to remove everything you don't want to distribute
+distclean: clobber
+ -rm -f Makefile Setup
diff --git a/wlp/module/Setup.in b/wlp/module/Setup.in
new file mode 100644
index 0000000..18cce4d
--- /dev/null
+++ b/wlp/module/Setup.in
@@ -0,0 +1,88 @@
+# -*- makefile -*-
+# The file Setup is used by the makesetup script to construct the files
+# Makefile and config.c, from Makefile.pre and config.c.in,
+# respectively. The file Setup itself is initially copied from
+# Setup.in; once it exists it will not be overwritten, so you can edit
+# Setup to your heart's content. Note that Makefile.pre is created
+# from Makefile.pre.in by the toplevel configure script.
+
+# (VPATH notes: Setup and Makefile.pre are in the build directory, as
+# are Makefile and config.c; the *.in files are in the source
+# directory.)
+
+# Each line in this file describes one or more optional modules.
+# Comment out lines to suppress modules.
+# Lines have the following structure:
+#
+# <module> ... [<sourcefile> ...] [<cpparg> ...] [<library> ...]
+
+# <sourcefile> is anything ending in .c (.C, .cc, .c++ are C++ files)
+# <cpparg> is anything starting with -I, -D, -U or -C
+# <library> is anything ending in .a or beginning with -l or -L
+# <module> is anything else but should be a valid Python
+# identifier (letters, digits, underscores, beginning with non-digit)
+#
+# (As the makesetup script changes, it may recognize some other
+# arguments as well, e.g. *.so and *.sl as libraries. See the big
+# case statement in the makesetup script.)
+#
+# Lines can also have the form
+#
+# <name> = <value>
+#
+# which defines a Make variable definition inserted into Makefile.in
+#
+# Finally, if a line contains just the word "*shared*" (without the
+# quotes but with the stars), then the following modules will not be
+# included in the config.c file, nor in the list of objects to be
+# added to the library archive, and their linker options won't be
+# added to the linker options, but rules to create their .o files and
+# their shared libraries will still be added to the Makefile, and
+# their names will be collected in the Make variable SHAREDMODS. This
+# is used to build modules as shared libraries. (They can be
+# installed using "make sharedinstall", which is implied by the
+# toplevel "make install" target.) (For compatibility,
+# *noconfig* has the same effect as *shared*.)
+#
+# In addition, *static* reverses this effect (negating a previous
+# *shared* line).
+
+# NOTE: As a standard policy, as many modules as can be supported by a
+# platform should be present. The distribution comes with all modules
+# enabled that are supported by most platforms and don't require you
+# to ftp sources from elsewhere.
+
+*static*
+# Some special rules to define PYTHONPATH.
+# Edit the definitions below to indicate which options you are using.
+# Don't add any whitespace or comments!
+
+# Directories where library files get installed.
+# DESTLIB is for Python modules; MACHDESTLIB for shared libraries.
+DESTLIB=$(LIBDEST)
+MACHDESTLIB=$(BINLIBDEST)
+
+# NOTE: all the paths are now relative to the prefix that is computed
+# at run time!
+
+# Standard path -- don't edit.
+# No leading colon since this is the first entry.
+# Empty since this is now just the runtime prefix.
+DESTPATH=
+
+# Site specific path components -- should begin with : if non-empty
+SITEPATH=
+
+# Standard path components for test modules
+TESTPATH=
+
+# Path components for machine- or system-dependent modules and shared libraries
+MACHDEPPATH=:plat-$(MACHDEP)
+
+COREPYTHONPATH=$(DESTPATH)$(SITEPATH)$(MACHDEPPATH)$(STDWINPATH)$(TKPATH)
+PYTHONPATH=$(COREPYTHONPATH)
+
+*shared*
+
+WLPSRCDIR=../C
+wlp $(WLPSRCDIR)/wlp.c $(WLPSRCDIR)/wlp.a
diff --git a/wlp/module/makesetup b/wlp/module/makesetup
new file mode 100755
index 0000000..0fefcff
--- /dev/null
+++ b/wlp/module/makesetup
@@ -0,0 +1,261 @@
+#! /bin/sh
+
+# Convert templates into Makefile and config.c, based on the module
+# definitions found in the file Setup.
+#
+# Usage: makesetup [-s dir] [-c file] [-m file] [Setup] ... [-n [Setup] ...]
+#
+# Options:
+# -s directory: alternative source directory (default derived from $0)
+# -c file: alternative config.c template (default $srcdir/config.c.in)
+# -c -: don't write config.c
+# -m file: alternative Makefile template (default ./Makefile.pre)
+# -m -: don't write Makefile
+#
+# Remaining arguments are one or more Setup files (default ./Setup).
+# Setup files after a -n option are used for their variables, modules
+# and libraries but not for their .o files.
+#
+# See Setup.in for a description of the format of the Setup file.
+#
+# The following edits are made:
+#
+# Copying config.c.in to config.c:
+# - insert an identifying comment at the start
+# - for each <module> mentioned in Setup before *noconfig*:
+# + insert 'extern void init<module>();' before MARKER 1
+# + insert '{"<module>", initmodule},' before MARKER 2
+#
+# Copying Makefile.pre to Makefile:
+# - insert an identifying comment at the start
+# - replace _MODOBJS_ by the list of objects from Setup (except for
+# Setup files after a -n option)
+# - replace _MODLIBS_ by the list of libraries from Setup
+# - for each object file mentioned in Setup, append a rule
+# '<file>.o: <file>.c; <build commands>' to the end of the Makefile
+# - for each module mentioned in Setup, append a rule
+# which creates a shared library version to the end of the Makefile
+# - for each variable definition found in Setup, insert the definition
+# before the comment 'Definitions added by makesetup'
+
+# Loop over command line options
+usage='
+usage: makesetup [-s srcdir] [-c config.c.in] [-m Makefile.pre]
+ [Setup] ... [-n [Setup] ...]'
+srcdir=''
+config=''
+makepre=''
+noobjects=''
+doconfig=yes
+while :
+do
+ case $1 in
+ -s) shift; srcdir=$1; shift;;
+ -c) shift; config=$1; shift;;
+ -m) shift; makepre=$1; shift;;
+ --) shift; break;;
+ -n) noobjects=yes;;
+ -*) echo "$usage" 1>&2; exit 2;;
+ *) break;;
+ esac
+done
+
+# Set default srcdir and config if not set by command line
+# (Not all systems have dirname)
+case $srcdir in
+'') case $0 in
+ */*) srcdir=`echo $0 | sed 's,/[^/]*$,,'`;;
+ *) srcdir=.;;
+ esac;;
+esac
+case $config in
+'') config=$srcdir/config.c.in;;
+esac
+case $makepre in
+'') makepre=Makefile.pre;;
+esac
+
+# Newline for sed i and a commands
+NL='\
+'
+
+# Main loop
+for i in ${*-Setup}
+do
+ case $i in
+ -n) echo '*noobjects*';;
+ *) echo '*doconfig*'; cat "$i";;
+ esac
+done |
+sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
+(
+ rulesf="@rules.$$"
+ trap 'rm -f $rulesf' 0 1 2 3
+ echo "
+# Rules appended by makedepend
+" >$rulesf
+ DEFS=
+ MODS=
+ SHAREDMODS=
+ OBJS=
+ LIBS=
+ LOCALLIBS=
+ BASELIBS=
+ while read line
+ do
+ # Output DEFS in reverse order so first definition overrides
+ case $line in
+ *=*) DEFS="$line$NL$DEFS"; continue;;
+ 'include '*) DEFS="$line$NL$DEFS"; continue;;
+ '*noobjects*')
+ case $noobjects in
+ yes) ;;
+ *) LOCALLIBS=$LIBS; LIBS=;;
+ esac
+ noobjects=yes;
+ continue;;
+ '*doconfig*') doconfig=yes; continue;;
+ '*static*') doconfig=yes; continue;;
+ '*noconfig*') doconfig=no; continue;;
+ '*shared*') doconfig=no; continue;;
+ esac
+ srcs=
+ cpps=
+ libs=
+ mods=
+ skip=
+ for arg in $line
+ do
+ case $skip in
+ libs) libs="$libs $arg"; skip=; continue;;
+ cpps) cpps="$cpps $arg"; skip=; continue;;
+ srcs) srcs="$srcs $arg"; skip=; continue;;
+ esac
+ case $arg in
+ -[IDUC]*) cpps="$cpps $arg";;
+ -Xlinker) libs="$libs $arg"; skip=libs;;
+ -[A-Zl]*) libs="$libs $arg";;
+ *.a) libs="$libs $arg";;
+ *.so) libs="$libs $arg";;
+ *.sl) libs="$libs $arg";;
+ /*.o) libs="$libs $arg";;
+ *.o) srcs="$srcs `basename $arg .o`.c";;
+ *.[cC]) srcs="$srcs $arg";;
+ *.cc) srcs="$srcs $arg";;
+ *.c++) srcs="$srcs $arg";;
+ *.cxx) srcs="$srcs $arg";;
+ *.cpp) srcs="$srcs $arg";;
+ \$*) libs="$libs $arg"
+ cpps="$cpps $arg";;
+ *.*) echo 1>&2 "bad word $arg in $line"
+ exit 1;;
+ -u) skip=libs; libs="$libs -u";;
+ [a-zA-Z_]*) mods="$mods $arg";;
+ *) echo 1>&2 "bad word $arg in $line"
+ exit 1;;
+ esac
+ done
+ case $doconfig in
+ yes)
+ LIBS="$LIBS $libs"
+ MODS="$MODS $mods"
+ ;;
+ esac
+ case $noobjects in
+ yes) continue;;
+ esac
+ objs=''
+ for src in $srcs
+ do
+ case $src in
+ *.c) obj=`basename $src .c`.o; cc='$(CC)';;
+ *.cc) obj=`basename $src .cc`.o; cc='$(CCC)';;
+ *.c++) obj=`basename $src .c++`.o; cc='$(CCC)';;
+ *.C) obj=`basename $src .C`.o; cc='$(CCC)';;
+ *.cxx) obj=`basename $src .cxx`.o; cc='$(CCC)';;
+ *.cpp) obj=`basename $src .cpp`.o; cc='$(CCC)';;
+ *) continue;;
+ esac
+ objs="$objs $obj"
+ case $src in
+ glmodule.c) ;;
+ /*) ;;
+ *) src='$(srcdir)/'$src;;
+ esac
+ case $doconfig in
+ no) cc="$cc \$(CCSHARED)";;
+ esac
+ rule="$obj: $src; $cc $cpps \$(CFLAGS) -c $src"
+ echo "$rule" >>$rulesf
+ done
+ case $doconfig in
+ yes) OBJS="$OBJS $objs";;
+ esac
+ for mod in $mods
+ do
+ case $objs in
+ *$mod.o*) base=$mod;;
+ *) base=${mod}module;;
+ esac
+ file="$base\$(SO)"
+ case $doconfig in
+ no) SHAREDMODS="$SHAREDMODS $file";;
+ esac
+ rule="$file: $objs"
+ rule="$rule; \$(LDSHARED) $objs $libs -o $file"
+ echo "$rule" >>$rulesf
+ done
+ done
+
+ case $SHAREDMODS in
+ '') ;;
+ *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";;
+ esac
+
+ case $noobjects in
+ yes) BASELIBS=$LIBS;;
+ *) LOCALLIBS=$LIBS;;
+ esac
+ LIBS='$(LOCALMODLIBS) $(BASEMODLIBS)'
+ DEFS="BASEMODLIBS=$BASELIBS$NL$DEFS"
+ DEFS="LOCALMODLIBS=$LOCALLIBS$NL$DEFS"
+
+ EXTDECLS=
+ INITBITS=
+ for mod in $MODS
+ do
+ EXTDECLS="${EXTDECLS}extern void init$mod();$NL"
+ INITBITS="${INITBITS} {\"$mod\", init$mod},$NL"
+ done
+
+
+ case $config in
+ -) ;;
+ *) sed -e "
+ 1i$NL/* Generated automatically from $config by makesetup. */
+ /MARKER 1/i$NL$EXTDECLS
+
+ /MARKER 2/i$NL$INITBITS
+
+ " $config >config.c
+ ;;
+ esac
+
+ case $makepre in
+ -) ;;
+ *) sedf="@sed.in.$$"
+ trap 'rm -f $sedf' 0 1 2 3
+ echo "1i\\" >$sedf
+ str="# Generated automatically from $makepre by makesetup."
+ echo "$str" >>$sedf
+ echo "s%_MODOBJS_%$OBJS%" >>$sedf
+ echo "s%_MODLIBS_%$LIBS%" >>$sedf
+ echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf
+ sed -f $sedf $makepre >Makefile
+ cat $rulesf >>Makefile
+ rm -f $sedf
+ ;;
+ esac
+
+ rm -f $rulesf
+)
diff --git a/wlp/module/patch b/wlp/module/patch
new file mode 100644
index 0000000..bc798fa
--- /dev/null
+++ b/wlp/module/patch
@@ -0,0 +1,13 @@
+diff -ru pyg-0.9.6-old/wlp/module/Makefile.pre.in pyg-0.9.6/wlp/module/Makefile.pre.in
+--- pyg-0.9.6-old/wlp/module/Makefile.pre.in 2003-11-04 08:49:29.000000000 -0800
++++ pyg-0.9.6/wlp/module/Makefile.pre.in 2003-11-04 09:25:16.000000000 -0800
+@@ -278,6 +278,9 @@
+ echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript
+ echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript
+ echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript
++ if ! grep 's%@DEFS' sedscript >/dev/null 2>&1; then \
++ echo "s%@DEFS[@]%%" >>sedscript; \
++ fi
+
+ # Bootstrap target
+ boot: clobber