From 847e5a14d6d7991682c3add853f7b3cc32f935df Mon Sep 17 00:00:00 2001 From: Celelibi Date: Mon, 3 Apr 2023 05:22:12 +0200 Subject: python: add flush() to Stdout Python sometime calls flush() on sys.stdout or sys.stderr. In particular, it might do so when an exception is raised. This fixes the second error message that was generated in such cases. Signed-off-by: Celelibi --- plugins/python/python.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'plugins') diff --git a/plugins/python/python.py b/plugins/python/python.py index 7a794784..07900eb2 100644 --- a/plugins/python/python.py +++ b/plugins/python/python.py @@ -64,6 +64,10 @@ class Stdout: else: self.buffer += string + def flush(self): + lib.hexchat_print(lib.ph, bytes(self.buffer)) + self.buffer = bytearray() + def isatty(self): return False -- cgit 1.4.1 From 5cbd2524dcedb995fc98403d1d73a3400e2cb935 Mon Sep 17 00:00:00 2001 From: Celelibi Date: Mon, 3 Apr 2023 05:25:47 +0200 Subject: python: fix for timers that unhook themselves The python plugin use weak references for hooks, which might let a necessary object disappear if the callback of a timer hook unhooks itself. Signed-off-by: Celelibi --- plugins/python/python.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/python/python.py b/plugins/python/python.py index 07900eb2..9eca7d6e 100644 --- a/plugins/python/python.py +++ b/plugins/python/python.py @@ -291,7 +291,15 @@ def _on_timer_hook(userdata): if hook.callback(hook.userdata) == True: return 1 - hook.is_unload = True # Don't unhook + try: + # Avoid calling hexchat_unhook twice if unnecessary + hook.is_unload = True + except ReferenceError: + # hook is a weak reference, it might have been destroyed by the callback + # in which case it has already been removed from hook.plugin.hooks and + # we wouldn't be able to test it with h == hook anyway. + return 0 + for h in hook.plugin.hooks: if h == hook: hook.plugin.hooks.remove(h) -- cgit 1.4.1 From 4ee23424040835733fcb14c9230eba011b5d2dbc Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Mon, 24 Oct 2022 20:38:24 -0500 Subject: checksum: Move checksum operation to a thread --- meson.build | 6 +- plugins/checksum/checksum.c | 249 ++++++++++++++++---------------------------- 2 files changed, 91 insertions(+), 164 deletions(-) (limited to 'plugins') diff --git a/meson.build b/meson.build index 8b0bd404..f187c4b2 100644 --- a/meson.build +++ b/meson.build @@ -13,7 +13,7 @@ gnome = import('gnome') cc = meson.get_compiler('c') -libgio_dep = dependency('gio-2.0', version: '>= 2.34.0') +libgio_dep = dependency('gio-2.0', version: '>= 2.36.0') libgmodule_dep = dependency('gmodule-2.0') libcanberra_dep = dependency('libcanberra', version: '>= 0.22', @@ -47,8 +47,8 @@ config_h.set('G_DISABLE_SINGLE_INCLUDES', true) config_h.set('GTK_DISABLE_DEPRECATED', true) config_h.set('GTK_DISABLE_SINGLE_INCLUDES', true) config_h.set('GDK_PIXBUF_DISABLE_SINGLE_INCLUDES', true) -config_h.set('GLIB_VERSION_MAX_ALLOWED', 'GLIB_VERSION_2_34') -config_h.set('GLIB_VERSION_MIN_REQUIRED', 'GLIB_VERSION_2_34') +config_h.set('GLIB_VERSION_MAX_ALLOWED', 'GLIB_VERSION_2_36') +config_h.set('GLIB_VERSION_MIN_REQUIRED', 'GLIB_VERSION_2_36') # Detected features config_h.set('HAVE_MEMRCHR', cc.has_function('memrchr')) diff --git a/plugins/checksum/checksum.c b/plugins/checksum/checksum.c index 6aa64b64..2c64ce39 100644 --- a/plugins/checksum/checksum.c +++ b/plugins/checksum/checksum.c @@ -22,216 +22,150 @@ #include "config.h" -#include -#include -#include #include #include "hexchat-plugin.h" -#define BUFSIZE 32768 -#define DEFAULT_LIMIT 256 /* default size is 256 MiB */ -#define SHA256_DIGEST_LENGTH 32 -#define SHA256_BUFFER_LENGTH 65 - static hexchat_plugin *ph; /* plugin handle */ static char name[] = "Checksum"; static char desc[] = "Calculate checksum for DCC file transfers"; -static char version[] = "3.1"; +static char version[] = "4.0"; static void -set_limit (char *size) +print_sha256_result (hexchat_context *ctx, gboolean send_message, const char *checksum, const char *filename, GError *error) { - int limit = atoi (size); - - if (limit > 0 && limit < INT_MAX) - { - if (hexchat_pluginpref_set_int (ph, "limit", limit)) - hexchat_printf (ph, "Checksum: File size limit has successfully been set to: %d MiB\n", limit); - else - hexchat_printf (ph, "Checksum: File access error while saving!\n"); - } + /* Context may have been destroyed. */ + /* FIXME: This could still send the PRIVMSG even if the context was closed. */ + if (!hexchat_set_context (ph, ctx)) + return; + + if (error) + hexchat_printf (ph, "Failed to create checksum for %s: %s", filename, error->message); + else if (send_message) + hexchat_commandf (ph, "quote PRIVMSG %s :SHA-256 checksum for %s (remote): %s", hexchat_get_info (ph, "channel"), filename, checksum); else - { - hexchat_printf (ph, "Checksum: Invalid input!\n"); - } + hexchat_printf (ph, "SHA-256 checksum for %s (local): %s\n", filename, checksum); } -static int -get_limit (void) +/* TODO: We could put more info in task data and share the same callback. */ +static void +on_received_file_sha256_complete (GFile *file, GAsyncResult *result, gpointer user_data) { - int size = hexchat_pluginpref_get_int (ph, "limit"); + hexchat_context *ctx = user_data; + GError *error = NULL; + char *sha256 = NULL; + const char *filename = g_task_get_task_data (G_TASK (result)); - if (size <= 0 || size >= INT_MAX) - return DEFAULT_LIMIT; - else - return size; + sha256 = g_task_propagate_pointer (G_TASK (result), &error); + print_sha256_result (ctx, FALSE, sha256, filename, error); + + g_free (sha256); + g_clear_error (&error); } -static gboolean -check_limit (GFile *file) +static void +on_sent_file_sha256_complete (GFile *file, GAsyncResult *result, gpointer user_data) { - GFileInfo *file_info; - goffset file_size; - - file_info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE, G_FILE_QUERY_INFO_NONE, - NULL, NULL); + hexchat_context *ctx = user_data; + GError *error = NULL; + char *sha256 = NULL; + const char *filename = g_task_get_task_data (G_TASK (result)); - if (!file_info) - return FALSE; + sha256 = g_task_propagate_pointer (G_TASK (result), &error); + print_sha256_result (ctx, TRUE, sha256, filename, error); - file_size = g_file_info_get_size (file_info); - g_object_unref (file_info); - - if (file_size > get_limit () * 1048576ll) - return FALSE; - - return TRUE; + g_free (sha256); + g_clear_error (&error); } -static gboolean -sha256_from_stream (GFileInputStream *file_stream, char out_buf[]) +static void +thread_sha256_file (GTask *task, GFile *file, gpointer task_data, GCancellable *cancellable) { GChecksum *checksum; - gssize bytes_read; - guint8 digest[SHA256_DIGEST_LENGTH]; - gsize digest_len = sizeof(digest); - guchar buffer[BUFSIZE]; - gsize i; + GFileInputStream *istream; + guint8 buffer[32768]; + GError *error = NULL; + gssize ret; + + istream = g_file_read (file, cancellable, &error); + if (error) { + g_task_return_error (task, error); + return; + } checksum = g_checksum_new (G_CHECKSUM_SHA256); - while ((bytes_read = g_input_stream_read (G_INPUT_STREAM (file_stream), buffer, sizeof (buffer), NULL, NULL))) - { - if (bytes_read == -1) - { - g_checksum_free (checksum); - return FALSE; - } + while ((ret = g_input_stream_read (G_INPUT_STREAM (istream), buffer, sizeof(buffer), cancellable, &error)) > 0) + g_checksum_update (checksum, buffer, ret); - g_checksum_update (checksum, buffer, bytes_read); + if (error) { + g_checksum_free (checksum); + g_task_return_error (task, error); + return; } - g_checksum_get_digest (checksum, digest, &digest_len); + g_task_return_pointer (task, g_strdup (g_checksum_get_string (checksum)), g_free); g_checksum_free (checksum); - - for (i = 0; i < SHA256_DIGEST_LENGTH; i++) - { - /* out_buf will be exactly SHA256_BUFFER_LENGTH including null */ - g_sprintf (out_buf + (i * 2), "%02x", digest[i]); - } - - return TRUE; -} - -static gboolean -sha256_from_file (char *filename, char out_buf[]) -{ - GFileInputStream *file_stream; - char *filename_fs; - GFile *file; - - filename_fs = g_filename_from_utf8 (filename, -1, NULL, NULL, NULL); - if (!filename_fs) - { - hexchat_printf (ph, "Checksum: Invalid filename (%s)\n", filename); - return FALSE; - } - - file = g_file_new_for_path (filename_fs); - g_free (filename_fs); - if (!file) - { - hexchat_printf (ph, "Checksum: Failed to open %s\n", filename); - return FALSE; - } - - if (!check_limit (file)) - { - hexchat_printf (ph, "Checksum: %s is larger than size limit. You can increase it with /CHECKSUM SET.\n", filename); - g_object_unref (file); - return FALSE; - } - - file_stream = g_file_read (file, NULL, NULL); - if (!file_stream) - { - hexchat_printf (ph, "Checksum: Failed to read file %s\n", filename); - g_object_unref (file); - return FALSE; - } - - if (!sha256_from_stream (file_stream, out_buf)) - { - hexchat_printf (ph, "Checksum: Failed to generate checksum for %s\n", filename); - g_object_unref (file_stream); - g_object_unref (file); - return FALSE; - } - - g_object_unref (file_stream); - g_object_unref (file); - return TRUE; } static int dccrecv_cb (char *word[], void *userdata) { + GTask *task; + char *filename_fs; + GFile *file; + hexchat_context *ctx; const char *dcc_completed_dir; - char *filename, checksum[SHA256_BUFFER_LENGTH]; - - /* Print in the privmsg tab of the sender */ - hexchat_set_context (ph, hexchat_find_context (ph, NULL, word[3])); + char *filename; if (hexchat_get_prefs (ph, "dcc_completed_dir", &dcc_completed_dir, NULL) == 1 && dcc_completed_dir[0] != '\0') filename = g_build_filename (dcc_completed_dir, word[1], NULL); else filename = g_strdup (word[2]); - if (sha256_from_file (filename, checksum)) - { - hexchat_printf (ph, "SHA-256 checksum for %s (local): %s\n", word[1], checksum); + filename_fs = g_filename_from_utf8 (filename, -1, NULL, NULL, NULL); + if (!filename_fs) { + hexchat_printf (ph, "Checksum: Invalid filename (%s)\n", filename); + g_free (filename); + return HEXCHAT_EAT_NONE; } - g_free (filename); + /* Print in the privmsg tab of the sender */ + ctx = hexchat_find_context (ph, NULL, word[3]); + + file = g_file_new_for_path (filename_fs); + task = g_task_new (file, NULL, (GAsyncReadyCallback) on_received_file_sha256_complete, ctx); + g_task_set_task_data (task, filename, g_free); + g_task_run_in_thread (task, (GTaskThreadFunc) thread_sha256_file); + + g_free (filename_fs); + g_object_unref (file); + g_object_unref (task); + return HEXCHAT_EAT_NONE; } static int dccoffer_cb (char *word[], void *userdata) { - char checksum[SHA256_BUFFER_LENGTH]; + GFile *file; + GTask *task; + hexchat_context *ctx; + char *filename; /* Print in the privmsg tab of the receiver */ - hexchat_set_context (ph, hexchat_find_context (ph, NULL, word[3])); - - if (sha256_from_file (word[3], checksum)) - { - hexchat_commandf (ph, "quote PRIVMSG %s :SHA-256 checksum for %s (remote): %s", word[2], word[1], checksum); - } + ctx = hexchat_find_context (ph, NULL, word[3]); - return HEXCHAT_EAT_NONE; -} + filename = g_strdup (word[3]); + file = g_file_new_for_path (filename); + task = g_task_new (file, NULL, (GAsyncReadyCallback) on_sent_file_sha256_complete, ctx); + g_task_set_task_data (task, filename, g_free); + g_task_run_in_thread (task, (GTaskThreadFunc) thread_sha256_file); -static int -checksum (char *word[], char *word_eol[], void *userdata) -{ - if (!g_ascii_strcasecmp ("GET", word[2])) - { - hexchat_printf (ph, "File size limit for checksums: %d MiB", get_limit ()); - } - else if (!g_ascii_strcasecmp ("SET", word[2])) - { - set_limit (word[3]); - } - else - { - hexchat_printf (ph, "Usage: /CHECKSUM GET|SET\n"); - hexchat_printf (ph, " GET - print the maximum file size (in MiB) to be hashed\n"); - hexchat_printf (ph, " SET - set the maximum file size (in MiB) to be hashed\n"); - } + g_object_unref (file); + g_object_unref (task); - return HEXCHAT_EAT_ALL; + return HEXCHAT_EAT_NONE; } int @@ -243,13 +177,6 @@ hexchat_plugin_init (hexchat_plugin *plugin_handle, char **plugin_name, char **p *plugin_desc = desc; *plugin_version = version; - /* this is required for the very first run */ - if (hexchat_pluginpref_get_int (ph, "limit") == -1) - { - hexchat_pluginpref_set_int (ph, "limit", DEFAULT_LIMIT); - } - - hexchat_hook_command (ph, "CHECKSUM", HEXCHAT_PRI_NORM, checksum, "Usage: /CHECKSUM GET|SET", NULL); hexchat_hook_print (ph, "DCC RECV Complete", HEXCHAT_PRI_NORM, dccrecv_cb, NULL); hexchat_hook_print (ph, "DCC Offer", HEXCHAT_PRI_NORM, dccoffer_cb, NULL); -- cgit 1.4.1 From 3dc18ff6fbe550c113d44df9b313d23ed965fdfc Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 3 Apr 2023 22:51:23 +0200 Subject: checksum: fixed the TODO and FIXME, tested and improved info message printing --- plugins/checksum/checksum.c | 89 +++++++++++++++++++++++++++------------------ 1 file changed, 53 insertions(+), 36 deletions(-) (limited to 'plugins') diff --git a/plugins/checksum/checksum.c b/plugins/checksum/checksum.c index 2c64ce39..b27ad17b 100644 --- a/plugins/checksum/checksum.c +++ b/plugins/checksum/checksum.c @@ -31,49 +31,59 @@ static char name[] = "Checksum"; static char desc[] = "Calculate checksum for DCC file transfers"; static char version[] = "4.0"; -static void -print_sha256_result (hexchat_context *ctx, gboolean send_message, const char *checksum, const char *filename, GError *error) -{ - /* Context may have been destroyed. */ - /* FIXME: This could still send the PRIVMSG even if the context was closed. */ - if (!hexchat_set_context (ph, ctx)) - return; - if (error) - hexchat_printf (ph, "Failed to create checksum for %s: %s", filename, error->message); - else if (send_message) - hexchat_commandf (ph, "quote PRIVMSG %s :SHA-256 checksum for %s (remote): %s", hexchat_get_info (ph, "channel"), filename, checksum); - else - hexchat_printf (ph, "SHA-256 checksum for %s (local): %s\n", filename, checksum); -} +typedef struct { + gboolean send_message; + GString *servername; + GString *channel; +} ChecksumCallbackInfo; + -/* TODO: We could put more info in task data and share the same callback. */ static void -on_received_file_sha256_complete (GFile *file, GAsyncResult *result, gpointer user_data) +print_sha256_result (ChecksumCallbackInfo *info, const char *checksum, const char *filename, GError *error) { - hexchat_context *ctx = user_data; - GError *error = NULL; - char *sha256 = NULL; - const char *filename = g_task_get_task_data (G_TASK (result)); - sha256 = g_task_propagate_pointer (G_TASK (result), &error); - print_sha256_result (ctx, FALSE, sha256, filename, error); + // So then we get the next best available channel, since we always want to print at least somewhere, it's fine + hexchat_context *ctx = hexchat_find_context(ph, info->servername->str, info->channel->str); + if (!ctx) { + // before we print a private message to the wrong channel, we exit early + if (info->send_message) { + return; + } + + // if the context isn't found the first time, we search in the server + ctx = hexchat_find_context(ph, info->servername->str, NULL); + if (!ctx) { + //the second time we exit early, since printing in another server isn't desireable + return; + } + } - g_free (sha256); - g_clear_error (&error); + hexchat_set_context(ph, ctx); + + if (error) { + hexchat_printf (ph, "Failed to create checksum for %s: %s\n", filename, error->message); + } else if (info->send_message) { + hexchat_commandf (ph, "quote PRIVMSG %s :SHA-256 checksum for %s (remote): %s", hexchat_get_info (ph, "channel"), filename, checksum); + } else { + hexchat_printf (ph, "SHA-256 checksum for %s (local): %s\n", filename, checksum); + } } static void -on_sent_file_sha256_complete (GFile *file, GAsyncResult *result, gpointer user_data) -{ - hexchat_context *ctx = user_data; +file_sha256_complete (GFile *file, GAsyncResult *result, gpointer user_data) +{ + ChecksumCallbackInfo * callback_info = user_data; GError *error = NULL; char *sha256 = NULL; const char *filename = g_task_get_task_data (G_TASK (result)); sha256 = g_task_propagate_pointer (G_TASK (result), &error); - print_sha256_result (ctx, TRUE, sha256, filename, error); + print_sha256_result (callback_info, sha256, filename, error); + g_string_free(callback_info->servername, TRUE); + g_string_free(callback_info->channel, TRUE); + g_free(callback_info); g_free (sha256); g_clear_error (&error); } @@ -114,7 +124,6 @@ dccrecv_cb (char *word[], void *userdata) GTask *task; char *filename_fs; GFile *file; - hexchat_context *ctx; const char *dcc_completed_dir; char *filename; @@ -130,11 +139,16 @@ dccrecv_cb (char *word[], void *userdata) return HEXCHAT_EAT_NONE; } - /* Print in the privmsg tab of the sender */ - ctx = hexchat_find_context (ph, NULL, word[3]); + ChecksumCallbackInfo *callback_data = g_new (ChecksumCallbackInfo, 1); + const char* servername = hexchat_get_info(ph, "server"); + callback_data->servername = !servername ? NULL : g_string_new(servername); + const char *channel = hexchat_get_info(ph, "channel"); + callback_data->channel = !channel ? NULL : g_string_new(channel); + callback_data->send_message = FALSE; + file = g_file_new_for_path (filename_fs); - task = g_task_new (file, NULL, (GAsyncReadyCallback) on_received_file_sha256_complete, ctx); + task = g_task_new (file, NULL, (GAsyncReadyCallback) file_sha256_complete, (gpointer)callback_data); g_task_set_task_data (task, filename, g_free); g_task_run_in_thread (task, (GTaskThreadFunc) thread_sha256_file); @@ -150,15 +164,18 @@ dccoffer_cb (char *word[], void *userdata) { GFile *file; GTask *task; - hexchat_context *ctx; char *filename; - /* Print in the privmsg tab of the receiver */ - ctx = hexchat_find_context (ph, NULL, word[3]); + ChecksumCallbackInfo *callback_data = g_new (ChecksumCallbackInfo, 1); + const char* servername = hexchat_get_info(ph, "server"); + callback_data->servername = !servername ? NULL : g_string_new(servername); + const char *channel = hexchat_get_info(ph, "channel"); + callback_data->channel = !channel ? NULL : g_string_new(channel); + callback_data->send_message = TRUE; filename = g_strdup (word[3]); file = g_file_new_for_path (filename); - task = g_task_new (file, NULL, (GAsyncReadyCallback) on_sent_file_sha256_complete, ctx); + task = g_task_new (file, NULL, (GAsyncReadyCallback) file_sha256_complete, (gpointer)callback_data); g_task_set_task_data (task, filename, g_free); g_task_run_in_thread (task, (GTaskThreadFunc) thread_sha256_file); -- cgit 1.4.1 From a01d9ea1528a33dfc8706b391324ef50afc97991 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Mon, 1 May 2023 14:27:29 -0500 Subject: checksum: Replace GString usage with regular strings --- plugins/checksum/checksum.c | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) (limited to 'plugins') diff --git a/plugins/checksum/checksum.c b/plugins/checksum/checksum.c index b27ad17b..4db14c93 100644 --- a/plugins/checksum/checksum.c +++ b/plugins/checksum/checksum.c @@ -34,17 +34,16 @@ static char version[] = "4.0"; typedef struct { gboolean send_message; - GString *servername; - GString *channel; + char *servername; + char *channel; } ChecksumCallbackInfo; static void print_sha256_result (ChecksumCallbackInfo *info, const char *checksum, const char *filename, GError *error) { - // So then we get the next best available channel, since we always want to print at least somewhere, it's fine - hexchat_context *ctx = hexchat_find_context(ph, info->servername->str, info->channel->str); + hexchat_context *ctx = hexchat_find_context(ph, info->servername, info->channel); if (!ctx) { // before we print a private message to the wrong channel, we exit early if (info->send_message) { @@ -52,9 +51,9 @@ print_sha256_result (ChecksumCallbackInfo *info, const char *checksum, const cha } // if the context isn't found the first time, we search in the server - ctx = hexchat_find_context(ph, info->servername->str, NULL); + ctx = hexchat_find_context(ph, info->servername, NULL); if (!ctx) { - //the second time we exit early, since printing in another server isn't desireable + // The second time we exit early, since printing in another server isn't desireable return; } } @@ -81,8 +80,8 @@ file_sha256_complete (GFile *file, GAsyncResult *result, gpointer user_data) sha256 = g_task_propagate_pointer (G_TASK (result), &error); print_sha256_result (callback_info, sha256, filename, error); - g_string_free(callback_info->servername, TRUE); - g_string_free(callback_info->channel, TRUE); + g_free(callback_info->servername); + g_free(callback_info->channel); g_free(callback_info); g_free (sha256); g_clear_error (&error); @@ -140,12 +139,10 @@ dccrecv_cb (char *word[], void *userdata) } ChecksumCallbackInfo *callback_data = g_new (ChecksumCallbackInfo, 1); - const char* servername = hexchat_get_info(ph, "server"); - callback_data->servername = !servername ? NULL : g_string_new(servername); - const char *channel = hexchat_get_info(ph, "channel"); - callback_data->channel = !channel ? NULL : g_string_new(channel); + callback_data->servername = g_strdup(hexchat_get_info(ph, "server")); + callback_data->channel = g_strdup(hexchat_get_info(ph, "channel")); callback_data->send_message = FALSE; - + file = g_file_new_for_path (filename_fs); task = g_task_new (file, NULL, (GAsyncReadyCallback) file_sha256_complete, (gpointer)callback_data); @@ -167,10 +164,8 @@ dccoffer_cb (char *word[], void *userdata) char *filename; ChecksumCallbackInfo *callback_data = g_new (ChecksumCallbackInfo, 1); - const char* servername = hexchat_get_info(ph, "server"); - callback_data->servername = !servername ? NULL : g_string_new(servername); - const char *channel = hexchat_get_info(ph, "channel"); - callback_data->channel = !channel ? NULL : g_string_new(channel); + callback_data->servername = g_strdup(hexchat_get_info(ph, "server")); + callback_data->channel = g_strdup(hexchat_get_info(ph, "channel")); callback_data->send_message = TRUE; filename = g_strdup (word[3]); -- cgit 1.4.1 From a1f154cd5ee63ec6b9ac154b8dc6d5a5d97c2c28 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Fri, 3 Nov 2023 10:58:56 -0500 Subject: win32: Remove Python 2 support --- .github/workflows/windows-build.yml | 3 -- plugins/python/python2.vcxproj | 65 ---------------------------------- plugins/python/python2.vcxproj.filters | 23 ------------ src/common/plugin.c | 1 - win32/copy/copy.vcxproj | 1 - win32/hexchat.props | 4 --- win32/hexchat.sln | 11 ------ win32/installer/hexchat.iss.tt | 16 ++------- 8 files changed, 3 insertions(+), 121 deletions(-) delete mode 100644 plugins/python/python2.vcxproj delete mode 100644 plugins/python/python2.vcxproj.filters (limited to 'plugins') diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 4554f2a9..18aca7ca 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -40,13 +40,10 @@ jobs: Invoke-WebRequest https://dl.hexchat.net/misc/perl/perl-5.20.0-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z & 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.20\${{ matrix.platform }} - New-Item -Path "c:\gtk-build" -Name "python-2.7" -ItemType "Directory" New-Item -Path "c:\gtk-build" -Name "python-3.8" -ItemType "Directory" - New-Item -Path "c:\gtk-build\python-2.7" -Name "${{ matrix.platform }}" -ItemType "SymbolicLink" -Value "C:/hostedtoolcache/windows/Python/2.7.18/${{ matrix.arch }}" New-Item -Path "c:\gtk-build\python-3.8" -Name "${{ matrix.platform }}" -ItemType "SymbolicLink" -Value "C:/hostedtoolcache/windows/Python/3.8.10/${{ matrix.arch }}" C:/hostedtoolcache/windows/Python/3.8.10/${{ matrix.arch }}/python.exe -m pip install cffi - C:/hostedtoolcache/windows/Python/2.7.18/${{ matrix.arch }}/python.exe -m pip install -qq cffi shell: powershell - name: Build diff --git a/plugins/python/python2.vcxproj b/plugins/python/python2.vcxproj deleted file mode 100644 index 42895ce4..00000000 --- a/plugins/python/python2.vcxproj +++ /dev/null @@ -1,65 +0,0 @@ - - - - v142 - DynamicLibrary - - - - Release - Win32 - - - Release - x64 - - - - {19C52A0A-A790-409E-A28A-9745FF990F5C} - Win32Proj - python2 - - - - - - - $(Python2Output) - $(HexChatRel)plugins\ - - - - WIN32;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions) - $(Glib);$(Python2Path)\include;..\..\src\common;$(HexChatLib);%(AdditionalIncludeDirectories) - - - python.def - "$(Python2Lib).lib";$(DepLibs);%(AdditionalDependencies) - $(DepsRoot)\lib;$(Python2Path)\libs;%(AdditionalLibraryDirectories) - - - "$(Python3Path)\python.exe" generate_plugin.py ..\..\src\common\hexchat-plugin.h python.py "$(IntDir)python.c" - - - - - WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions) - $(Glib);$(Python2Path)\include;..\..\src\common;$(HexChatLib);%(AdditionalIncludeDirectories) - - - python.def - "$(Python2Lib).lib";$(DepLibs);%(AdditionalDependencies) - $(DepsRoot)\lib;$(Python2Path)\libs;%(AdditionalLibraryDirectories) - - - "$(Python3Path)\python.exe" generate_plugin.py ..\..\src\common\hexchat-plugin.h python.py "$(IntDir)python.c" - - - - - - - - - - diff --git a/plugins/python/python2.vcxproj.filters b/plugins/python/python2.vcxproj.filters deleted file mode 100644 index d56e53b6..00000000 --- a/plugins/python/python2.vcxproj.filters +++ /dev/null @@ -1,23 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Resource Files - - - - - Source Files - - - \ No newline at end of file diff --git a/src/common/plugin.c b/src/common/plugin.c index 40e55bbf..536f376d 100644 --- a/src/common/plugin.c +++ b/src/common/plugin.c @@ -491,7 +491,6 @@ plugin_auto_load (session *sess) for_files (lib_dir, "hcfishlim.dll", plugin_auto_load_cb); for_files(lib_dir, "hclua.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); for_files (lib_dir, "hcpython3.dll", plugin_auto_load_cb); for_files (lib_dir, "hcupd.dll", plugin_auto_load_cb); for_files (lib_dir, "hcwinamp.dll", plugin_auto_load_cb); diff --git a/win32/copy/copy.vcxproj b/win32/copy/copy.vcxproj index 2fc7437b..cb3ea1cf 100644 --- a/win32/copy/copy.vcxproj +++ b/win32/copy/copy.vcxproj @@ -65,7 +65,6 @@ - diff --git a/win32/hexchat.props b/win32/hexchat.props index 5d81b2dc..d6c2bf1a 100644 --- a/win32/hexchat.props +++ b/win32/hexchat.props @@ -7,7 +7,6 @@ c:\gtk-build\gtk c:\gtk-build\gendef c:\gtk-build\perl-5.20 - c:\gtk-build\python-2.7 c:\gtk-build\python-3.8 c:\gtk-build\WinSparkle @@ -22,9 +21,6 @@ $(YourWinSparklePath)\$(PlatformName) $(YourPerlPath)\$(PlatformName) perl520 - $(YourPython2Path)\$(PlatformName) - python27 - hcpython2 $(YourPython3Path)\$(PlatformName) python38 hcpython3 diff --git a/win32/hexchat.sln b/win32/hexchat.sln index 8759c59b..57476b02 100644 --- a/win32/hexchat.sln +++ b/win32/hexchat.sln @@ -21,11 +21,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "plugins", "plugins", "{5611 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripting", "scripting", "{D237DA6B-BD5F-46C0-8BEA-50E9A1340240}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python2", "..\plugins\python\python2.vcxproj", "{19C52A0A-A790-409E-A28A-9745FF990F5C}" - ProjectSection(ProjectDependencies) = postProject - {87554B59-006C-4D94-9714-897B27067BA3} = {87554B59-006C-4D94-9714-897B27067BA3} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "checksum", "..\plugins\checksum\checksum.vcxproj", "{5EF7F47D-D09C-43C4-BF64-B28B11A0FF91}" ProjectSection(ProjectDependencies) = postProject {87554B59-006C-4D94-9714-897B27067BA3} = {87554B59-006C-4D94-9714-897B27067BA3} @@ -72,7 +67,6 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "installer", "installer\installer.vcxproj", "{5A0F4962-E670-4DA2-9E45-52CC47F26E2F}" ProjectSection(ProjectDependencies) = postProject {C2321A03-0BA7-45B3-8740-ABD82B36B0BF} = {C2321A03-0BA7-45B3-8740-ABD82B36B0BF} - {19C52A0A-A790-409E-A28A-9745FF990F5C} = {19C52A0A-A790-409E-A28A-9745FF990F5C} {BF0EBC16-68AD-4CD1-864C-5B56836EBE2A} = {BF0EBC16-68AD-4CD1-864C-5B56836EBE2A} {17E4BE39-76F7-4A06-AD21-EFD0C5091F76} = {17E4BE39-76F7-4A06-AD21-EFD0C5091F76} {4C0F3940-2EEE-4646-82F7-6CE75B9A72F4} = {4C0F3940-2EEE-4646-82F7-6CE75B9A72F4} @@ -134,10 +128,6 @@ Global {E93E1255-95D1-4B08-8FDF-B53CC6A21280}.Release|Win32.Build.0 = Release|Win32 {E93E1255-95D1-4B08-8FDF-B53CC6A21280}.Release|x64.ActiveCfg = Release|x64 {E93E1255-95D1-4B08-8FDF-B53CC6A21280}.Release|x64.Build.0 = Release|x64 - {19C52A0A-A790-409E-A28A-9745FF990F5C}.Release|Win32.ActiveCfg = Release|Win32 - {19C52A0A-A790-409E-A28A-9745FF990F5C}.Release|Win32.Build.0 = Release|Win32 - {19C52A0A-A790-409E-A28A-9745FF990F5C}.Release|x64.ActiveCfg = Release|x64 - {19C52A0A-A790-409E-A28A-9745FF990F5C}.Release|x64.Build.0 = Release|x64 {5EF7F47D-D09C-43C4-BF64-B28B11A0FF91}.Release|Win32.ActiveCfg = Release|Win32 {5EF7F47D-D09C-43C4-BF64-B28B11A0FF91}.Release|Win32.Build.0 = Release|Win32 {5EF7F47D-D09C-43C4-BF64-B28B11A0FF91}.Release|x64.ActiveCfg = Release|x64 @@ -206,7 +196,6 @@ Global {87554B59-006C-4D94-9714-897B27067BA3} = {AAACEB12-9475-410E-AF5A-FDFF907E9043} {E4BDB4C8-2335-415A-ACEE-BA88B19BFE82} = {AAACEB12-9475-410E-AF5A-FDFF907E9043} {E93E1255-95D1-4B08-8FDF-B53CC6A21280} = {AAACEB12-9475-410E-AF5A-FDFF907E9043} - {19C52A0A-A790-409E-A28A-9745FF990F5C} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240} {5EF7F47D-D09C-43C4-BF64-B28B11A0FF91} = {561126F4-FA18-45FC-A2BF-8F858F161D6D} {17E4BE39-76F7-4A06-AD21-EFD0C5091F76} = {561126F4-FA18-45FC-A2BF-8F858F161D6D} {3C4F42FC-292A-420B-B63D-C03DFBDD8E4E} = {561126F4-FA18-45FC-A2BF-8F858F161D6D} diff --git a/win32/installer/hexchat.iss.tt b/win32/installer/hexchat.iss.tt index b03e2212..1b7c3209 100644 --- a/win32/installer/hexchat.iss.tt +++ b/win32/installer/hexchat.iss.tt @@ -75,9 +75,7 @@ Name: "plugins\winamp"; Description: "Winamp"; Types: custom; Flags: disablenoun 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 -Name: "langs\python\python3"; Description: "Python (requires Python 3.8)"; Types: custom; Flags: disablenouninstallwarning exclusive +Name: "langs\python"; Description: "Python (requires Python 3.8)"; Types: custom; Flags: disablenouninstallwarning [Tasks] Name: portable; Description: "Yes"; GroupDescription: "Portable Mode: Stores configuration files within install directory for portable drives."; Flags: unchecked @@ -188,11 +186,8 @@ Source: "plugins\hcperl.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Co Source: "python\*.py"; DestDir: "{app}\python"; Flags: ignoreversion; Components: langs\python -Source: "plugins\hcpython2.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\python\python2 -Source: "_cffi_backend.pyd"; DestDir: "{app}"; Flags: ignoreversion; Components: langs\python\python2 - -Source: "plugins\hcpython3.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\python\python3 -Source: "_cffi_backend.cp3*.pyd"; DestDir: "{app}"; Flags: ignoreversion; Components: langs\python\python3 +Source: "plugins\hcpython3.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: langs\python +Source: "_cffi_backend.cp3*.pyd"; DestDir: "{app}"; Flags: ignoreversion; Components: langs\python Source: "hexchat.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs Source: "hexchat-text.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: xctext @@ -303,13 +298,11 @@ begin REDIST := 'https://dl.hexchat.net/misc/vcredist_2015_x64.exe'; REDIST_2013 := 'https://dl.hexchat.net/misc/vcredist_2013_x64.exe'; PERL := 'https://dl.hexchat.net/misc/perl/Perl%205.20.0%20x64.msi'; - PY2 := 'https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi'; PY3 := 'https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe'; #else REDIST := 'https://dl.hexchat.net/misc/vcredist_2015_x86.exe'; REDIST_2013 := 'https://dl.hexchat.net/misc/vcredist_2013_x86.exe'; PERL := 'https://dl.hexchat.net/misc/perl/Perl%205.20.0%20x86.msi'; - PY2 := 'https://www.python.org/ftp/python/2.7.18/python-2.7.18.msi'; PY3 := 'https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe'; #endif DOTNET := 'https://dl.hexchat.net/misc/dotnet_40.exe'; @@ -334,9 +327,6 @@ begin idpAddFile(PERL, ExpandConstant('{tmp}\perl.msi')) end; - if IsComponentSelected('langs\python\python2') and not CheckDLL('python27.dll') then - idpAddFile(PY2, ExpandConstant('{tmp}\python.msi')); - if IsComponentSelected('langs\python\python3') and not CheckDLL('python38.dll') then idpAddFile(PY3, ExpandConstant('{tmp}\python.exe')); end; -- cgit 1.4.1 From 180ce9f4fde4f87150b69e0cf40873226dbb9455 Mon Sep 17 00:00:00 2001 From: Collin Funk Date: Sun, 28 Jan 2024 19:33:45 -0800 Subject: Change various types to the correct signedness to avoid warnings. Also cast the check of "inet_addr" to guint32. The POSIX declaration of this function returns in_addr_t which is the same as uint32_t. Windows does not define this type and instead uses unsigned long. --- plugins/fishlim/fish.c | 3 ++- plugins/fishlim/tests/tests.c | 2 +- src/common/dbus/dbus-client.c | 2 +- src/common/modes.c | 2 +- src/common/outbound.c | 2 +- src/common/url.c | 2 +- src/common/util.c | 2 +- src/fe-gtk/xtext.c | 3 ++- 8 files changed, 10 insertions(+), 8 deletions(-) (limited to 'plugins') diff --git a/plugins/fishlim/fish.c b/plugins/fishlim/fish.c index 7fe7e287..0b24ed48 100644 --- a/plugins/fishlim/fish.c +++ b/plugins/fishlim/fish.c @@ -145,7 +145,8 @@ void fish_deinit(void) */ char *fish_base64_encode(const char *message, size_t message_len) { BF_LONG left = 0, right = 0; - int i, j; + int i; + size_t j; char *encoded = NULL; char *end = NULL; char *msg = NULL; diff --git a/plugins/fishlim/tests/tests.c b/plugins/fishlim/tests/tests.c index 12b10d1d..553816d3 100644 --- a/plugins/fishlim/tests/tests.c +++ b/plugins/fishlim/tests/tests.c @@ -36,7 +36,7 @@ static void random_string(char *out, size_t len) { GRand *rand = NULL; - int i = 0; + size_t i = 0; rand = g_rand_new(); for (i = 0; i < len; ++i) { diff --git a/src/common/dbus/dbus-client.c b/src/common/dbus/dbus-client.c index 8b40dd24..e70a49a9 100644 --- a/src/common/dbus/dbus-client.c +++ b/src/common/dbus/dbus-client.c @@ -67,7 +67,7 @@ hexchat_remote (void) gboolean hexchat_running; GError *error = NULL; char *command = NULL; - int i; + guint i; /* if there is nothing to do, return now. */ if (!arg_existing || !(arg_url || arg_urls || arg_command)) { diff --git a/src/common/modes.c b/src/common/modes.c index d8fd75aa..1ff309bd 100644 --- a/src/common/modes.c +++ b/src/common/modes.c @@ -680,7 +680,7 @@ handle_mode (server * serv, char *word[], char *word_eol[], int len; size_t arg; size_t i, num_args; - int num_modes; + size_t num_modes; size_t offset = 3; int all_modes_have_args = FALSE; int using_front_tab = FALSE; diff --git a/src/common/outbound.c b/src/common/outbound.c index c82e23bd..b8153502 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -468,7 +468,7 @@ create_mask (session * sess, char *mask, char *mode, char *typestr, int deop) type = prefs.hex_irc_ban_type; buf[0] = 0; - if (inet_addr (fullhost) != -1) /* "fullhost" is really a IP number */ + if (inet_addr (fullhost) != (guint32) -1) /* "fullhost" is really a IP number */ { lastdot = strrchr (fullhost, '.'); if (!lastdot) diff --git a/src/common/url.c b/src/common/url.c index 6a1d09e8..ae85ae44 100644 --- a/src/common/url.c +++ b/src/common/url.c @@ -331,7 +331,7 @@ url_check_line (char *buf) GRegex *re(void); GMatchInfo *gmi; char *po = buf; - int i; + size_t i; /* Skip over message prefix */ if (*po == ':') diff --git a/src/common/util.c b/src/common/util.c index f06074fc..bd920cae 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -988,7 +988,7 @@ void country_search (char *pattern, void *ud, void (*print)(void *, char *, ...)) { const domain_t *dom; - int i; + size_t i; for (i = 0; i < sizeof (domain) / sizeof (domain_t); i++) { diff --git a/src/fe-gtk/xtext.c b/src/fe-gtk/xtext.c index 08a5110a..be978f22 100644 --- a/src/fe-gtk/xtext.c +++ b/src/fe-gtk/xtext.c @@ -170,7 +170,8 @@ xtext_pango_attr (PangoAttribute *attr) static void xtext_pango_init (GtkXText *xtext) { - int i, j; + size_t i; + int j; char buf[2] = "\000"; if (attr_lists[0]) -- cgit 1.4.1 From cc60ad275a56126904df0b5e37cfd20db22cb359 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Fri, 9 Feb 2024 18:29:15 -0600 Subject: Replace hexchat.net links --- .github/workflows/windows-build.yml | 10 +++++----- plugins/upd/upd.c | 2 +- win32/installer/hexchat.iss.tt | 16 ++++++++-------- 3 files changed, 14 insertions(+), 14 deletions(-) (limited to 'plugins') diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 3ba01e8b..9ad55fac 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -31,19 +31,19 @@ jobs: Invoke-WebRequest http://files.jrsoftware.org/is/5/innosetup-5.5.9-unicode.exe -OutFile deps\innosetup-unicode.exe & deps\innosetup-unicode.exe /VERYSILENT | Out-Null - Invoke-WebRequest https://dl.hexchat.net/misc/idpsetup-1.5.1.exe -OutFile deps\idpsetup.exe + Invoke-WebRequest https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/idpsetup-1.5.1.exe -OutFile deps\idpsetup.exe & deps\idpsetup.exe /VERYSILENT - Invoke-WebRequest https://dl.hexchat.net/gtk/gtk-${{ matrix.platform }}-2018-08-29-openssl1.1.7z -OutFile deps\gtk-${{ matrix.arch }}.7z + Invoke-WebRequest https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/gtk-${{ matrix.platform }}-2018-08-29-openssl1.1.7z -OutFile deps\gtk-${{ matrix.arch }}.7z & 7z.exe x deps\gtk-${{ matrix.arch }}.7z -oC:\gtk-build\gtk - Invoke-WebRequest https://dl.hexchat.net/gtk-win32/gendef-20111031.7z -OutFile deps\gendef.7z + Invoke-WebRequest https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/gendef-20111031.7z-OutFile deps\gendef.7z & 7z.exe x deps\gendef.7z -oC:\gtk-build - Invoke-WebRequest https://dl.hexchat.net/gtk-win32/WinSparkle-20151011.7z -OutFile deps\WinSparkle.7z + Invoke-WebRequest https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/WinSparkle-20151011.7z -OutFile deps\WinSparkle.7z & 7z.exe x deps\WinSparkle.7z -oC:\gtk-build\WinSparkle - Invoke-WebRequest https://dl.hexchat.net/misc/perl/perl-5.20.0-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z + Invoke-WebRequest https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/perl-5.20.0-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z & 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.20\${{ matrix.platform }} New-Item -Path "c:\gtk-build" -Name "python-3.8" -ItemType "Directory" diff --git a/plugins/upd/upd.c b/plugins/upd/upd.c index c9011c04..2a938596 100644 --- a/plugins/upd/upd.c +++ b/plugins/upd/upd.c @@ -24,7 +24,7 @@ #include "hexchat-plugin.h" -#define APPCAST_URL "https://dl.hexchat.net/appcast.xml" +#define APPCAST_URL "https://hexchat.github.io/appcast.xml" static hexchat_plugin *ph; /* plugin handle */ static char name[] = "Update Checker"; diff --git a/win32/installer/hexchat.iss.tt b/win32/installer/hexchat.iss.tt index 1b7c3209..8337258f 100644 --- a/win32/installer/hexchat.iss.tt +++ b/win32/installer/hexchat.iss.tt @@ -295,18 +295,18 @@ begin begin #if APPARCH == "x64" - REDIST := 'https://dl.hexchat.net/misc/vcredist_2015_x64.exe'; - REDIST_2013 := 'https://dl.hexchat.net/misc/vcredist_2013_x64.exe'; - PERL := 'https://dl.hexchat.net/misc/perl/Perl%205.20.0%20x64.msi'; + REDIST := 'https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/vcredist_2015_x64.exe'; + REDIST_2013 := 'https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/vcredist_2013_x64.exe'; + PERL := 'https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/Perl.5.20.0.x64.msi'; PY3 := 'https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe'; #else - REDIST := 'https://dl.hexchat.net/misc/vcredist_2015_x86.exe'; - REDIST_2013 := 'https://dl.hexchat.net/misc/vcredist_2013_x86.exe'; - PERL := 'https://dl.hexchat.net/misc/perl/Perl%205.20.0%20x86.msi'; + REDIST := 'https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/vcredist_2015_x86.exe'; + REDIST_2013 := 'https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/vcredist_2013_x86.exe'; + PERL := 'https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/Perl.5.20.0.x86.msi'; PY3 := 'https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe'; #endif - DOTNET := 'https://dl.hexchat.net/misc/dotnet_40.exe'; - SPELL := 'https://dl.hexchat.net/hexchat/HexChat%20Spelling%20Dictionaries%20r2.exe'; + DOTNET := 'https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/dotnet_40.exe'; + SPELL := 'https://github.com/hexchat/gvsbuild/releases/download/hexchat-2.16.2/HexChat.Spelling.Dictionaries.r2.exe'; if not CheckVCInstall() then idpAddFile(REDIST, ExpandConstant('{tmp}\vcredist.exe')); -- cgit 1.4.1