qgroundcontrol: 4.4.2 -> 4.4.3 (#360956)
[NixPkgs.git] / pkgs / development / ruby-modules / gem-config / default.nix
blob0c34601fd7259e7c6e7a696bae77a2ba9362cf90
1 # The standard set of gems in nixpkgs including potential fixes.
3 # The gemset is derived from two points of entry:
4 # - An attrset describing a gem, including version, source and dependencies
5 #   This is just meta data, most probably automatically generated by a tool
6 #   like Bundix (https://github.com/aflatter/bundix).
7 #   {
8 #     name = "bundler";
9 #     version = "1.6.5";
10 #     sha256 = "1s4x0f5by9xs2y24jk6krq5ky7ffkzmxgr4z1nhdykdmpsi2zd0l";
11 #     dependencies = [ "rake" ];
12 #   }
13 # - An optional derivation that may override how the gem is built. For popular
14 #   gems that don't behave correctly, fixes are already provided in the form of
15 #   derivations.
17 # This separates "what to build" (the exact gem versions) from "how to build"
18 # (to make gems behave if necessary).
20 { lib, fetchurl, fetchpatch2, writeScript, ruby, libkrb5, libxml2, libxslt, python2, stdenv, which
21 , libiconv, postgresql, nodejs, clang, sqlite, zlib, imagemagick, lasem
22 , pkg-config , ncurses, xapian, gpgme, util-linux, tzdata, icu, libffi
23 , cmake, libssh2, openssl, openssl_1_1, libmysqlclient, git, perl, pcre2, gecode_3, curl
24 , libsodium, snappy, libossp_uuid, lxc, libpcap, xorg, gtk3, lerc, buildRubyGem
25 , cairo, expat, re2, rake, gobject-introspection, gdk-pixbuf, zeromq, czmq, graphicsmagick, libcxx
26 , file, libvirt, glib, vips, taglib, libopus, linux-pam, libidn, protobuf, fribidi, harfbuzz
27 , bison, flex, pango, python3, patchelf, binutils, freetds, wrapGAppsHook3, atk
28 , bundler, libsass, dart-sass, libexif, libselinux, libsepol, shared-mime-info, libthai, libdatrie
29 , CoreServices, DarwinTools, cctools, libtool, discount, exiv2, libepoxy, libxkbcommon, libmaxminddb, libyaml
30 , cargo, rustc, rustPlatform, libsysprof-capture
31 , autoSignDarwinBinariesHook
32 }@args:
34 let
35   rainbow_rake = buildRubyGem {
36     pname = "rake";
37     gemName = "rake";
38     source.sha256 = "01j8fc9bqjnrsxbppncai05h43315vmz9fwg28qdsgcjw9ck1d7n";
39     type = "gem";
40     version = "12.0.0";
41   };
45   ZenTest = attrs: {
46     meta.mainProgram = "zentest";
47   };
49   atk = attrs: {
50     dependencies = attrs.dependencies ++ [ "gobject-introspection" ];
51     nativeBuildInputs = [ rake bundler pkg-config ]
52       ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
53     propagatedBuildInputs = [ gobject-introspection wrapGAppsHook3 atk ];
54   };
56   bundler = attrs:
57     let
58       templates = "${attrs.ruby.gemPath}/gems/${attrs.gemName}-${attrs.version}/lib/bundler/templates/";
59     in {
60       # patching shebangs would fail on the templates/Executable file, so we
61       # temporarily remove the executable flag.
62       preFixup  = "chmod -x $out/${templates}/Executable";
63       postFixup = ''
64         chmod +x $out/${templates}/Executable
66         # Allows to load another bundler version
67         sed -i -e "s/activate_bin_path/bin_path/g" $out/bin/bundle
68       '';
69     };
71   cairo = attrs: {
72     nativeBuildInputs = [ pkg-config ]
73       ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
74     buildInputs = [ cairo expat glib libsysprof-capture pcre2 xorg.libpthreadstubs xorg.libXdmcp ];
75   };
77   cairo-gobject = attrs: {
78     nativeBuildInputs = [ pkg-config ]
79       ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
80     buildInputs = [ cairo expat libsysprof-capture pcre2 xorg.libpthreadstubs xorg.libXdmcp ];
81   };
83   charlock_holmes = attrs: {
84     buildInputs = [ which icu zlib ];
85   };
87   cld3 = attrs: {
88     nativeBuildInputs = [ pkg-config ];
89     buildInputs = [ protobuf ];
90   };
92   cocoapods-acknowledgements = attrs: {
93     dependencies = attrs.dependencies ++ [ "cocoapods" ];
94   };
96   cocoapods-deploy = attrs: {
97     dependencies = [ "cocoapods" ];
98   };
100   cocoapods-disable-podfile-validations = attrs: {
101     dependencies = [ "cocoapods" ];
102   };
104   cocoapods-generate = attrs: {
105     dependencies = attrs.dependencies ++ [ "cocoapods" ];
106   };
108   cocoapods-git_url_rewriter = attrs: {
109     dependencies = [ "cocoapods" ];
110   };
112   cocoapods-keys = attrs: {
113     dependencies = attrs.dependencies ++ [ "cocoapods" ];
114   };
116   cocoapods-open = attrs: {
117     dependencies = [ "cocoapods" ];
118   };
120   cocoapods-try-release-fix = attrs: {
121     dependencies = [ "cocoapods" ];
122   };
124   curb = attrs: {
125     buildInputs = [ curl ];
126   };
128   curses = attrs: {
129     dontBuild = false;
130     buildInputs = [ ncurses ];
131     patches = lib.optionals (lib.versionOlder attrs.version "1.4.5") [
132       # Fixes incompatible function pointer type error with clang 16. Fixed in 1.4.5 and newer.
133       # Upstream issue: https://github.com/ruby/curses/issues/85
134       (fetchpatch2 {
135         url = "https://github.com/ruby/curses/commit/13e00d07c3aaed83d5f138cf268cc33c9f025d0e.patch?full_index=1";
136         hash = "sha256-ZJ2egqj3Uwmi4KrF79dtwczpwUqFCp52/xQYUymYDmc=";
137       })
138     ];
139   };
141   dep-selector-libgecode = attrs: {
142     USE_SYSTEM_GECODE = true;
143     postInstall = ''
144       installPath=$(cat $out/nix-support/gem-meta/install-path)
145       sed -i $installPath/lib/dep-selector-libgecode.rb -e 's@VENDORED_GECODE_DIR =.*@VENDORED_GECODE_DIR = "${gecode_3}"@'
146     '';
147   };
149   digest-sha3 = attrs: {
150     hardeningDisable = [ "format" ];
151   };
153   rdiscount = attrs: {
154     # Use discount from nixpkgs instead of vendored version
155     dontBuild = false;
156     buildInputs = [ discount ];
157     patches = [
158       # Adapted from Debian:
159       # https://sources.debian.org/data/main/r/ruby-rdiscount/2.1.8-1/debian/patches/01_use-system-libmarkdown.patch
160       ./rdiscount-use-nixpkgs-libmarkdown.patch
161     ];
162   };
164   ethon = attrs: {
165     dontBuild = false;
166     postPatch = ''
167       substituteInPlace lib/ethon/curls/settings.rb \
168         --replace "libcurl" "${curl.out}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary}"
169     '';
170   };
172   exiv2 = attrs: {
173     buildFlags = [ "--with-exiv2-lib=${exiv2}/lib" "--with-exiv2-include=${exiv2.dev}/include" ];
174   };
176   fog-dnsimple = attrs:
177     lib.optionalAttrs (lib.versionOlder attrs.version "1.0.1") {
178       postInstall = ''
179         cd $(cat $out/nix-support/gem-meta/install-path)
180         rm {$out/bin,bin,../../bin}/{setup,console}
181       '';
182     };
184   redis-rack = attrs: {
185     dontBuild = false;
186     preBuild = ''
187       exec 3>&1
188       output="$(gem build $gemspec | tee >(cat - >&3))"
189       exec 3>&-
190       sed -i 's!"rake".freeze!!' $gemspec
191     '';
192   };
194   ffi-rzmq-core = attrs: {
195     postInstall = ''
196       installPath=$(cat $out/nix-support/gem-meta/install-path)
197       sed -i $installPath/lib/ffi-rzmq-core/libzmq.rb -e 's@inside_gem =.*@inside_gem = "${zeromq}/lib"@'
198     '';
199   };
201   mimemagic = attrs: {
202     FREEDESKTOP_MIME_TYPES_PATH = "${shared-mime-info}/share/mime/packages/freedesktop.org.xml";
203   };
205   mini_magick = attrs: {
206     postInstall = ''
207       installPath=$(cat $out/nix-support/gem-meta/install-path)
208       echo -e "\nENV['PATH'] += ':${graphicsmagick}/bin'\n" >> $installPath/lib/mini_magick/configuration.rb
209     '';
210   };
212   do_sqlite3 = attrs: {
213     buildInputs = [ sqlite ];
214   };
216   eventmachine = attrs: {
217     dontBuild = false;
218     buildInputs = [ openssl ];
219     postPatch = ''
220       substituteInPlace ext/em.cpp \
221         --replace 'if (bind (' 'if (::bind ('
222     '';
223   };
225   exif = attrs: {
226     buildFlags = [ "--with-exif-dir=${libexif}" ];
227     buildInputs = [ libexif ];
228   };
230   ffi = attrs: {
231     nativeBuildInputs = [ pkg-config ];
232     buildInputs = [ libffi ];
233   };
235   fiddle = attrs: {
236     buildInputs = [ libffi ];
237   };
239   gdk_pixbuf2 = attrs: {
240     nativeBuildInputs = [ pkg-config bundler rake ]
241       ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
242     propagatedBuildInputs = [ gobject-introspection wrapGAppsHook3 gdk-pixbuf ];
243   };
245   gdk3 = attrs: {
246     nativeBuildInputs = [ pkg-config bundler rake ]
247       ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
248     propagatedBuildInputs = [ gobject-introspection wrapGAppsHook3 gdk-pixbuf cairo ];
249   };
251   gpgme = attrs: {
252     buildInputs = [ gpgme ];
253     nativeBuildInputs = [ pkg-config ];
254     buildFlags = [ "--use-system-libraries" ];
255   };
257   gio2 = attrs: {
258     nativeBuildInputs = [ pkg-config gobject-introspection ]
259       ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
260     buildInputs = [ glib libsysprof-capture pcre2 ] ++ lib.optionals stdenv.hostPlatform.isLinux [ util-linux libselinux libsepol ];
261   };
263   gitlab-markup = attrs: { meta.priority = 1; };
265   gitlab-pg_query = attrs: lib.optionalAttrs (attrs.version == "1.3.1") {
266     dontBuild = false;
267     postPatch = ''
268       sed -i "s;'https://codeload.github.com.*';'${fetchurl {
269         url = "https://codeload.github.com/lfittl/libpg_query/tar.gz/10-1.0.3";
270         sha256 = "0jfij8apzxsdabl70j42xgd5f3ka1gdcrk764nccp66164gpcchk";
271       }}';" ext/pg_query/extconf.rb
272     '';
273   };
275   parser = attrs: {
276     meta.mainProgram = "ruby-parse";
277   };
279   pg_query = attrs: lib.optionalAttrs (attrs.version == "2.0.2") {
280     dontBuild = false;
281     postPatch = ''
282       sed -i "s;'https://codeload.github.com.*';'${fetchurl {
283         url = "https://codeload.github.com/lfittl/libpg_query/tar.gz/13-2.0.2";
284         sha256 = "0ms2s6hmy8qyzv4g1hj4i2p5fws1v8lrj73b2knwbp2ipd45yj7y";
285       }}';" ext/pg_query/extconf.rb
286     '';
287   } // lib.optionalAttrs (attrs.version == "1.3.0") {
288     # Needed for gitlab
289     dontBuild = false;
290     postPatch = ''
291       sed -i "s;'https://codeload.github.com.*';'${fetchurl {
292         url = "https://codeload.github.com/lfittl/libpg_query/tar.gz/10-1.0.4";
293         sha256 = "0f0kshhai0pnkqj0w4kgz3fssnvwidllc31n1fysxjjzdqlr1k48";
294       }}';" ext/pg_query/extconf.rb
295     '';
296   };
298   prettier = attrs: {
299     meta.mainProgram = "rbprettier";
300   };
302   prometheus-client-mmap = attrs: {
303     dontBuild = false;
304     postPatch = let
305       getconf = if stdenv.hostPlatform.isGnu then stdenv.cc.libc else getconf;
306     in ''
307       substituteInPlace lib/prometheus/client/page_size.rb --replace "getconf" "${lib.getBin getconf}/bin/getconf"
308     '';
309   } // lib.optionalAttrs (lib.versionAtLeast attrs.version "1.0") {
310     cargoRoot = "ext/fast_mmaped_file_rs";
311     cargoDeps = rustPlatform.fetchCargoTarball {
312       src = stdenv.mkDerivation {
313         inherit (buildRubyGem { inherit (attrs) gemName version source; })
314           name
315           src
316           unpackPhase
317           nativeBuildInputs
318         ;
319         dontBuilt = true;
320         installPhase = ''
321           cp -R ext/fast_mmaped_file_rs $out
322         '';
323       };
324       hash = if lib.versionAtLeast attrs.version "1.1.1"
325         then "sha256-RsN5XWX7Mj2ORccM0eczY+44WXsbXNTnJVcCMvnOATk="
326         else "sha256-XuQZPbFWqPHlrJvllkvLl1FjKeoAUbi8oKDrS2rY1KM=";
327     };
328     nativeBuildInputs = [
329       cargo
330       rustc
331       rustPlatform.cargoSetupHook
332       rustPlatform.bindgenHook
333     ];
334     disallowedReferences = [
335       rustc.unwrapped
336     ];
337     preBuild = ''
338       cat ../.cargo/config.toml > ext/fast_mmaped_file_rs/.cargo/config.toml
339       sed -i "s|cargo-vendor-dir|$PWD/../cargo-vendor-dir|" ext/fast_mmaped_file_rs/.cargo/config.toml
340     '';
341     postInstall = ''
342       find $out -type f -name .rustc_info.json -delete
343     '';
344   };
346   glib2 = attrs: {
347     nativeBuildInputs = [ pkg-config ]
348       ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
349     buildInputs = [ glib libsysprof-capture pcre2 ];
350   };
352   gtk3 = attrs: {
353     nativeBuildInputs = [
354       binutils
355       pkg-config
356     ] ++ lib.optionals stdenv.hostPlatform.isLinux [
357       util-linux
358       libselinux
359       libsepol
360     ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
361     propagatedBuildInputs = [
362       atk
363       gdk-pixbuf
364       fribidi
365       gobject-introspection
366       gtk3
367       cairo
368       harfbuzz
369       lerc
370       libdatrie
371       libsysprof-capture
372       libthai
373       pcre2
374       xorg.libpthreadstubs
375       xorg.libXdmcp
376       xorg.libXtst
377       libxkbcommon
378       libepoxy
379     ];
380     dontStrip = stdenv.hostPlatform.isDarwin;
381   };
383   gobject-introspection = attrs: {
384     nativeBuildInputs = [ pkg-config ]
385       ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
386     propagatedBuildInputs = [ gobject-introspection wrapGAppsHook3 glib pcre2 libsysprof-capture ];
387   };
389   gollum = attrs: {
390     dontBuild = false;
391     postPatch = ''
392       substituteInPlace bin/gollum \
393         --replace "/usr/bin/env -S ruby" "${ruby}/bin/ruby"
394     '';
395   };
397   google-protobuf = attrs:
398     lib.optionalAttrs (lib.versionAtLeast attrs.version "3.25.0") {
399     # Fails on 3.25.0 with:
400     #   convert.c:312:32: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]
401     hardeningDisable = [ "format" ];
402   };
404   grpc = attrs: {
405     nativeBuildInputs = [ pkg-config ]
406       ++ lib.optional stdenv.hostPlatform.isDarwin cctools
407       ++ lib.optional (lib.versionAtLeast attrs.version "1.53.0" && stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) autoSignDarwinBinariesHook;
408     buildInputs = [ openssl ];
409     hardeningDisable = [ "format" ];
410     env.NIX_CFLAGS_COMPILE = toString [
411       "-Wno-error=stringop-overflow"
412       "-Wno-error=implicit-fallthrough"
413       "-Wno-error=sizeof-pointer-memaccess"
414       "-Wno-error=cast-function-type"
415       "-Wno-error=class-memaccess"
416       "-Wno-error=ignored-qualifiers"
417       "-Wno-error=tautological-compare"
418       "-Wno-error=stringop-truncation"
419     ];
420     dontBuild = false;
421     postPatch = ''
422       substituteInPlace Makefile \
423         --replace '-Wno-invalid-source-encoding' ""
424     '' + lib.optionalString (lib.versionOlder attrs.version "1.53.0" && stdenv.hostPlatform.isDarwin) ''
425       # For < v1.48.0
426       substituteInPlace src/ruby/ext/grpc/extconf.rb \
427         --replace "ENV['AR'] = 'libtool -o' if RUBY_PLATFORM =~ /darwin/" ""
428       # For >= v1.48.0
429       substituteInPlace src/ruby/ext/grpc/extconf.rb \
430         --replace 'apple_toolchain = ' 'apple_toolchain = false && '
431     '';
432   };
434   hitimes = attrs: {
435     buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ CoreServices ];
436   };
438   hpricot = attrs: {
439     dontBuild = false;
440     patches = [
441       # Fix incompatible function pointer conversion errors with clang 16
442       ./hpricot-fix-incompatible-function-pointer-conversion.patch
443     ];
444   };
446   iconv = attrs: {
447     dontBuild = false;
448     buildFlags = lib.optionals stdenv.hostPlatform.isDarwin [
449       "--with-iconv-dir=${lib.getLib libiconv}"
450       "--with-iconv-include=${lib.getDev libiconv}/include"
451     ];
452     patches = [
453       # Fix incompatible function pointer conversion errors with clang 16
454       ./iconv-fix-incompatible-function-pointer-conversions.patch
455     ];
456   };
458   idn-ruby = attrs: {
459     buildInputs = [ libidn ];
460   };
462   # disable bundle install as it can't install anything in addition to what is
463   # specified in pkgs/applications/misc/jekyll/Gemfile anyway. Also do chmod_R
464   # to compensate for read-only files in site_template in nix store.
465   jekyll = attrs: {
466     postInstall = ''
467       installPath=$(cat $out/nix-support/gem-meta/install-path)
468       sed -i $installPath/lib/jekyll/commands/new.rb \
469           -e 's@Exec.run("bundle", "install"@Exec.run("true"@' \
470           -e 's@FileUtils.cp_r site_template + "/.", path@FileUtils.cp_r site_template + "/.", path; FileUtils.chmod_R "u+w", path@'
471     '';
472   };
474   # note that you need version >= v3.16.14.8,
475   # otherwise the gem will fail to link to the libv8 binary.
476   # see: https://github.com/cowboyd/libv8/pull/161
477   libv8 = attrs: {
478     buildInputs = [ which nodejs.libv8 python2 ];
479     buildFlags = [ "--with-system-v8=true" ];
480     dontBuild = false;
481     # The gem includes broken symlinks which are ignored during unpacking, but
482     # then fail during build. Since the content is missing anyway, touching the
483     # files is enough to unblock the build.
484     preBuild = ''
485       touch vendor/depot_tools/cbuildbot vendor/depot_tools/chrome_set_ver vendor/depot_tools/cros_sdk
486     '';
487     postPatch = ''
488       substituteInPlace ext/libv8/extconf.rb \
489         --replace "location = Libv8::Location::Vendor.new" \
490                   "location = Libv8::Location::System.new"
491     '';
492     meta.broken = true; # At 2023-01-20, errors as:
493                         #   "Failed to build gem native extension."
494                         # Requires Python 2. Project is abandoned.
495   };
497   execjs = attrs: {
498     propagatedBuildInputs = [ nodejs.libv8 ];
499   };
501   libxml-ruby = attrs: {
502     buildFlags = [
503       "--with-xml2-lib=${libxml2.out}/lib"
504       "--with-xml2-include=${libxml2.dev}/include/libxml2"
505     ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
506       "--with-iconv-dir=${lib.getLib libiconv}"
507       "--with-opt-include=${lib.getDev libiconv}/include"
508     ];
509   };
511   mathematical = attrs: {
512     nativeBuildInputs = [
513       ruby
514       cmake
515       bison
516       flex
517       pkg-config
518       python3
519       patchelf
520     ];
522     buildInputs = [
523       cairo
524       fribidi
525       gdk-pixbuf
526       glib
527       libxml2
528       pango
529     ];
531     strictDeps = true;
533     # The ruby build script takes care of this
534     dontUseCmakeConfigure = true;
536     postInstall = ''
537       # Reduce output size by a lot, and remove some unnecessary references.
538       # The ext directory should only be required at build time, so
539       # can be deleted now.
540       rm -r $out/${ruby.gemPath}/gems/mathematical-${attrs.version}/ext \
541             $out/${ruby.gemPath}/extensions/*/*/mathematical-${attrs.version}/gem_make.out
542     '';
544     # For some reason 'mathematical.so' is missing cairo, glib, and
545     # lasem in its RPATH, add them explicitly here
546     postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
547       soPath="$out/${ruby.gemPath}/gems/mathematical-${attrs.version}/lib/mathematical/mathematical.so"
548       rpath="$(patchelf --print-rpath "$soPath")"
549       patchelf --set-rpath "${lib.makeLibraryPath [ lasem glib cairo ]}:$rpath" "$soPath"
550       patchelf --replace-needed liblasem.so liblasem-0.4.so "$soPath"
551     '';
552   };
554   magic = attrs: {
555     buildInputs = [ file ];
556     postInstall = ''
557       installPath=$(cat $out/nix-support/gem-meta/install-path)
558       sed -e 's@ENV\["MAGIC_LIB"\] ||@ENV\["MAGIC_LIB"\] || "${file}/lib/libmagic.so" ||@' -i $installPath/lib/magic/api.rb
559     '';
560   };
562   maxmind_geoip2 = attrs: {
563     buildFlags = [ "--with-maxminddb-lib=${libmaxminddb}/lib" "--with-maxminddb-include=${libmaxminddb}/include" ];
564   };
566   metasploit-framework = attrs: {
567     preInstall = ''
568       export HOME=$TMPDIR
569     '';
570   };
572   mysql = attrs: {
573     buildInputs = [ libmysqlclient zlib openssl ];
574   };
576   mysql2 = attrs: {
577     buildInputs = [ libmysqlclient zlib openssl ];
578   };
580   ncursesw = attrs: {
581     buildInputs = [ ncurses ];
582     buildFlags = [
583       "--with-cflags=-I${ncurses.dev}/include"
584       "--with-ldflags=-L${ncurses.out}/lib"
585     ];
586   };
588   nokogiri = attrs: ({
589     buildFlags = [
590       "--use-system-libraries"
591       "--with-zlib-lib=${zlib.out}/lib"
592       "--with-zlib-include=${zlib.dev}/include"
593       "--with-xml2-lib=${libxml2.out}/lib"
594       "--with-xml2-include=${libxml2.dev}/include/libxml2"
595       "--with-xslt-lib=${libxslt.out}/lib"
596       "--with-xslt-include=${libxslt.dev}/include"
597       "--with-exslt-lib=${libxslt.out}/lib"
598       "--with-exslt-include=${libxslt.dev}/include"
599     ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
600       "--with-iconv-dir=${libiconv}"
601       "--with-opt-include=${libiconv}/include"
602     ];
603   } // lib.optionalAttrs stdenv.hostPlatform.isDarwin {
604     buildInputs = [ libxml2 ];
606     # libxml 2.12 upgrade requires these fixes
607     # https://github.com/sparklemotion/nokogiri/pull/3032
608     # which don't trivially apply to older versions
609     meta.broken = (lib.versionOlder attrs.version "1.16.0") && (lib.versionAtLeast libxml2.version "2.12");
610   });
612   openssl = attrs: {
613     # https://github.com/ruby/openssl/issues/369
614     buildInputs = [ (if (lib.versionAtLeast attrs.version "3.0.0") then openssl else openssl_1_1) ];
615   };
617   opus-ruby = attrs: {
618     dontBuild = false;
619     postPatch = ''
620       substituteInPlace lib/opus-ruby.rb \
621         --replace "ffi_lib 'opus'" \
622                   "ffi_lib '${libopus}/lib/libopus${stdenv.hostPlatform.extensions.sharedLibrary}'"
623     '';
624   };
626   ovirt-engine-sdk = attrs: {
627     buildInputs = [ curl libxml2 ];
628     dontBuild = false;
629     meta.broken = stdenv.hostPlatform.isDarwin; # At least until releasing https://github.com/oVirt/ovirt-engine-sdk-ruby/pull/17
630   };
632   pango = attrs: {
633     nativeBuildInputs = [
634       pkg-config
635     ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ DarwinTools ];
636     buildInputs = [ libdatrie libthai fribidi harfbuzz libsysprof-capture pcre2 xorg.libpthreadstubs xorg.libXdmcp ]
637       ++ lib.optionals stdenv.hostPlatform.isLinux [ libselinux libsepol util-linux ];
638     propagatedBuildInputs = [ gobject-introspection wrapGAppsHook3 ];
639   };
641   patron = attrs: {
642     buildInputs = [ curl ];
643   };
645   pcaprub = attrs: {
646     buildInputs = [ libpcap ];
647   };
649   pg = attrs: {
650     # Force pkg-config lookup for libpq.
651     # See https://github.com/ged/ruby-pg/blob/6629dec6656f7ca27619e4675b45225d9e422112/ext/extconf.rb#L34-L55
652     #
653     # Note that setting --with-pg-config=${lib.getDev postgresql}/bin/pg_config would add
654     # an unnecessary reference to the entire postgresql package.
655     buildFlags = [ "--with-pg-config=ignore" ];
656     nativeBuildInputs = [ pkg-config ];
657     buildInputs = [ postgresql ];
658   };
660   psych = attrs: {
661     buildInputs = [ libyaml ];
662   };
664   puma = attrs: {
665     buildInputs = [ openssl ];
666   };
668   "pygments.rb" = attrs: {
669     buildInputs = [ python3 ];
670   };
672   rack = attrs: {
673     meta.mainProgram = "rackup";
674   };
676   railties = attrs: {
677     meta.mainProgram = "rails";
678   };
680   rainbow = attrs: {
681     buildInputs = [ rainbow_rake ];
682   };
684   rbczmq = { ... }: {
685     buildInputs = [ zeromq czmq ];
686     buildFlags = [ "--with-system-libs" ];
687   };
689   rbnacl = spec:
690     if lib.versionOlder spec.version "6.0.0" then {
691       postInstall = ''
692         sed -i $(cat $out/nix-support/gem-meta/install-path)/lib/rbnacl.rb -e "2a \
693         RBNACL_LIBSODIUM_GEM_LIB_PATH = '${libsodium.out}/lib/libsodium${stdenv.hostPlatform.extensions.sharedLibrary}'
694         "
695       '';
696     } else {
697       dontBuild = false;
698       postPatch = ''
699         substituteInPlace lib/rbnacl/sodium.rb \
700           --replace 'ffi_lib ["sodium"' \
701                     'ffi_lib ["${libsodium}/lib/libsodium${stdenv.hostPlatform.extensions.sharedLibrary}"'
702       '';
703     };
705   re2 = attrs: {
706     buildInputs = [ re2 ];
707     buildFlags = [
708       "--enable-system-libraries"
709     ];
710   };
712   rest-client = attrs: {
713     meta.mainProgram = "restclient";
714   };
716   rmagick = attrs: {
717     nativeBuildInputs = [ pkg-config ];
718     buildInputs = [ imagemagick which ];
719   };
721   rouge = attrs: {
722     meta.mainProgram = "rougify";
723   };
725   rpam2 = attrs: {
726     buildInputs = [ linux-pam ];
727   };
729   rspec-core = attrs: {
730     meta.mainProgram = "rspec";
731   };
733   ruby-libvirt = attrs: {
734     nativeBuildInputs = [ pkg-config ];
735     buildInputs = [ libvirt ];
736     buildFlags = [
737       "--with-libvirt-include=${libvirt}/include"
738       "--with-libvirt-lib=${libvirt}/lib"
739     ];
740   };
742   ruby-lxc = attrs: {
743     buildInputs = [ lxc ];
744   };
746   ruby-terminfo = attrs: {
747     buildInputs = [ ncurses ];
748     buildFlags = [
749       "--with-cflags=-I${ncurses.dev}/include"
750       "--with-ldflags=-L${ncurses.out}/lib"
751     ];
752     dontBuild = false;
753     postPatch = ''
754       substituteInPlace extconf.rb --replace 'rubyio.h' 'ruby/io.h'
755       substituteInPlace terminfo.c \
756         --replace 'rubyio.h' 'ruby/io.h' \
757         --replace 'rb_cData' 'rb_cObject'
758     '';
759   };
761   ruby-vips = attrs: {
762     postInstall = ''
763       cd "$(cat $out/nix-support/gem-meta/install-path)"
765       substituteInPlace lib/vips.rb \
766         --replace 'library_name("vips", 42)' '"${lib.getLib vips}/lib/libvips${stdenv.hostPlatform.extensions.sharedLibrary}"' \
767         --replace 'library_name("glib-2.0", 0)' '"${glib.out}/lib/libglib-2.0${stdenv.hostPlatform.extensions.sharedLibrary}"' \
768         --replace 'library_name("gobject-2.0", 0)' '"${glib.out}/lib/libgobject-2.0${stdenv.hostPlatform.extensions.sharedLibrary}"'
769     '';
770   };
772   rugged = attrs: {
773     nativeBuildInputs = [ cmake pkg-config which ] ++ lib.optional stdenv.hostPlatform.isDarwin libiconv;
774     buildInputs = [ openssl libssh2 zlib ];
775     dontUseCmakeConfigure = true;
776   };
778   sassc = attrs: {
779     nativeBuildInputs = [ rake ];
780     dontBuild = false;
781     SASS_LIBSASS_PATH = toString libsass;
782     postPatch = ''
783       substituteInPlace lib/sassc/native.rb \
784         --replace 'gem_root = spec.gem_dir' 'gem_root = File.join(__dir__, "../../")'
785     '';
786   };
788   sass-embedded = attrs: {
789     # Patch the Rakefile to use our dart-sass and not try to fetch anything.
790     dontBuild = false;
791     postPatch = ''
792       substituteInPlace ext/sass/Rakefile \
793         --replace \'dart-sass/sass\' \'${dart-sass}/bin/sass\' \
794         --replace ' => %w[dart-sass]' ""
795     '';
796   };
798   scrypt = attrs: lib.optionalAttrs stdenv.hostPlatform.isDarwin {
799     dontBuild = false;
800     postPatch = ''
801       sed -i -e "s/-arch i386//" Rakefile ext/scrypt/Rakefile
802     '';
803   };
805   semian = attrs: {
806     buildInputs = [ openssl ];
807   };
809   sequel_pg = attrs: {
810     buildInputs = [ postgresql ];
811   };
813   snappy = attrs: {
814     buildInputs = [ args.snappy ];
815   };
817   sqlite3 = attrs: if lib.versionAtLeast attrs.version "1.5.0"
818   then {
819     nativeBuildInputs = [ pkg-config ];
820     buildInputs = [ sqlite ];
821     buildFlags = [
822       "--enable-system-libraries"
823     ];
824   }
825   else {
826     buildFlags = [
827       "--with-sqlite3-include=${sqlite.dev}/include"
828       "--with-sqlite3-lib=${sqlite.out}/lib"
829     ];
830   };
832   rb-readline = attrs: {
833     dontBuild = false;
834     postPatch = ''
835       substituteInPlace lib/rbreadline.rb \
836         --replace 'infocmp' '${ncurses}/bin/infocmp'
837     '';
838   };
840   taglib-ruby = attrs: {
841     buildInputs = [ taglib ];
842   };
844   timfel-krb5-auth = attrs: {
845     buildInputs = [ libkrb5 ];
846   };
848   tiny_tds = attrs: {
849     nativeBuildInputs = [ pkg-config openssl ];
850     buildInputs = [ freetds ];
851   };
853   treetop = attrs: {
854     meta.mainProgram = "tt";
855   };
857   typhoeus = attrs: {
858     buildInputs = [ curl ];
859   };
861   tzinfo = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "1.0") {
862     dontBuild = false;
863     postPatch =
864       let
865         path = if lib.versionAtLeast attrs.version "2.0"
866                then "lib/tzinfo/data_sources/zoneinfo_data_source.rb"
867                else "lib/tzinfo/zoneinfo_data_source.rb";
868       in
869         ''
870           substituteInPlace ${path} \
871             --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
872         '';
873   };
875   uuid4r = attrs: {
876     buildInputs = [ which libossp_uuid ];
877   };
879   whois = attrs: {
880     meta.mainProgram = "whoisrb";
881   };
883   xapian-ruby = attrs: {
884     # use the system xapian
885     dontBuild = false;
886     nativeBuildInputs = [ rake pkg-config bundler ];
887     buildInputs = [ xapian zlib ];
888     postPatch = ''
889       cp ${./xapian-Rakefile} Rakefile
890     '';
891     preInstall = ''
892       export XAPIAN_CONFIG=${xapian}/bin/xapian-config
893     '';
894   };
896   zlib = attrs: {
897     buildInputs = [ zlib ];
898   };
900   zookeeper = attrs: {
901     buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ cctools ];
902   };