Merge branch 'py3k' of git://github.com/TingPing/hexchat
This commit is contained in:
commit
1f525a6f4b
10
configure.ac
10
configure.ac
|
@ -352,13 +352,17 @@ if test "x$python" != xno ; then
|
||||||
PYPLAT_INC=`$pythonpath -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_inc(plat_specific=True));'`
|
PYPLAT_INC=`$pythonpath -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_inc(plat_specific=True));'`
|
||||||
changequote([, ])dnl
|
changequote([, ])dnl
|
||||||
AC_MSG_RESULT($PY_VER)
|
AC_MSG_RESULT($PY_VER)
|
||||||
$pythonpath -c "import sys; float(sys.version[[:3]]) >= 2.2 and int(sys.version[[0]]) < 3 or sys.exit(1)"
|
$pythonpath -c "import sys; float(sys.version[[:3]]) >= 2.6 and int(sys.version[[0]]) <= 3 or sys.exit(1)"
|
||||||
if test "$?" != "1"; then
|
if test "$?" != "1"; then
|
||||||
AC_MSG_CHECKING(Python compile flags)
|
AC_MSG_CHECKING(Python compile flags)
|
||||||
PY_PREFIX=`$pythonpath -c 'import sys; print(sys.prefix)'`
|
PY_PREFIX=`$pythonpath -c 'import sys; print(sys.prefix)'`
|
||||||
PY_EXEC_PREFIX=`$pythonpath -c 'import sys; print(sys.exec_prefix)'`
|
PY_EXEC_PREFIX=`$pythonpath -c 'import sys; print(sys.exec_prefix)'`
|
||||||
if test -f $PY_INC/Python.h || test -f $PYPLAT_INC/Python.h; then
|
if test -f $PY_INC/Python.h || test -f $PYPLAT_INC/Python.h; then
|
||||||
PY_LIBS="-L$PY_LIB/config -lpython$PY_VER -lpthread -lutil"
|
AS_VERSION_COMPARE($PY_VER, 3.0,
|
||||||
|
[PYL="$PY_VER"], # less than
|
||||||
|
[PYL="${PY_VER}m"], # equal
|
||||||
|
[PYL="${PY_VER}m"]) # greater than
|
||||||
|
PY_LIBS="-L$PY_LIB/config -lpython$PYL -lpthread -lutil"
|
||||||
PY_CFLAGS="-I$PY_INC -I$PYPLAT_INC"
|
PY_CFLAGS="-I$PY_INC -I$PYPLAT_INC"
|
||||||
AC_MSG_RESULT(ok)
|
AC_MSG_RESULT(ok)
|
||||||
else
|
else
|
||||||
|
@ -366,7 +370,7 @@ if test "x$python" != xno ; then
|
||||||
AC_MSG_RESULT([Can\'t find Python.h])
|
AC_MSG_RESULT([Can\'t find Python.h])
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Python is too old or too new. Only 2.2-2.7 are supported."
|
echo "Python is too old or too new. Only 2.6-3.x are supported."
|
||||||
python=no
|
python=no
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
|
#include <glib/gstdio.h>
|
||||||
#include "../../src/dirent/dirent-win32.h"
|
#include "../../src/dirent/dirent-win32.h"
|
||||||
#include "../../config-win32.h"
|
#include "../../config-win32.h"
|
||||||
#else
|
#else
|
||||||
|
@ -71,14 +72,36 @@
|
||||||
#include "structmember.h"
|
#include "structmember.h"
|
||||||
#include "pythread.h"
|
#include "pythread.h"
|
||||||
|
|
||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 9
|
#define VERSION_MINOR 0
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION == 2
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#undef WITH_THREAD /* Thread support locks up xchat on Win32. */
|
#undef WITH_THREAD
|
||||||
#define VERSION "0.9/2.7" /* Linked to python27.dll */
|
#define VERSION "1.0/2.7" /* Linked to python27.dll */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef PyLong_Check
|
||||||
|
#define PyLong_Check PyInt_Check
|
||||||
|
#define PyLong_AsLong PyInt_AsLong
|
||||||
|
#define PyLong_FromLong PyInt_FromLong
|
||||||
|
|
||||||
|
#undef PyUnicode_Check
|
||||||
|
#undef PyUnicode_FromString
|
||||||
|
#define PyUnicode_Check PyString_Check
|
||||||
|
#define PyUnicode_AsFormat PyString_AsFormat
|
||||||
|
#define PyUnicode_FromString PyString_FromString
|
||||||
|
#define PyUnicode_AsUTF8 PyString_AsString
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define VERSION "0.9"
|
#define IS_PY3K
|
||||||
|
#ifdef WIN32
|
||||||
|
#define VERSION "1.0/3.3" /* Linked to python33.dll */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef VERSION
|
||||||
|
#define VERSION "1.0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NONE 0
|
#define NONE 0
|
||||||
|
@ -252,8 +275,7 @@ static PyObject *Context_compare(ContextObject *a, ContextObject *b, int op);
|
||||||
static PyObject *Context_FromContext(hexchat_context *context);
|
static PyObject *Context_FromContext(hexchat_context *context);
|
||||||
static PyObject *Context_FromServerAndChannel(char *server, char *channel);
|
static PyObject *Context_FromServerAndChannel(char *server, char *channel);
|
||||||
|
|
||||||
static PyObject *Plugin_New(char *filename, PyMethodDef *xchat_methods,
|
static PyObject *Plugin_New(char *filename, PyObject *xcoobj);
|
||||||
PyObject *xcoobj);
|
|
||||||
static PyObject *Plugin_GetCurrent();
|
static PyObject *Plugin_GetCurrent();
|
||||||
static PluginObject *Plugin_ByString(char *str);
|
static PluginObject *Plugin_ByString(char *str);
|
||||||
static Hook *Plugin_AddHook(int type, PyObject *plugin, PyObject *callback,
|
static Hook *Plugin_AddHook(int type, PyObject *plugin, PyObject *callback,
|
||||||
|
@ -299,10 +321,10 @@ static int Command_Py(char *word[], char *word_eol[], void *userdata);
|
||||||
/* ===================================================================== */
|
/* ===================================================================== */
|
||||||
/* Static declarations and definitions */
|
/* Static declarations and definitions */
|
||||||
|
|
||||||
staticforward PyTypeObject Plugin_Type;
|
static PyTypeObject Plugin_Type;
|
||||||
staticforward PyTypeObject XChatOut_Type;
|
static PyTypeObject XChatOut_Type;
|
||||||
staticforward PyTypeObject Context_Type;
|
static PyTypeObject Context_Type;
|
||||||
staticforward PyTypeObject ListItem_Type;
|
static PyTypeObject ListItem_Type;
|
||||||
|
|
||||||
static PyThreadState *main_tstate = NULL;
|
static PyThreadState *main_tstate = NULL;
|
||||||
static void *thread_timer = NULL;
|
static void *thread_timer = NULL;
|
||||||
|
@ -355,7 +377,7 @@ Util_BuildList(char *word[])
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
for (i = 0; i != listsize; i++) {
|
for (i = 0; i != listsize; i++) {
|
||||||
PyObject *o = PyString_FromString(word[i]);
|
PyObject *o = PyUnicode_FromString(word[i]);
|
||||||
if (o == NULL) {
|
if (o == NULL) {
|
||||||
Py_DECREF(list);
|
Py_DECREF(list);
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
|
@ -400,25 +422,10 @@ Util_Autoload()
|
||||||
|
|
||||||
xdir = hexchat_get_info(ph, "configdir");
|
xdir = hexchat_get_info(ph, "configdir");
|
||||||
|
|
||||||
/* don't pollute the filesystem with script files, this only causes misuse of the folders
|
|
||||||
* only use ~/.config/hexchat/addons/ and %APPDATA%\HexChat\addons */
|
|
||||||
#if 0
|
|
||||||
/* auto-load from ~/.config/hexchat/ or %APPDATA%\HexChat\ */
|
|
||||||
Util_Autoload_from(hexchat_get_info(ph, "configdir"));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* auto-load from subdirectory addons */
|
/* auto-load from subdirectory addons */
|
||||||
sub_dir = malloc (strlen (xdir) + 8);
|
sub_dir = g_build_filename (xdir, "addons", NULL);
|
||||||
strcpy (sub_dir, xdir);
|
|
||||||
strcat (sub_dir, "/addons");
|
|
||||||
Util_Autoload_from(sub_dir);
|
Util_Autoload_from(sub_dir);
|
||||||
free (sub_dir);
|
g_free (sub_dir);
|
||||||
|
|
||||||
#if 0
|
|
||||||
#ifdef WIN32 /* also auto-load C:\Program Files\HexChat\Plugins\*.py */
|
|
||||||
Util_Autoload_from(HEXCHATLIBDIR"/plugins");
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
|
@ -511,7 +518,7 @@ Callback_Command(char *word[], char *word_eol[], void *userdata)
|
||||||
ret = HEXCHAT_EAT_NONE;
|
ret = HEXCHAT_EAT_NONE;
|
||||||
Py_DECREF(retobj);
|
Py_DECREF(retobj);
|
||||||
} else if (retobj) {
|
} else if (retobj) {
|
||||||
ret = PyInt_AsLong(retobj);
|
ret = PyLong_AsLong(retobj);
|
||||||
Py_DECREF(retobj);
|
Py_DECREF(retobj);
|
||||||
} else {
|
} else {
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
|
@ -597,7 +604,7 @@ Callback_Print(char *word[], void *userdata)
|
||||||
ret = HEXCHAT_EAT_NONE;
|
ret = HEXCHAT_EAT_NONE;
|
||||||
Py_DECREF(retobj);
|
Py_DECREF(retobj);
|
||||||
} else if (retobj) {
|
} else if (retobj) {
|
||||||
ret = PyInt_AsLong(retobj);
|
ret = PyLong_AsLong(retobj);
|
||||||
Py_DECREF(retobj);
|
Py_DECREF(retobj);
|
||||||
} else {
|
} else {
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
|
@ -643,7 +650,9 @@ static int
|
||||||
Callback_ThreadTimer(void *userdata)
|
Callback_ThreadTimer(void *userdata)
|
||||||
{
|
{
|
||||||
RELEASE_XCHAT_LOCK();
|
RELEASE_XCHAT_LOCK();
|
||||||
|
#ifndef WIN32
|
||||||
usleep(1);
|
usleep(1);
|
||||||
|
#endif
|
||||||
ACQUIRE_XCHAT_LOCK();
|
ACQUIRE_XCHAT_LOCK();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -672,7 +681,7 @@ XChatOut_New()
|
||||||
static void
|
static void
|
||||||
XChatOut_dealloc(PyObject *self)
|
XChatOut_dealloc(PyObject *self)
|
||||||
{
|
{
|
||||||
self->ob_type->tp_free((PyObject *)self);
|
Py_TYPE(self)->tp_free((PyObject *)self);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is a little bit complex because we have to buffer data
|
/* This is a little bit complex because we have to buffer data
|
||||||
|
@ -765,9 +774,8 @@ static PyMethodDef XChatOut_methods[] = {
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
statichere PyTypeObject XChatOut_Type = {
|
static PyTypeObject XChatOut_Type = {
|
||||||
PyObject_HEAD_INIT(NULL)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
0, /*ob_size*/
|
|
||||||
"hexchat.XChatOut", /*tp_name*/
|
"hexchat.XChatOut", /*tp_name*/
|
||||||
sizeof(XChatOutObject), /*tp_basicsize*/
|
sizeof(XChatOutObject), /*tp_basicsize*/
|
||||||
0, /*tp_itemsize*/
|
0, /*tp_itemsize*/
|
||||||
|
@ -805,7 +813,7 @@ statichere PyTypeObject XChatOut_Type = {
|
||||||
0, /*tp_init*/
|
0, /*tp_init*/
|
||||||
PyType_GenericAlloc, /*tp_alloc*/
|
PyType_GenericAlloc, /*tp_alloc*/
|
||||||
PyType_GenericNew, /*tp_new*/
|
PyType_GenericNew, /*tp_new*/
|
||||||
_PyObject_Del, /*tp_free*/
|
PyObject_Del, /*tp_free*/
|
||||||
0, /*tp_is_gc*/
|
0, /*tp_is_gc*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -816,7 +824,7 @@ statichere PyTypeObject XChatOut_Type = {
|
||||||
static void
|
static void
|
||||||
Context_dealloc(PyObject *self)
|
Context_dealloc(PyObject *self)
|
||||||
{
|
{
|
||||||
self->ob_type->tp_free((PyObject *)self);
|
Py_TYPE(self)->tp_free((PyObject *)self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -874,7 +882,7 @@ Context_emit_print(ContextObject *self, PyObject *args)
|
||||||
argv[3], argv[4], argv[5],
|
argv[3], argv[4], argv[5],
|
||||||
argv[6], argv[7], argv[8]);
|
argv[6], argv[7], argv[8]);
|
||||||
END_XCHAT_CALLS();
|
END_XCHAT_CALLS();
|
||||||
return PyInt_FromLong(res);
|
return PyLong_FromLong(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -892,7 +900,7 @@ Context_get_info(ContextObject *self, PyObject *args)
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
return PyString_FromString(info);
|
return PyUnicode_FromString(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -922,10 +930,10 @@ Context_compare(ContextObject *a, ContextObject *b, int op)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PyErr_SetString(PyExc_TypeError, "contexts are either equal or not equal");
|
PyErr_SetString(PyExc_TypeError, "contexts are either equal or not equal");
|
||||||
|
Py_INCREF(Py_None);
|
||||||
ret = Py_None;
|
ret = Py_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_INCREF(ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -939,9 +947,8 @@ static PyMethodDef Context_methods[] = {
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
statichere PyTypeObject Context_Type = {
|
static PyTypeObject Context_Type = {
|
||||||
PyObject_HEAD_INIT(NULL)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
0, /*ob_size*/
|
|
||||||
"hexchat.Context", /*tp_name*/
|
"hexchat.Context", /*tp_name*/
|
||||||
sizeof(ContextObject), /*tp_basicsize*/
|
sizeof(ContextObject), /*tp_basicsize*/
|
||||||
0, /*tp_itemsize*/
|
0, /*tp_itemsize*/
|
||||||
|
@ -979,7 +986,7 @@ statichere PyTypeObject Context_Type = {
|
||||||
0, /*tp_init*/
|
0, /*tp_init*/
|
||||||
PyType_GenericAlloc, /*tp_alloc*/
|
PyType_GenericAlloc, /*tp_alloc*/
|
||||||
PyType_GenericNew, /*tp_new*/
|
PyType_GenericNew, /*tp_new*/
|
||||||
_PyObject_Del, /*tp_free*/
|
PyObject_Del, /*tp_free*/
|
||||||
0, /*tp_is_gc*/
|
0, /*tp_is_gc*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1025,19 +1032,18 @@ static void
|
||||||
ListItem_dealloc(PyObject *self)
|
ListItem_dealloc(PyObject *self)
|
||||||
{
|
{
|
||||||
Py_DECREF(((ListItemObject*)self)->dict);
|
Py_DECREF(((ListItemObject*)self)->dict);
|
||||||
self->ob_type->tp_free((PyObject *)self);
|
Py_TYPE(self)->tp_free((PyObject *)self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
ListItem_repr(PyObject *self)
|
ListItem_repr(PyObject *self)
|
||||||
{
|
{
|
||||||
return PyString_FromFormat("<%s list item at %p>",
|
return PyUnicode_FromFormat("<%s list item at %p>",
|
||||||
((ListItemObject*)self)->listname, self);
|
((ListItemObject*)self)->listname, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
statichere PyTypeObject ListItem_Type = {
|
static PyTypeObject ListItem_Type = {
|
||||||
PyObject_HEAD_INIT(NULL)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
0, /*ob_size*/
|
|
||||||
"hexchat.ListItem", /*tp_name*/
|
"hexchat.ListItem", /*tp_name*/
|
||||||
sizeof(ListItemObject), /*tp_basicsize*/
|
sizeof(ListItemObject), /*tp_basicsize*/
|
||||||
0, /*tp_itemsize*/
|
0, /*tp_itemsize*/
|
||||||
|
@ -1075,7 +1081,7 @@ statichere PyTypeObject ListItem_Type = {
|
||||||
0, /*tp_init*/
|
0, /*tp_init*/
|
||||||
PyType_GenericAlloc, /*tp_alloc*/
|
PyType_GenericAlloc, /*tp_alloc*/
|
||||||
PyType_GenericNew, /*tp_new*/
|
PyType_GenericNew, /*tp_new*/
|
||||||
_PyObject_Del, /*tp_free*/
|
PyObject_Del, /*tp_free*/
|
||||||
0, /*tp_is_gc*/
|
0, /*tp_is_gc*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1110,12 +1116,12 @@ ListItem_New(const char *listname)
|
||||||
} \
|
} \
|
||||||
plugin->x = g_strdup(""); \
|
plugin->x = g_strdup(""); \
|
||||||
} else {\
|
} else {\
|
||||||
if (!PyString_Check(o)) { \
|
if (!PyUnicode_Check(o)) { \
|
||||||
hexchat_print(ph, "Variable __module_" #x "__ " \
|
hexchat_print(ph, "Variable __module_" #x "__ " \
|
||||||
"must be a string"); \
|
"must be a string"); \
|
||||||
goto error; \
|
goto error; \
|
||||||
} \
|
} \
|
||||||
plugin->x = g_strdup(PyString_AsString(o)); \
|
plugin->x = g_strdup(PyUnicode_AsUTF8(o)); \
|
||||||
if (plugin->x == NULL) { \
|
if (plugin->x == NULL) { \
|
||||||
hexchat_print(ph, "Not enough memory to allocate " #x); \
|
hexchat_print(ph, "Not enough memory to allocate " #x); \
|
||||||
goto error; \
|
goto error; \
|
||||||
|
@ -1123,11 +1129,15 @@ ListItem_New(const char *listname)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
Plugin_New(char *filename, PyMethodDef *xchat_methods, PyObject *xcoobj)
|
Plugin_New(char *filename, PyObject *xcoobj)
|
||||||
{
|
{
|
||||||
PluginObject *plugin = NULL;
|
PluginObject *plugin = NULL;
|
||||||
PyObject *m, *hm, *xm, *o;
|
PyObject *m, *o;
|
||||||
char *argv[] = {"<xchat>", 0};
|
#ifdef IS_PY3K
|
||||||
|
wchar_t *argv[] = { L"<hexchat>", 0 };
|
||||||
|
#else
|
||||||
|
char *argv[] = { "<hexchat>", 0 };
|
||||||
|
#endif
|
||||||
|
|
||||||
if (filename) {
|
if (filename) {
|
||||||
char *old_filename = filename;
|
char *old_filename = filename;
|
||||||
|
@ -1153,7 +1163,7 @@ Plugin_New(char *filename, PyMethodDef *xchat_methods, PyObject *xcoobj)
|
||||||
Plugin_SetContext(plugin, hexchat_get_context(ph));
|
Plugin_SetContext(plugin, hexchat_get_context(ph));
|
||||||
|
|
||||||
/* Start a new interpreter environment for this plugin. */
|
/* Start a new interpreter environment for this plugin. */
|
||||||
PyEval_AcquireLock();
|
PyEval_AcquireThread(main_tstate);
|
||||||
plugin->tstate = Py_NewInterpreter();
|
plugin->tstate = Py_NewInterpreter();
|
||||||
if (plugin->tstate == NULL) {
|
if (plugin->tstate == NULL) {
|
||||||
hexchat_print(ph, "Can't create interpreter state");
|
hexchat_print(ph, "Can't create interpreter state");
|
||||||
|
@ -1169,67 +1179,27 @@ Plugin_New(char *filename, PyMethodDef *xchat_methods, PyObject *xcoobj)
|
||||||
Py_INCREF(xcoobj);
|
Py_INCREF(xcoobj);
|
||||||
PySys_SetObject("stderr", xcoobj);
|
PySys_SetObject("stderr", xcoobj);
|
||||||
|
|
||||||
/* Add xchat module to the environment. */
|
|
||||||
xm = Py_InitModule("xchat", xchat_methods);
|
|
||||||
if (xm == NULL) {
|
|
||||||
hexchat_print(ph, "Can't create xchat module");
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
hm = Py_InitModule("hexchat", xchat_methods);
|
|
||||||
if (hm == NULL) {
|
|
||||||
hexchat_print(ph, "Can't create hexchat module");
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
PyModule_AddIntConstant(xm, "EAT_NONE", HEXCHAT_EAT_NONE);
|
|
||||||
PyModule_AddIntConstant(xm, "EAT_XCHAT", HEXCHAT_EAT_HEXCHAT);
|
|
||||||
PyModule_AddIntConstant(xm, "EAT_PLUGIN", HEXCHAT_EAT_PLUGIN);
|
|
||||||
PyModule_AddIntConstant(xm, "EAT_ALL", HEXCHAT_EAT_ALL);
|
|
||||||
PyModule_AddIntConstant(xm, "PRI_HIGHEST", HEXCHAT_PRI_HIGHEST);
|
|
||||||
PyModule_AddIntConstant(xm, "PRI_HIGH", HEXCHAT_PRI_HIGH);
|
|
||||||
PyModule_AddIntConstant(xm, "PRI_NORM", HEXCHAT_PRI_NORM);
|
|
||||||
PyModule_AddIntConstant(xm, "PRI_LOW", HEXCHAT_PRI_LOW);
|
|
||||||
PyModule_AddIntConstant(xm, "PRI_LOWEST", HEXCHAT_PRI_LOWEST);
|
|
||||||
PyModule_AddIntConstant(hm, "EAT_NONE", HEXCHAT_EAT_NONE);
|
|
||||||
PyModule_AddIntConstant(hm, "EAT_HEXCHAT", HEXCHAT_EAT_HEXCHAT);
|
|
||||||
PyModule_AddIntConstant(hm, "EAT_PLUGIN", HEXCHAT_EAT_PLUGIN);
|
|
||||||
PyModule_AddIntConstant(hm, "EAT_ALL", HEXCHAT_EAT_ALL);
|
|
||||||
PyModule_AddIntConstant(hm, "PRI_HIGHEST", HEXCHAT_PRI_HIGHEST);
|
|
||||||
PyModule_AddIntConstant(hm, "PRI_HIGH", HEXCHAT_PRI_HIGH);
|
|
||||||
PyModule_AddIntConstant(hm, "PRI_NORM", HEXCHAT_PRI_NORM);
|
|
||||||
PyModule_AddIntConstant(hm, "PRI_LOW", HEXCHAT_PRI_LOW);
|
|
||||||
PyModule_AddIntConstant(hm, "PRI_LOWEST", HEXCHAT_PRI_LOWEST);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
o = Py_BuildValue("(ii)", VERSION_MAJOR, VERSION_MINOR);
|
|
||||||
if (o == NULL) {
|
|
||||||
hexchat_print(ph, "Can't create version tuple");
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
PyObject_SetAttrString(xm, "__version__", o);
|
|
||||||
PyObject_SetAttrString(hm, "__version__", o);
|
|
||||||
|
|
||||||
if (filename) {
|
if (filename) {
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
PyObject* PyFileObject = PyFile_FromString(filename, "r");
|
char *file;
|
||||||
if (PyFileObject == NULL) {
|
if (!g_file_get_contents_utf8(filename, &file, NULL, NULL)) {
|
||||||
hexchat_printf(ph, "Can't open file %s: %s\n",
|
hexchat_printf(ph, "Can't open file %s: %s\n",
|
||||||
filename, strerror(errno));
|
filename, strerror(errno));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyRun_SimpleFile(PyFile_AsFile(PyFileObject), filename) != 0) {
|
if (PyRun_SimpleString(file) != 0) {
|
||||||
hexchat_printf(ph, "Error loading module %s\n",
|
hexchat_printf(ph, "Error loading module %s\n",
|
||||||
filename);
|
filename);
|
||||||
|
g_free (file);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin->filename = filename;
|
plugin->filename = filename;
|
||||||
filename = NULL;
|
filename = NULL;
|
||||||
|
g_free (file);
|
||||||
#else
|
#else
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
plugin->filename = filename;
|
plugin->filename = filename;
|
||||||
|
|
||||||
/* It's now owned by the plugin. */
|
/* It's now owned by the plugin. */
|
||||||
|
@ -1276,7 +1246,11 @@ error:
|
||||||
|
|
||||||
if (plugin) {
|
if (plugin) {
|
||||||
if (plugin->tstate)
|
if (plugin->tstate)
|
||||||
Py_EndInterpreter(plugin->tstate);
|
{
|
||||||
|
/* FIXME: Handle this? */
|
||||||
|
if (plugin->tstate == PyInterpreterState_ThreadHead(plugin->tstate->interp))
|
||||||
|
Py_EndInterpreter(plugin->tstate);
|
||||||
|
}
|
||||||
Py_DECREF(plugin);
|
Py_DECREF(plugin);
|
||||||
}
|
}
|
||||||
PyEval_ReleaseLock();
|
PyEval_ReleaseLock();
|
||||||
|
@ -1417,12 +1391,11 @@ Plugin_dealloc(PluginObject *self)
|
||||||
g_free(self->name);
|
g_free(self->name);
|
||||||
g_free(self->version);
|
g_free(self->version);
|
||||||
g_free(self->description);
|
g_free(self->description);
|
||||||
self->ob_type->tp_free((PyObject *)self);
|
Py_TYPE(self)->tp_free((PyObject *)self);
|
||||||
}
|
}
|
||||||
|
|
||||||
statichere PyTypeObject Plugin_Type = {
|
static PyTypeObject Plugin_Type = {
|
||||||
PyObject_HEAD_INIT(NULL)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
0, /*ob_size*/
|
|
||||||
"hexchat.Plugin", /*tp_name*/
|
"hexchat.Plugin", /*tp_name*/
|
||||||
sizeof(PluginObject), /*tp_basicsize*/
|
sizeof(PluginObject), /*tp_basicsize*/
|
||||||
0, /*tp_itemsize*/
|
0, /*tp_itemsize*/
|
||||||
|
@ -1460,7 +1433,7 @@ statichere PyTypeObject Plugin_Type = {
|
||||||
0, /*tp_init*/
|
0, /*tp_init*/
|
||||||
PyType_GenericAlloc, /*tp_alloc*/
|
PyType_GenericAlloc, /*tp_alloc*/
|
||||||
PyType_GenericNew, /*tp_new*/
|
PyType_GenericNew, /*tp_new*/
|
||||||
_PyObject_Del, /*tp_free*/
|
PyObject_Del, /*tp_free*/
|
||||||
0, /*tp_is_gc*/
|
0, /*tp_is_gc*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1511,7 +1484,7 @@ Module_hexchat_emit_print(PyObject *self, PyObject *args)
|
||||||
argv[3], argv[4], argv[5],
|
argv[3], argv[4], argv[5],
|
||||||
argv[6], argv[7], argv[8]);
|
argv[6], argv[7], argv[8]);
|
||||||
END_XCHAT_CALLS();
|
END_XCHAT_CALLS();
|
||||||
return PyInt_FromLong(res);
|
return PyLong_FromLong(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1528,7 +1501,7 @@ Module_hexchat_get_info(PyObject *self, PyObject *args)
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
return PyString_FromString(info);
|
return PyUnicode_FromString(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1550,11 +1523,11 @@ Module_xchat_get_prefs(PyObject *self, PyObject *args)
|
||||||
res = Py_None;
|
res = Py_None;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
res = PyString_FromString((char*)info);
|
res = PyUnicode_FromString((char*)info);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
res = PyInt_FromLong(integer);
|
res = PyLong_FromLong(integer);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PyErr_Format(PyExc_RuntimeError,
|
PyErr_Format(PyExc_RuntimeError,
|
||||||
|
@ -1608,16 +1581,20 @@ Module_hexchat_pluginpref_set(PyObject *self, PyObject *args)
|
||||||
PyObject *value;
|
PyObject *value;
|
||||||
if (!PyArg_ParseTuple(args, "sO:set_pluginpref", &var, &value))
|
if (!PyArg_ParseTuple(args, "sO:set_pluginpref", &var, &value))
|
||||||
return NULL;
|
return NULL;
|
||||||
if (PyInt_Check(value)) {
|
if (PyLong_Check(value)) {
|
||||||
int intvalue = PyInt_AsLong(value);
|
int intvalue = PyLong_AsLong(value);
|
||||||
result = PyInt_FromLong(hexchat_pluginpref_set_int(ph, var, intvalue));
|
BEGIN_XCHAT_CALLS(NONE);
|
||||||
|
result = PyLong_FromLong(hexchat_pluginpref_set_int(ph, var, intvalue));
|
||||||
|
END_XCHAT_CALLS();
|
||||||
}
|
}
|
||||||
else if (PyString_Check(value)) {
|
else if (PyUnicode_Check(value)) {
|
||||||
char *charvalue = PyString_AsString(value);
|
char *charvalue = PyUnicode_AsUTF8(value);
|
||||||
result = PyInt_FromLong(hexchat_pluginpref_set_str(ph, var, charvalue));
|
BEGIN_XCHAT_CALLS(NONE);
|
||||||
|
result = PyLong_FromLong(hexchat_pluginpref_set_str(ph, var, charvalue));
|
||||||
|
END_XCHAT_CALLS();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
result = PyInt_FromLong(0);
|
result = PyLong_FromLong(0);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1628,20 +1605,27 @@ Module_hexchat_pluginpref_get(PyObject *self, PyObject *args)
|
||||||
char *var;
|
char *var;
|
||||||
char retstr[512];
|
char retstr[512];
|
||||||
int retint;
|
int retint;
|
||||||
|
int result;
|
||||||
if (!PyArg_ParseTuple(args, "s:get_pluginpref", &var))
|
if (!PyArg_ParseTuple(args, "s:get_pluginpref", &var))
|
||||||
return NULL;
|
return NULL;
|
||||||
// This will always return numbers as integers.
|
// This will always return numbers as integers.
|
||||||
if (hexchat_pluginpref_get_str(ph, var, retstr)) {
|
BEGIN_XCHAT_CALLS(NONE);
|
||||||
|
result = hexchat_pluginpref_get_str(ph, var, retstr);
|
||||||
|
END_XCHAT_CALLS();
|
||||||
|
if (result) {
|
||||||
if (strlen (retstr) <= 12) {
|
if (strlen (retstr) <= 12) {
|
||||||
|
BEGIN_XCHAT_CALLS(NONE);
|
||||||
retint = hexchat_pluginpref_get_int(ph, var);
|
retint = hexchat_pluginpref_get_int(ph, var);
|
||||||
|
END_XCHAT_CALLS();
|
||||||
if ((retint == 0) && (strcmp(retstr, "0") != 0))
|
if ((retint == 0) && (strcmp(retstr, "0") != 0))
|
||||||
ret = PyString_FromString(retstr);
|
ret = PyUnicode_FromString(retstr);
|
||||||
else
|
else
|
||||||
ret = PyInt_FromLong(retint);
|
ret = PyLong_FromLong(retint);
|
||||||
} else
|
} else
|
||||||
ret = PyString_FromString(retstr);
|
ret = PyUnicode_FromString(retstr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Py_INCREF(Py_None);
|
||||||
ret = Py_None;
|
ret = Py_None;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1653,8 +1637,10 @@ Module_hexchat_pluginpref_delete(PyObject *self, PyObject *args)
|
||||||
int result;
|
int result;
|
||||||
if (!PyArg_ParseTuple(args, "s:del_pluginpref", &var))
|
if (!PyArg_ParseTuple(args, "s:del_pluginpref", &var))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
BEGIN_XCHAT_CALLS(NONE);
|
||||||
result = hexchat_pluginpref_delete(ph, var);
|
result = hexchat_pluginpref_delete(ph, var);
|
||||||
return PyInt_FromLong(result);
|
END_XCHAT_CALLS();
|
||||||
|
return PyLong_FromLong(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1662,12 +1648,16 @@ Module_hexchat_pluginpref_list(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
char list[512];
|
char list[512];
|
||||||
char* token;
|
char* token;
|
||||||
|
int result;
|
||||||
PyObject *pylist;
|
PyObject *pylist;
|
||||||
pylist = PyList_New(0);
|
pylist = PyList_New(0);
|
||||||
if (hexchat_pluginpref_list(ph, list)) {
|
BEGIN_XCHAT_CALLS(NONE);
|
||||||
|
result = hexchat_pluginpref_list(ph, list);
|
||||||
|
END_XCHAT_CALLS();
|
||||||
|
if (result) {
|
||||||
token = strtok(list, ",");
|
token = strtok(list, ",");
|
||||||
while (token != NULL) {
|
while (token != NULL) {
|
||||||
PyList_Append(pylist, PyString_FromString(token));
|
PyList_Append(pylist, PyUnicode_FromString(token));
|
||||||
token = strtok (NULL, ",");
|
token = strtok (NULL, ",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1709,7 +1699,7 @@ Module_hexchat_hook_command(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
Callback_Command, help, hook);
|
Callback_Command, help, hook);
|
||||||
END_XCHAT_CALLS();
|
END_XCHAT_CALLS();
|
||||||
|
|
||||||
return PyInt_FromLong((long)hook);
|
return PyLong_FromLong((long)hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1745,7 +1735,7 @@ Module_hexchat_hook_server(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
Callback_Command, hook);
|
Callback_Command, hook);
|
||||||
END_XCHAT_CALLS();
|
END_XCHAT_CALLS();
|
||||||
|
|
||||||
return PyInt_FromLong((long)hook);
|
return PyLong_FromLong((long)hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1781,10 +1771,9 @@ Module_hexchat_hook_print(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
Callback_Print, hook);
|
Callback_Print, hook);
|
||||||
END_XCHAT_CALLS();
|
END_XCHAT_CALLS();
|
||||||
|
|
||||||
return PyInt_FromLong((long)hook);
|
return PyLong_FromLong((long)hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
Module_hexchat_hook_timer(PyObject *self, PyObject *args, PyObject *kwargs)
|
Module_hexchat_hook_timer(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
{
|
{
|
||||||
|
@ -1817,7 +1806,7 @@ Module_hexchat_hook_timer(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
Callback_Timer, hook);
|
Callback_Timer, hook);
|
||||||
END_XCHAT_CALLS();
|
END_XCHAT_CALLS();
|
||||||
|
|
||||||
return PyInt_FromLong((long)hook);
|
return PyLong_FromLong((long)hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1845,7 +1834,7 @@ Module_hexchat_hook_unload(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
if (hook == NULL)
|
if (hook == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return PyInt_FromLong((long)hook);
|
return PyLong_FromLong((long)hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1911,11 +1900,11 @@ Module_xchat_get_list(PyObject *self, PyObject *args)
|
||||||
switch(fields[i][0]) {
|
switch(fields[i][0]) {
|
||||||
case 's':
|
case 's':
|
||||||
sattr = hexchat_list_str(ph, list, (char*)fld);
|
sattr = hexchat_list_str(ph, list, (char*)fld);
|
||||||
attr = PyString_FromString(sattr?sattr:"");
|
attr = PyUnicode_FromString(sattr?sattr:"");
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
iattr = hexchat_list_int(ph, list, (char*)fld);
|
iattr = hexchat_list_int(ph, list, (char*)fld);
|
||||||
attr = PyInt_FromLong((long)iattr);
|
attr = PyLong_FromLong((long)iattr);
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
sattr = hexchat_list_str(ph, list, (char*)fld);
|
sattr = hexchat_list_str(ph, list, (char*)fld);
|
||||||
|
@ -1959,7 +1948,7 @@ Module_xchat_get_lists(PyObject *self, PyObject *args)
|
||||||
if (l == NULL)
|
if (l == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
for (i = 0; fields[i]; i++) {
|
for (i = 0; fields[i]; i++) {
|
||||||
o = PyString_FromString(fields[i]);
|
o = PyUnicode_FromString(fields[i]);
|
||||||
if (o == NULL || PyList_Append(l, o) == -1) {
|
if (o == NULL || PyList_Append(l, o) == -1) {
|
||||||
Py_DECREF(l);
|
Py_DECREF(l);
|
||||||
Py_XDECREF(o);
|
Py_XDECREF(o);
|
||||||
|
@ -1976,7 +1965,7 @@ Module_hexchat_nickcmp(PyObject *self, PyObject *args)
|
||||||
char *s1, *s2;
|
char *s1, *s2;
|
||||||
if (!PyArg_ParseTuple(args, "ss:nickcmp", &s1, &s2))
|
if (!PyArg_ParseTuple(args, "ss:nickcmp", &s1, &s2))
|
||||||
return NULL;
|
return NULL;
|
||||||
return PyInt_FromLong((long) hexchat_nickcmp(ph, s1, s2));
|
return PyLong_FromLong((long) hexchat_nickcmp(ph, s1, s2));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1988,7 +1977,7 @@ Module_hexchat_strip(PyObject *self, PyObject *args)
|
||||||
if (!PyArg_ParseTuple(args, "s|ii:strip", &str, &len, &flags))
|
if (!PyArg_ParseTuple(args, "s|ii:strip", &str, &len, &flags))
|
||||||
return NULL;
|
return NULL;
|
||||||
str2 = hexchat_strip(ph, str, len, flags);
|
str2 = hexchat_strip(ph, str, len, flags);
|
||||||
result = PyString_FromString(str2);
|
result = PyUnicode_FromString(str2);
|
||||||
hexchat_free(ph, str2);
|
hexchat_free(ph, str2);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2039,6 +2028,106 @@ static PyMethodDef Module_xchat_methods[] = {
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef IS_PY3K
|
||||||
|
static struct PyModuleDef moduledef = {
|
||||||
|
PyModuleDef_HEAD_INIT,
|
||||||
|
"hexchat", /* m_name */
|
||||||
|
"HexChat Scripting Interface", /* m_doc */
|
||||||
|
-1, /* m_size */
|
||||||
|
Module_xchat_methods, /* m_methods */
|
||||||
|
NULL, /* m_reload */
|
||||||
|
NULL, /* m_traverse */
|
||||||
|
NULL, /* m_clear */
|
||||||
|
NULL, /* m_free */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct PyModuleDef xchat_moduledef = {
|
||||||
|
PyModuleDef_HEAD_INIT,
|
||||||
|
"xchat", /* m_name */
|
||||||
|
"HexChat Scripting Interface", /* m_doc */
|
||||||
|
-1, /* m_size */
|
||||||
|
Module_xchat_methods, /* m_methods */
|
||||||
|
NULL, /* m_reload */
|
||||||
|
NULL, /* m_traverse */
|
||||||
|
NULL, /* m_clear */
|
||||||
|
NULL, /* m_free */
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
moduleinit_hexchat(void)
|
||||||
|
{
|
||||||
|
PyObject *hm;
|
||||||
|
#ifdef IS_PY3K
|
||||||
|
hm = PyModule_Create(&moduledef);
|
||||||
|
#else
|
||||||
|
hm = Py_InitModule3("hexchat", Module_xchat_methods, "HexChat Scripting Interface");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyModule_AddIntConstant(hm, "EAT_NONE", HEXCHAT_EAT_NONE);
|
||||||
|
PyModule_AddIntConstant(hm, "EAT_HEXCHAT", HEXCHAT_EAT_HEXCHAT);
|
||||||
|
PyModule_AddIntConstant(hm, "EAT_XCHAT", HEXCHAT_EAT_HEXCHAT); /* for compat */
|
||||||
|
PyModule_AddIntConstant(hm, "EAT_PLUGIN", HEXCHAT_EAT_PLUGIN);
|
||||||
|
PyModule_AddIntConstant(hm, "EAT_ALL", HEXCHAT_EAT_ALL);
|
||||||
|
PyModule_AddIntConstant(hm, "PRI_HIGHEST", HEXCHAT_PRI_HIGHEST);
|
||||||
|
PyModule_AddIntConstant(hm, "PRI_HIGH", HEXCHAT_PRI_HIGH);
|
||||||
|
PyModule_AddIntConstant(hm, "PRI_NORM", HEXCHAT_PRI_NORM);
|
||||||
|
PyModule_AddIntConstant(hm, "PRI_LOW", HEXCHAT_PRI_LOW);
|
||||||
|
PyModule_AddIntConstant(hm, "PRI_LOWEST", HEXCHAT_PRI_LOWEST);
|
||||||
|
|
||||||
|
PyObject_SetAttrString(hm, "__version__", Py_BuildValue("(ii)", VERSION_MAJOR, VERSION_MINOR));
|
||||||
|
|
||||||
|
return hm;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
moduleinit_xchat(void)
|
||||||
|
{
|
||||||
|
PyObject *xm;
|
||||||
|
#ifdef IS_PY3K
|
||||||
|
xm = PyModule_Create(&xchat_moduledef);
|
||||||
|
#else
|
||||||
|
xm = Py_InitModule3("xchat", Module_xchat_methods, "HexChat Scripting Interface");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyModule_AddIntConstant(xm, "EAT_NONE", HEXCHAT_EAT_NONE);
|
||||||
|
PyModule_AddIntConstant(xm, "EAT_XCHAT", HEXCHAT_EAT_HEXCHAT);
|
||||||
|
PyModule_AddIntConstant(xm, "EAT_PLUGIN", HEXCHAT_EAT_PLUGIN);
|
||||||
|
PyModule_AddIntConstant(xm, "EAT_ALL", HEXCHAT_EAT_ALL);
|
||||||
|
PyModule_AddIntConstant(xm, "PRI_HIGHEST", HEXCHAT_PRI_HIGHEST);
|
||||||
|
PyModule_AddIntConstant(xm, "PRI_HIGH", HEXCHAT_PRI_HIGH);
|
||||||
|
PyModule_AddIntConstant(xm, "PRI_NORM", HEXCHAT_PRI_NORM);
|
||||||
|
PyModule_AddIntConstant(xm, "PRI_LOW", HEXCHAT_PRI_LOW);
|
||||||
|
PyModule_AddIntConstant(xm, "PRI_LOWEST", HEXCHAT_PRI_LOWEST);
|
||||||
|
|
||||||
|
PyObject_SetAttrString(xm, "__version__", Py_BuildValue("(ii)", VERSION_MAJOR, VERSION_MINOR));
|
||||||
|
|
||||||
|
return xm;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef IS_PY3K
|
||||||
|
PyMODINIT_FUNC
|
||||||
|
PyInit_hexchat(void)
|
||||||
|
{
|
||||||
|
return moduleinit_hexchat();
|
||||||
|
}
|
||||||
|
PyMODINIT_FUNC
|
||||||
|
PyInit_xchat(void)
|
||||||
|
{
|
||||||
|
return moduleinit_xchat();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
PyMODINIT_FUNC
|
||||||
|
inithexchat(void)
|
||||||
|
{
|
||||||
|
moduleinit_hexchat();
|
||||||
|
}
|
||||||
|
PyMODINIT_FUNC
|
||||||
|
initxchat(void)
|
||||||
|
{
|
||||||
|
moduleinit_xchat();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ===================================================================== */
|
/* ===================================================================== */
|
||||||
/* Python interactive interpreter functions */
|
/* Python interactive interpreter functions */
|
||||||
|
@ -2046,18 +2135,18 @@ static PyMethodDef Module_xchat_methods[] = {
|
||||||
static void
|
static void
|
||||||
IInterp_Exec(char *command)
|
IInterp_Exec(char *command)
|
||||||
{
|
{
|
||||||
PyObject *m, *d, *o;
|
PyObject *m, *d, *o;
|
||||||
char *buffer;
|
char *buffer;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
BEGIN_PLUGIN(interp_plugin);
|
BEGIN_PLUGIN(interp_plugin);
|
||||||
|
|
||||||
m = PyImport_AddModule("__main__");
|
m = PyImport_AddModule("__main__");
|
||||||
if (m == NULL) {
|
if (m == NULL) {
|
||||||
hexchat_print(ph, "Can't get __main__ module");
|
hexchat_print(ph, "Can't get __main__ module");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
d = PyModule_GetDict(m);
|
d = PyModule_GetDict(m);
|
||||||
len = strlen(command);
|
len = strlen(command);
|
||||||
buffer = (char *) g_malloc(len+2);
|
buffer = (char *) g_malloc(len+2);
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
|
@ -2067,20 +2156,17 @@ IInterp_Exec(char *command)
|
||||||
memcpy(buffer, command, len);
|
memcpy(buffer, command, len);
|
||||||
buffer[len] = '\n';
|
buffer[len] = '\n';
|
||||||
buffer[len+1] = 0;
|
buffer[len+1] = 0;
|
||||||
o = PyRun_StringFlags(buffer, Py_single_input, d, d, NULL);
|
o = PyRun_StringFlags(buffer, Py_single_input, d, d, NULL);
|
||||||
g_free(buffer);
|
g_free(buffer);
|
||||||
if (o == NULL) {
|
if (o == NULL) {
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
Py_DECREF(o);
|
Py_DECREF(o);
|
||||||
if (Py_FlushLine())
|
|
||||||
PyErr_Clear();
|
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
END_PLUGIN(interp_plugin);
|
END_PLUGIN(interp_plugin);
|
||||||
|
return;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -2132,7 +2218,7 @@ Command_PyLoad(char *filename)
|
||||||
{
|
{
|
||||||
PyObject *plugin;
|
PyObject *plugin;
|
||||||
RELEASE_XCHAT_LOCK();
|
RELEASE_XCHAT_LOCK();
|
||||||
plugin = Plugin_New(filename, Module_xchat_methods, xchatout);
|
plugin = Plugin_New(filename, xchatout);
|
||||||
ACQUIRE_XCHAT_LOCK();
|
ACQUIRE_XCHAT_LOCK();
|
||||||
if (plugin)
|
if (plugin)
|
||||||
plugin_list = g_slist_append(plugin_list, plugin);
|
plugin_list = g_slist_append(plugin_list, plugin);
|
||||||
|
@ -2162,7 +2248,6 @@ Command_PyReload(char *name)
|
||||||
char *filename = g_strdup(plugin->filename);
|
char *filename = g_strdup(plugin->filename);
|
||||||
Command_PyUnload(filename);
|
Command_PyUnload(filename);
|
||||||
Command_PyLoad(filename);
|
Command_PyLoad(filename);
|
||||||
/* cppcheck-suppress deallocDealloc */
|
|
||||||
g_free(filename);
|
g_free(filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2225,22 +2310,22 @@ Command_Load(char *word[], char *word_eol[], void *userdata)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
Command_Unload(char *word[], char *word_eol[], void *userdata)
|
Command_Reload(char *word[], char *word_eol[], void *userdata)
|
||||||
{
|
{
|
||||||
int len = strlen(word[2]);
|
int len = strlen(word[2]);
|
||||||
if (len > 3 && strcasecmp(".py", word[2]+len-3) == 0) {
|
if (len > 3 && strcasecmp(".py", word[2]+len-3) == 0) {
|
||||||
Command_PyUnload(word[2]);
|
Command_PyReload(word[2]);
|
||||||
return HEXCHAT_EAT_HEXCHAT;
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
}
|
}
|
||||||
return HEXCHAT_EAT_NONE;
|
return HEXCHAT_EAT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
Command_Reload(char *word[], char *word_eol[], void *userdata)
|
Command_Unload(char *word[], char *word_eol[], void *userdata)
|
||||||
{
|
{
|
||||||
int len = strlen(word[2]);
|
int len = strlen(word[2]);
|
||||||
if (len > 3 && strcasecmp(".py", word[2]+len-3) == 0) {
|
if (len > 3 && strcasecmp(".py", word[2]+len-3) == 0) {
|
||||||
Command_PyReload(word[2]);
|
Command_PyUnload(word[2]);
|
||||||
return HEXCHAT_EAT_HEXCHAT;
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
}
|
}
|
||||||
return HEXCHAT_EAT_NONE;
|
return HEXCHAT_EAT_NONE;
|
||||||
|
@ -2272,7 +2357,11 @@ hexchat_plugin_init(hexchat_plugin *plugin_handle,
|
||||||
char **plugin_version,
|
char **plugin_version,
|
||||||
char *arg)
|
char *arg)
|
||||||
{
|
{
|
||||||
char *argv[] = {"<xchat>", 0};
|
#ifdef IS_PY3K
|
||||||
|
wchar_t *argv[] = { L"<hexchat>", 0 };
|
||||||
|
#else
|
||||||
|
char *argv[] = { "<hexchat>", 0 };
|
||||||
|
#endif
|
||||||
|
|
||||||
ph = plugin_handle;
|
ph = plugin_handle;
|
||||||
|
|
||||||
|
@ -2291,14 +2380,18 @@ hexchat_plugin_init(hexchat_plugin *plugin_handle,
|
||||||
*plugin_desc = "Python scripting interface";
|
*plugin_desc = "Python scripting interface";
|
||||||
|
|
||||||
/* Initialize python. */
|
/* Initialize python. */
|
||||||
Py_SetProgramName("xchat");
|
#ifdef IS_PY3K
|
||||||
|
Py_SetProgramName(L"hexchat");
|
||||||
|
PyImport_AppendInittab("hexchat", PyInit_hexchat);
|
||||||
|
PyImport_AppendInittab("xchat", PyInit_xchat);
|
||||||
|
#else
|
||||||
|
Py_SetProgramName("hexchat");
|
||||||
|
PyImport_AppendInittab("hexchat", inithexchat);
|
||||||
|
PyImport_AppendInittab("xchat", initxchat);
|
||||||
|
#endif
|
||||||
Py_Initialize();
|
Py_Initialize();
|
||||||
PySys_SetArgv(1, argv);
|
PySys_SetArgv(1, argv);
|
||||||
|
|
||||||
Plugin_Type.ob_type = &PyType_Type;
|
|
||||||
Context_Type.ob_type = &PyType_Type;
|
|
||||||
XChatOut_Type.ob_type = &PyType_Type;
|
|
||||||
|
|
||||||
xchatout = XChatOut_New();
|
xchatout = XChatOut_New();
|
||||||
if (xchatout == NULL) {
|
if (xchatout == NULL) {
|
||||||
hexchat_print(ph, "Can't allocate xchatout object");
|
hexchat_print(ph, "Can't allocate xchatout object");
|
||||||
|
@ -2309,7 +2402,7 @@ hexchat_plugin_init(hexchat_plugin *plugin_handle,
|
||||||
PyEval_InitThreads();
|
PyEval_InitThreads();
|
||||||
xchat_lock = PyThread_allocate_lock();
|
xchat_lock = PyThread_allocate_lock();
|
||||||
if (xchat_lock == NULL) {
|
if (xchat_lock == NULL) {
|
||||||
hexchat_print(ph, "Can't allocate xchat lock");
|
hexchat_print(ph, "Can't allocate hexchat lock");
|
||||||
Py_DECREF(xchatout);
|
Py_DECREF(xchatout);
|
||||||
xchatout = NULL;
|
xchatout = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2318,7 +2411,7 @@ hexchat_plugin_init(hexchat_plugin *plugin_handle,
|
||||||
|
|
||||||
main_tstate = PyEval_SaveThread();
|
main_tstate = PyEval_SaveThread();
|
||||||
|
|
||||||
interp_plugin = Plugin_New(NULL, Module_xchat_methods, xchatout);
|
interp_plugin = Plugin_New(NULL, xchatout);
|
||||||
if (interp_plugin == NULL) {
|
if (interp_plugin == NULL) {
|
||||||
hexchat_print(ph, "Plugin_New() failed.\n");
|
hexchat_print(ph, "Plugin_New() failed.\n");
|
||||||
#ifdef WITH_THREAD
|
#ifdef WITH_THREAD
|
||||||
|
@ -2381,6 +2474,7 @@ hexchat_plugin_deinit()
|
||||||
|
|
||||||
/* Switch back to the main thread state. */
|
/* Switch back to the main thread state. */
|
||||||
if (main_tstate) {
|
if (main_tstate) {
|
||||||
|
PyEval_RestoreThread(main_tstate);
|
||||||
PyThreadState_Swap(main_tstate);
|
PyThreadState_Swap(main_tstate);
|
||||||
main_tstate = NULL;
|
main_tstate = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{19C52A0A-A790-409E-A28A-9745FF990F5C}</ProjectGuid>
|
<ProjectGuid>{19C52A0A-A790-409E-A28A-9745FF990F5C}</ProjectGuid>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<RootNamespace>python</RootNamespace>
|
<RootNamespace>python2</RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
<TargetName>$(PythonOutput)</TargetName>
|
<TargetName>$(Python2Output)</TargetName>
|
||||||
<OutDir>$(HexChatBin)</OutDir>
|
<OutDir>$(HexChatBin)</OutDir>
|
||||||
<IntDir>$(HexChatObj)$(ProjectName)\</IntDir>
|
<IntDir>$(HexChatObj)$(ProjectName)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(Glib);$(PythonPath)\include;..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(Glib);$(Python2Path)\include;..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
@ -72,8 +72,8 @@
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<ModuleDefinitionFile>python.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>python.def</ModuleDefinitionFile>
|
||||||
<AdditionalDependencies>"$(PythonLib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>"$(Python2Lib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;$(OutDir);$(PythonPath)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(DepsRoot)\lib;$(OutDir);$(Python2Path)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(Glib);$(PythonPath)\include;..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(Glib);$(Python2Path)\include;..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
@ -93,8 +93,8 @@
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<ModuleDefinitionFile>python.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>python.def</ModuleDefinitionFile>
|
||||||
<AdditionalDependencies>"$(PythonLib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>"$(Python2Lib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;$(OutDir);$(PythonPath)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(DepsRoot)\lib;$(OutDir);$(Python2Path)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup Label="Configuration">
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{C2321A03-0BA7-45B3-8740-ABD82B36B0BF}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>python3</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\win32\hexchat.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\win32\hexchat.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetName>$(Python3Output)</TargetName>
|
||||||
|
<OutDir>$(HexChatBin)</OutDir>
|
||||||
|
<IntDir>$(HexChatObj)$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetName>$(Python3Output)</TargetName>
|
||||||
|
<OutDir>$(HexChatBin)</OutDir>
|
||||||
|
<IntDir>$(HexChatObj)$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(Glib);$(Python3Path)\include;..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<ModuleDefinitionFile>python.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalDependencies>"$(Python3Lib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>$(DepsRoot)\lib;$(OutDir);$(Python3Path)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(Glib);$(Python3Path)\include;..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<ModuleDefinitionFile>python.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalDependencies>"$(Python3Lib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>$(DepsRoot)\lib;$(OutDir);$(Python3Path)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="python.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="python.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{f4eaf231-f095-42d3-8427-b2b6006cacb1}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{0166c0f9-7968-4a09-9ef5-a5179c7746eb}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="python.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="python.def">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -489,7 +489,8 @@ plugin_auto_load (session *sess)
|
||||||
for_files (HEXCHATLIBDIR, "hcfishlim.dll", plugin_auto_load_cb);
|
for_files (HEXCHATLIBDIR, "hcfishlim.dll", plugin_auto_load_cb);
|
||||||
for_files (HEXCHATLIBDIR, "hcmpcinfo.dll", plugin_auto_load_cb);
|
for_files (HEXCHATLIBDIR, "hcmpcinfo.dll", plugin_auto_load_cb);
|
||||||
for_files (HEXCHATLIBDIR, "hcperl.dll", plugin_auto_load_cb);
|
for_files (HEXCHATLIBDIR, "hcperl.dll", plugin_auto_load_cb);
|
||||||
for_files (HEXCHATLIBDIR, "hcpython.dll", plugin_auto_load_cb);
|
for_files (HEXCHATLIBDIR, "hcpython2.dll", plugin_auto_load_cb);
|
||||||
|
for_files (HEXCHATLIBDIR, "hcpython3.dll", plugin_auto_load_cb);
|
||||||
for_files (HEXCHATLIBDIR, "hcupd.dll", plugin_auto_load_cb);
|
for_files (HEXCHATLIBDIR, "hcupd.dll", plugin_auto_load_cb);
|
||||||
for_files (HEXCHATLIBDIR, "hcwinamp.dll", plugin_auto_load_cb);
|
for_files (HEXCHATLIBDIR, "hcwinamp.dll", plugin_auto_load_cb);
|
||||||
for_files (HEXCHATLIBDIR, "hcsysinfo.dll", plugin_auto_load_cb);
|
for_files (HEXCHATLIBDIR, "hcsysinfo.dll", plugin_auto_load_cb);
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
<YourGendefPath>c:\mozilla-build\gendef</YourGendefPath>
|
<YourGendefPath>c:\mozilla-build\gendef</YourGendefPath>
|
||||||
<YourMsgfmtPath>c:\mozilla-build\msgfmt</YourMsgfmtPath>
|
<YourMsgfmtPath>c:\mozilla-build\msgfmt</YourMsgfmtPath>
|
||||||
<YourPerlPath>c:\mozilla-build\perl-5.18</YourPerlPath>
|
<YourPerlPath>c:\mozilla-build\perl-5.18</YourPerlPath>
|
||||||
<YourPythonPath>c:\mozilla-build\python-2.7</YourPythonPath>
|
<YourPython2Path>c:\mozilla-build\python-2.7</YourPython2Path>
|
||||||
|
<YourPython3Path>c:\mozilla-build\python-3.3</YourPython3Path>
|
||||||
|
|
||||||
<!-- YOU SHOULDN'T TOUCH ANYTHING BELOW -->
|
<!-- YOU SHOULDN'T TOUCH ANYTHING BELOW -->
|
||||||
|
|
||||||
|
@ -22,9 +23,12 @@
|
||||||
<PerlPath>$(YourPerlPath)\$(PlatformName)</PerlPath>
|
<PerlPath>$(YourPerlPath)\$(PlatformName)</PerlPath>
|
||||||
<PerlLib>perl517</PerlLib>
|
<PerlLib>perl517</PerlLib>
|
||||||
<PerlOutput>hcperl</PerlOutput>
|
<PerlOutput>hcperl</PerlOutput>
|
||||||
<PythonPath>$(YourPythonPath)\$(PlatformName)</PythonPath>
|
<Python2Path>$(YourPython2Path)\$(PlatformName)</Python2Path>
|
||||||
<PythonLib>python27</PythonLib>
|
<Python2Lib>python27</Python2Lib>
|
||||||
<PythonOutput>hcpython</PythonOutput>
|
<Python2Output>hcpython2</Python2Output>
|
||||||
|
<Python3Path>$(YourPython3Path)\$(PlatformName)</Python3Path>
|
||||||
|
<Python3Lib>python33</Python3Lib>
|
||||||
|
<Python3Output>hcpython3</Python3Output>
|
||||||
<Glib>$(DepsRoot)\include\glib-2.0;$(DepsRoot)\lib\glib-2.0\include;$(DepsRoot)\include\libxml2</Glib>
|
<Glib>$(DepsRoot)\include\glib-2.0;$(DepsRoot)\lib\glib-2.0\include;$(DepsRoot)\include\libxml2</Glib>
|
||||||
<Gtk>$(DepsRoot)\include\gtk-2.0;$(DepsRoot)\lib\gtk-2.0\include;$(DepsRoot)\include\atk-1.0;$(DepsRoot)\include\cairo;$(DepsRoot)\include\pango-1.0;$(DepsRoot)\include\gdk-pixbuf-2.0</Gtk>
|
<Gtk>$(DepsRoot)\include\gtk-2.0;$(DepsRoot)\lib\gtk-2.0\include;$(DepsRoot)\include\atk-1.0;$(DepsRoot)\include\cairo;$(DepsRoot)\include\pango-1.0;$(DepsRoot)\include\gdk-pixbuf-2.0</Gtk>
|
||||||
<Pixmaps>png_ulist_voice "$(SolutionDir)\..\src\pixmaps\ulist_voice.png" png_ulist_halfop "$(SolutionDir)\..\src\pixmaps\ulist_halfop.png" png_ulist_op "$(SolutionDir)\..\src\pixmaps\ulist_op.png" png_ulist_owner "$(SolutionDir)\..\src\pixmaps\ulist_owner.png" png_ulist_founder "$(SolutionDir)\..\src\pixmaps\ulist_founder.png" png_ulist_netop "$(SolutionDir)\..\src\pixmaps\ulist_netop.png" png_tray_fileoffer "$(SolutionDir)\..\src\pixmaps\tray_fileoffer.png" png_tray_highlight "$(SolutionDir)\..\src\pixmaps\tray_highlight.png" png_tray_message "$(SolutionDir)\..\src\pixmaps\tray_message.png" png_tree_channel "$(SolutionDir)\..\src\pixmaps\tree_channel.png" png_tree_dialog "$(SolutionDir)\..\src\pixmaps\tree_dialog.png" png_tree_server "$(SolutionDir)\..\src\pixmaps\tree_server.png" png_tree_util "$(SolutionDir)\..\src\pixmaps\tree_util.png" png_book "$(SolutionDir)\..\src\pixmaps\book.png" png_hexchat "$(SolutionDir)\..\src\pixmaps\hexchat.png"</Pixmaps>
|
<Pixmaps>png_ulist_voice "$(SolutionDir)\..\src\pixmaps\ulist_voice.png" png_ulist_halfop "$(SolutionDir)\..\src\pixmaps\ulist_halfop.png" png_ulist_op "$(SolutionDir)\..\src\pixmaps\ulist_op.png" png_ulist_owner "$(SolutionDir)\..\src\pixmaps\ulist_owner.png" png_ulist_founder "$(SolutionDir)\..\src\pixmaps\ulist_founder.png" png_ulist_netop "$(SolutionDir)\..\src\pixmaps\ulist_netop.png" png_tray_fileoffer "$(SolutionDir)\..\src\pixmaps\tray_fileoffer.png" png_tray_highlight "$(SolutionDir)\..\src\pixmaps\tray_highlight.png" png_tray_message "$(SolutionDir)\..\src\pixmaps\tray_message.png" png_tree_channel "$(SolutionDir)\..\src\pixmaps\tree_channel.png" png_tree_dialog "$(SolutionDir)\..\src\pixmaps\tree_dialog.png" png_tree_server "$(SolutionDir)\..\src\pixmaps\tree_server.png" png_tree_util "$(SolutionDir)\..\src\pixmaps\tree_util.png" png_book "$(SolutionDir)\..\src\pixmaps\book.png" png_hexchat "$(SolutionDir)\..\src\pixmaps\hexchat.png"</Pixmaps>
|
||||||
|
@ -82,7 +86,8 @@ copy "$(HexChatBin)hcexec.dll" "$(HexChatRel)\plugins"
|
||||||
copy "$(HexChatBin)hcfishlim.dll" "$(HexChatRel)\plugins"
|
copy "$(HexChatBin)hcfishlim.dll" "$(HexChatRel)\plugins"
|
||||||
copy "$(HexChatBin)hcmpcinfo.dll" "$(HexChatRel)\plugins"
|
copy "$(HexChatBin)hcmpcinfo.dll" "$(HexChatRel)\plugins"
|
||||||
copy "$(HexChatBin)hcperl.dll" "$(HexChatRel)\plugins"
|
copy "$(HexChatBin)hcperl.dll" "$(HexChatRel)\plugins"
|
||||||
copy "$(HexChatBin)hcpython.dll" "$(HexChatRel)\plugins"
|
copy "$(HexChatBin)hcpython2.dll" "$(HexChatRel)\plugins"
|
||||||
|
copy "$(HexChatBin)hcpython3.dll" "$(HexChatRel)\plugins"
|
||||||
copy "$(HexChatBin)hcupd.dll" "$(HexChatRel)\plugins"
|
copy "$(HexChatBin)hcupd.dll" "$(HexChatRel)\plugins"
|
||||||
copy "$(HexChatBin)hcwinamp.dll" "$(HexChatRel)\plugins"
|
copy "$(HexChatBin)hcwinamp.dll" "$(HexChatRel)\plugins"
|
||||||
copy "$(HexChatBin)hcsysinfo.dll" "$(HexChatRel)\plugins"
|
copy "$(HexChatBin)hcsysinfo.dll" "$(HexChatRel)\plugins"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Express 2012 for Windows Desktop
|
# Visual Studio 2012
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\src\common\common.vcxproj", "{87554B59-006C-4D94-9714-897B27067BA3}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\src\common\common.vcxproj", "{87554B59-006C-4D94-9714-897B27067BA3}"
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
{A7D7CE59-2A31-48AE-BED2-A9828E241832} = {A7D7CE59-2A31-48AE-BED2-A9828E241832}
|
{A7D7CE59-2A31-48AE-BED2-A9828E241832} = {A7D7CE59-2A31-48AE-BED2-A9828E241832}
|
||||||
|
@ -30,7 +30,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripting", "scripting", "{
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{BB051F0F-A841-4A9A-BAF6-51DD9866D65A}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{BB051F0F-A841-4A9A-BAF6-51DD9866D65A}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "..\plugins\python\python.vcxproj", "{19C52A0A-A790-409E-A28A-9745FF990F5C}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python2", "..\plugins\python\python2.vcxproj", "{19C52A0A-A790-409E-A28A-9745FF990F5C}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doat", "..\plugins\doat\doat.vcxproj", "{4980AF24-9D42-427D-A8E6-0DF3B97C455D}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doat", "..\plugins\doat\doat.vcxproj", "{4980AF24-9D42-427D-A8E6-0DF3B97C455D}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -87,6 +87,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make-te", "..\src\common\ma
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "perl", "..\plugins\perl\perl.vcxproj", "{D90BC3E3-1341-4849-9354-5F40489D39D1}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "perl", "..\plugins\perl\perl.vcxproj", "{D90BC3E3-1341-4849-9354-5F40489D39D1}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python3", "..\plugins\python\python3.vcxproj", "{C2321A03-0BA7-45B3-8740-ABD82B36B0BF}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Release|Win32 = Release|Win32
|
Release|Win32 = Release|Win32
|
||||||
|
@ -179,6 +181,10 @@ Global
|
||||||
{D90BC3E3-1341-4849-9354-5F40489D39D1}.Release|Win32.Build.0 = Release|Win32
|
{D90BC3E3-1341-4849-9354-5F40489D39D1}.Release|Win32.Build.0 = Release|Win32
|
||||||
{D90BC3E3-1341-4849-9354-5F40489D39D1}.Release|x64.ActiveCfg = Release|x64
|
{D90BC3E3-1341-4849-9354-5F40489D39D1}.Release|x64.ActiveCfg = Release|x64
|
||||||
{D90BC3E3-1341-4849-9354-5F40489D39D1}.Release|x64.Build.0 = Release|x64
|
{D90BC3E3-1341-4849-9354-5F40489D39D1}.Release|x64.Build.0 = Release|x64
|
||||||
|
{C2321A03-0BA7-45B3-8740-ABD82B36B0BF}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{C2321A03-0BA7-45B3-8740-ABD82B36B0BF}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{C2321A03-0BA7-45B3-8740-ABD82B36B0BF}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{C2321A03-0BA7-45B3-8740-ABD82B36B0BF}.Release|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -203,6 +209,7 @@ Global
|
||||||
{3024CF36-85E5-4E00-9608-7002E2C7EF14} = {561126F4-FA18-45FC-A2BF-8F858F161D6D}
|
{3024CF36-85E5-4E00-9608-7002E2C7EF14} = {561126F4-FA18-45FC-A2BF-8F858F161D6D}
|
||||||
{19C52A0A-A790-409E-A28A-9745FF990F5C} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240}
|
{19C52A0A-A790-409E-A28A-9745FF990F5C} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240}
|
||||||
{D90BC3E3-1341-4849-9354-5F40489D39D1} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240}
|
{D90BC3E3-1341-4849-9354-5F40489D39D1} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240}
|
||||||
|
{C2321A03-0BA7-45B3-8740-ABD82B36B0BF} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240}
|
||||||
{B10A2C41-344C-43E0-A32D-B9587C198D8B} = {0FD996A7-464F-4981-8380-3DCA3A244A13}
|
{B10A2C41-344C-43E0-A32D-B9587C198D8B} = {0FD996A7-464F-4981-8380-3DCA3A244A13}
|
||||||
{C9B735E4-75BC-45AC-A5E3-39A6D076F912} = {0FD996A7-464F-4981-8380-3DCA3A244A13}
|
{C9B735E4-75BC-45AC-A5E3-39A6D076F912} = {0FD996A7-464F-4981-8380-3DCA3A244A13}
|
||||||
{5A0F4962-E670-4DA2-9E45-52CC47F26E2F} = {0FD996A7-464F-4981-8380-3DCA3A244A13}
|
{5A0F4962-E670-4DA2-9E45-52CC47F26E2F} = {0FD996A7-464F-4981-8380-3DCA3A244A13}
|
||||||
|
|
|
@ -47,7 +47,9 @@ Name: "plugins\upd"; Description: "Update Checker"; Types: normal custom; Flags:
|
||||||
Name: "plugins\winamp"; Description: "Winamp"; Types: custom; Flags: disablenouninstallwarning
|
Name: "plugins\winamp"; Description: "Winamp"; Types: custom; Flags: disablenouninstallwarning
|
||||||
Name: "langs"; Description: "Language Interfaces"; Types: custom; Flags: disablenouninstallwarning
|
Name: "langs"; Description: "Language Interfaces"; Types: custom; Flags: disablenouninstallwarning
|
||||||
Name: "langs\perl"; Description: "Perl (requires Perl 5.18)"; Types: custom; Flags: disablenouninstallwarning
|
Name: "langs\perl"; Description: "Perl (requires Perl 5.18)"; Types: custom; Flags: disablenouninstallwarning
|
||||||
Name: "langs\python"; Description: "Python (requires Python 2.7)"; Types: custom; Flags: disablenouninstallwarning
|
Name: "langs\python"; Description: "Python Interface"; Types: custom; Flags: disablenouninstallwarning
|
||||||
|
Name: "langs\python\python2"; Description: "Python (requires Python 2.7)"; Types: custom; Flags: disablenouninstallwarning exclusive
|
||||||
|
Name: "langs\python\python3"; Description: "Python (requires Python 3.3)"; Types: custom; Flags: disablenouninstallwarning exclusive
|
||||||
|
|
||||||
[Tasks]
|
[Tasks]
|
||||||
Name: portable; Description: "Yes"; GroupDescription: "Portable Install (no Registry entries, no Start Menu icons, no uninstaller):"; Flags: unchecked
|
Name: portable; Description: "Yes"; GroupDescription: "Portable Install (no Registry entries, no Start Menu icons, no uninstaller):"; Flags: unchecked
|
||||||
|
@ -71,9 +73,9 @@ Root: HKCR; Subkey: ".hct\shell\open\command"; ValueType: string; ValueName: "";
|
||||||
Filename: "{app}\hexchat.exe"; Description: "Run HexChat after closing the Wizard"; Flags: nowait postinstall skipifsilent
|
Filename: "{app}\hexchat.exe"; Description: "Run HexChat after closing the Wizard"; Flags: nowait postinstall skipifsilent
|
||||||
Filename: "http://www.microsoft.com/en-us/download/details.aspx?id=30679"; Description: "Download Visual C++ 2012 Update 1 Redistributable"; Flags: shellexec runasoriginaluser postinstall skipifsilent
|
Filename: "http://www.microsoft.com/en-us/download/details.aspx?id=30679"; Description: "Download Visual C++ 2012 Update 1 Redistributable"; Flags: shellexec runasoriginaluser postinstall skipifsilent
|
||||||
Filename: "http://docs.hexchat.org/en/latest/changelog.html"; Description: "See what's changed"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked
|
Filename: "http://docs.hexchat.org/en/latest/changelog.html"; Description: "See what's changed"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked
|
||||||
Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl 5.18"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and not langs\python
|
Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and not langs\python
|
||||||
Filename: "http://hexchat.org/downloads.html"; Description: "Download Python 2.7"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\python and not langs\perl
|
Filename: "http://hexchat.org/downloads.html"; Description: "Download Python"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\python and not langs\perl
|
||||||
Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl 5.18 and Python 2.7"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and langs\python
|
Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl and Python"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and langs\python
|
||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "portable-mode"; DestDir: "{app}"; Tasks: portable
|
Source: "portable-mode"; DestDir: "{app}"; Tasks: portable
|
||||||
|
@ -145,7 +147,8 @@ Source: "plugins\hcwinamp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion;
|
||||||
Source: "share\system.png"; DestDir: "{app}\share"; Flags: ignoreversion; Components: plugins\sysinfo
|
Source: "share\system.png"; DestDir: "{app}\share"; Flags: ignoreversion; Components: plugins\sysinfo
|
||||||
Source: "plugins\hcsysinfo.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\sysinfo
|
Source: "plugins\hcsysinfo.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\sysinfo
|
||||||
|
|
||||||
Source: "plugins\hcpython.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\python
|
Source: "plugins\hcpython2.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\python\python2
|
||||||
|
Source: "plugins\hcpython3.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\python\python3
|
||||||
Source: "plugins\hcperl.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\perl
|
Source: "plugins\hcperl.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\perl
|
||||||
|
|
||||||
Source: "hexchat.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
Source: "hexchat.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||||
|
|
|
@ -46,7 +46,9 @@ Name: "plugins\upd"; Description: "Update Checker"; Types: normal custom; Flags:
|
||||||
Name: "plugins\winamp"; Description: "Winamp"; Types: custom; Flags: disablenouninstallwarning
|
Name: "plugins\winamp"; Description: "Winamp"; Types: custom; Flags: disablenouninstallwarning
|
||||||
Name: "langs"; Description: "Language Interfaces"; Types: custom; Flags: disablenouninstallwarning
|
Name: "langs"; Description: "Language Interfaces"; Types: custom; Flags: disablenouninstallwarning
|
||||||
Name: "langs\perl"; Description: "Perl (requires Perl 5.18)"; Types: custom; Flags: disablenouninstallwarning
|
Name: "langs\perl"; Description: "Perl (requires Perl 5.18)"; Types: custom; Flags: disablenouninstallwarning
|
||||||
Name: "langs\python"; Description: "Python (requires Python 2.7)"; Types: custom; Flags: disablenouninstallwarning
|
Name: "langs\python"; Description: "Python Interface"; Types: custom; Flags: disablenouninstallwarning
|
||||||
|
Name: "langs\python\python2"; Description: "Python (requires Python 2.7)"; Types: custom; Flags: disablenouninstallwarning exclusive
|
||||||
|
Name: "langs\python\python3"; Description: "Python (requires Python 3.3)"; Types: custom; Flags: disablenouninstallwarning exclusive
|
||||||
|
|
||||||
[Tasks]
|
[Tasks]
|
||||||
Name: portable; Description: "Yes"; GroupDescription: "Portable Install (no Registry entries, no Start Menu icons, no uninstaller):"; Flags: unchecked
|
Name: portable; Description: "Yes"; GroupDescription: "Portable Install (no Registry entries, no Start Menu icons, no uninstaller):"; Flags: unchecked
|
||||||
|
@ -70,9 +72,9 @@ Root: HKCR; Subkey: ".hct\shell\open\command"; ValueType: string; ValueName: "";
|
||||||
Filename: "{app}\hexchat.exe"; Description: "Run HexChat after closing the Wizard"; Flags: nowait postinstall skipifsilent
|
Filename: "{app}\hexchat.exe"; Description: "Run HexChat after closing the Wizard"; Flags: nowait postinstall skipifsilent
|
||||||
Filename: "http://www.microsoft.com/en-us/download/details.aspx?id=30679"; Description: "Download Visual C++ 2012 Update 1 Redistributable"; Flags: shellexec runasoriginaluser postinstall skipifsilent
|
Filename: "http://www.microsoft.com/en-us/download/details.aspx?id=30679"; Description: "Download Visual C++ 2012 Update 1 Redistributable"; Flags: shellexec runasoriginaluser postinstall skipifsilent
|
||||||
Filename: "http://docs.hexchat.org/en/latest/changelog.html"; Description: "See what's changed"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked
|
Filename: "http://docs.hexchat.org/en/latest/changelog.html"; Description: "See what's changed"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked
|
||||||
Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl 5.18"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and not langs\python
|
Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and not langs\python
|
||||||
Filename: "http://hexchat.org/downloads.html"; Description: "Download Python 2.7"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\python and not langs\perl
|
Filename: "http://hexchat.org/downloads.html"; Description: "Download Python"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\python and not langs\perl
|
||||||
Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl 5.18 and Python 2.7"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and langs\python
|
Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl and Python"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and langs\python
|
||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "portable-mode"; DestDir: "{app}"; Tasks: portable
|
Source: "portable-mode"; DestDir: "{app}"; Tasks: portable
|
||||||
|
@ -144,7 +146,8 @@ Source: "plugins\hcwinamp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion;
|
||||||
Source: "share\system.png"; DestDir: "{app}\share"; Flags: ignoreversion; Components: plugins\sysinfo
|
Source: "share\system.png"; DestDir: "{app}\share"; Flags: ignoreversion; Components: plugins\sysinfo
|
||||||
Source: "plugins\hcsysinfo.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\sysinfo
|
Source: "plugins\hcsysinfo.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\sysinfo
|
||||||
|
|
||||||
Source: "plugins\hcpython.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\python
|
Source: "plugins\hcpython2.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\python\python2
|
||||||
|
Source: "plugins\hcpython3.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\python\python3
|
||||||
Source: "plugins\hcperl.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\perl
|
Source: "plugins\hcperl.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\perl
|
||||||
|
|
||||||
Source: "hexchat.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
Source: "hexchat.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||||
|
|
Loading…
Reference in New Issue