diff --git a/.github/workflows/abicheck.yml b/.github/workflows/abicheck.yml index 4e14353d..e01382b9 100644 --- a/.github/workflows/abicheck.yml +++ b/.github/workflows/abicheck.yml @@ -3,7 +3,7 @@ name: abicheck env: build_options: -Dbuildtype=debug -Denable-true-color=yes -Dwith-proxy=yes -Dc_args=-DPERL_EUPXS_ALWAYS_EXPORT prefix: /usr/local - apt_build_deps: ninja-build libutf8proc-dev libperl-dev libotr5-dev + apt_build_deps: ninja-build libutf8proc-dev libperl-dev libotr5-dev libglib2.0-dev get_pip_build_deps: pip3 install setuptools; pip3 install wheel; pip3 install 'meson<0.59.0' getabidef_def: getabidef() { awk '$1=="#define" && $2=="IRSSI_ABI_VERSION" { print $3 }' "$1"/include/irssi/src/common.h; } jobs: @@ -17,7 +17,7 @@ jobs: echo "$HOME/.local/bin" >> $GITHUB_PATH - name: prepare required software run: | - sudo apt install $apt_build_deps + sudo apt update; sudo apt install $apt_build_deps eval "$get_pip_build_deps" - name: checkout base ref uses: actions/checkout@main @@ -36,8 +36,8 @@ jobs: base_abi=$(getabidef base$prefix) echo base abi : $base_abi ./base$prefix/bin/irssi --version - echo "::set-output name=base_abi::$base_abi" - - uses: actions/upload-artifact@v2 + echo base_abi=$base_abi >> $GITHUB_OUTPUT + - uses: actions/upload-artifact@v4 with: name: base.inst path: base @@ -52,7 +52,7 @@ jobs: echo "$HOME/.local/bin" >> $GITHUB_PATH - name: prepare required software run: | - sudo apt install $apt_build_deps + sudo apt update; sudo apt install $apt_build_deps eval "$get_pip_build_deps" - name: checkout merge ref uses: actions/checkout@main @@ -70,8 +70,8 @@ jobs: merge_abi=$(getabidef merge$prefix) echo merge abi : $merge_abi ./merge$prefix/bin/irssi --version - echo "::set-output name=merge_abi::$merge_abi" - - uses: actions/upload-artifact@v2 + echo merge_abi=$merge_abi >> $GITHUB_OUTPUT + - uses: actions/upload-artifact@v4 with: name: merge.inst path: merge @@ -87,14 +87,14 @@ jobs: steps: - name: prepare required software run: | - sudo apt install abigail-tools + sudo apt update; sudo apt install abigail-tools - name: fetch base build - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: base.inst path: base - name: fetch merge build - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: merge.inst path: merge @@ -103,7 +103,7 @@ jobs: abipkgdiff -l base merge >abipkgdiff.out && diff_ret=0 || diff_ret=$? echo "diff_ret=$diff_ret" >> $GITHUB_ENV cat abipkgdiff.out - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: path: abipkgdiff.out - run: | diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 3e324649..37103672 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -5,7 +5,7 @@ on: pull_request: name: Check Irssi env: - apt_build_deps: libutf8proc-dev libperl-dev libotr5-dev + apt_build_deps: libutf8proc-dev libperl-dev libotr5-dev libglib2.0-dev apt_build_deps_meson: ninja-build apt_build_deps_autotools: autoconf automake libtool get_pip_build_deps_meson: pip3 install setuptools${setuptools_ver}; pip3 install wheel; pip3 install meson${meson_ver} @@ -25,7 +25,7 @@ jobs: # make dist ./autogen.sh $build_options_configure make dist - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: path: irssi-*.tar.gz retention-days: 1 @@ -38,24 +38,24 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-18.04, ubuntu-latest] + os: [ubuntu-20.04, ubuntu-latest] builder: [meson, configure] compiler: [clang, gcc] flags: [regular] include: - - os: ubuntu-18.04 + - os: ubuntu-20.04 builder: meson - meson_ver: ==0.49.2 + meson_ver: ==0.53.2 setuptools_ver: <51 - os: ubuntu-latest builder: meson - meson_ver: <0.60.0 + meson_ver: <0.63.0 - os: ubuntu-latest builder: meson flags: meson-latest FAILURE-OK steps: - name: fetch dist - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 - name: set PATH run: | echo "$HOME/.local/bin" >> $GITHUB_PATH diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml index 6325d671..3b20e427 100644 --- a/.github/workflows/cifuzz.yml +++ b/.github/workflows/cifuzz.yml @@ -44,7 +44,7 @@ jobs: dry-run: false sanitizer: ${{ matrix.sanitizer }} - name: Upload Crash - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 if: failure() && steps.build.outcome == 'success' with: name: ${{ matrix.sanitizer }}-artifacts diff --git a/.github/workflows/clangformat.yml b/.github/workflows/clangformat.yml index 9076edc2..a3ff8d6d 100644 --- a/.github/workflows/clangformat.yml +++ b/.github/workflows/clangformat.yml @@ -22,7 +22,7 @@ jobs: | CLANG_FORMAT=clang-format-14 git-clang-format-14 --diff FETCH_HEAD HEAD | tee git-clang-format.diff cmp -s <(echo no modified files to format) git-clang-format.diff || cmp -s <(echo -n) git-clang-format.diff - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v4 if: failure() with: name: git-clang-format.diff diff --git a/src/perl/irssi-core.pl b/src/perl/irssi-core.pl index 0999de9e..46066a38 100644 --- a/src/perl/irssi-core.pl +++ b/src/perl/irssi-core.pl @@ -52,10 +52,3 @@ sub eval_file { die "cap_sasl has been unloaded from Irssi ".Irssi::version()." because it conflicts with the built-in SASL support. See /help network for configuring SASL or read the ChangeLog for more information."; } } - -if ( $] >= 5.037005 && $] <= 5.038000 ) { - # https://github.com/Perl/perl5/issues/21366 - print STDERR "\e7 \e[A Irssi: applying locale workaround for Perl 5.38.0 \e8"; - require POSIX; - POSIX::setlocale(&POSIX::LC_ALL, ""); -} diff --git a/src/perl/perl-core.c b/src/perl/perl-core.c index 24f0218c..5b669f93 100644 --- a/src/perl/perl-core.c +++ b/src/perl/perl-core.c @@ -18,6 +18,11 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#include + #define NEED_PERL_H #define PERL_NO_GET_CONTEXT #include "module.h" @@ -111,27 +116,44 @@ static void xs_init(pTHX) void perl_scripts_init(void) { char *code, *use_code; + int broken_perl; perl_scripts = NULL; perl_sources_start(); perl_signals_start(); my_perl = perl_alloc(); + broken_perl = wcwidth(160); perl_construct(my_perl); + broken_perl = broken_perl != wcwidth(160); - perl_parse(my_perl, xs_init, G_N_ELEMENTS(perl_args)-1, perl_args, NULL); + perl_parse(my_perl, xs_init, G_N_ELEMENTS(perl_args) - 1, perl_args, NULL); #if PERL_STATIC_LIBS == 1 perl_eval_pv("Irssi::Core::->boot_Irssi_Core(0.9);", TRUE); #endif - perl_common_start(); + perl_common_start(); use_code = perl_get_use_list(); code = g_strdup_printf(irssi_core_code, PERL_STATIC_LIBS, use_code); perl_eval_pv(code, TRUE); + if (broken_perl) { + g_warning("applying locale workaround for Perl %d.%d, see " + "https://github.com/Perl/perl5/issues/21366", + PERL_REVISION, PERL_VERSION); + perl_eval_pv("package Irssi::Core;" + /* https://github.com/Perl/perl5/issues/21746 */ + "if ( $] == $] )" + "{" + "require POSIX;" + "POSIX::setlocale(&POSIX::LC_ALL, \"\");" + "}" + "1;", + TRUE); + } g_free(code); - g_free(use_code); + g_free(use_code); } /* Destroy all perl scripts and deinitialize perl interpreter */ @@ -476,7 +498,7 @@ void perl_core_init(void) char **argv = perl_args; PERL_SYS_INIT3(&argc, &argv, &environ); - print_script_errors = 1; + print_script_errors = 1; settings_add_str("perl", "perl_use_lib", PERL_USE_LIB); /*PL_perl_destruct_level = 1; - this crashes with some people.. */