summaryrefslogtreecommitdiff
path: root/lib/rubygems/install_update_options.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/install_update_options.rb')
-rw-r--r--lib/rubygems/install_update_options.rb224
1 files changed, 224 insertions, 0 deletions
diff --git a/lib/rubygems/install_update_options.rb b/lib/rubygems/install_update_options.rb
new file mode 100644
index 0000000000..e8859cadaf
--- /dev/null
+++ b/lib/rubygems/install_update_options.rb
@@ -0,0 +1,224 @@
+# frozen_string_literal: true
+
+#--
+# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
+# All rights reserved.
+# See LICENSE.txt for permissions.
+#++
+
+require_relative "../rubygems"
+require_relative "security_option"
+
+##
+# Mixin methods for install and update options for Gem::Commands
+
+module Gem::InstallUpdateOptions
+ include Gem::SecurityOption
+
+ ##
+ # Add the install/update options to the option parser.
+
+ def add_install_update_options
+ add_option(:"Install/Update", "-i", "--install-dir DIR",
+ "Gem repository directory to get installed",
+ "gems") do |value, options|
+ options[:install_dir] = File.expand_path(value)
+ end
+
+ add_option(:"Install/Update", "-n", "--bindir DIR",
+ "Directory where executables will be",
+ "placed when the gem is installed") do |value, options|
+ options[:bin_dir] = File.expand_path(value)
+ end
+
+ add_option(:"Install/Update", "-j", "--build-jobs VALUE", Integer,
+ "Specify the number of jobs to pass to `make` when installing",
+ "gems with native extensions.",
+ "Defaults to the number of processors.",
+ "This option is ignored on the mswin platform or",
+ "if the MAKEFLAGS environment variable is set.") do |value, options|
+ options[:build_jobs] = value
+ end
+
+ add_option(:"Install/Update", "--document [TYPES]", Array,
+ "Generate documentation for installed gems",
+ "List the documentation types you wish to",
+ "generate. For example: rdoc,ri") do |value, options|
+ options[:document] = case value
+ when nil then %w[ri]
+ when false then []
+ else value
+ end
+ end
+
+ add_option(:"Install/Update", "--build-root DIR",
+ "Temporary installation root. Useful for building",
+ "packages. Do not use this when installing remote gems.") do |value, options|
+ options[:build_root] = File.expand_path(value)
+ end
+
+ add_option(:"Install/Update", "--vendor",
+ "Install gem into the vendor directory.",
+ "Only for use by gem repackagers.") do |_value, options|
+ unless Gem.vendor_dir
+ raise Gem::OptionParser::InvalidOption.new "your platform is not supported"
+ end
+
+ options[:vendor] = true
+ options[:install_dir] = Gem.vendor_dir
+ end
+
+ add_option(:"Install/Update", "-N", "--no-document",
+ "Disable documentation generation") do |_value, options|
+ options[:document] = []
+ end
+
+ add_option(:"Install/Update", "-E", "--[no-]env-shebang",
+ "Rewrite the shebang line on installed",
+ "scripts to use /usr/bin/env") do |value, options|
+ options[:env_shebang] = value
+ end
+
+ add_option(:"Install/Update", "-f", "--[no-]force",
+ "Force gem to install, bypassing dependency",
+ "checks") do |value, options|
+ options[:force] = value
+ end
+
+ add_option(:"Install/Update", "-w", "--[no-]wrappers",
+ "Use bin wrappers for executables",
+ "Not available on dosish platforms") do |value, options|
+ options[:wrappers] = value
+ end
+
+ add_security_option
+
+ add_option(:"Install/Update", "--ignore-dependencies",
+ "Do not install any required dependent gems") do |value, options|
+ options[:ignore_dependencies] = value
+ end
+
+ add_option(:"Install/Update", "--[no-]format-executable",
+ "Make installed executable names match Ruby.",
+ "If Ruby is ruby18, foo_exec will be",
+ "foo_exec18") do |value, options|
+ options[:format_executable] = value
+ end
+
+ add_option(:"Install/Update", "--[no-]user-install",
+ "Install in user's home directory instead",
+ "of GEM_HOME.") do |value, options|
+ options[:user_install] = value
+ end
+
+ add_option(:"Install/Update", "--development",
+ "Install additional development",
+ "dependencies") do |_value, options|
+ options[:development] = true
+ options[:dev_shallow] = true
+ end
+
+ add_option(:"Install/Update", "--development-all",
+ "Install development dependencies for all",
+ "gems (including dev deps themselves)") do |_value, options|
+ options[:development] = true
+ options[:dev_shallow] = false
+ end
+
+ add_option(:"Install/Update", "--conservative",
+ "Don't attempt to upgrade gems already",
+ "meeting version requirement") do |_value, options|
+ options[:conservative] = true
+ options[:minimal_deps] = true
+ end
+
+ add_option(:"Install/Update", "--[no-]minimal-deps",
+ "Don't upgrade any dependencies that already",
+ "meet version requirements") do |value, options|
+ options[:minimal_deps] = value
+ end
+
+ add_option(:"Install/Update", "--[no-]post-install-message",
+ "Print post install message") do |value, options|
+ options[:post_install_message] = value
+ end
+
+ add_option(:"Install/Update", "-g", "--file [FILE]",
+ "Read from a gem dependencies API file and",
+ "install the listed gems") do |v,_o|
+ v ||= Gem::GEM_DEP_FILES.find do |file|
+ File.exist? file
+ end
+
+ unless v
+ message = v ? v : "(tried #{Gem::GEM_DEP_FILES.join ", "})"
+
+ raise Gem::OptionParser::InvalidArgument,
+ "cannot find gem dependencies file #{message}"
+ end
+
+ options[:gemdeps] = v
+ end
+
+ add_option(:"Install/Update", "--without GROUPS", Array,
+ "Omit the named groups (comma separated)",
+ "when installing from a gem dependencies",
+ "file") do |v,_o|
+ options[:without_groups].concat v.map(&:intern)
+ end
+
+ add_option(:Deprecated, "--default",
+ "Add the gem's full specification to",
+ "specifications/default and extract only its bin") do |v,_o|
+ end
+
+ add_option(:"Install/Update", "--explain",
+ "Rather than install the gems, indicate which would",
+ "be installed") do |v,_o|
+ options[:explain] = v
+ end
+
+ add_option(:"Install/Update", "--[no-]lock",
+ "Create a lock file (when used with -g/--file)") do |v,_o|
+ options[:lock] = v
+ end
+
+ add_option(:"Install/Update", "--[no-]suggestions",
+ "Suggest alternates when gems are not found") do |v,_o|
+ options[:suggest_alternate] = v
+ end
+
+ add_option(:"Install/Update", "--target-rbconfig [FILE]",
+ "rbconfig.rb for the deployment target platform") do |v, _o|
+ Gem.set_target_rbconfig(v)
+ end
+
+ add_option(:"Install/Update", "--[no-]build-extension",
+ "Build native extensions during installation.",
+ "Defaults to true") do |v, _o|
+ options[:build_extension] = v
+ end
+
+ add_option(:"Install/Update", "--[no-]install-plugin",
+ "Install plugins during installation.",
+ "Defaults to true") do |v, _o|
+ options[:install_plugin] = v
+ end
+ end
+
+ ##
+ # Default options for the gem install and update commands.
+
+ def install_update_options
+ {
+ document: %w[ri],
+ }
+ end
+
+ ##
+ # Default description for the gem install and update commands.
+
+ def install_update_defaults_str
+ "--document=ri"
+ end
+end