Compare commits
5 Commits
v2.12.1
...
wip/self-m
Author | SHA1 | Date | |
---|---|---|---|
52a685238c | |||
951b7563bf | |||
2ea12bce1d | |||
382908ab6d | |||
e3838a6e67 |
17
.gitignore
vendored
17
.gitignore
vendored
@ -7,19 +7,31 @@ Makefile
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
autom4te.cache/
|
||||
/build-aux/
|
||||
compile
|
||||
ar-lib
|
||||
confdefs.h
|
||||
conftest
|
||||
conftest.c
|
||||
conftest.err
|
||||
config.*
|
||||
config.guess
|
||||
config.h.in
|
||||
config.h.in~
|
||||
config.h
|
||||
config.log
|
||||
config.status
|
||||
config.sub
|
||||
config-win32.h
|
||||
configure
|
||||
configure.tmp
|
||||
depcomp
|
||||
doxygen*.tmp
|
||||
html/
|
||||
install-sh
|
||||
intl/
|
||||
libtool
|
||||
ltmain.sh
|
||||
m4/
|
||||
missing
|
||||
plugins/perl/irc.pm.h
|
||||
plugins/perl/xchat.pm.h
|
||||
plugins/perl/hexchat.pm.h
|
||||
@ -32,7 +44,6 @@ data/man/hexchat.1
|
||||
data/pkgconfig/hexchat-plugin.pc
|
||||
data/misc/hexchat.appdata.xml
|
||||
data/misc/hexchat.desktop
|
||||
data/misc/hexchat.desktop.in
|
||||
data/misc/htm.desktop
|
||||
src/common/dbus/example
|
||||
src/common/dbus/org.hexchat.service.service
|
||||
|
@ -1,5 +1,4 @@
|
||||
sudo: required
|
||||
dist: trusty
|
||||
sudo: false
|
||||
language: c
|
||||
cache: apt
|
||||
compiler: clang
|
||||
@ -24,7 +23,6 @@ addons:
|
||||
- libdbus-glib-1-dev
|
||||
- libglib2.0-dev
|
||||
- libgtk2.0-dev
|
||||
- libluajit-5.1-dev
|
||||
- libnotify-dev
|
||||
- libpci-dev
|
||||
- libperl-dev
|
||||
|
13
autogen.sh
13
autogen.sh
@ -9,15 +9,10 @@ test -z "$srcdir" && srcdir=.
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ "$1" = "--copy" ]; then
|
||||
shift
|
||||
aclocal --force --install || exit 1
|
||||
intltoolize --force --copy --automake || exit 1
|
||||
autoreconf --force --install --include=m4 -Wno-portability || exit 1
|
||||
else
|
||||
intltoolize --automake || exit 1
|
||||
autoreconf --install --symlink --include=m4 -Wno-portability || exit 1
|
||||
fi
|
||||
aclocal --install -I m4 || exit 1
|
||||
glib-gettextize --force --copy || exit 1
|
||||
intltoolize --force --copy --automake || exit 1
|
||||
autoreconf --force --install -Wno-portability || exit 1
|
||||
|
||||
if [ "$NOCONFIGURE" = "" ]; then
|
||||
$srcdir/configure "$@" || exit 1
|
||||
|
50
configure.ac
50
configure.ac
@ -1,6 +1,6 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_INIT([HexChat],[2.12.1])
|
||||
AC_INIT([HexChat],[2.12.0])
|
||||
|
||||
AC_PREREQ([2.64])
|
||||
AC_COPYRIGHT([Copyright (C) 1998-2010 Peter Zelezny])
|
||||
@ -9,7 +9,6 @@ AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([configure.ac])
|
||||
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
|
||||
AM_INIT_AUTOMAKE([1.11.1 dist-xz no-dist-gzip subdir-objects no-define foreign])
|
||||
AM_SILENT_RULES([yes])
|
||||
@ -118,10 +117,6 @@ AC_ARG_ENABLE(perl,
|
||||
[AS_HELP_STRING([--disable-perl],[don\'t build the perl plugin])],
|
||||
perl=$enableval, perl=yes)
|
||||
|
||||
AC_ARG_ENABLE(lua,
|
||||
[AS_HELP_STRING([--disable-lua],[don\'t build the lua plugin])],
|
||||
lua=$enableval, lua=yes)
|
||||
|
||||
AC_ARG_ENABLE(perl_old,
|
||||
[AS_HELP_STRING([--disable-perl_old],[no backwards compatibility for perl plugin])],
|
||||
perl_old=$enableval, perl_old=yes)
|
||||
@ -190,11 +185,11 @@ dnl *********************************************************************
|
||||
dnl ** GLIB *************************************************************
|
||||
dnl *********************************************************************
|
||||
|
||||
AM_PATH_GLIB_2_0([2.34.0], [], [AC_MSG_ERROR([Glib not found!])], [gmodule gobject gio])
|
||||
AM_PATH_GLIB_2_0([2.32.0], [], [AC_MSG_ERROR([Glib not found!])], [gmodule gobject gio])
|
||||
COMMON_CFLAGS="$GLIB_CFLAGS -DG_DISABLE_SINGLE_INCLUDES"
|
||||
COMMON_LIBS="$GLIB_LIBS"
|
||||
AC_DEFINE([GLIB_VERSION_MIN_REQUIRED], [GLIB_VERSION_2_34], [Dont warn using older APIs])
|
||||
AC_DEFINE([GLIB_VERSION_MAX_ALLOWED], [GLIB_VERSION_2_34], [Prevents using newer APIs])
|
||||
AC_DEFINE([GLIB_VERSION_MIN_REQUIRED], [GLIB_VERSION_2_32], [Dont warn using older APIs])
|
||||
AC_DEFINE([GLIB_VERSION_MAX_ALLOWED], [GLIB_VERSION_2_32], [Prevents using newer APIs])
|
||||
|
||||
dnl *********************************************************************
|
||||
dnl ** GTK **************************************************************
|
||||
@ -222,40 +217,6 @@ AS_IF([test "x$_gdk_tgt" = xquartz], [
|
||||
])
|
||||
])
|
||||
|
||||
|
||||
dnl *********************************************************************
|
||||
dnl ** Lua **************************************************************
|
||||
dnl *********************************************************************
|
||||
|
||||
AS_IF([test "$lua" = yes], [
|
||||
AC_MSG_CHECKING(for plugin interface used by lua)
|
||||
AS_IF([test "$plugin" = yes], [
|
||||
AC_MSG_RESULT([yes])
|
||||
|
||||
m4_define_default([_LUA_LIST], [luajit lua lua5.3 lua53 lua5.2 lua52 lua5.1 lua51])
|
||||
|
||||
AC_ARG_VAR([LUA], [The Lua pkgconfig name, e.g. luajit or lua5.2])
|
||||
AS_IF([test "x$LUA" = 'x'], [
|
||||
for lua_var in _LUA_LIST; do
|
||||
$PKG_CONFIG --exists $lua_var || continue
|
||||
LUA=$lua_var
|
||||
break
|
||||
done
|
||||
AS_IF([test "x$LUA" = 'x'], [
|
||||
AC_MSG_ERROR([Failed to find lua])
|
||||
])
|
||||
])
|
||||
|
||||
PKG_CHECK_MODULES([LUA], $LUA, [
|
||||
AC_SUBST([LUA_CFLAGS])
|
||||
AC_SUBST([LUA_LIBS])
|
||||
])
|
||||
], [
|
||||
AC_MSG_RESULT([plugins are disabled, use the --enable-plugin option for lua])
|
||||
lua=no
|
||||
])
|
||||
])
|
||||
|
||||
dnl *********************************************************************
|
||||
dnl ** PERL *************************************************************
|
||||
dnl *********************************************************************
|
||||
@ -602,7 +563,6 @@ AM_CONDITIONAL(USE_LIBCANBERRA, test "x$libcanberra" = "xyes")
|
||||
AM_CONDITIONAL(DO_TEXT, test "x$textfe" = "xyes")
|
||||
AM_CONDITIONAL(DO_GTK, test "x$gtkfe" = "xyes")
|
||||
AM_CONDITIONAL(DO_PERL, test "x$perl" = "xyes")
|
||||
AM_CONDITIONAL(DO_LUA, test "x$lua" = "xyes")
|
||||
AM_CONDITIONAL(DO_PYTHON, test "x$python" != "xno")
|
||||
AM_CONDITIONAL(DO_PLUGIN, test "x$plugin" = "xyes")
|
||||
AM_CONDITIONAL(DO_CHECKSUM, test "x$checksum" = "xyes")
|
||||
@ -755,7 +715,6 @@ src/htm/Makefile
|
||||
src/htm/thememan
|
||||
osx/Info.plist
|
||||
plugins/Makefile
|
||||
plugins/lua/Makefile
|
||||
plugins/python/Makefile
|
||||
plugins/perl/Makefile
|
||||
plugins/checksum/Makefile
|
||||
@ -781,7 +740,6 @@ echo libcanberra support ... : $libcanberra
|
||||
echo Plugin interface ...... : $plugin
|
||||
echo libproxy support ...... : $libproxy
|
||||
echo
|
||||
echo Lua ................... : $lua \($LUA\)
|
||||
echo Perl .................. : $perl
|
||||
echo Python ................ : $python
|
||||
echo
|
||||
|
@ -3,15 +3,6 @@ appdata_DATA = $(appdata_in_files:.xml.in=.xml)
|
||||
appdatadir = $(datadir)/appdata
|
||||
@INTLTOOL_XML_RULE@
|
||||
|
||||
if USE_DBUS
|
||||
exec_command = 'hexchat --existing %U'
|
||||
else
|
||||
exec_command = 'hexchat %U'
|
||||
endif
|
||||
|
||||
hexchat.desktop.in: hexchat.desktop.in.in
|
||||
$(AM_V_GEN)sed -e s!\@exec_command\@!$(exec_command)! < $< > $@
|
||||
|
||||
data_desktopdir = $(datadir)/applications
|
||||
data_desktop_in_files = hexchat.desktop.in
|
||||
|
||||
@ -35,6 +26,6 @@ uninstall-hook:
|
||||
$(UPDATE_MIME_DATABASE);
|
||||
$(UPDATE_DESKTOP_DATABASE);
|
||||
|
||||
EXTRA_DIST = hexchat.appdata.xml.in hexchat.desktop.in.in htm.desktop.in htm-mime.xml
|
||||
EXTRA_DIST = hexchat.appdata.xml.in hexchat.desktop.in htm.desktop.in htm-mime.xml
|
||||
|
||||
CLEANFILES = $(appdata_DATA) $(data_desktop_DATA) hexchat.desktop.in
|
||||
CLEANFILES = $(appdata_DATA) $(data_desktop_DATA)
|
||||
|
@ -3,7 +3,7 @@ _Name=HexChat
|
||||
_GenericName=IRC Client
|
||||
_Comment=Chat with other people online
|
||||
_Keywords=IM;Chat;
|
||||
Exec=@exec_command@
|
||||
Exec=hexchat %U
|
||||
Icon=hexchat
|
||||
Terminal=false
|
||||
Type=Application
|
@ -1,327 +0,0 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_python_devel.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PYTHON_DEVEL([version])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Note: Defines as a precious variable "PYTHON_VERSION". Don't override it
|
||||
# in your configure.ac.
|
||||
#
|
||||
# This macro checks for Python and tries to get the include path to
|
||||
# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output
|
||||
# variables. It also exports $(PYTHON_EXTRA_LIBS) and
|
||||
# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
|
||||
#
|
||||
# You can search for some particular version of Python by passing a
|
||||
# parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
|
||||
# note that you *have* to pass also an operator along with the version to
|
||||
# match, and pay special attention to the single quotes surrounding the
|
||||
# version number. Don't use "PYTHON_VERSION" for this: that environment
|
||||
# variable is declared as precious and thus reserved for the end-user.
|
||||
#
|
||||
# This macro should work for all versions of Python >= 2.1.0. As an end
|
||||
# user, you can disable the check for the python version by setting the
|
||||
# PYTHON_NOVERSIONCHECK environment variable to something else than the
|
||||
# empty string.
|
||||
#
|
||||
# If you need to use this macro for an older Python version, please
|
||||
# contact the authors. We're always open for feedback.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2009 Sebastian Huber <sebastian-huber@web.de>
|
||||
# Copyright (c) 2009 Alan W. Irwin
|
||||
# Copyright (c) 2009 Rafael Laboissiere <rafael@laboissiere.net>
|
||||
# Copyright (c) 2009 Andrew Collier
|
||||
# Copyright (c) 2009 Matteo Settenvini <matteo@member.fsf.org>
|
||||
# Copyright (c) 2009 Horst Knorr <hk_classes@knoda.org>
|
||||
# Copyright (c) 2013 Daniel Mullner <muellner@math.stanford.edu>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 18
|
||||
|
||||
AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
|
||||
AC_DEFUN([AX_PYTHON_DEVEL],[
|
||||
#
|
||||
# Allow the use of a (user set) custom python version
|
||||
#
|
||||
AC_ARG_VAR([PYTHON_VERSION],[The installed Python
|
||||
version to use, for example '2.3'. This string
|
||||
will be appended to the Python interpreter
|
||||
canonical name.])
|
||||
|
||||
AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
|
||||
if test -z "$PYTHON"; then
|
||||
AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
|
||||
PYTHON_VERSION=""
|
||||
fi
|
||||
|
||||
#
|
||||
# Check for a version of Python >= 2.1.0
|
||||
#
|
||||
AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
|
||||
ac_supports_python_ver=`$PYTHON -c "import sys; \
|
||||
ver = sys.version.split ()[[0]]; \
|
||||
print (ver >= '2.1.0')"`
|
||||
if test "$ac_supports_python_ver" != "True"; then
|
||||
if test -z "$PYTHON_NOVERSIONCHECK"; then
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_FAILURE([
|
||||
This version of the AC@&t@_PYTHON_DEVEL macro
|
||||
doesn't work properly with versions of Python before
|
||||
2.1.0. You may need to re-run configure, setting the
|
||||
variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
|
||||
PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
|
||||
Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
|
||||
to something else than an empty string.
|
||||
])
|
||||
else
|
||||
AC_MSG_RESULT([skip at user request])
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT([yes])
|
||||
fi
|
||||
|
||||
#
|
||||
# if the macro parameter ``version'' is set, honour it
|
||||
#
|
||||
if test -n "$1"; then
|
||||
AC_MSG_CHECKING([for a version of Python $1])
|
||||
ac_supports_python_ver=`$PYTHON -c "import sys; \
|
||||
ver = sys.version.split ()[[0]]; \
|
||||
print (ver $1)"`
|
||||
if test "$ac_supports_python_ver" = "True"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_ERROR([this package requires Python $1.
|
||||
If you have it installed, but it isn't the default Python
|
||||
interpreter in your system path, please pass the PYTHON_VERSION
|
||||
variable to configure. See ``configure --help'' for reference.
|
||||
])
|
||||
PYTHON_VERSION=""
|
||||
fi
|
||||
fi
|
||||
|
||||
#
|
||||
# Check if you have distutils, else fail
|
||||
#
|
||||
AC_MSG_CHECKING([for the distutils Python package])
|
||||
ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
|
||||
if test -z "$ac_distutils_result"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_ERROR([cannot import Python module "distutils".
|
||||
Please check your Python installation. The error was:
|
||||
$ac_distutils_result])
|
||||
PYTHON_VERSION=""
|
||||
fi
|
||||
|
||||
#
|
||||
# Check for Python include path
|
||||
#
|
||||
AC_MSG_CHECKING([for Python include path])
|
||||
if test -z "$PYTHON_CPPFLAGS"; then
|
||||
python_path=`$PYTHON -c "import distutils.sysconfig; \
|
||||
print (distutils.sysconfig.get_python_inc ());"`
|
||||
plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
|
||||
print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
|
||||
if test -n "${python_path}"; then
|
||||
if test "${plat_python_path}" != "${python_path}"; then
|
||||
python_path="-I$python_path -I$plat_python_path"
|
||||
else
|
||||
python_path="-I$python_path"
|
||||
fi
|
||||
fi
|
||||
PYTHON_CPPFLAGS=$python_path
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON_CPPFLAGS])
|
||||
AC_SUBST([PYTHON_CPPFLAGS])
|
||||
|
||||
#
|
||||
# Check for Python library path
|
||||
#
|
||||
AC_MSG_CHECKING([for Python library path])
|
||||
if test -z "$PYTHON_LIBS"; then
|
||||
# (makes two attempts to ensure we've got a version number
|
||||
# from the interpreter)
|
||||
ac_python_version=`cat<<EOD | $PYTHON -
|
||||
|
||||
# join all versioning strings, on some systems
|
||||
# major/minor numbers could be in different list elements
|
||||
from distutils.sysconfig import *
|
||||
e = get_config_var('VERSION')
|
||||
if e is not None:
|
||||
print(e)
|
||||
EOD`
|
||||
|
||||
if test -z "$ac_python_version"; then
|
||||
if test -n "$PYTHON_VERSION"; then
|
||||
ac_python_version=$PYTHON_VERSION
|
||||
else
|
||||
ac_python_version=`$PYTHON -c "import sys; \
|
||||
print (sys.version[[:3]])"`
|
||||
fi
|
||||
fi
|
||||
|
||||
# Make the versioning information available to the compiler
|
||||
AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"],
|
||||
[If available, contains the Python version number currently in use.])
|
||||
|
||||
# First, the library directory:
|
||||
ac_python_libdir=`cat<<EOD | $PYTHON -
|
||||
|
||||
# There should be only one
|
||||
import distutils.sysconfig
|
||||
e = distutils.sysconfig.get_config_var('LIBDIR')
|
||||
if e is not None:
|
||||
print (e)
|
||||
EOD`
|
||||
|
||||
# Now, for the library:
|
||||
ac_python_library=`cat<<EOD | $PYTHON -
|
||||
|
||||
import distutils.sysconfig
|
||||
c = distutils.sysconfig.get_config_vars()
|
||||
if 'LDVERSION' in c:
|
||||
print ('python'+c[['LDVERSION']])
|
||||
else:
|
||||
print ('python'+c[['VERSION']])
|
||||
EOD`
|
||||
|
||||
# This small piece shamelessly adapted from PostgreSQL python macro;
|
||||
# credits goes to momjian, I think. I'd like to put the right name
|
||||
# in the credits, if someone can point me in the right direction... ?
|
||||
#
|
||||
if test -n "$ac_python_libdir" -a -n "$ac_python_library"
|
||||
then
|
||||
# use the official shared library
|
||||
ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
|
||||
PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
|
||||
else
|
||||
# old way: use libpython from python_configdir
|
||||
ac_python_libdir=`$PYTHON -c \
|
||||
"from distutils.sysconfig import get_python_lib as f; \
|
||||
import os; \
|
||||
print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
|
||||
PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
|
||||
fi
|
||||
|
||||
if test -z "PYTHON_LIBS"; then
|
||||
AC_MSG_ERROR([
|
||||
Cannot determine location of your Python DSO. Please check it was installed with
|
||||
dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
|
||||
])
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON_LIBS])
|
||||
AC_SUBST([PYTHON_LIBS])
|
||||
|
||||
#
|
||||
# Check for site packages
|
||||
#
|
||||
AC_MSG_CHECKING([for Python site-packages path])
|
||||
if test -z "$PYTHON_SITE_PKG"; then
|
||||
PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
|
||||
print (distutils.sysconfig.get_python_lib(0,0));"`
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON_SITE_PKG])
|
||||
AC_SUBST([PYTHON_SITE_PKG])
|
||||
|
||||
#
|
||||
# libraries which must be linked in when embedding
|
||||
#
|
||||
AC_MSG_CHECKING(python extra libraries)
|
||||
if test -z "$PYTHON_EXTRA_LDFLAGS"; then
|
||||
PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
|
||||
conf = distutils.sysconfig.get_config_var; \
|
||||
print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
|
||||
AC_SUBST(PYTHON_EXTRA_LDFLAGS)
|
||||
|
||||
#
|
||||
# linking flags needed when embedding
|
||||
#
|
||||
AC_MSG_CHECKING(python extra linking flags)
|
||||
if test -z "$PYTHON_EXTRA_LIBS"; then
|
||||
PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
|
||||
conf = distutils.sysconfig.get_config_var; \
|
||||
print (conf('LINKFORSHARED'))"`
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
|
||||
AC_SUBST(PYTHON_EXTRA_LIBS)
|
||||
|
||||
#
|
||||
# final check to see if everything compiles alright
|
||||
#
|
||||
AC_MSG_CHECKING([consistency of all components of python development environment])
|
||||
# save current global flags
|
||||
ac_save_LIBS="$LIBS"
|
||||
ac_save_LDFLAGS="$LDFLAGS"
|
||||
ac_save_CPPFLAGS="$CPPFLAGS"
|
||||
LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS"
|
||||
LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
|
||||
CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
|
||||
AC_LANG_PUSH([C])
|
||||
AC_LINK_IFELSE([
|
||||
AC_LANG_PROGRAM([[#include <Python.h>]],
|
||||
[[Py_Initialize();]])
|
||||
],[pythonexists=yes],[pythonexists=no])
|
||||
AC_LANG_POP([C])
|
||||
# turn back to default flags
|
||||
CPPFLAGS="$ac_save_CPPFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
LDFLAGS="$ac_save_LDFLAGS"
|
||||
|
||||
AC_MSG_RESULT([$pythonexists])
|
||||
|
||||
if test ! "x$pythonexists" = "xyes"; then
|
||||
AC_MSG_FAILURE([
|
||||
Could not link test program to Python. Maybe the main Python library has been
|
||||
installed in some non-standard library path. If so, pass it to configure,
|
||||
via the LIBS environment variable.
|
||||
Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
|
||||
============================================================================
|
||||
ERROR!
|
||||
You probably have to install the development version of the Python package
|
||||
for your distribution. The exact name of this package varies among them.
|
||||
============================================================================
|
||||
])
|
||||
PYTHON_VERSION=""
|
||||
fi
|
||||
|
||||
#
|
||||
# all done!
|
||||
#
|
||||
])
|
@ -1,7 +1,3 @@
|
||||
if DO_LUA
|
||||
lua = lua
|
||||
endif
|
||||
|
||||
if DO_PYTHON
|
||||
pythondir = python
|
||||
endif
|
||||
@ -26,4 +22,4 @@ if DO_SYSINFO
|
||||
sysinfodir = sysinfo
|
||||
endif
|
||||
|
||||
SUBDIRS = $(lua) $(pythondir) $(perldir) $(checksumdir) $(doatdir) $(fishlimdir) $(sysinfodir)
|
||||
SUBDIRS = $(pythondir) $(perldir) $(checksumdir) $(doatdir) $(fishlimdir) $(sysinfodir)
|
||||
|
@ -1,9 +0,0 @@
|
||||
libdir = $(hexchatlibdir)
|
||||
|
||||
lib_LTLIBRARIES = lua.la
|
||||
lua_la_SOURCES = lua.c
|
||||
lua_la_LDFLAGS = $(PLUGIN_LDFLAGS) -module
|
||||
lua_la_LIBADD = $(LUA_LIBS) $(GLIB_LIBS)
|
||||
lua_la_CPPFLAGS = -I$(top_srcdir)/src/common
|
||||
lua_la_CFLAGS = $(GLIB_CFLAGS) $(LUA_CFLAGS)
|
||||
|
1725
plugins/lua/lua.c
1725
plugins/lua/lua.c
File diff suppressed because it is too large
Load Diff
@ -1,54 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Label="Configuration">
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</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>{4C0F3940-2EEE-4646-82F7-6CE75B9A72F4}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>lua</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\win32\hexchat.props" />
|
||||
<PropertyGroup>
|
||||
<TargetName>$(LuaOutput)</TargetName>
|
||||
<OutDir>$(HexChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(Glib);$(LuaInclude);..\..\src\common;$(HexChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>"$(LuaLib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(Glib);$(LuaInclude);..\..\src\common;$(HexChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>"$(LuaLib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="lua.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
</Project>
|
@ -1,14 +0,0 @@
|
||||
<?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="lua.c" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1 +0,0 @@
|
||||
data/misc/hexchat.desktop.in.in
|
@ -76,28 +76,14 @@ chanopt_value (guint8 val)
|
||||
switch (val)
|
||||
{
|
||||
case SET_OFF:
|
||||
return _("OFF");
|
||||
return "OFF";
|
||||
case SET_ON:
|
||||
return _("ON");
|
||||
case SET_DEFAULT:
|
||||
return _("{unset}");
|
||||
return "ON";
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
return "{unset}";
|
||||
}
|
||||
}
|
||||
|
||||
static guint8
|
||||
str_to_chanopt (const char *str)
|
||||
{
|
||||
if (!g_ascii_strcasecmp (str, "ON") || !strcmp (str, "1"))
|
||||
return SET_ON;
|
||||
else if (!g_ascii_strcasecmp (str, "OFF") || !strcmp (str, "0"))
|
||||
return SET_OFF;
|
||||
else
|
||||
return SET_DEFAULT;
|
||||
}
|
||||
|
||||
/* handle the /CHANOPT command */
|
||||
|
||||
int
|
||||
@ -120,14 +106,19 @@ chanopt_command (session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
|
||||
if (word[offset][0])
|
||||
{
|
||||
newval = str_to_chanopt (word[offset]);
|
||||
if (!g_ascii_strcasecmp (word[offset], "ON"))
|
||||
newval = 1;
|
||||
else if (!g_ascii_strcasecmp (word[offset], "OFF"))
|
||||
newval = 0;
|
||||
else if (word[offset][0] == 'u')
|
||||
newval = SET_DEFAULT;
|
||||
else
|
||||
newval = atoi (word[offset]);
|
||||
}
|
||||
|
||||
if (!quiet)
|
||||
PrintTextf (sess, "\002%s\002: %s \002%s\002: %s\n",
|
||||
_("Network"),
|
||||
PrintTextf (sess, "\002Network\002: %s \002Channel\002: %s\n",
|
||||
sess->server->network ? server_get_network (sess->server, TRUE) : _("<none>"),
|
||||
_("Channel"),
|
||||
sess->session_name[0] ? sess->session_name : _("<none>"));
|
||||
|
||||
while (i < sizeof (chanopt) / sizeof (channel_options))
|
||||
@ -290,7 +281,7 @@ chanopt_load_all (void)
|
||||
else
|
||||
{
|
||||
if (current)
|
||||
chanopt_add_opt (current, buf, str_to_chanopt (eq + 2));
|
||||
chanopt_add_opt (current, buf, atoi (eq + 2));
|
||||
}
|
||||
|
||||
}
|
||||
@ -397,7 +388,7 @@ chanopt_save_one_channel (chanopt_in_memory *co, int fh)
|
||||
}
|
||||
|
||||
void
|
||||
chanopt_save_all (gboolean flush)
|
||||
chanopt_save_all (void)
|
||||
{
|
||||
int i;
|
||||
int num_saved;
|
||||
@ -439,21 +430,15 @@ chanopt_save_all (gboolean flush)
|
||||
}
|
||||
|
||||
cont:
|
||||
if (flush)
|
||||
{
|
||||
g_free (co->network);
|
||||
g_free (co->channel);
|
||||
g_free (co);
|
||||
}
|
||||
g_free (co->network);
|
||||
g_free (co->channel);
|
||||
g_free (co);
|
||||
}
|
||||
|
||||
close (fh);
|
||||
|
||||
if (flush)
|
||||
{
|
||||
g_slist_free (chanopt_list);
|
||||
chanopt_list = NULL;
|
||||
}
|
||||
g_slist_free (chanopt_list);
|
||||
chanopt_list = NULL;
|
||||
|
||||
chanopt_open = FALSE;
|
||||
chanopt_changed = FALSE;
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
int chanopt_command (session *sess, char *tbuf, char *word[], char *word_eol[]);
|
||||
gboolean chanopt_is_set (unsigned int global, guint8 per_chan_setting);
|
||||
void chanopt_save_all (gboolean flush);
|
||||
void chanopt_save_all (void);
|
||||
void chanopt_save (session *sess);
|
||||
void chanopt_load (session *sess);
|
||||
|
||||
|
@ -93,6 +93,7 @@ ctcp_handle (session *sess, char *to, char *nick, char *ip,
|
||||
server *serv = sess->server;
|
||||
char outbuf[1024];
|
||||
int ctcp_offset = 2;
|
||||
gboolean fromme = FALSE;
|
||||
|
||||
if (serv->have_idmsg && (word[4][1] == '+' || word[4][1] == '-') )
|
||||
ctcp_offset = 3;
|
||||
@ -129,7 +130,10 @@ ctcp_handle (session *sess, char *to, char *nick, char *ip,
|
||||
if (ctcp_check (sess, nick, word, word_eol, word[4] + ctcp_offset))
|
||||
goto generic;
|
||||
|
||||
inbound_action (sess, to, nick, ip, msg + 7, FALSE, id, tags_data);
|
||||
if (!serv->p_cmp (nick, serv->nick))
|
||||
fromme = TRUE;
|
||||
|
||||
inbound_action (sess, to, nick, ip, msg + 7, fromme, FALSE, id, tags_data);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -549,10 +549,10 @@ dcc_chat_line (struct DCC *dcc, char *line)
|
||||
if (po)
|
||||
po[0] = 0;
|
||||
inbound_action (sess, dcc->serv->nick, dcc->nick, "", line + 8, FALSE,
|
||||
FALSE, &no_tags);
|
||||
TRUE, FALSE, &no_tags);
|
||||
} else
|
||||
{
|
||||
inbound_privmsg (dcc->serv, dcc->nick, "", line, FALSE, &no_tags);
|
||||
inbound_privmsg (dcc->serv, dcc->nick, NULL, "", line, FALSE, &no_tags);
|
||||
}
|
||||
g_free (line);
|
||||
return 0;
|
||||
|
@ -960,7 +960,7 @@ hexchat_exit (void)
|
||||
notify_save ();
|
||||
ignore_save ();
|
||||
free_sessions ();
|
||||
chanopt_save_all (TRUE);
|
||||
chanopt_save_all ();
|
||||
servlist_cleanup ();
|
||||
fe_exit ();
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ inbound_open_dialog (server *serv, char *from,
|
||||
}
|
||||
|
||||
static void
|
||||
inbound_make_idtext (server *serv, char *idtext, int max, int id)
|
||||
inbound_make_idtext (server *serv, char *idtext, int max, gboolean id)
|
||||
{
|
||||
idtext[0] = 0;
|
||||
if (serv->have_idmsg || serv->have_accnotify)
|
||||
@ -163,28 +163,35 @@ inbound_make_idtext (server *serv, char *idtext, int max, int id)
|
||||
}
|
||||
|
||||
void
|
||||
inbound_privmsg (server *serv, char *from, char *ip, char *text, int id,
|
||||
inbound_privmsg (server *serv, char *from, char *to, char *ip, char *text, gboolean id,
|
||||
const message_tags_data *tags_data)
|
||||
{
|
||||
session *sess;
|
||||
struct User *user;
|
||||
char idtext[64];
|
||||
gboolean nodiag = FALSE;
|
||||
char *destsess = from;
|
||||
gboolean nodiag = FALSE, fromme = FALSE;
|
||||
|
||||
if (to && !serv->p_cmp (from, serv->nick))
|
||||
{
|
||||
fromme = TRUE;
|
||||
destsess = to;
|
||||
}
|
||||
|
||||
sess = find_dialog (serv, from);
|
||||
|
||||
if (sess || prefs.hex_gui_autoopen_dialog)
|
||||
if (!fromme && (sess || prefs.hex_gui_autoopen_dialog))
|
||||
{
|
||||
/*0=ctcp 1=priv will set hex_gui_autoopen_dialog=0 here is flud detected */
|
||||
/*0=ctcp 1=priv will set hex_gui_autoopen_dialog=0 here if flood is detected */
|
||||
if (!sess)
|
||||
{
|
||||
if (flood_check (from, ip, serv, current_sess, 1))
|
||||
{
|
||||
/* Create a dialog session */
|
||||
sess = inbound_open_dialog (serv, from, tags_data);
|
||||
}
|
||||
else
|
||||
sess = serv->server_session;
|
||||
if (!sess)
|
||||
return; /* ?? */
|
||||
}
|
||||
|
||||
if (ip && ip[0])
|
||||
@ -193,11 +200,18 @@ inbound_privmsg (server *serv, char *from, char *ip, char *text, int id,
|
||||
return;
|
||||
}
|
||||
|
||||
sess = find_session_from_nick (from, serv);
|
||||
sess = find_dialog (serv, destsess);
|
||||
if (!sess)
|
||||
{
|
||||
sess = serv->front_session;
|
||||
nodiag = TRUE; /* We don't want it to look like a normal message in front sess */
|
||||
if (fromme && prefs.hex_gui_autoopen_dialog)
|
||||
{
|
||||
sess = inbound_open_dialog (serv, destsess, tags_data);
|
||||
}
|
||||
else
|
||||
{
|
||||
sess = serv->front_session;
|
||||
nodiag = TRUE; /* We don't want it to look like a normal message in front sess */
|
||||
}
|
||||
}
|
||||
|
||||
user = userlist_find (sess, from);
|
||||
@ -210,7 +224,16 @@ inbound_privmsg (server *serv, char *from, char *ip, char *text, int id,
|
||||
|
||||
inbound_make_idtext (serv, idtext, sizeof (idtext), id);
|
||||
|
||||
if (sess->type == SESS_DIALOG && !nodiag)
|
||||
if (fromme)
|
||||
{
|
||||
if (sess->type == SESS_DIALOG)
|
||||
EMIT_SIGNAL_TIMESTAMP (XP_TE_UCHANMSG, sess, from, text, NULL, idtext, 0,
|
||||
tags_data->timestamp);
|
||||
else
|
||||
EMIT_SIGNAL_TIMESTAMP (XP_TE_MSGSEND, sess, to, text, NULL, NULL, 0,
|
||||
tags_data->timestamp);
|
||||
}
|
||||
else if (sess->type == SESS_DIALOG && !nodiag)
|
||||
EMIT_SIGNAL_TIMESTAMP (XP_TE_DPRIVMSG, sess, from, text, idtext, NULL, 0,
|
||||
tags_data->timestamp);
|
||||
else
|
||||
@ -329,48 +352,50 @@ is_hilight (char *from, char *text, session *sess, server *serv)
|
||||
|
||||
void
|
||||
inbound_action (session *sess, char *chan, char *from, char *ip, char *text,
|
||||
int fromme, int id, const message_tags_data *tags_data)
|
||||
gboolean fromme, gboolean fake, gboolean id, const message_tags_data *tags_data)
|
||||
{
|
||||
session *def = sess;
|
||||
server *serv = sess->server;
|
||||
struct User *user;
|
||||
char nickchar[2] = "\000";
|
||||
char idtext[64];
|
||||
int privaction = FALSE;
|
||||
char *destsess = from;
|
||||
|
||||
if (!fromme)
|
||||
if (fromme)
|
||||
destsess = chan;
|
||||
|
||||
if (!fake) /* Fake events start in the correct sess. */
|
||||
{
|
||||
if (is_channel (serv, chan))
|
||||
{
|
||||
sess = find_channel (serv, chan);
|
||||
if (!sess)
|
||||
{
|
||||
g_warning ("Got channel action for %s but found no channel session\n", chan);
|
||||
return; /* There is no sane place to put this */
|
||||
}
|
||||
} else
|
||||
{
|
||||
/* it's a private action! */
|
||||
privaction = TRUE;
|
||||
/* find a dialog tab for it */
|
||||
sess = find_dialog (serv, from);
|
||||
sess = find_dialog (serv, destsess);
|
||||
/* if non found, open a new one */
|
||||
if (!sess && prefs.hex_gui_autoopen_dialog)
|
||||
{
|
||||
/* but only if it wouldn't flood */
|
||||
if (flood_check (from, ip, serv, current_sess, 1))
|
||||
sess = inbound_open_dialog (serv, from, tags_data);
|
||||
if (flood_check (destsess, ip, serv, current_sess, 1))
|
||||
sess = inbound_open_dialog (serv, destsess, tags_data);
|
||||
else
|
||||
sess = serv->server_session;
|
||||
}
|
||||
if (!sess)
|
||||
{
|
||||
sess = find_session_from_nick (from, serv);
|
||||
/* still not good? */
|
||||
if (!sess)
|
||||
sess = serv->front_session;
|
||||
sess = serv->front_session;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!sess)
|
||||
sess = def;
|
||||
|
||||
if (sess != current_tab)
|
||||
{
|
||||
if (fromme)
|
||||
@ -385,7 +410,7 @@ inbound_action (session *sess, char *chan, char *from, char *ip, char *text,
|
||||
lastact_update (sess);
|
||||
}
|
||||
|
||||
user = userlist_find (sess, from);
|
||||
user = userlist_find (sess, destsess);
|
||||
if (user)
|
||||
{
|
||||
nickchar[0] = user->prefix[0];
|
||||
@ -409,8 +434,19 @@ inbound_action (session *sess, char *chan, char *from, char *ip, char *text,
|
||||
}
|
||||
|
||||
if (fromme)
|
||||
EMIT_SIGNAL_TIMESTAMP (XP_TE_UACTION, sess, from, text, nickchar, idtext,
|
||||
{
|
||||
if (fake || sess->type == SESS_DIALOG ||
|
||||
!serv->p_cmp (sess->channel, destsess)) /* Show normally if in correct sess */
|
||||
EMIT_SIGNAL_TIMESTAMP (XP_TE_UACTION, sess, from, text, nickchar, idtext,
|
||||
0, tags_data->timestamp);
|
||||
else /* There is no Action Send event, so we will just show it as CTCP.. */
|
||||
{
|
||||
char *new_text = g_strconcat ("ACTION ", text, NULL);
|
||||
EMIT_SIGNAL_TIMESTAMP (XP_TE_CTCPSEND, sess, destsess, new_text, NULL, NULL,
|
||||
0, tags_data->timestamp);
|
||||
g_free (new_text);
|
||||
}
|
||||
}
|
||||
else if (!privaction)
|
||||
EMIT_SIGNAL_TIMESTAMP (XP_TE_CHANACTION, sess, from, text, nickchar,
|
||||
idtext, 0, tags_data->timestamp);
|
||||
@ -424,7 +460,7 @@ inbound_action (session *sess, char *chan, char *from, char *ip, char *text,
|
||||
|
||||
void
|
||||
inbound_chanmsg (server *serv, session *sess, char *chan, char *from,
|
||||
char *text, char fromme, int id,
|
||||
char *text, gboolean fromme, gboolean id,
|
||||
const message_tags_data *tags_data)
|
||||
{
|
||||
struct User *user;
|
||||
@ -437,8 +473,18 @@ inbound_chanmsg (server *serv, session *sess, char *chan, char *from,
|
||||
if (chan)
|
||||
{
|
||||
sess = find_channel (serv, chan);
|
||||
if (!sess && !is_channel (serv, chan))
|
||||
sess = find_dialog (serv, chan);
|
||||
if (!sess)
|
||||
{
|
||||
if (is_channel (serv, chan))
|
||||
{
|
||||
g_warning ("Got channel message to %s but found no channel session\n", chan);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
sess = find_dialog (serv, chan);
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
sess = find_dialog (serv, from);
|
||||
@ -449,8 +495,16 @@ inbound_chanmsg (server *serv, session *sess, char *chan, char *from,
|
||||
|
||||
if (sess != current_tab)
|
||||
{
|
||||
sess->msg_said = TRUE;
|
||||
sess->new_data = FALSE;
|
||||
if (fromme)
|
||||
{
|
||||
sess->msg_said = FALSE;
|
||||
sess->new_data = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
sess->msg_said = TRUE;
|
||||
sess->new_data = FALSE;
|
||||
}
|
||||
lastact_update (sess);
|
||||
}
|
||||
|
||||
@ -936,7 +990,7 @@ find_session_from_type (int type, server *serv)
|
||||
}
|
||||
|
||||
void
|
||||
inbound_notice (server *serv, char *to, char *nick, char *msg, char *ip, int id,
|
||||
inbound_notice (server *serv, char *to, char *nick, char *msg, char *ip, gboolean id,
|
||||
const message_tags_data *tags_data)
|
||||
{
|
||||
char *po,*ptr=to;
|
||||
@ -1724,6 +1778,7 @@ static const char * const supported_caps[] = {
|
||||
/* ZNC */
|
||||
"znc.in/server-time-iso",
|
||||
"znc.in/server-time",
|
||||
"znc.in/self-message",
|
||||
|
||||
/* Twitch */
|
||||
"twitch.tv/membership",
|
||||
|
@ -37,7 +37,7 @@ void inbound_ukick (server *serv, char *chan, char *kicker, char *reason,
|
||||
void inbound_kick (server *serv, char *chan, char *user, char *kicker,
|
||||
char *reason, const message_tags_data *tags_data);
|
||||
void inbound_notice (server *serv, char *to, char *nick, char *msg, char *ip,
|
||||
int id, const message_tags_data *tags_data);
|
||||
gboolean id, const message_tags_data *tags_data);
|
||||
void inbound_quit (server *serv, char *nick, char *ip, char *reason,
|
||||
const message_tags_data *tags_data);
|
||||
void inbound_topicnew (server *serv, char *nick, char *chan, char *topic,
|
||||
@ -76,14 +76,14 @@ void inbound_login_start (session *sess, char *nick, char *servname,
|
||||
void inbound_login_end (session *sess, char *text,
|
||||
const message_tags_data *tags_data);
|
||||
void inbound_chanmsg (server *serv, session *sess, char *chan, char *from,
|
||||
char *text, char fromme, int id,
|
||||
char *text, gboolean fromme, gboolean id,
|
||||
const message_tags_data *tags_data);
|
||||
void clear_channel (session *sess);
|
||||
void set_topic (session *sess, char *topic, char *stripped_topic);
|
||||
void inbound_privmsg (server *serv, char *from, char *ip, char *text, int id,
|
||||
void inbound_privmsg (server *serv, char *from, char *to, char *ip, char *text, gboolean id,
|
||||
const message_tags_data *tags_data);
|
||||
void inbound_action (session *sess, char *chan, char *from, char *ip,
|
||||
char *text, int fromme, int id,
|
||||
char *text, gboolean fromme, gboolean fake, gboolean id,
|
||||
const message_tags_data *tags_data);
|
||||
void inbound_newnick (server *serv, char *nick, char *newnick, int quiet,
|
||||
const message_tags_data *tags_data);
|
||||
|
@ -581,7 +581,7 @@ cmd_chanopt (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
|
||||
/* chanopt.c */
|
||||
ret = chanopt_command (sess, tbuf, word, word_eol);
|
||||
chanopt_save_all (FALSE);
|
||||
chanopt_save_all ();
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2642,7 +2642,7 @@ cmd_me (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
if (dcc_write_chat (sess->channel, tbuf))
|
||||
{
|
||||
/* print it to screen */
|
||||
inbound_action (sess, sess->channel, sess->server->nick, "", act, TRUE, FALSE,
|
||||
inbound_action (sess, sess->channel, sess->server->nick, "", act, TRUE, TRUE, FALSE,
|
||||
&no_tags);
|
||||
} else
|
||||
{
|
||||
@ -2654,7 +2654,7 @@ cmd_me (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
sess->server->p_action (sess->server, sess->channel, split_text);
|
||||
/* print it to screen */
|
||||
inbound_action (sess, sess->channel, sess->server->nick, "",
|
||||
split_text, TRUE, FALSE,
|
||||
split_text, TRUE, TRUE, FALSE,
|
||||
&no_tags);
|
||||
|
||||
if (*split_text)
|
||||
@ -2666,7 +2666,7 @@ cmd_me (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
sess->server->p_action (sess->server, sess->channel, act + offset);
|
||||
/* print it to screen */
|
||||
inbound_action (sess, sess->channel, sess->server->nick, "",
|
||||
act + offset, TRUE, FALSE, &no_tags);
|
||||
act + offset, TRUE, TRUE, FALSE, &no_tags);
|
||||
} else
|
||||
{
|
||||
notc_msg (sess);
|
||||
@ -3869,7 +3869,7 @@ const struct commands xc_cmds[] = {
|
||||
{"CHANOPT", cmd_chanopt, 0, 0, 1, N_("CHANOPT [-quiet] <variable> [<value>]")},
|
||||
{"CHARSET", cmd_charset, 0, 0, 1, N_("CHARSET [<encoding>], get or set the encoding used for the current connection")},
|
||||
{"CLEAR", cmd_clear, 0, 0, 1, N_("CLEAR [ALL|HISTORY|[-]<amount>], Clears the current text window or command history")},
|
||||
{"CLOSE", cmd_close, 0, 0, 1, N_("CLOSE [-m], Closes the current tab, closing the window if this is the only open tab, or with the \"-m\" flag, closes all queries.")},
|
||||
{"CLOSE", cmd_close, 0, 0, 1, N_("CLOSE [-m], Closes the current window/tab or all queries")},
|
||||
|
||||
{"COUNTRY", cmd_country, 0, 0, 1,
|
||||
N_("COUNTRY [-s] <code|wildcard>, finds a country code, eg: au = australia")},
|
||||
|
@ -34,32 +34,6 @@ typedef struct ident_info
|
||||
gchar *username;
|
||||
} ident_info;
|
||||
|
||||
static void
|
||||
stream_close_ready (GObject *source, GAsyncResult *res, gpointer userdata)
|
||||
{
|
||||
GError *err = NULL;
|
||||
|
||||
if (!g_io_stream_close_finish (G_IO_STREAM(source), res, &err))
|
||||
{
|
||||
g_warning ("%s", err->message);
|
||||
g_error_free (err);
|
||||
}
|
||||
|
||||
g_object_unref (source);
|
||||
}
|
||||
|
||||
static void
|
||||
ident_info_free (ident_info *info)
|
||||
{
|
||||
if (G_LIKELY(info))
|
||||
{
|
||||
g_io_stream_close_async (G_IO_STREAM(info->conn), G_PRIORITY_DEFAULT,
|
||||
NULL, stream_close_ready, NULL);
|
||||
g_free (info->username);
|
||||
g_free (info);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
identd_cleanup_response_cb (gpointer userdata)
|
||||
{
|
||||
@ -116,7 +90,9 @@ identd_write_ready (GOutputStream *stream, GAsyncResult *res, ident_info *info)
|
||||
{
|
||||
g_output_stream_write_finish (stream, res, NULL);
|
||||
|
||||
ident_info_free (info);
|
||||
g_free (info->username);
|
||||
g_object_unref (info->conn);
|
||||
g_free (info);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -140,47 +116,30 @@ identd_read_ready (GDataInputStream *in_stream, GAsyncResult *res, ident_info *i
|
||||
remote = g_ascii_strtoull (p + 1, NULL, 0);
|
||||
g_free (read_buf);
|
||||
|
||||
g_snprintf (buf, sizeof (buf), "%"G_GUINT16_FORMAT", %"G_GUINT16_FORMAT" : ",
|
||||
(guint16)MIN(local, G_MAXUINT16), (guint16)MIN(remote, G_MAXUINT16));
|
||||
|
||||
if (!local || !remote || local > G_MAXUINT16 || remote > G_MAXUINT16)
|
||||
goto cleanup;
|
||||
|
||||
info->username = g_strdup (g_hash_table_lookup (responses, GINT_TO_POINTER (local)));
|
||||
if (!info->username)
|
||||
goto cleanup;
|
||||
g_hash_table_remove (responses, GINT_TO_POINTER (local));
|
||||
|
||||
if ((sok_addr = g_socket_connection_get_remote_address (info->conn, NULL)))
|
||||
{
|
||||
g_strlcat (buf, "ERROR : INVALID-PORT\r\n", sizeof (buf));
|
||||
g_debug ("Identd: Recieved invalid port");
|
||||
}
|
||||
else
|
||||
{
|
||||
info->username = g_hash_table_lookup (responses, GINT_TO_POINTER (local));
|
||||
if (!info->username)
|
||||
{
|
||||
g_strlcat (buf, "ERROR : NO-USER\r\n", sizeof (buf));
|
||||
g_debug ("Identd: Recieved invalid local port");
|
||||
}
|
||||
else
|
||||
{
|
||||
const gsize len = strlen (buf);
|
||||
GInetAddress *inet_addr;
|
||||
gchar *addr;
|
||||
|
||||
g_hash_table_steal (responses, GINT_TO_POINTER (local));
|
||||
inet_addr = g_inet_socket_address_get_address (G_INET_SOCKET_ADDRESS (sok_addr));
|
||||
addr = g_inet_address_to_string (inet_addr);
|
||||
|
||||
g_snprintf (buf + len, sizeof (buf) - len, "USERID : UNIX : %s\r\n", info->username);
|
||||
hexchat_printf (ph, _("*\tServicing ident request from %s as %s"), addr, info->username);
|
||||
|
||||
if ((sok_addr = g_socket_connection_get_remote_address (info->conn, NULL)))
|
||||
{
|
||||
GInetAddress *inet_addr;
|
||||
gchar *addr;
|
||||
|
||||
inet_addr = g_inet_socket_address_get_address (G_INET_SOCKET_ADDRESS (sok_addr));
|
||||
addr = g_inet_address_to_string (inet_addr);
|
||||
|
||||
hexchat_printf (ph, _("*\tServicing ident request from %s as %s"), addr, info->username);
|
||||
|
||||
g_object_unref (sok_addr);
|
||||
g_object_unref (inet_addr);
|
||||
g_free (addr);
|
||||
}
|
||||
}
|
||||
g_object_unref (sok_addr);
|
||||
g_object_unref (inet_addr);
|
||||
g_free (addr);
|
||||
}
|
||||
|
||||
g_snprintf (buf, sizeof (buf), "%"G_GUINT16_FORMAT", %"G_GUINT16_FORMAT" : USERID : UNIX : %s\r\n", (guint16)local, (guint16)remote, info->username);
|
||||
out_stream = g_io_stream_get_output_stream (G_IO_STREAM (info->conn));
|
||||
g_output_stream_write_async (out_stream, buf, strlen (buf), G_PRIORITY_DEFAULT,
|
||||
NULL, (GAsyncReadyCallback)identd_write_ready, info);
|
||||
@ -189,7 +148,8 @@ identd_read_ready (GDataInputStream *in_stream, GAsyncResult *res, ident_info *i
|
||||
return;
|
||||
|
||||
cleanup:
|
||||
ident_info_free (info);
|
||||
g_object_unref (info->conn);
|
||||
g_free (info);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -455,7 +455,6 @@ plugin_auto_load (session *sess)
|
||||
for_files (lib_dir, "hcdoat.dll", plugin_auto_load_cb);
|
||||
for_files (lib_dir, "hcexec.dll", plugin_auto_load_cb);
|
||||
for_files (lib_dir, "hcfishlim.dll", plugin_auto_load_cb);
|
||||
for_files(lib_dir, "hclua.dll", plugin_auto_load_cb);
|
||||
for_files (lib_dir, "hcmpcinfo.dll", plugin_auto_load_cb);
|
||||
for_files (lib_dir, "hcperl.dll", plugin_auto_load_cb);
|
||||
for_files (lib_dir, "hcpython2.dll", plugin_auto_load_cb);
|
||||
@ -1568,14 +1567,6 @@ hexchat_list_int (hexchat_plugin *ph, hexchat_list *xlist, const char *name)
|
||||
case 0xd1b: /* id */
|
||||
return ((struct session *)data)->server->id;
|
||||
case 0x5cfee87: /* flags */
|
||||
/* used if alert_taskbar is unset */ /* 20 */
|
||||
tmp <<= 1;
|
||||
tmp |= ((struct session *)data)->alert_taskbar; /* 19 */
|
||||
tmp <<= 1;
|
||||
/* used if alert_tray is unset */ /* 18 */
|
||||
tmp <<= 1;
|
||||
tmp |= ((struct session *)data)->alert_tray; /* 17 */
|
||||
tmp <<= 1;
|
||||
/* used if text_strip is unset */ /* 16 */
|
||||
tmp <<= 1;
|
||||
tmp |= ((struct session *)data)->text_strip; /* 15 */
|
||||
@ -1588,9 +1579,9 @@ hexchat_list_int (hexchat_plugin *ph, hexchat_list *xlist, const char *name)
|
||||
tmp <<= 1;
|
||||
tmp |= ((struct session *)data)->text_logging; /* 11 */
|
||||
tmp <<= 1;
|
||||
/* unused for historical reasons */ /* 10 */
|
||||
tmp |= ((struct session *)data)->alert_taskbar; /* 10 */
|
||||
tmp <<= 1;
|
||||
/* used if alert_beep is unset */ /* 9 */
|
||||
tmp |= ((struct session *)data)->alert_tray; /* 9 */
|
||||
tmp <<= 1;
|
||||
tmp |= ((struct session *)data)->alert_beep; /* 8 */
|
||||
tmp <<= 1;
|
||||
|
@ -1178,19 +1178,13 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[],
|
||||
}
|
||||
|
||||
#ifdef USE_OPENSSL
|
||||
/* QuakeNet CHALLENGE upon our request */
|
||||
if (serv->loginmethod == LOGIN_CHALLENGEAUTH && !serv->p_cmp (word[1], CHALLENGEAUTH_FULLHOST)
|
||||
&& !strncmp (text, "CHALLENGE ", 10) && *serv->password)
|
||||
if (!strncmp (text, "CHALLENGE ", 10)) /* QuakeNet CHALLENGE upon our request */
|
||||
{
|
||||
char *response;
|
||||
ircnet *net = serv->network;
|
||||
char *user = net && net->user ? net->user : prefs.hex_irc_user_name;
|
||||
|
||||
response = challengeauth_response (user, serv->password, word[5]);
|
||||
char *response = challengeauth_response (((ircnet *)serv->network)->user ? ((ircnet *)serv->network)->user : prefs.hex_irc_user_name, serv->password, word[5]);
|
||||
|
||||
tcp_sendf (serv, "PRIVMSG %s :CHALLENGEAUTH %s %s %s\r\n",
|
||||
CHALLENGEAUTH_NICK,
|
||||
user,
|
||||
((ircnet *)serv->network)->user ? ((ircnet *)serv->network)->user : prefs.hex_irc_user_name,
|
||||
response,
|
||||
CHALLENGEAUTH_ALGO);
|
||||
|
||||
@ -1262,7 +1256,7 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[],
|
||||
{
|
||||
if (ignore_check (word[1], IG_PRIV))
|
||||
return;
|
||||
inbound_privmsg (serv, nick, ip, text, id, tags_data);
|
||||
inbound_privmsg (serv, nick, to, ip, text, id, tags_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -833,21 +833,20 @@ server_read_child (GIOChannel *source, GIOCondition condition, server *serv)
|
||||
}
|
||||
|
||||
{
|
||||
struct sockaddr_storage addr;
|
||||
struct sockaddr addr;
|
||||
int addr_len = sizeof (addr);
|
||||
guint16 port;
|
||||
ircnet *net = serv->network;
|
||||
|
||||
if (!getsockname (serv->sok, (struct sockaddr *)&addr, &addr_len))
|
||||
if (!getsockname (serv->sok, &addr, &addr_len))
|
||||
{
|
||||
if (addr.ss_family == AF_INET)
|
||||
if (addr.sa_family == AF_INET)
|
||||
port = ntohs(((struct sockaddr_in *)&addr)->sin_port);
|
||||
else
|
||||
port = ntohs(((struct sockaddr_in6 *)&addr)->sin6_port);
|
||||
|
||||
g_snprintf (outbuf, sizeof (outbuf), "IDENTD %"G_GUINT16_FORMAT" ", port);
|
||||
if (net && net->user && !(net->flags & FLAG_USE_GLOBAL))
|
||||
g_strlcat (outbuf, net->user, sizeof (outbuf));
|
||||
if (serv->network && ((ircnet *)serv->network)->user)
|
||||
g_strlcat (outbuf, ((ircnet *)serv->network)->user, sizeof (outbuf));
|
||||
else
|
||||
g_strlcat (outbuf, prefs.hex_irc_user_name, sizeof (outbuf));
|
||||
|
||||
|
@ -117,7 +117,7 @@ static const struct defaultserver def[] =
|
||||
/* Self signed */
|
||||
{0, "irc.criten.net"},
|
||||
|
||||
{"DALnet", 0, 0, 0, LOGIN_NICKSERV},
|
||||
{"DALnet", 0},
|
||||
/* Self signed */
|
||||
{0, "us.dal.net"},
|
||||
|
||||
@ -189,12 +189,6 @@ static const struct defaultserver def[] =
|
||||
{0, "irc.gimp.org"},
|
||||
{0, "irc.gnome.org"},
|
||||
|
||||
{"GlobalGamers", 0},
|
||||
#ifdef USE_OPENSSL
|
||||
{0, "irc.globalgamers.net/+6660"},
|
||||
#endif
|
||||
{0, "irc.globalgamers.net"},
|
||||
|
||||
{"Hashmark", 0},
|
||||
{0, "irc.hashmark.net"},
|
||||
|
||||
@ -363,6 +357,42 @@ static const struct defaultserver def[] =
|
||||
|
||||
GSList *network_list = 0;
|
||||
|
||||
#if !GLIB_CHECK_VERSION(2,34,0)
|
||||
#define g_slist_copy_deep servlist_slist_copy_deep
|
||||
/* FIXME copy-paste from gslist.c, should be dumped sometime */
|
||||
static GSList*
|
||||
servlist_slist_copy_deep (GSList *list, GCopyFunc func, gpointer user_data)
|
||||
{
|
||||
GSList *new_list = NULL;
|
||||
|
||||
if (list)
|
||||
{
|
||||
GSList *last;
|
||||
|
||||
new_list = g_slice_new (GSList);
|
||||
if (func)
|
||||
new_list->data = func (list->data, user_data);
|
||||
else
|
||||
new_list->data = list->data;
|
||||
last = new_list;
|
||||
list = list->next;
|
||||
while (list)
|
||||
{
|
||||
last->next = g_slice_new (GSList);
|
||||
last = last->next;
|
||||
if (func)
|
||||
last->data = func (list->data, user_data);
|
||||
else
|
||||
last->data = list->data;
|
||||
list = list->next;
|
||||
}
|
||||
last->next = NULL;
|
||||
}
|
||||
|
||||
return new_list;
|
||||
}
|
||||
#endif
|
||||
|
||||
favchannel *
|
||||
servlist_favchan_copy (favchannel *fav)
|
||||
{
|
||||
|
@ -82,7 +82,6 @@ extern GSList *network_list;
|
||||
|
||||
#define CHALLENGEAUTH_ALGO "HMAC-SHA-256"
|
||||
#define CHALLENGEAUTH_NICK "Q@CServe.quakenet.org"
|
||||
#define CHALLENGEAUTH_FULLHOST "Q!TheQBot@CServe.quakenet.org"
|
||||
|
||||
/* DEFAULT_CHARSET is already defined in wingdi.h */
|
||||
#define IRC_DEFAULT_CHARSET "UTF-8 (Unicode)"
|
||||
|
@ -222,7 +222,7 @@ scrollback_load (session *sess)
|
||||
GDataInputStream *istream;
|
||||
gchar *buf, *text;
|
||||
gint lines = 0;
|
||||
time_t stamp = 0;
|
||||
time_t stamp;
|
||||
|
||||
if (sess->text_scrollback == SET_DEFAULT)
|
||||
{
|
||||
@ -272,19 +272,12 @@ scrollback_load (session *sess)
|
||||
* Some don't even have a timestamp
|
||||
* Some don't have any text at all
|
||||
*/
|
||||
if (buf[0] == 'T' && buf[1] == ' ')
|
||||
if (buf[0] == 'T')
|
||||
{
|
||||
if (sizeof (time_t) == 4)
|
||||
stamp = strtoul (buf + 2, NULL, 10);
|
||||
stamp = g_ascii_strtoull (buf + 2, NULL, 10);
|
||||
else
|
||||
stamp = g_ascii_strtoull (buf + 2, NULL, 10); /* in case time_t is 64 bits */
|
||||
|
||||
if (G_UNLIKELY(stamp == 0))
|
||||
{
|
||||
g_warning ("Invalid timestamp in scrollback file");
|
||||
continue;
|
||||
}
|
||||
|
||||
text = strchr (buf + 3, ' ');
|
||||
if (text && text[1])
|
||||
{
|
||||
@ -321,7 +314,7 @@ scrollback_load (session *sess)
|
||||
/* If its only an encoding error it may be specific to the line */
|
||||
if (g_error_matches (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE))
|
||||
{
|
||||
g_warning ("Invalid utf8 in scrollback file");
|
||||
g_warning ("Invalid utf8 in scrollback file\n");
|
||||
g_clear_error (&err);
|
||||
continue;
|
||||
}
|
||||
@ -343,7 +336,8 @@ scrollback_load (session *sess)
|
||||
if (lines)
|
||||
{
|
||||
text = ctime (&stamp);
|
||||
buf = g_strdup_printf ("\n*\t%s %s\n", _("Loaded log from"), text);
|
||||
text[24] = 0; /* get rid of the \n */
|
||||
buf = g_strdup_printf ("\n*\t%s %s\n\n", _("Loaded log from"), text);
|
||||
fe_print_text (sess, buf, 0, TRUE);
|
||||
g_free (buf);
|
||||
/*EMIT_SIGNAL (XP_TE_GENMSG, sess, "*", buf, NULL, NULL, NULL, 0);*/
|
||||
|
@ -533,7 +533,6 @@ struct
|
||||
{ "spotify", "", URI_PATH },
|
||||
{ "lastfm", "/", URI_PATH },
|
||||
{ "xfire", "", URI_PATH },
|
||||
{ "ts3server", "", URI_PATH },
|
||||
{ NULL, "", 0}
|
||||
};
|
||||
|
||||
|
@ -1414,21 +1414,6 @@ str_sha256hash (char *string)
|
||||
return g_strdup (buf);
|
||||
}
|
||||
|
||||
static char *
|
||||
rfc_strlower (const char *str)
|
||||
{
|
||||
size_t i, len = strlen(str);
|
||||
char *lower = g_new(char, len + 1);
|
||||
|
||||
for (i = 0; i < len; ++i)
|
||||
{
|
||||
lower[i] = rfc_tolower(str[i]);
|
||||
}
|
||||
lower[i] = '\0';
|
||||
|
||||
return lower;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Generate CHALLENGEAUTH response for QuakeNet login.
|
||||
*
|
||||
@ -1445,7 +1430,7 @@ rfc_strlower (const char *str)
|
||||
* <a href="http://stackoverflow.com/questions/242665/understanding-engine-initialization-in-openssl">example 2</a>.
|
||||
*/
|
||||
char *
|
||||
challengeauth_response (const char *username, const char *password, const char *challenge)
|
||||
challengeauth_response (char *username, char *password, char *challenge)
|
||||
{
|
||||
int i;
|
||||
char *user;
|
||||
@ -1456,7 +1441,8 @@ challengeauth_response (const char *username, const char *password, const char *
|
||||
unsigned char *digest;
|
||||
GString *buf = g_string_new_len (NULL, SHA256_DIGEST_LENGTH * 2);
|
||||
|
||||
user = rfc_strlower (username); /* convert username to lowercase as per the RFC */
|
||||
user = g_strdup (username);
|
||||
*user = rfc_tolower (*username); /* convert username to lowercase as per the RFC */
|
||||
|
||||
pass = g_strndup (password, 10); /* truncate to 10 characters */
|
||||
passhash = str_sha256hash (pass);
|
||||
|
@ -76,7 +76,7 @@ void canonalize_key (char *key);
|
||||
int portable_mode (void);
|
||||
int unity_mode (void);
|
||||
char *encode_sasl_pass_plain (char *user, char *pass);
|
||||
char *challengeauth_response (const char *username, const char *password, const char *challenge);
|
||||
char *challengeauth_response (char *username, char *password, char *challenge);
|
||||
size_t strftime_validated (char *dest, size_t destsize, const char *format, const struct tm *time);
|
||||
gsize strftime_utf8 (char *dest, gsize destsize, const char *format, time_t time);
|
||||
#endif
|
||||
|
@ -809,7 +809,7 @@ banlist_opengui (struct session *sess)
|
||||
sess->server->servername);
|
||||
|
||||
banl->window = mg_create_generic_tab ("BanList", tbuf, FALSE,
|
||||
TRUE, banlist_closegui, banl, 700, 300, &vbox, sess->server);
|
||||
TRUE, banlist_closegui, banl, 550, 200, &vbox, sess->server);
|
||||
gtkutil_destroy_on_esc (banl->window);
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (banl->window), 3);
|
||||
|
@ -685,8 +685,6 @@ gtkutil_treeview_new (GtkWidget *box, GtkTreeModel *model,
|
||||
attr, col_id, NULL);
|
||||
}
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (view), col);
|
||||
if (title == NULL)
|
||||
gtk_tree_view_column_set_visible (col, FALSE);
|
||||
}
|
||||
|
||||
va_end (args);
|
||||
|
@ -349,7 +349,7 @@ ignore_gui_open ()
|
||||
ignorewin =
|
||||
mg_create_generic_tab ("IgnoreList", _(DISPLAY_NAME": Ignore list"),
|
||||
FALSE, TRUE, close_ignore_gui_callback,
|
||||
NULL, 700, 300, &vbox, 0);
|
||||
NULL, 600, 256, &vbox, 0);
|
||||
gtkutil_destroy_on_esc (ignorewin);
|
||||
|
||||
view = ignore_treeview_new (vbox);
|
||||
|
@ -1514,7 +1514,7 @@ mg_set_guint8 (GtkCheckMenuItem *item, guint8 *setting)
|
||||
log_open_or_close (sess);
|
||||
|
||||
chanopt_save (sess);
|
||||
chanopt_save_all (FALSE);
|
||||
chanopt_save_all ();
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -20,10 +20,6 @@
|
||||
#include <glib.h>
|
||||
#include <libnotify/notify.h>
|
||||
|
||||
#ifndef NOTIFY_CHECK_VERSION
|
||||
#define NOTIFY_CHECK_VERSION(x,y,z) 0
|
||||
#endif
|
||||
|
||||
static gboolean strip_markup = FALSE;
|
||||
|
||||
void
|
||||
@ -34,16 +30,8 @@ notification_backend_show (const char *title, const char *text)
|
||||
if (strip_markup)
|
||||
text = g_markup_escape_text (text, -1);
|
||||
|
||||
#if NOTIFY_CHECK_VERSION(0,7,0)
|
||||
notification = notify_notification_new (title, text, "hexchat");
|
||||
#else
|
||||
notification = notify_notification_new (title, text, "hexchat", NULL);
|
||||
#endif
|
||||
#if NOTIFY_CHECK_VERSION(0,6,0)
|
||||
notify_notification_set_hint (notification, "desktop-entry", g_variant_new_string ("hexchat"));
|
||||
#else
|
||||
notify_notification_set_hint_string (notification, "desktop-entry", "hexchat");
|
||||
#endif
|
||||
|
||||
notify_notification_show (notification, NULL);
|
||||
|
||||
@ -57,6 +45,9 @@ notification_backend_init (void)
|
||||
{
|
||||
GList* server_caps;
|
||||
|
||||
if (!NOTIFY_CHECK_VERSION (0, 7, 0))
|
||||
return 0;
|
||||
|
||||
if (!notify_init (PACKAGE_NAME))
|
||||
return 0;
|
||||
|
||||
|
@ -42,7 +42,6 @@ enum
|
||||
VERSION_COLUMN,
|
||||
FILE_COLUMN,
|
||||
DESC_COLUMN,
|
||||
FILEPATH_COLUMN,
|
||||
N_COLUMNS
|
||||
};
|
||||
|
||||
@ -58,14 +57,13 @@ plugingui_treeview_new (GtkWidget *box)
|
||||
int col_id;
|
||||
|
||||
store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,
|
||||
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
|
||||
G_TYPE_STRING, G_TYPE_STRING);
|
||||
g_return_val_if_fail (store != NULL, NULL);
|
||||
view = gtkutil_treeview_new (box, GTK_TREE_MODEL (store), NULL,
|
||||
NAME_COLUMN, _("Name"),
|
||||
VERSION_COLUMN, _("Version"),
|
||||
FILE_COLUMN, _("File"),
|
||||
DESC_COLUMN, _("Description"),
|
||||
FILEPATH_COLUMN, NULL, -1);
|
||||
DESC_COLUMN, _("Description"), -1);
|
||||
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE);
|
||||
for (col_id=0; (col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), col_id));
|
||||
col_id++)
|
||||
@ -88,7 +86,7 @@ plugingui_getfilename (GtkTreeView *view)
|
||||
sel = gtk_tree_view_get_selection (view);
|
||||
if (gtk_tree_selection_get_selected (sel, &model, &iter))
|
||||
{
|
||||
gtk_tree_model_get_value (model, &iter, FILEPATH_COLUMN, &file);
|
||||
gtk_tree_model_get_value (model, &iter, FILE_COLUMN, &file);
|
||||
|
||||
str = g_value_dup_string (&file);
|
||||
g_value_unset (&file);
|
||||
@ -133,8 +131,7 @@ fe_pluginlist_update (void)
|
||||
gtk_list_store_set (store, &iter, NAME_COLUMN, pl->name,
|
||||
VERSION_COLUMN, pl->version,
|
||||
FILE_COLUMN, file_part (pl->filename),
|
||||
DESC_COLUMN, pl->desc,
|
||||
FILEPATH_COLUMN, pl->filename, -1);
|
||||
DESC_COLUMN, pl->desc, -1);
|
||||
}
|
||||
list = list->next;
|
||||
}
|
||||
@ -182,7 +179,7 @@ plugingui_unload (GtkWidget * wid, gpointer unused)
|
||||
|
||||
view = g_object_get_data (G_OBJECT (plugin_window), "view");
|
||||
if (!gtkutil_treeview_get_selected (view, &iter, NAME_COLUMN, &modname,
|
||||
FILEPATH_COLUMN, &file, -1))
|
||||
FILE_COLUMN, &file, -1))
|
||||
return;
|
||||
|
||||
if (g_str_has_suffix (file, "."G_MODULE_SUFFIX))
|
||||
@ -239,7 +236,7 @@ plugingui_open (void)
|
||||
|
||||
plugin_window = mg_create_generic_tab ("Addons", _(DISPLAY_NAME": Plugins and Scripts"),
|
||||
FALSE, TRUE, plugingui_close, NULL,
|
||||
700, 300, &vbox, 0);
|
||||
500, 250, &vbox, 0);
|
||||
gtkutil_destroy_on_esc (plugin_window);
|
||||
|
||||
view = plugingui_treeview_new (vbox);
|
||||
|
@ -1319,7 +1319,7 @@ servlist_sanitize_hostname (char *host)
|
||||
if (c && c == e)
|
||||
*c = '/';
|
||||
|
||||
return g_strstrip(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* remove leading slash */
|
||||
|
@ -1410,7 +1410,7 @@ sexy_spell_entry_activate_language(SexySpellEntry *entry, const gchar *lang, GEr
|
||||
|
||||
g_return_val_if_fail(entry != NULL, FALSE);
|
||||
g_return_val_if_fail(SEXY_IS_SPELL_ENTRY(entry), FALSE);
|
||||
g_return_val_if_fail(lang != NULL && *lang != '\0', FALSE);
|
||||
g_return_val_if_fail(lang != NULL && lang != '\0', FALSE);
|
||||
|
||||
if (!have_enchant)
|
||||
return FALSE;
|
||||
|
@ -41,7 +41,6 @@
|
||||
<None Include="$(DepsRoot)\bin\iconv.dll" />
|
||||
<None Include="$(DepsRoot)\bin\libeay32.dll" />
|
||||
<None Include="$(DepsRoot)\bin\libenchant.dll" />
|
||||
<None Include="$(DepsRoot)\bin\libffi.dll" />
|
||||
<None Include="$(DepsRoot)\bin\libintl.dll" />
|
||||
<None Include="$(DepsRoot)\bin\libpng16.dll" />
|
||||
<None Include="$(DepsRoot)\bin\libxml2.dll" />
|
||||
@ -57,14 +56,6 @@
|
||||
<None Include="changelog.url" />
|
||||
<None Include="readme.url" />
|
||||
|
||||
<None Include="$(DepsRoot)\bin\lua51.dll" />
|
||||
<None Include="$(DepsRoot)\bin\girepository-1.0.dll" />
|
||||
<LuaLib Include="$(DepsRoot)\lib\lua\**\*.dll" />
|
||||
<LuaShare Include="$(DepsRoot)\share\lua\*.lua" />
|
||||
<LuaShare Include="$(DepsRoot)\share\lua\**\*.lua" />
|
||||
<LuaShare Include="$(DepsRoot)\share\lua\**\**\*.lua" />
|
||||
<Typelib Include="$(DepsRoot)\lib\girepository-1.0\*.typelib" />
|
||||
|
||||
<Engines Include="$(DepsRoot)\lib\gtk-2.0\i686-pc-vs14\engines\**\*" />
|
||||
|
||||
<Share Include="share\**\*" />
|
||||
@ -86,10 +77,7 @@
|
||||
<Copy SourceFiles="$(DepsRoot)\lib\enchant\libenchant_myspell.dll" DestinationFolder="$(HexChatRel)\lib\enchant" />
|
||||
<Copy SourceFiles="@(Locale)" DestinationFiles="@(Locale->'$(HexChatRel)\share\locale\%(RecursiveDir)%(Filename)%(Extension)')" />
|
||||
<Copy SourceFiles="@(MSWindowsTheme)" DestinationFiles="@(MSWindowsTheme->'$(HexChatRel)\share\themes\MS-Windows\%(RecursiveDir)%(Filename)%(Extension)')" />
|
||||
<Copy SourceFiles="@(LuaShare)" DestinationFiles="@(LuaShare->'$(HexChatRel)\share\lua\%(RecursiveDir)%(Filename)%(Extension)')" />
|
||||
<Copy SourceFiles="@(LuaLib)" DestinationFiles="@(LuaLib->'$(HexChatRel)\lib\lua\%(RecursiveDir)%(Filename)%(Extension)')" />
|
||||
<Copy SourceFiles="@(Typelib)" DestinationFiles="@(Typelib->'$(HexChatRel)\lib\girepository-1.0\%(Filename)%(Extension)')" />
|
||||
|
||||
|
||||
<WriteLinesToFile File="$(HexChatRel)portable-mode" Lines="2" Overwrite="true" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
@ -29,9 +29,6 @@
|
||||
<Python3Path>$(YourPython3Path)\$(PlatformName)</Python3Path>
|
||||
<Python3Lib>python35</Python3Lib>
|
||||
<Python3Output>hcpython3</Python3Output>
|
||||
<LuaInclude>$(DepsRoot)\include\luajit-2.0</LuaInclude>
|
||||
<LuaOutput>hclua</LuaOutput>
|
||||
<LuaLib>lua51</LuaLib>
|
||||
<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>
|
||||
<DepLibs>gtk-win32-2.0.lib;gdk-win32-2.0.lib;atk-1.0.lib;gio-2.0.lib;gdk_pixbuf-2.0.lib;pangowin32-1.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo.lib;gobject-2.0.lib;gmodule-2.0.lib;glib-2.0.lib;libintl.lib;libxml2.lib;libeay32.lib;ssleay32.lib;wininet.lib;winmm.lib;ws2_32.lib</DepLibs>
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.25123.0
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.30501.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\src\common\common.vcxproj", "{87554B59-006C-4D94-9714-897B27067BA3}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
@ -89,7 +89,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "installer", "installer\inst
|
||||
{BF0EBC16-68AD-4CD1-864C-5B56836EBE2A} = {BF0EBC16-68AD-4CD1-864C-5B56836EBE2A}
|
||||
{4980AF24-9D42-427D-A8E6-0DF3B97C455D} = {4980AF24-9D42-427D-A8E6-0DF3B97C455D}
|
||||
{17E4BE39-76F7-4A06-AD21-EFD0C5091F76} = {17E4BE39-76F7-4A06-AD21-EFD0C5091F76}
|
||||
{4C0F3940-2EEE-4646-82F7-6CE75B9A72F4} = {4C0F3940-2EEE-4646-82F7-6CE75B9A72F4}
|
||||
{B10A2C41-344C-43E0-A32D-B9587C198D8B} = {B10A2C41-344C-43E0-A32D-B9587C198D8B}
|
||||
{461DC24A-A410-4171-8C02-CCDBF3702C2A} = {461DC24A-A410-4171-8C02-CCDBF3702C2A}
|
||||
{E93E1255-95D1-4B08-8FDF-B53CC6A21280} = {E93E1255-95D1-4B08-8FDF-B53CC6A21280}
|
||||
@ -132,8 +131,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libenchant_win8", "..\src\l
|
||||
{87554B59-006C-4D94-9714-897B27067BA3} = {87554B59-006C-4D94-9714-897B27067BA3}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lua", "..\plugins\lua\lua.vcxproj", "{4C0F3940-2EEE-4646-82F7-6CE75B9A72F4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Release|Win32 = Release|Win32
|
||||
@ -224,10 +221,6 @@ Global
|
||||
{BF0EBC16-68AD-4CD1-864C-5B56836EBE2A}.Release|Win32.Build.0 = Release|Win32
|
||||
{BF0EBC16-68AD-4CD1-864C-5B56836EBE2A}.Release|x64.ActiveCfg = Release|x64
|
||||
{BF0EBC16-68AD-4CD1-864C-5B56836EBE2A}.Release|x64.Build.0 = Release|x64
|
||||
{4C0F3940-2EEE-4646-82F7-6CE75B9A72F4}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{4C0F3940-2EEE-4646-82F7-6CE75B9A72F4}.Release|Win32.Build.0 = Release|Win32
|
||||
{4C0F3940-2EEE-4646-82F7-6CE75B9A72F4}.Release|x64.ActiveCfg = Release|x64
|
||||
{4C0F3940-2EEE-4646-82F7-6CE75B9A72F4}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -254,6 +247,5 @@ Global
|
||||
{C2321A03-0BA7-45B3-8740-ABD82B36B0BF} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240}
|
||||
{C53145CC-D021-40C9-B97C-0249AB9A43C9} = {561126F4-FA18-45FC-A2BF-8F858F161D6D}
|
||||
{BF0EBC16-68AD-4CD1-864C-5B56836EBE2A} = {021EC1D0-FF67-4700-9AB2-EAABF1159C09}
|
||||
{4C0F3940-2EEE-4646-82F7-6CE75B9A72F4} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
@ -64,7 +64,7 @@ Name: "translations"; Description: "Translations"; Types: normal custom; Flags:
|
||||
Name: "spell"; Description: "Spelling Dictionaries"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins"; Description: "Plugins"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\checksum"; Description: "Checksum"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\doat"; Description: "Do At"; Types: normal custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\doat"; Description: "Do At"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\exec"; Description: "Exec"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\fishlim"; Description: "FiSHLiM"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\mpcinfo"; Description: "mpcInfo"; Types: custom; Flags: disablenouninstallwarning
|
||||
@ -72,7 +72,6 @@ Name: "plugins\sysinfo"; Description: "SysInfo"; Types: custom; Flags: disableno
|
||||
Name: "plugins\upd"; Description: "Update Checker"; Types: normal custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\winamp"; Description: "Winamp"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "langs"; Description: "Language Interfaces"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "langs\lua"; Description: "Lua"; Types: normal custom; Flags: disablenouninstallwarning
|
||||
Name: "langs\perl"; Description: "Perl (requires Perl 5.20)"; 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
|
||||
@ -139,7 +138,6 @@ Source: "harfbuzz.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||
Source: "iconv.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||
Source: "libeay32.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||
Source: "libenchant.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||
Source: "libffi.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||
Source: "libintl.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||
Source: "libpng16.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||
Source: "libxml2.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||
@ -157,14 +155,6 @@ Source: "lib\enchant\*"; DestDir: "{app}\lib\enchant"; Flags: ignoreversion; Com
|
||||
|
||||
Source: "lib\gtk-2.0\i686-pc-vs14\engines\*"; DestDir: "{app}\lib\gtk-2.0\i686-pc-vs14\engines"; Flags: ignoreversion; Components: libs
|
||||
|
||||
Source: "girepository-1.0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: langs\lua
|
||||
Source: "lua51.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: langs\lua
|
||||
Source: "lib\lua\lgi\*.dll"; DestDir: "{app}\lib\lua\lgi"; Flags: ignoreversion; Components: langs\lua
|
||||
Source: "lib\girepository-1.0\*.typelib"; DestDir: "{app}\lib\girepository-1.0"; Flags: ignoreversion; Components: langs\lua
|
||||
Source: "share\lua\*.lua"; DestDir: "{app}\share\lua"; Flags: ignoreversion; Components: langs\lua
|
||||
Source: "share\lua\lgi\*.lua"; DestDir: "{app}\share\lua\lgi"; Flags: ignoreversion; Components: langs\lua
|
||||
Source: "share\lua\lgi\override\*.lua"; DestDir: "{app}\share\lua\lgi\override"; Flags: ignoreversion; Components: langs\lua
|
||||
|
||||
Source: "plugins\hcchecksum.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\checksum
|
||||
Source: "plugins\hcdoat.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\doat
|
||||
Source: "plugins\hcexec.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\exec
|
||||
@ -181,7 +171,6 @@ Source: "plugins\hcsysinfo.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion;
|
||||
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\hclua.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\lua
|
||||
|
||||
Source: "hexchat.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
|
||||
Source: "hexchat-text.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: xctext
|
||||
@ -282,13 +271,13 @@ begin
|
||||
#if APPARCH == "x64"
|
||||
REDIST := 'https://dl.hexchat.net/misc/vcredist_2015_x64.exe';
|
||||
PERL := 'https://dl.hexchat.net/misc/perl/Perl%205.20.0%20x64.msi';
|
||||
PY2 := 'https://python.org/ftp/python/2.7.10/python-2.7.10.amd64.msi';
|
||||
PY3 := 'https://python.org/ftp/python/3.5.1/python-3.5.1-amd64.exe';
|
||||
PY2 := 'http://python.org/ftp/python/2.7.10/python-2.7.10.amd64.msi';
|
||||
PY3 := 'http://python.org/ftp/python/3.5.1/python-3.5.1-amd64.exe';
|
||||
#else
|
||||
REDIST := 'https://dl.hexchat.net/misc/vcredist_2015_x86.exe';
|
||||
PERL := 'https://dl.hexchat.net/misc/perl/Perl%205.20.0%20x86.msi';
|
||||
PY2 := 'https://python.org/ftp/python/2.7.10/python-2.7.10.msi';
|
||||
PY3 := 'https://python.org/ftp/python/3.5.1/python-3.5.1.exe';
|
||||
PY2 := 'http://python.org/ftp/python/2.7.10/python-2.7.10.msi';
|
||||
PY3 := 'http://python.org/ftp/python/3.5.1/python-3.5.1.exe';
|
||||
#endif
|
||||
DOTNET := 'https://dl.hexchat.net/misc/dotnet_40.exe';
|
||||
SPELL := 'https://dl.hexchat.net/hexchat/HexChat%20Spelling%20Dictionaries%20r2.exe';
|
||||
|
Reference in New Issue
Block a user