Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package rubygem-ffi for openSUSE:Factory checked in at 2021-03-16 15:42:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-ffi (Old) and /work/SRC/openSUSE:Factory/.rubygem-ffi.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-ffi" Tue Mar 16 15:42:32 2021 rev:38 rq:879044 version:1.15.0 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-ffi/rubygem-ffi.changes 2020-12-26 21:11:40.913613834 +0100 +++ /work/SRC/openSUSE:Factory/.rubygem-ffi.new.2401/rubygem-ffi.changes 2021-03-16 15:43:46.856977318 +0100 @@ -1,0 +2,24 @@ +Mon Mar 15 04:35:12 UTC 2021 - Manuel Schnitzer <mschnit...@suse.com> + +- updated to version 1.15.0 + + Fixed: + * Fix MSVC build + * Fix async callbacks in conjunction with fork(). #884 + + Added: + * Allow to pass callbacks in varargs. #885 + * Name the threads for FFI callback dispatcher and async thread calls for easier debugging. #883 + The name can be retrieved by Thread.name and is shown by Thread.list.inspect etc. + Even gdb shows the thread name on supported operating systems. + * Add types.conf for powerpc64le-linux + * Add types.conf for riscv64-linux + * More release automation of ffi gems + + Changed: + * Switch from rubygems-tasks to bundler/gem_helper + + Removed: + * Remove unused VariadicInvoker#init + +------------------------------------------------------------------- Old: ---- ffi-1.14.2.gem New: ---- ffi-1.15.0.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-ffi.spec ++++++ --- /var/tmp/diff_new_pack.vnc8nG/_old 2021-03-16 15:43:47.320978060 +0100 +++ /var/tmp/diff_new_pack.vnc8nG/_new 2021-03-16 15:43:47.320978060 +0100 @@ -1,7 +1,7 @@ # # spec file for package rubygem-ffi # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -24,7 +24,7 @@ # Name: rubygem-ffi -Version: 1.14.2 +Version: 1.15.0 Release: 0 %define mod_name ffi %define mod_full_name %{mod_name}-%{version} ++++++ ffi-1.14.2.gem -> ffi-1.15.0.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md --- old/CHANGELOG.md 2020-12-21 15:19:26.000000000 +0100 +++ new/CHANGELOG.md 2021-03-05 22:34:39.000000000 +0100 @@ -1,3 +1,26 @@ +1.15.0 / 2021-03-05 +------------------- + +Fixed: +* Fix MSVC build +* Fix async callbacks in conjunction with fork(). #884 + +Added: +* Allow to pass callbacks in varargs. #885 +* Name the threads for FFI callback dispatcher and async thread calls for easier debugging. #883 + The name can be retrieved by Thread.name and is shown by Thread.list.inspect etc. + Even gdb shows the thread name on supported operating systems. +* Add types.conf for powerpc64le-linux +* Add types.conf for riscv64-linux +* More release automation of ffi gems + +Changed: +* Switch from rubygems-tasks to bundler/gem_helper + +Removed: +* Remove unused VariadicInvoker#init + + 1.14.2 / 2020-12-21 ------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Gemfile new/Gemfile --- old/Gemfile 2020-12-21 15:19:26.000000000 +0100 +++ new/Gemfile 2021-03-05 22:34:39.000000000 +0100 @@ -5,10 +5,7 @@ gem 'rake-compiler', '~> 1.0.3' gem 'rake-compiler-dock', '~> 1.0' gem 'rspec', '~> 3.0' - # irb is a dependency of rubygems-tasks 0.2.5. - # irb versions > 1.1.1 depend on reline, - # which sometimes causes 'bundle install' to fail on Ruby <= 2.4: https://github.com/rubygems/rubygems/issues/3463 - gem 'rubygems-tasks', '>= 0.2', '< 0.2.5', :require => 'rubygems/tasks' + gem 'bundler', '~> 2.0' end group :doc do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Rakefile new/Rakefile --- old/Rakefile 2020-12-21 15:19:26.000000000 +0100 +++ new/Rakefile 2021-03-05 22:34:39.000000000 +0100 @@ -1,20 +1,17 @@ -require 'rubygems/tasks' require 'rbconfig' -require 'rake/clean' -require_relative "lib/ffi/version" - require 'date' require 'fileutils' require 'rbconfig' require 'rspec/core/rake_task' require 'rubygems/package_task' +require 'rake/extensiontask' +require_relative "lib/ffi/version" +require_relative "rakelib/ffi_gem_helper" BUILD_DIR = "build" BUILD_EXT_DIR = File.join(BUILD_DIR, "#{RbConfig::CONFIG['arch']}", 'ffi_c', RUBY_VERSION) -def gem_spec - @gem_spec ||= Gem::Specification.load('ffi.gemspec') -end +gem_spec = Bundler.load_gemspec('ffi.gemspec') RSpec::Core::RakeTask.new(:spec => :compile) do |config| config.rspec_opts = YAML.load_file 'spec/spec.opts' @@ -87,6 +84,10 @@ task 'gem:java' => 'java:gem' +FfiGemHelper.install_tasks +# Register windows gems to be pushed to rubygems.org +Bundler::GemHelper.instance.cross_platforms = %w[x86-mingw32 x64-mingw32] + if RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'rbx' require 'rake/extensiontask' Rake::ExtensionTask.new('ffi_c', gem_spec) do |ext| @@ -94,21 +95,11 @@ # ext.lib_dir = BUILD_DIR # put binaries into this folder. ext.tmp_dir = BUILD_DIR # temporary folder used during compilation. ext.cross_compile = true # enable cross compilation (requires cross compile toolchain) - ext.cross_platform = %w[i386-mingw32 x64-mingw32] # forces the Windows platform instead of the default one + ext.cross_platform = Bundler::GemHelper.instance.cross_platforms ext.cross_compiling do |spec| spec.files.reject! { |path| File.fnmatch?('ext/*', path) } end - end - - # To reduce the gem file size strip mingw32 dlls before packaging - ENV['RUBY_CC_VERSION'].to_s.split(':').each do |ruby_version| - task "build/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" do |t| - sh "i686-w64-mingw32-strip -S build/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" - end - task "build/x64-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" do |t| - sh "x86_64-w64-mingw32-strip -S build/x64-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" - end end else task :compile do @@ -116,6 +107,7 @@ end end + desc "build a windows gem without all the ceremony" task "gem:windows" do require "rake_compiler_dock" @@ -132,7 +124,7 @@ LIBFFI_GIT_FILES = `git --git-dir ext/ffi_c/libffi/.git ls-files -z`.split("\x0") -# Generate files in gemspec but not in libffi's git repo by running autogen.sh +# Generate files which are in the gemspec but not in libffi's git repo by running autogen.sh gem_spec.files.select do |f| f =~ /ext\/ffi_c\/libffi\/(.*)/ && !LIBFFI_GIT_FILES.include?($1) end.each do |f| @@ -148,6 +140,11 @@ end end +# Make sure we have all gemspec files before packaging +task :build => gem_spec.files +task :gem => :build + + require_relative "lib/ffi/platform" types_conf = File.expand_path(File.join(FFI::Platform::CONF_DIR, 'types.conf')) logfile = File.join(File.dirname(__FILE__), 'types_log') @@ -168,10 +165,6 @@ desc "Create or update type information for platform #{FFI::Platform::NAME}" task :types_conf => types_conf -Gem::Tasks.new do |t| - t.scm.tag.format = '%s' -end - begin require 'yard' Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/Call.c new/ext/ffi_c/Call.c --- old/ext/ffi_c/Call.c 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/Call.c 2021-03-05 22:34:39.000000000 +0100 @@ -310,7 +310,6 @@ case NATIVE_FUNCTION: - case NATIVE_CALLBACK: if (callbackProc != Qnil) { param->ptr = callback_param(callbackProc, callbackParameters[cbidx++]); } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/Function.c new/ext/ffi_c/Function.c --- old/ext/ffi_c/Function.c 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/Function.c 2021-03-05 22:34:39.000000000 +0100 @@ -282,6 +282,17 @@ return callback; } +#if !defined(_WIN32) && defined(DEFER_ASYNC_CALLBACK) +static void +after_fork_callback(void) +{ + /* Ensure that a new dispatcher thread is started in a forked process */ + async_cb_thread = Qnil; + pthread_mutex_init(&async_cb_mutex, NULL); + pthread_cond_init(&async_cb_cond, NULL); +} +#endif + static VALUE function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc) { @@ -309,7 +320,16 @@ #if defined(DEFER_ASYNC_CALLBACK) if (async_cb_thread == Qnil) { + +#if !defined(_WIN32) + if( pthread_atfork(NULL, NULL, after_fork_callback) ){ + rb_warn("FFI: unable to register fork callback"); + } +#endif + async_cb_thread = rb_thread_create(async_cb_event, NULL); + /* Name thread, for better debugging */ + rb_funcall(async_cb_thread, rb_intern("name="), 1, rb_str_new2("FFI Callback Dispatcher")); } #endif @@ -525,7 +545,9 @@ rb_thread_call_without_gvl(async_cb_wait, &w, async_cb_stop, &w); if (w.cb != NULL) { /* Start up a new ruby thread to run the ruby callback */ - rb_thread_create(async_cb_call, w.cb); + VALUE new_thread = rb_thread_create(async_cb_call, w.cb); + /* Name thread, for better debugging */ + rb_funcall(new_thread, rb_intern("name="), 1, rb_str_new2("FFI Callback Runner")); } } @@ -711,7 +733,6 @@ break; case NATIVE_FUNCTION: - case NATIVE_CALLBACK: case NATIVE_STRUCT: param = rbffi_NativeValue_ToRuby(paramType, rbParamType, parameters[i]); break; @@ -787,7 +808,6 @@ break; case NATIVE_FUNCTION: - case NATIVE_CALLBACK: if (TYPE(rbReturnValue) == T_DATA && rb_obj_is_kind_of(rbReturnValue, rbffi_PointerClass)) { *((void **) retval) = ((AbstractMemory *) DATA_PTR(rbReturnValue))->address; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/Function.h new/ext/ffi_c/Function.h --- old/ext/ffi_c/Function.h 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/Function.h 2021-03-05 22:34:39.000000000 +0100 @@ -34,11 +34,7 @@ extern "C" { #endif -#ifndef _MSC_VER # include <stdbool.h> -#else -# include "win32/stdbool.h" -#endif #include <ffi.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/MemoryPointer.h new/ext/ffi_c/MemoryPointer.h --- old/ext/ffi_c/MemoryPointer.h 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/MemoryPointer.h 2021-03-05 22:34:39.000000000 +0100 @@ -31,11 +31,7 @@ #ifndef RBFFI_MEMORYPOINTER_H #define RBFFI_MEMORYPOINTER_H -#ifndef _MSC_VER # include <stdbool.h> -#else -# include "win32/stdbool.h" -#endif #include <ruby.h> #ifdef __cplusplus diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/Pointer.h new/ext/ffi_c/Pointer.h --- old/ext/ffi_c/Pointer.h 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/Pointer.h 2021-03-05 22:34:39.000000000 +0100 @@ -30,11 +30,7 @@ #ifndef RBFFI_POINTER_H #define RBFFI_POINTER_H -#ifndef _MSC_VER # include <stdbool.h> -#else -# include "win32/stdbool.h" -#endif #ifdef __cplusplus extern "C" { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/StructLayout.c new/ext/ffi_c/StructLayout.c --- old/ext/ffi_c/StructLayout.c 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/StructLayout.c 2021-03-05 22:34:39.000000000 +0100 @@ -123,7 +123,6 @@ switch (field->type->nativeType == NATIVE_MAPPED ? ((MappedType *) field->type)->type->nativeType : field->type->nativeType) { case NATIVE_FUNCTION: - case NATIVE_CALLBACK: case NATIVE_POINTER: field->referenceRequired = true; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/Types.c new/ext/ffi_c/Types.c --- old/ext/ffi_c/Types.c 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/Types.c 2021-03-05 22:34:39.000000000 +0100 @@ -85,10 +85,9 @@ return rbffi_Pointer_NewInstance(*(void **) ptr); case NATIVE_BOOL: return ((unsigned char) *(ffi_arg *) ptr) ? Qtrue : Qfalse; - - case NATIVE_FUNCTION: - case NATIVE_CALLBACK: { - return *(void **) ptr != NULL + + case NATIVE_FUNCTION: { + return *(void **) ptr != NULL ? rbffi_Function_NewInstance(rbType, rbffi_Pointer_NewInstance(*(void **) ptr)) : Qnil; } @@ -116,15 +115,15 @@ values[0] = rbffi_NativeValue_ToRuby(m->type, m->rbType, ptr); values[1] = Qnil; - + rbReturnValue = rb_funcall2(m->rbConverter, id_from_native, 2, values); RB_GC_GUARD(values[0]); RB_GC_GUARD(rbType); - + return rbReturnValue; } - + default: rb_raise(rb_eRuntimeError, "Unknown type: %d", type->nativeType); return Qnil; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/Types.h new/ext/ffi_c/Types.h --- old/ext/ffi_c/Types.h 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/Types.h 2021-03-05 22:34:39.000000000 +0100 @@ -51,20 +51,19 @@ NATIVE_FLOAT64, NATIVE_LONGDOUBLE, NATIVE_POINTER, - NATIVE_CALLBACK, NATIVE_FUNCTION, NATIVE_BUFFER_IN, NATIVE_BUFFER_OUT, NATIVE_BUFFER_INOUT, NATIVE_CHAR_ARRAY, NATIVE_BOOL, - + /** An immutable string. Nul terminated, but only copies in to the native function */ NATIVE_STRING, - + /** The function takes a variable number of arguments */ NATIVE_VARARGS, - + /** Struct-by-value param or result */ NATIVE_STRUCT, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/Variadic.c new/ext/ffi_c/Variadic.c --- old/ext/ffi_c/Variadic.c 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/Variadic.c 2021-03-05 22:34:39.000000000 +0100 @@ -168,7 +168,8 @@ ffi_type* ffiReturnType; Type** paramTypes; VALUE* argv; - int paramCount = 0, fixedCount = 0, i; + VALUE* callbackParameters; + int paramCount = 0, fixedCount = 0, callbackCount = 0, i; ffi_status ffiStatus; rbffi_frame_t frame = { 0 }; @@ -182,6 +183,7 @@ params = ALLOCA_N(FFIStorage, paramCount); ffiValues = ALLOCA_N(void*, paramCount); argv = ALLOCA_N(VALUE, paramCount); + callbackParameters = ALLOCA_N(VALUE, paramCount); retval = alloca(MAX(invoker->returnType->ffiType->size, FFI_SIZEOF_ARG)); for (i = 0; i < paramCount; ++i) { @@ -211,6 +213,14 @@ Data_Get_Struct(rbType, Type, paramTypes[i]); break; + case NATIVE_FUNCTION: + if (!rb_obj_is_kind_of(rbType, rbffi_FunctionTypeClass)) { + VALUE typeName = rb_funcall2(rbType, rb_intern("inspect"), 0, NULL); + rb_raise(rb_eTypeError, "Incorrect parameter type (%s)", RSTRING_PTR(typeName)); + } + callbackParameters[callbackCount++] = rbType; + break; + default: break; } @@ -248,7 +258,7 @@ } rbffi_SetupCallParams(paramCount, argv, -1, paramTypes, params, - ffiValues, NULL, 0, invoker->rbEnums); + ffiValues, callbackParameters, callbackCount, invoker->rbEnums); rbffi_frame_push(&frame); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/libffi/Makefile.in new/ext/ffi_c/libffi/Makefile.in --- old/ext/ffi_c/libffi/Makefile.in 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/libffi/Makefile.in 2021-03-05 22:34:39.000000000 +0100 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -305,8 +305,8 @@ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - fficonfig.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)fficonfig.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1552,10 +1552,6 @@ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1598,8 +1594,6 @@ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -2028,21 +2022,20 @@ clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-toolexeclibLTLIBRARIES cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-data install-data-am \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-pkgconfigDATA \ - install-ps install-ps-am install-strip \ - install-toolexeclibLTLIBRARIES installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am uninstall-pkgconfigDATA \ - uninstall-toolexeclibLTLIBRARIES + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip install-toolexeclibLTLIBRARIES \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-pkgconfigDATA uninstall-toolexeclibLTLIBRARIES .PRECIOUS: Makefile diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/libffi/configure new/ext/ffi_c/libffi/configure --- old/ext/ffi_c/libffi/configure 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/libffi/configure 2021-03-05 22:34:39.000000000 +0100 @@ -7174,8 +7174,11 @@ test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm - $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5 - if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" @@ -9535,12 +9538,6 @@ lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; - # flang / f18. f95 an alias for gfortran or flang on Debian - flang* | f18* | f95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) @@ -13483,7 +13480,7 @@ # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no @@ -13975,7 +13972,7 @@ # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then @@ -14040,7 +14037,7 @@ # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then @@ -14379,7 +14376,7 @@ # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support @@ -14463,7 +14460,7 @@ # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. @@ -14474,7 +14471,7 @@ # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' @@ -21282,9 +21279,7 @@ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/libffi/doc/Makefile.in new/ext/ffi_c/libffi/doc/Makefile.in --- old/ext/ffi_c/libffi/doc/Makefile.in 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/libffi/doc/Makefile.in 2021-03-05 22:34:39.000000000 +0100 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/libffi/include/Makefile.in new/ext/ffi_c/libffi/include/Makefile.in --- old/ext/ffi_c/libffi/include/Makefile.in 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/libffi/include/Makefile.in 2021-03-05 22:34:39.000000000 +0100 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/libffi/install-sh new/ext/ffi_c/libffi/install-sh --- old/ext/ffi_c/libffi/install-sh 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/libffi/install-sh 2021-03-05 22:34:39.000000000 +0100 @@ -451,18 +451,7 @@ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. - (umask $cp_umask && - { test -z "$stripcmd" || { - # Create $dsttmp read-write so that cp doesn't create it read-only, - # which would cause strip to fail. - if test -z "$doit"; then - : >"$dsttmp" # No need to fork-exec 'touch'. - else - $doit touch "$dsttmp" - fi - } - } && - $doit_exec $cpprog "$src" "$dsttmp") && + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/libffi/man/Makefile.in new/ext/ffi_c/libffi/man/Makefile.in --- old/ext/ffi_c/libffi/man/Makefile.in 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/libffi/man/Makefile.in 2021-03-05 22:34:39.000000000 +0100 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/libffi/missing new/ext/ffi_c/libffi/missing --- old/ext/ffi_c/libffi/missing 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/libffi/missing 2021-03-05 22:34:39.000000000 +0100 @@ -3,7 +3,7 @@ scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <pin...@iro.umontreal.ca>, 1996. # This program is free software; you can redistribute it and/or modify diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/libffi/testsuite/Makefile.in new/ext/ffi_c/libffi/testsuite/Makefile.in --- old/ext/ffi_c/libffi/testsuite/Makefile.in 2020-12-21 15:19:26.000000000 +0100 +++ new/ext/ffi_c/libffi/testsuite/Makefile.in 2021-03-05 22:34:39.000000000 +0100 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/platform/powerpc64le-linux/types.conf new/lib/ffi/platform/powerpc64le-linux/types.conf --- old/lib/ffi/platform/powerpc64le-linux/types.conf 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/ffi/platform/powerpc64le-linux/types.conf 2021-03-05 22:34:39.000000000 +0100 @@ -0,0 +1,100 @@ +rbx.platform.typedef.*__caddr_t = char +rbx.platform.typedef.*__qaddr_t = long +rbx.platform.typedef.__blkcnt64_t = long +rbx.platform.typedef.__blkcnt_t = long +rbx.platform.typedef.__blksize_t = long +rbx.platform.typedef.__clock_t = long +rbx.platform.typedef.__clockid_t = int +rbx.platform.typedef.__daddr_t = int +rbx.platform.typedef.__dev_t = ulong +rbx.platform.typedef.__fd_mask = long +rbx.platform.typedef.__fsblkcnt64_t = ulong +rbx.platform.typedef.__fsblkcnt_t = ulong +rbx.platform.typedef.__fsfilcnt64_t = ulong +rbx.platform.typedef.__fsfilcnt_t = ulong +rbx.platform.typedef.__gid_t = uint +rbx.platform.typedef.__id_t = uint +rbx.platform.typedef.__ino64_t = ulong +rbx.platform.typedef.__ino_t = ulong +rbx.platform.typedef.__int16_t = short +rbx.platform.typedef.__int32_t = int +rbx.platform.typedef.__int64_t = long +rbx.platform.typedef.__int8_t = char +rbx.platform.typedef.__intptr_t = long +rbx.platform.typedef.__key_t = int +rbx.platform.typedef.__loff_t = long +rbx.platform.typedef.__mode_t = uint +rbx.platform.typedef.__nlink_t = ulong +rbx.platform.typedef.__off64_t = long +rbx.platform.typedef.__off_t = long +rbx.platform.typedef.__pid_t = int +rbx.platform.typedef.__priority_which_t = int +rbx.platform.typedef.__quad_t = long +rbx.platform.typedef.__rlim64_t = ulong +rbx.platform.typedef.__rlim_t = ulong +rbx.platform.typedef.__rlimit_resource_t = int +rbx.platform.typedef.__rusage_who_t = int +rbx.platform.typedef.__sig_atomic_t = int +rbx.platform.typedef.__socklen_t = uint +rbx.platform.typedef.__ssize_t = long +rbx.platform.typedef.__suseconds_t = long +rbx.platform.typedef.__swblk_t = long +rbx.platform.typedef.__time_t = long +rbx.platform.typedef.__timer_t = pointer +rbx.platform.typedef.__u_char = uchar +rbx.platform.typedef.__u_int = uint +rbx.platform.typedef.__u_long = ulong +rbx.platform.typedef.__u_quad_t = ulong +rbx.platform.typedef.__u_short = ushort +rbx.platform.typedef.__uid_t = uint +rbx.platform.typedef.__uint16_t = ushort +rbx.platform.typedef.__uint32_t = uint +rbx.platform.typedef.__uint64_t = ulong +rbx.platform.typedef.__uint8_t = uchar +rbx.platform.typedef.__useconds_t = uint +rbx.platform.typedef.blkcnt_t = long +rbx.platform.typedef.clockid_t = int +rbx.platform.typedef.daddr_t = int +rbx.platform.typedef.dev_t = ulong +rbx.platform.typedef.fd_mask = long +rbx.platform.typedef.fsblkcnt_t = ulong +rbx.platform.typedef.fsfilcnt_t = ulong +rbx.platform.typedef.gid_t = uint +rbx.platform.typedef.id_t = uint +rbx.platform.typedef.ino_t = ulong +rbx.platform.typedef.int16_t = short +rbx.platform.typedef.int32_t = int +rbx.platform.typedef.int64_t = long +rbx.platform.typedef.int8_t = char +rbx.platform.typedef.key_t = int +rbx.platform.typedef.loff_t = long +rbx.platform.typedef.mode_t = uint +rbx.platform.typedef.nlink_t = ulong +rbx.platform.typedef.off_t = long +rbx.platform.typedef.pid_t = int +rbx.platform.typedef.pthread_key_t = uint +rbx.platform.typedef.pthread_once_t = int +rbx.platform.typedef.pthread_t = ulong +rbx.platform.typedef.quad_t = long +rbx.platform.typedef.register_t = long +rbx.platform.typedef.rlim_t = ulong +rbx.platform.typedef.sa_family_t = ushort +rbx.platform.typedef.size_t = ulong +rbx.platform.typedef.socklen_t = uint +rbx.platform.typedef.ssize_t = long +rbx.platform.typedef.suseconds_t = long +rbx.platform.typedef.time_t = long +rbx.platform.typedef.timer_t = pointer +rbx.platform.typedef.u_char = uchar +rbx.platform.typedef.u_int = uint +rbx.platform.typedef.u_int16_t = ushort +rbx.platform.typedef.u_int32_t = uint +rbx.platform.typedef.u_int64_t = ulong +rbx.platform.typedef.u_int8_t = uchar +rbx.platform.typedef.u_long = ulong +rbx.platform.typedef.u_quad_t = ulong +rbx.platform.typedef.u_short = ushort +rbx.platform.typedef.uid_t = uint +rbx.platform.typedef.uint = uint +rbx.platform.typedef.ulong = ulong +rbx.platform.typedef.ushort = ushort diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/platform/riscv64-linux/types.conf new/lib/ffi/platform/riscv64-linux/types.conf --- old/lib/ffi/platform/riscv64-linux/types.conf 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/ffi/platform/riscv64-linux/types.conf 2021-03-05 22:34:39.000000000 +0100 @@ -0,0 +1,104 @@ +rbx.platform.typedef.*__caddr_t = char +rbx.platform.typedef.*__qaddr_t = long +rbx.platform.typedef.__blkcnt64_t = long +rbx.platform.typedef.__blkcnt_t = long +rbx.platform.typedef.__blksize_t = int +rbx.platform.typedef.__clock_t = long +rbx.platform.typedef.__clockid_t = int +rbx.platform.typedef.__daddr_t = int +rbx.platform.typedef.__dev_t = ulong +rbx.platform.typedef.__fd_mask = long +rbx.platform.typedef.__fsblkcnt64_t = ulong +rbx.platform.typedef.__fsblkcnt_t = ulong +rbx.platform.typedef.__fsfilcnt64_t = ulong +rbx.platform.typedef.__fsfilcnt_t = ulong +rbx.platform.typedef.__fsword_t = long +rbx.platform.typedef.__gid_t = uint +rbx.platform.typedef.__id_t = uint +rbx.platform.typedef.__ino64_t = ulong +rbx.platform.typedef.__ino_t = ulong +rbx.platform.typedef.__int16_t = short +rbx.platform.typedef.__int32_t = int +rbx.platform.typedef.__int64_t = long +rbx.platform.typedef.__int8_t = char +rbx.platform.typedef.__intptr_t = long +rbx.platform.typedef.__key_t = int +rbx.platform.typedef.__loff_t = long +rbx.platform.typedef.__mode_t = uint +rbx.platform.typedef.__nlink_t = uint +rbx.platform.typedef.__off64_t = long +rbx.platform.typedef.__off_t = long +rbx.platform.typedef.__pid_t = int +rbx.platform.typedef.__priority_which_t = int +rbx.platform.typedef.__quad_t = long +rbx.platform.typedef.__rlim64_t = ulong +rbx.platform.typedef.__rlim_t = ulong +rbx.platform.typedef.__rlimit_resource_t = int +rbx.platform.typedef.__rusage_who_t = int +rbx.platform.typedef.__sig_atomic_t = int +rbx.platform.typedef.__socklen_t = uint +rbx.platform.typedef.__ssize_t = long +rbx.platform.typedef.__suseconds_t = long +rbx.platform.typedef.__syscall_slong_t = long +rbx.platform.typedef.__syscall_ulong_t = ulong +rbx.platform.typedef.__time_t = long +rbx.platform.typedef.__timer_t = pointer +rbx.platform.typedef.__u_char = uchar +rbx.platform.typedef.__u_int = uint +rbx.platform.typedef.__u_long = ulong +rbx.platform.typedef.__u_quad_t = ulong +rbx.platform.typedef.__u_short = ushort +rbx.platform.typedef.__uid_t = uint +rbx.platform.typedef.__uint16_t = ushort +rbx.platform.typedef.__uint32_t = uint +rbx.platform.typedef.__uint64_t = ulong +rbx.platform.typedef.__uint8_t = uchar +rbx.platform.typedef.__useconds_t = uint +rbx.platform.typedef.blkcnt_t = long +rbx.platform.typedef.blksize_t = int +rbx.platform.typedef.clock_t = long +rbx.platform.typedef.clockid_t = int +rbx.platform.typedef.daddr_t = int +rbx.platform.typedef.dev_t = ulong +rbx.platform.typedef.fd_mask = long +rbx.platform.typedef.fsblkcnt_t = ulong +rbx.platform.typedef.fsfilcnt_t = ulong +rbx.platform.typedef.gid_t = uint +rbx.platform.typedef.id_t = uint +rbx.platform.typedef.ino_t = ulong +rbx.platform.typedef.int16_t = short +rbx.platform.typedef.int32_t = int +rbx.platform.typedef.int64_t = long +rbx.platform.typedef.int8_t = char +rbx.platform.typedef.key_t = int +rbx.platform.typedef.loff_t = long +rbx.platform.typedef.mode_t = uint +rbx.platform.typedef.nlink_t = uint +rbx.platform.typedef.off_t = long +rbx.platform.typedef.pid_t = int +rbx.platform.typedef.pthread_key_t = uint +rbx.platform.typedef.pthread_once_t = int +rbx.platform.typedef.pthread_t = ulong +rbx.platform.typedef.quad_t = long +rbx.platform.typedef.register_t = long +rbx.platform.typedef.rlim_t = ulong +rbx.platform.typedef.sa_family_t = ushort +rbx.platform.typedef.size_t = ulong +rbx.platform.typedef.socklen_t = uint +rbx.platform.typedef.ssize_t = long +rbx.platform.typedef.suseconds_t = long +rbx.platform.typedef.time_t = long +rbx.platform.typedef.timer_t = pointer +rbx.platform.typedef.u_char = uchar +rbx.platform.typedef.u_int = uint +rbx.platform.typedef.u_int16_t = ushort +rbx.platform.typedef.u_int32_t = uint +rbx.platform.typedef.u_int64_t = ulong +rbx.platform.typedef.u_int8_t = uchar +rbx.platform.typedef.u_long = ulong +rbx.platform.typedef.u_quad_t = ulong +rbx.platform.typedef.u_short = ushort +rbx.platform.typedef.uid_t = uint +rbx.platform.typedef.uint = uint +rbx.platform.typedef.ulong = ulong +rbx.platform.typedef.ushort = ushort diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/variadic.rb new/lib/ffi/variadic.rb --- old/lib/ffi/variadic.rb 2020-12-21 15:19:26.000000000 +0100 +++ new/lib/ffi/variadic.rb 2021-03-05 22:34:39.000000000 +0100 @@ -32,15 +32,6 @@ module FFI class VariadicInvoker - def init(arg_types, type_map) - @fixed = Array.new - @type_map = type_map - arg_types.each_with_index do |type, i| - @fixed << type unless type == Type::VARARGS - end - end - - def call(*args, &block) param_types = Array.new(@fixed) param_values = Array.new diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/version.rb new/lib/ffi/version.rb --- old/lib/ffi/version.rb 2020-12-21 15:19:26.000000000 +0100 +++ new/lib/ffi/version.rb 2021-03-05 22:34:39.000000000 +0100 @@ -1,3 +1,3 @@ module FFI - VERSION = '1.14.2' + VERSION = '1.15.0' end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2020-12-21 15:19:26.000000000 +0100 +++ new/metadata 2021-03-05 22:34:39.000000000 +0100 @@ -1,14 +1,14 @@ --- !ruby/object:Gem::Specification name: ffi version: !ruby/object:Gem::Version - version: 1.14.2 + version: 1.15.0 platform: ruby authors: - Wayne Meissner autorequire: bindir: bin cert_chain: [] -date: 2020-12-21 00:00:00.000000000 Z +date: 2021-03-05 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: rake @@ -613,6 +613,8 @@ - lib/ffi/platform/powerpc-linux/types.conf - lib/ffi/platform/powerpc-openbsd/types.conf - lib/ffi/platform/powerpc64-linux/types.conf +- lib/ffi/platform/powerpc64le-linux/types.conf +- lib/ffi/platform/riscv64-linux/types.conf - lib/ffi/platform/s390-linux/types.conf - lib/ffi/platform/s390x-linux/types.conf - lib/ffi/platform/sparc-linux/types.conf @@ -646,6 +648,7 @@ - lib/ffi/union.rb - lib/ffi/variadic.rb - lib/ffi/version.rb +- rakelib/ffi_gem_helper.rb - samples/getlogin.rb - samples/getpid.rb - samples/gettimeofday.rb @@ -680,7 +683,7 @@ - !ruby/object:Gem::Version version: '0' requirements: [] -rubygems_version: 3.1.4 +rubygems_version: 3.2.3 signing_key: specification_version: 4 summary: Ruby FFI diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rakelib/ffi_gem_helper.rb new/rakelib/ffi_gem_helper.rb --- old/rakelib/ffi_gem_helper.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/rakelib/ffi_gem_helper.rb 2021-03-05 22:34:39.000000000 +0100 @@ -0,0 +1,65 @@ +require 'bundler' +require 'bundler/gem_helper' + +class FfiGemHelper < Bundler::GemHelper + attr_accessor :cross_platforms + + def install + super + + task "release:guard_clean" => ["release:update_history"] + + task "release:update_history" do + update_history + end + + task "release:rubygem_push" => ["gem:windows", "gem:java"] + end + + def hfile + "CHANGELOG.md" + end + + def headline + '([^\w]*)(\d+\.\d+\.\d+(?:\.\w+)?)([^\w]+)([2Y][0Y][0-9Y][0-9Y]-[0-1M][0-9M]-[0-3D][0-9D])([^\w]*|$)' + end + + def reldate + Time.now.strftime("%Y-%m-%d") + end + + def update_history + hin = File.read(hfile) + hout = hin.sub(/#{headline}/) do + raise "#{hfile} isn't up-to-date for version #{version}" unless $2==version.to_s + $1 + $2 + $3 + reldate + $5 + end + if hout != hin + Bundler.ui.confirm "Updating #{hfile} for release." + File.write(hfile, hout) + Rake::FileUtilsExt.sh "git", "commit", hfile, "-m", "Update release date in #{hfile}" + end + end + + def tag_version + Bundler.ui.confirm "Tag release with annotation:" + m = File.read(hfile).match(/(?<annotation>#{headline}.*?)#{headline}/m) || raise("Unable to find release notes in #{hfile}") + Bundler.ui.info(m[:annotation].gsub(/^/, " ")) + IO.popen(["git", "tag", "--file=-", version_tag], "w") do |fd| + fd.write m[:annotation] + end + yield if block_given? + rescue + Bundler.ui.error "Untagging #{version_tag} due to error." + sh_with_code "git tag -d #{version_tag}" + raise + end + + def rubygem_push(path) + cross_platforms.each do |ruby_platform| + super(path.gsub(/\.gem\z/, "-#{ruby_platform}.gem")) + end + super(path.gsub(/\.gem\z/, "-java.gem")) + super(path) + end +end