summaryrefslogtreecommitdiff
path: root/lib/rubygems/ext/builder.rb
AgeCommit message (Collapse)Author
2026-02-09Merge RubyGems/Bundler 4.0.5Hiroshi SHIBATA
2025-12-16[ruby/rubygems] Pass down value of `BUNDLE_JOBS` to RubyGems before compiling:Edouard CHIN
- ### Problem Since https://github.com/ruby/rubygems/pull/9131, we are now compiling make rules simultaneously. The number of jobs is equal to the number of processors. This may be problematic for some users as they want to control this value. ### Solution The number of jobs passed to `make` will now be equal to the `BUNDLE_JOBS` value. ### Side note It's also worth to note that since Bundler installs gems in parallel, we may end up running multiple `make -j<JOB>` in parallel which would cause exhaust the number of processors we have. This problem can be fixed by implementing a GNU jobserver, which I plan to do. But I felt that this would be too much change in one PR. https://github.com/ruby/rubygems/commit/d51995deb9
2025-10-17[rubygems/rubygems] :Revamp CmakeBuilder to fix the issues described in ↵Charlie Savage
#8572. Specifically: * Correctly pass command line arguments to CMake * Call CMake twice - once to configure a project and a second time to build (which is the standard way to use CMake). This fixes the previously incorrect assumption that CMake generates a Make file. * Update the tests to specify a CMake minimum version of 3.26 (which is already two years old). 3.26 is a bit arbritary but it aligns with Rice, and updates from the ancient 3.5 version being used (which CMake generates a warning message saying stop using it!) * Update the CMake call to use CMAKE_RUNTIME_OUTPUT_DIRECTORY and CMAKE_LIBRARY_OUTPUT_DIRECTORY to tell CMake to copy compiled binaries to the a Gem's lib directory. Note the updated builder took inspiration from the Cargo Builder, meaning you first create an instance of CmakeBuilder versus just calling class methods. https://github.com/rubygems/rubygems/commit/9e248d4679
2025-08-18[rubygems/rubygems] Don't worry about missing Makefile.Samuel Williams
https://github.com/rubygems/rubygems/commit/0e92346d88
2025-04-25[rubygems/rubygems] Remove shellwords autoloadDavid Rodríguez
https://github.com/rubygems/rubygems/commit/2af1646776
2024-06-18[rubygems/rubygems] Add `--target-rbconfig` option to `gem install` and `gem ↵Yuta Saito
update` commands This patch adds `--target-rbconfig` option to specify the rbconfig.rb file for the deployment target platform. This is useful when cross-compiling gems. At the moment, this option is only available for `extconf.rb`-based extensions. https://github.com/rubygems/rubygems/commit/cf2843f7a2
2024-02-05[rubygems/rubygems] Revert "Simplify how extensions are built"David Rodriguez
This reverts commit https://github.com/rubygems/rubygems/commit/0b8faf1e3926. https://github.com/rubygems/rubygems/commit/7528e0f1ce
2024-01-29[rubygems/rubygems] Simplify how extensions are builtDavid Rodríguez
https://github.com/rubygems/rubygems/commit/0b8faf1e39
2023-12-11[rubygems/rubygems] Stream output from ext builds when --verboseDaisuke Aritomo
Uses Open3.popen2e in place of Open3.capture2e in Gem::Ext::Builder. This change aims to stream stdout/stderr of ext builds when in verbose mode, instead of printing everything at once when the build completes. Nice for debugging gem builds that consumes longer times. https://github.com/rubygems/rubygems/commit/dcdcb5adda
2023-12-07[rubygems/rubygems] Use modern hashes consistentlyDavid Rodríguez
https://github.com/rubygems/rubygems/commit/bb66253f2c
2023-06-13[rubygems/rubygems] Autoload shellwords when it's needed.Samuel Williams
https://github.com/rubygems/rubygems/commit/e916ccb2d9
2023-04-07[rubygems/rubygems] util/rubocop -A --only Style/FormatStringHiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/132a56569d
2023-03-23Refactor and fix usage of Gem.rubyなつき
Notes: Merged: https://github.com/ruby/ruby/pull/7582
2023-03-23Move duplicated logic to parent classなつき
Notes: Merged: https://github.com/ruby/ruby/pull/7582
2023-03-23util/rubocop -A --only Layout/EmptyLineAfterMagicCommentHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/7582
2023-03-17util/rubocop -A --only Style/TernaryParenthesesHiroshi SHIBATA
2023-03-17[rubygems/rubygems] util/rubocop -A --only Style/OrAssignmentHiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/965fc82cfd
2023-03-17[rubygems/rubygems] util/rubocop -A --only Style/RescueStandardErrorHiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/80b57da926
2023-03-17[rubygems/rubygems] util/rubocop -A --only Style/RedundantParenthesesHiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/295691d4dc
2023-03-17[rubygems/rubygems] util/rubocop -A --only Style/ParallelAssignmentHiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/5c88c77873
2023-03-17[rubygems/rubygems] util/rubocop -A --only Style/StringLiteralsInInterpolationHiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/cb554f6eb7
2023-01-30[rubygems/rubygems] use cargo to get crate nameMat Sadler
the final copying of the extension into place has been slimmed down, reflecting that it only needs to copy a single file, rather than replicating the more involved process used for a C ext this also refactors #build so that #cargo_crate_name only needs to be called once, and hopefully the build flow is easier to understand https://github.com/rubygems/rubygems/commit/5a0d7f2e6c
2022-12-20[rubygems/rubygems] Cleanup intermediate artifacts after installing built ↵Eloy Espinaco
extensions https://github.com/rubygems/rubygems/commit/98b6a959bd Notes: Merged: https://github.com/ruby/ruby/pull/6966
2022-08-03Merge rubygems/bundler HEADHiroshi SHIBATA
Pick from https://github.com/rubygems/rubygems/commit/8331e63263081a6aa690d8025d2957f30c4e814a Notes: Merged: https://github.com/ruby/ruby/pull/6209
2022-07-22RubyGems: Enable Style/StringLiterals copTakuya Noguchi
Signed-off-by: Takuya Noguchi <takninnovationresearch@gmail.com>
2022-06-24Sync RubyGems & Bundler with upstream repoDavid Rodríguez
Notes: Merged: https://github.com/ruby/ruby/pull/6054
2022-06-17[rubygems/rubygems] Don't modify RbConfig at all when building extensionsDavid Rodríguez
Instead, pass sitearchdir and sitelibdir directly to `make`. This also removes the need to create and use the siteconf file at all when generating makefiles. https://github.com/rubygems/rubygems/commit/dea41fa2dc
2022-05-20Merge RubyGems and Bundler HEADHiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/125415593ead9ab69a9f0bb5392c9d7ec61b1f51
2022-04-28Merge RubyGems/Bundler masterHiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/fe96fb6e2ac5a8b6df5e852470d11fa854301eca Notes: Merged: https://github.com/ruby/ruby/pull/5669
2021-11-06[rubygems/rubygems] GNU Make needs DESTDIR on Windows environment like msys ↵Hiroshi SHIBATA
or mingw https://github.com/rubygems/rubygems/commit/7fd987d30d
2021-11-05[rubygems/rubygems] Explicitly ignored empty value for DESTDIRHiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/69dcc02553
2021-11-05[rubygems/rubygems] Skip to set DESTDIR option when it's not provided for ↵Hiroshi SHIBATA
mswin platform https://github.com/rubygems/rubygems/commit/b93546c8d8
2021-07-27[rubygems/rubygems] Lazily load `shellwords` libraryDavid Rodríguez
https://github.com/rubygems/rubygems/commit/e5532ef886
2021-03-08Sync latest development version of bundler & rubygemsDavid Rodríguez
Notes: Merged: https://github.com/ruby/ruby/pull/4143
2021-01-04Track RubyGems master(3.3.0.dev) branch at ↵Hiroshi SHIBATA
55634a8af18a52df86c4275d70fa1179118bcc20 Notes: Merged: https://github.com/ruby/ruby/pull/4021
2020-12-08Merge prepare version of RubyGems 3.2.0Hiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/3864
2020-09-23Revert "Manually merged from https://github.com/rubygems/rubygems/pull/2636"Hiroshi SHIBATA
31a6eaabc165d8a222e176f2c809d90622d88ec2 is obsoleted with https://github.com/rubygems/rubygems/pull/3820
2020-09-23Manually merged from https://github.com/rubygems/rubygems/pull/2636Hiroshi SHIBATA
Enable Style/EmptyLinesAroundClassBody rubocop cop.
2020-07-31Enforce no empty lines around class body in rubygemsDavid Rodríguez
To normalize the code style with `bundler`. Notes: Merged: https://github.com/ruby/ruby/pull/3379
2020-06-05Fix `ruby setup.rb` warningsDavid Rodríguez
Currently we get the following warnings on `ruby setup.rb`: ``` /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/exceptions.rb:281: warning: already initialized constant Gem::UnsatisfiableDepedencyError /home/deivid/Code/rubygems/lib/rubygems/exceptions.rb:281: warning: previous definition of UnsatisfiableDepedencyError was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/user_interaction.rb:557: warning: already initialized constant Gem::StreamUI::ThreadedDownloadReporter::MUTEX /home/deivid/Code/rubygems/lib/rubygems/user_interaction.rb:557: warning: previous definition of MUTEX was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/ext/builder.rb:20: warning: already initialized constant Gem::Ext::Builder::CHDIR_MUTEX /home/deivid/Code/rubygems/lib/rubygems/ext/builder.rb:20: warning: previous definition of CHDIR_MUTEX was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/ext/ext_conf_builder.rb:14: warning: already initialized constant Gem::Ext::ExtConfBuilder::FileEntry /home/deivid/Code/rubygems/lib/rubygems/ext/ext_conf_builder.rb:14: warning: previous definition of FileEntry was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/version.rb:158: warning: already initialized constant Gem::Version::VERSION_PATTERN /home/deivid/Code/rubygems/lib/rubygems/version.rb:158: warning: previous definition of VERSION_PATTERN was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/version.rb:159: warning: already initialized constant Gem::Version::ANCHORED_VERSION_PATTERN /home/deivid/Code/rubygems/lib/rubygems/version.rb:159: warning: previous definition of ANCHORED_VERSION_PATTERN was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/requirement.rb:14: warning: already initialized constant Gem::Requirement::OPS /home/deivid/Code/rubygems/lib/rubygems/requirement.rb:14: warning: previous definition of OPS was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/requirement.rb:24: warning: already initialized constant Gem::Requirement::SOURCE_SET_REQUIREMENT /home/deivid/Code/rubygems/lib/rubygems/requirement.rb:24: warning: previous definition of SOURCE_SET_REQUIREMENT was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/requirement.rb:27: warning: already initialized constant Gem::Requirement::PATTERN_RAW /home/deivid/Code/rubygems/lib/rubygems/requirement.rb:27: warning: previous definition of PATTERN_RAW was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/requirement.rb:32: warning: already initialized constant Gem::Requirement::PATTERN /home/deivid/Code/rubygems/lib/rubygems/requirement.rb:32: warning: previous definition of PATTERN was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/requirement.rb:37: warning: already initialized constant Gem::Requirement::DefaultRequirement /home/deivid/Code/rubygems/lib/rubygems/requirement.rb:37: warning: previous definition of DefaultRequirement was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/requirement.rb:42: warning: already initialized constant Gem::Requirement::DefaultPrereleaseRequirement /home/deivid/Code/rubygems/lib/rubygems/requirement.rb:42: warning: previous definition of DefaultPrereleaseRequirement was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/requirement.rb:311: warning: already initialized constant Gem::Version::Requirement /home/deivid/Code/rubygems/lib/rubygems/requirement.rb:311: warning: previous definition of Requirement was here /home/deivid/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/rubygems/command.rb:626: warning: already initialized constant Gem::Command::HELP /home/deivid/Code/rubygems/lib/rubygems/command.rb:626: warning: previous definition of HELP was here Successfully built RubyGem Name: bundler Version: 2.2.0.dev File: bundler-2.2.0.dev.gem Bundler 2.2.0.dev installed RubyGems 3.2.0.pre1 installed Regenerating binstubs Regenerating plugins ------------------------------------------------------------------------------ RubyGems installed the following executables: /home/deivid/.rbenv/versions/2.7.1/bin/gem /home/deivid/.rbenv/versions/2.7.1/bin/bundle ``` This is because the `$LOAD_PATH` entry added by `setup.rb` is relatively and when the offending require happens, we're installing `bundler` and have switched folders to `bundler/`. So the require fallsback to the system rubygems. To avoid that, add an absolute path to the `$LOAD_PATH`. On jruby, somehow the $LOAD_PATH is manipulated so that we end up requiring stuff inside the built package even if we have specified the `-I` flag, so we get redefinition warnings anyways. I'm not sure about the root cause, but relative requiring fixes it, and it's faster anyways. Notes: Merged: https://github.com/ruby/ruby/pull/3184
2020-03-24Sync rubygems with current master (#2889)David Rodríguez
Notes: Merged-By: hsbt <hsbt@ruby-lang.org>
2019-12-13Prepare to release RubyGems 3.1.0 final version.Hiroshi SHIBATA
2019-09-05[rubygems/rubygems] Bump rubocop to 0.74.0 and fix new offensesDavid Rodríguez
https://github.com/rubygems/rubygems/commit/d4fc383497
2019-07-31[rubygems/rubygems] Initialize '@ran_rake' correctly, so we don't have to ↵bronzdoc
set it up later and cause confusion https://github.com/rubygems/rubygems/commit/6ec3ba983c
2019-07-31[rubygems/rubygems] Remove extension 'double pipe equals' assigment since is ↵bronzdoc
not needed anymore https://github.com/rubygems/rubygems/commit/930de86a24
2019-07-31[rubygems/rubygems] Move 'build_for' to handle extension type before the ↵bronzdoc
extension is used https://github.com/rubygems/rubygems/commit/2a32c5ef0a
2019-07-31[rubygems/rubygems] Do not pass +build_dir+ argument to build_errorbronzdoc
https://github.com/rubygems/rubygems/commit/107fea3432
2019-07-31[rubygems/rubygems] Remove useless param +build_dir+bronzdoc
https://github.com/rubygems/rubygems/commit/0402974149
2019-07-31[rubygems/rubygems] Migrate extension builder to use Open3David Rodríguez
Since it works on jruby. https://github.com/rubygems/rubygems/commit/5229e00df4
2019-07-31[rubygems/rubygems] Remove unused methodDavid Rodríguez
https://github.com/rubygems/rubygems/commit/f2dbf242ea