about summary refs log tree commit homepage
path: root/ext/raindrops/extconf.rb
DateCommit message (Collapse)
2024-03-23treewide: future-proof frozen_string_literal changes
Once again Ruby seems ready to introduce more incompatibilities and force busywork upon maintainers[1]. In order to avoid incompatibilities in the future, I used the following Perl script to prepend `frozen_string_literal: false' to every Ruby file: use v5.12; use autodie; my $usage = 'perl /path/to/script <LIST_OF_RB_FILES>'; my $fsl = "# frozen_string_literal: false\n"; for my $f (@ARGV) { open my $fh, '<', $f; my $s = do { local $/; <$fh> } // die "read($f): $!"; next if $s =~ /^#\s*frozen_string_literal:/sm; # fsl must be after encoding: line if it exists: if ($s =~ s/^([ \t]*\#[ \t\-\*\#]+encoding:[^\n]+\n)/$1$fsl/sm # or after the shebang || $s =~ s/^(#![^\n]+\n)/$1$fsl/ # or after embedded switches in rackup files: || ($f =~ /\.ru$/ && $s =~ s/^(#\\[^\n]+\n)/$1$fsl/) # or prepend as a last resort: || (substr($s, 0, 0) = $fsl)) { open $fh, '>', $f; print $fh $s; close $fh; } } Somebody interested will have to go through every Ruby source file and enable frozen_string_literal once they've thoroughly verified it's safe to do so. [1] https://bugs.ruby-lang.org/issues/20205
2024-01-15extconf: disable optimization to speed up checks by ~3%
Compiler optimization isn't useful when doing portability checks for any of the things we care about.
2023-06-11Improve compatibility with Ruby 3.3+
Prefer to use `rb_io_descriptor` in my_fileno if it is available. This function was introduced in Ruby 3.1. Ruby 3.3 will deprecate access to all internal fields of `rb_io_t`. This change is necessary for compatibility with the current ruby.git master: https://bugs.ruby-lang.org/issues/19057#note-17
2020-01-06ext/raindrops/extconf: fix cflags reset on ancient CC
Oops, but I guess nobody uses i386 anymore...
2017-04-26Ruby thread compatibility updates
Drop vestigial Ruby 1.8 bits, and start using rb_thread_call_without_gvl on modern Rubies.
2017-03-17define Raindrops::TCP hash for TCP states freebsd
FreeBSD not only uses different values than Linux for TCP states, but different names, too. To ease writing portable code between the OSes, do more CPP metaprogramming via extconf.rb and define a common hash supported on both OSes. Putting all this in a hash allows for easy dumping and mapping in an OS-neutral way, since the actual TCP states are OS-independent.
2017-03-17tcp_info: support this struct under FreeBSD
Of course these fields are not portable between Linux and FreeBSD, but they should remain ABI-compatible for future versions of each OS. Tested on FreeBSD 10.3-RELEASE i386 TCP state names will be another problem...
2016-02-24doc: update URLs and references
Neither the GCC nor libatomic_ops URLs are valid, anymore. Update them to the latest versions and ensure the URLs themselves are visible in documentation as links to external sites. Additionally, the current cgit installation on bogomips.org will soon be replaced by a CSS-free web-based viewer. Also, correct the reference to "LGPL-2.1+" while we're at it and add references to the nntp:// mail archives.
2015-07-14check for the existence of linux/tcp.h
The linux/tcp.h header may not exist on alternative libc implementations such as musl. Noticed-by: Doug Forster <doug.forster@gmail.com>
2013-08-28extconf: try harder for gcc atomics in i386-configured systems
__sync_lock_test_and_set might not be the correct check after all, but __sync_val_compare_and_swap probably is. At least this is what Ruby 2.0.0 uses to check and attempt -march=i486 on.
2012-05-10extconf: better check for GCC atomic builtins
Attempting to test for CMPXCHG on x86 should allow this check to fail on i386 systems. We also won't need try_run as a result, enabling cross-compilation. The configure.in check in Ruby 1.9.3 does something similar and that's far more widely used than raindrops is.
2011-06-24remove _XOPEN_SOURCE #define for FreeBSD
This appears to cause __BSD_VISIBLE to not be defined, which is required for MAP_ANON to be visible in sys/mman.h Thanks for Aleksandar Simic for the hint and Troex Nevelin for the bug report!
2011-03-21extconf: use dir_config properly
dir_config may be used to build for libatomic_ops. The previous use of dir_config was from back when I didn't understand mkmf. This means you can now use: gem install raindrops -- --with-atomic_ops-dir=/usr/local If you libatomic_ops library was installed in /usr/local instead of /usr
2011-03-21extconf: remove check for rb_struct_alloc_noinit()
We no longer use it.
2011-03-21inet_diag: use rb_thread_io_blocking_region under 1.9.3dev
It can detect cross-thread close() calls
2011-03-11support for Raindrops#size= and Raindrops#evaporate!
This allows limited resizing of the Raindrops memory area since we always over-allocate due to the required page aligment for mmap. It would be nice if mremap() worked with MAP_SHARED, but it does not and triggers a bus error when attempting to access the new area. ref: https://bugzilla.kernel.org/show_bug.cgi?id=8691
2010-09-25force -march=i486 where GCC is targeted for i386
Nobody uses i386 anymore (especially not with Ruby!), but some systems like FreeBSD 7.0 still target GCC at i386 by default, so we force GCC to use a slightly more modern instruction set and allow it to use atomic builtins.
2010-09-18allow using libatomic_ops headers from HP
This allows non-GCC 4.x users to experience Raindrops.
2010-04-07initial