# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from __future__ import print_function

from portage.const import _ENABLE_DYN_LINK_MAP
from portage.output import bold, turquoise, green

def shorthelp():
	print(bold("emerge:")+" the other white meat (command-line interface to the Portage system)")
	print(bold("Usage:"))
	print("   "+turquoise("emerge")+" [ "+green("options")+" ] [ "+green("action")+" ] [ "+turquoise("ebuild")+" | "+turquoise("tbz2")+" | "+turquoise("file")+" | "+turquoise("@set")+" | "+turquoise("atom")+" ] [ ... ]")
	print("   "+turquoise("emerge")+" [ "+green("options")+" ] [ "+green("action")+" ] < "+turquoise("system")+" | "+turquoise("world")+" >")
	print("   "+turquoise("emerge")+" < "+turquoise("--sync")+" | "+turquoise("--metadata")+" | "+turquoise("--info")+" >")
	print("   "+turquoise("emerge")+" "+turquoise("--resume")+" [ "+green("--pretend")+" | "+green("--ask")+" | "+green("--skipfirst")+" ]")
	print("   "+turquoise("emerge")+" "+turquoise("--help")+" [ "+green("--verbose")+" ] ")
	print(bold("Options:")+" "+green("-")+"["+green("abBcCdDefgGhjkKlnNoOpPqrsStuvV")+"]")
	print("          [ " + green("--color")+" < " + turquoise("y") + " | "+ turquoise("n")+" >            ] [ "+green("--columns")+"    ]")
	print("          [ "+green("--complete-graph")+"             ] [ "+green("--deep")+"       ]")
	print("          [ "+green("--jobs") + " " + turquoise("JOBS")+" ] [ "+green("--keep-going")+" ] [ " + green("--load-average")+" " + turquoise("LOAD") + "            ]")
	print("          [ "+green("--newuse")+"    ] [ "+green("--noconfmem")+"  ] [ "+green("--nospinner")+"  ]")
	print("          [ "+green("--oneshot")+"   ] [ "+green("--onlydeps")+"   ]")
	print("          [ "+green("--reinstall ")+turquoise("changed-use")+"      ] [ " + green("--with-bdeps")+" < " + turquoise("y") + " | "+ turquoise("n")+" >         ]")
	print(bold("Actions:")+"  [ "+green("--depclean")+" | "+green("--list-sets")+" | "+green("--search")+" | "+green("--sync")+" | "+green("--version")+"        ]")

def help(myopts, havecolor=1):
	# TODO: Implement a wrap() that accounts for console color escape codes.
	from textwrap import wrap
	desc_left_margin = 14
	desc_indent = desc_left_margin * " "
	desc_width = 80 - desc_left_margin - 5
	if "--verbose" not in myopts:
		shorthelp()
		print()
		print("   For more help try 'emerge --help --verbose' or consult the man page.")
	else:
		shorthelp()
		print()
		print(turquoise("Help (this screen):"))
		print("       "+green("--help")+" ("+green("-h")+" short option)")
		print("              Displays this help; an additional argument (see above) will tell")
		print("              emerge to display detailed help.")
		print()
		print(turquoise("Actions:"))
		print("       "+green("--clean"))
		print("              Cleans the system by removing outdated packages which will not")
		print("              remove functionalities or prevent your system from working.")
		print("              The arguments can be in several different formats :")
		print("              * world ")
		print("              * system or")
		print("              * 'dependency specification' (in single quotes is best.)")
		print("              Here are a few examples of the dependency specification format:")
		print("              "+bold("binutils")+" matches")
		print("                  binutils-2.11.90.0.7 and binutils-2.11.92.0.12.3-r1")
		print("              "+bold("sys-devel/binutils")+" matches")
		print("                  binutils-2.11.90.0.7 and binutils-2.11.92.0.12.3-r1")
		print("              "+bold(">sys-devel/binutils-2.11.90.0.7")+" matches")
		print("                  binutils-2.11.92.0.12.3-r1")
		print("              "+bold(">=sys-devel/binutils-2.11.90.0.7")+" matches")
		print("                  binutils-2.11.90.0.7 and binutils-2.11.92.0.12.3-r1")
		print("              "+bold("<=sys-devel/binutils-2.11.92.0.12.3-r1")+" matches")
		print("                  binutils-2.11.90.0.7 and binutils-2.11.92.0.12.3-r1")
		print()
		print("       "+green("--config"))
		print("              Runs package-specific operations that must be executed after an")
		print("              emerge process has completed.  This usually entails configuration")
		print("              file setup or other similar setups that the user may wish to run.")
		print()
		print("       "+green("--depclean")+" ("+green("-c")+" short option)")

		paragraph = "Cleans the system by removing packages that are " + \
		"not associated with explicitly merged packages. Depclean works " + \
		"by creating the full dependency tree from the " + \
		"@world set, then comparing it to installed packages. Packages " + \
		"installed, but not part of the dependency tree, will be " + \
		"uninstalled by depclean. See --with-bdeps for behavior with " + \
		"respect to build time dependencies that are not strictly " + \
		"required. Packages that are part of the world set will " + \
		"always be kept. They can be manually added to this set with " + \
		"emerge --noreplace <atom>. As a safety measure, depclean " + \
		"will not remove any packages unless *all* required dependencies " + \
		"have been resolved. As a consequence, it is often necessary to " + \
		"run emerge --update --newuse --deep @world " + \
		"prior to depclean."

		for line in wrap(paragraph, desc_width):
			print(desc_indent + line)
		print()

		paragraph =  "WARNING: Inexperienced users are advised to use " + \
		"--pretend with this option in order to see a preview of which " + \
		"packages will be uninstalled. Always study the list of packages " + \
		"to be cleaned for any obvious mistakes. Note that packages " + \
		"listed in package.provided (see portage(5)) may be removed by " + \
		"depclean, even if they are part of the world set."

		if not _ENABLE_DYN_LINK_MAP:
			paragraph += " Also note that " + \
				"depclean may break link level dependencies. Thus, it is " + \
				"recommended to use a tool such as revdep-rebuild(1) " + \
				"in order to detect such breakage."

		for line in wrap(paragraph, desc_width):
			print(desc_indent + line)
		print()

		paragraph = "Depclean serves as a dependency aware version of " + \
			"--unmerge. When given one or more atoms, it will unmerge " + \
			"matched packages that have no reverse dependencies. Use " + \
			"--depclean together with --verbose to show reverse dependencies."

		for line in wrap(paragraph, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--deselect") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))

		paragraph = \
			"Remove atoms and/or sets from the world file. This action is implied " + \
			"by uninstall actions, including --depclean, " + \
			"--prune and --unmerge. Use --deselect=n " + \
			"in order to prevent uninstall actions from removing " + \
			"atoms from the world file."

		for line in wrap(paragraph, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--ignore-default-opts"))

		paragraph = \
			"Causes EMERGE_DEFAULT_OPTS (see make.conf(5)) to be ignored."

		for line in wrap(paragraph, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--info"))
		print("              Displays important portage variables that will be exported to")
		print("              ebuild.sh when performing merges. This information is useful")
		print("              for bug reports and verification of settings. All settings in")
		print("              make.{conf,globals,defaults} and the environment show up if")
		print("              run with the '--verbose' flag.")
		print()
		print("       " + green("--list-sets"))
		paragraph = "Displays a list of available package sets."

		for line in wrap(paragraph, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--metadata"))
		print("              Transfers metadata cache from ${PORTDIR}/metadata/cache/ to")
		print("              /var/cache/edb/dep/ as is normally done on the tail end of an")
		print("              rsync update using " + bold("emerge --sync") + ". This process populates the")
		print("              cache database that portage uses for pre-parsed lookups of")
		print("              package data.  It does not populate cache for the overlays")
		print("              listed in PORTDIR_OVERLAY.  In order to generate cache for")
		print("              overlays, use " + bold("--regen") + ".")
		print()
		print("       "+green("--prune")+" ("+green("-P")+" short option)")
		print("              "+turquoise("WARNING: This action can remove important packages!"))
		paragraph = "Removes all but the highest installed version of a " + \
			"package from your system. Use --prune together with " + \
			"--verbose to show reverse dependencies or with --nodeps " + \
			"to ignore all dependencies. "

		for line in wrap(paragraph, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--regen"))
		print("              Causes portage to check and update the dependency cache of all")
		print("              ebuilds in the portage tree. This is not recommended for rsync")
		print("              users as rsync updates the cache using server-side caches.")
		print("              Rsync users should simply 'emerge --sync' to regenerate.")
		desc = "In order to specify parallel --regen behavior, use "+ \
			"the ---jobs and --load-average options. If you would like to " + \
			"generate and distribute cache for use by others, use egencache(1)."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--resume")+" ("+green("-r")+" short option)")
		print("              Resumes the most recent merge list that has been aborted due to an")
		print("              error. Please note that this operation will only return an error")
		print("              on failure. If there is nothing for portage to do, then portage")
		print("              will exit with a message and a success condition. A resume list")
		print("              will persist until it has been completed in entirety or until")
		print("              another aborted merge list replaces it. The resume history is")
		print("              capable of storing two merge lists. After one resume list")
		print("              completes, it is possible to invoke --resume once again in order")
		print("              to resume an older list.")
		print()
		print("       "+green("--search")+" ("+green("-s")+" short option)")
		print("              Searches for matches of the supplied string in the current local")
		print("              portage tree. By default emerge uses a case-insensitive simple ")
		print("              search, but you can enable a regular expression search by ")
		print("              prefixing the search string with %.")
		print("              Prepending the expression with a '@' will cause the category to")
		print("              be included in the search.")
		print("              A few examples:")
		print("              "+bold("emerge --search libc"))
		print("                  list all packages that contain libc in their name")
		print("              "+bold("emerge --search '%^kde'"))
		print("                  list all packages starting with kde")
		print("              "+bold("emerge --search '%gcc$'"))
		print("                  list all packages ending with gcc")
		print("              "+bold("emerge --search '%@^dev-java.*jdk'"))
		print("                  list all available Java JDKs")
		print()
		print("       "+green("--searchdesc")+" ("+green("-S")+" short option)")
		print("              Matches the search string against the description field as well")
		print("              the package's name. Take caution as the descriptions are also")
		print("              matched as regular expressions.")
		print("                emerge -S html")
		print("                emerge -S applet")
		print("                emerge -S 'perl.*module'")
		print()
		print("       "+green("--sync"))
		desc = "This updates the portage tree that is located in the " + \
			"directory that the PORTDIR variable refers to (default " + \
			"location is /usr/portage). The SYNC variable specifies " + \
			"the remote URI from which files will be synchronized. " + \
			"The PORTAGE_SYNC_STALE variable configures " + \
			"warnings that are shown when emerge --sync has not " + \
			"been executed recently."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print(desc_indent + turquoise("WARNING:"))
		desc = "The emerge --sync action will modify and/or delete " + \
			"files located inside the directory that the PORTDIR " + \
			"variable refers to (default location is /usr/portage). " + \
			"For more information, see the PORTDIR documentation in " + \
			"the make.conf(5) man page."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print(desc_indent + green("NOTE:"))
		desc = "The emerge-webrsync program will download the entire " + \
			"portage tree as a tarball, which is much faster than emerge " + \
			"--sync for first time syncs."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--unmerge")+" ("+green("-C")+" short option)")
		print("              "+turquoise("WARNING: This action can remove important packages!"))
		print("              Removes all matching packages. This does no checking of")
		print("              dependencies, so it may remove packages necessary for the proper")
		print("              operation of your system. Its arguments can be atoms or")
		print("              ebuilds. For a dependency aware version of --unmerge, use")
		print("              --depclean or --prune.")
		print()
		print("       "+green("--version")+" ("+green("-V")+" short option)")
		print("              Displays the currently installed version of portage along with")
		print("              other information useful for quick reference on a system. See")
		print("              "+bold("emerge info")+" for more advanced information.")
		print()
		print(turquoise("Options:"))
		print("       "+green("--accept-properties=ACCEPT_PROPERTIES"))
		desc = "This option temporarily overrides the ACCEPT_PROPERTIES " + \
			"variable. The ACCEPT_PROPERTIES variable is incremental, " + \
			"which means that the specified setting is appended to the " + \
			"existing value from your configuration. The special -* " + \
			"token can be used to discard the existing configuration " + \
			"value and start fresh. See the MASKED PACKAGES section " + \
			"and make.conf(5) for more information about " + \
			"ACCEPT_PROPERTIES. A typical usage example for this option " + \
			"would be to use --accept-properties=-interactive to " + \
			"temporarily mask interactive packages. With default " + \
			"configuration, this would result in an effective " + \
			"ACCEPT_PROPERTIES value of \"* -interactive\"."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--alphabetical"))
		print("              When displaying USE and other flag output, combines the enabled")
		print("              and disabled flags into a single list and sorts it alphabetically.")
		print("              With this option, output such as USE=\"dar -bar -foo\" will instead")
		print("              be displayed as USE=\"-bar dar -foo\"")
		print()
		print("       "+green("--ask")+" ("+green("-a")+" short option)")
		desc = "Before performing the action, display what will take place (server info for " + \
			"--sync, --pretend output for merge, and so forth), then ask " + \
			"whether to proceed with the action or abort.  Using --ask is more " + \
			"efficient than using --pretend and then executing the same command " + \
			"without --pretend, as dependencies will only need to be calculated once. " + \
			"WARNING: If the \"Enter\" key is pressed at the prompt (with no other input), " + \
			"it is interpreted as acceptance of the first choice.  Note that the input " + \
			"buffer is not cleared prior to the prompt, so an accidental press of the " + \
			"\"Enter\" key at any time prior to the prompt will be interpreted as a choice! " + \
			"Use the --ask-enter-invalid option if you want a single \"Enter\" key " + \
			"press to be interpreted as invalid input."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("        " + green("--ask-enter-invalid"))
		desc = "When used together with the --ask option, " + \
			"interpret a single \"Enter\" key press as " + \
			"invalid input. This helps prevent accidental " + \
			"acceptance of the first choice. This option is " + \
			"intended to be set in the make.conf(5) " + \
			"EMERGE_DEFAULT_OPTS variable."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print() 
		print("       " + green("--autounmask") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "Automatically unmask packages. If any configuration " + \
			"changes are required, then they will be displayed " + \
			"after the merge list and emerge will immediately " + \
			"abort. If the displayed configuration changes are " + \
			"satisfactory, you should copy and paste them into " + \
			"the specified configuration file(s). Currently, " + \
			"this only works for unstable KEYWORDS masks, " + \
			"LICENSE masks, and package.use settings."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--backtrack") + " " + turquoise("COUNT"))
		desc = "Specifies an integer number of times to backtrack if " + \
			"dependency calculation fails due to a conflict or an " + \
			"unsatisfied dependency (default: '10')."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("        " + green("--binpkg-respect-use") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "Tells emerge to ignore binary packages if their use flags" + \
			" don't match the current configuration. (default: 'n')"
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--buildpkg") + \
			" [ %s | %s ] (%s short option)" % \
			(turquoise("y"), turquoise("n"), green("-b")))
		desc = "Tells emerge to build binary packages for all ebuilds processed in" + \
			" addition to actually merging the packages. Useful for maintainers" + \
			" or if you administrate multiple Gentoo Linux systems (build once," + \
			" emerge tbz2s everywhere) as well as disaster recovery. The package" + \
			" will be created in the" + \
			" ${PKGDIR}/All directory. An alternative for already-merged" + \
			" packages is to use quickpkg(1) which creates a tbz2 from the" + \
			" live filesystem."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--buildpkgonly")+" ("+green("-B")+" short option)")
		print("              Creates a binary package, but does not merge it to the")
		print("              system. This has the restriction that unsatisfied dependencies")
		print("              must not exist for the desired package as they cannot be used if")
		print("              they do not exist on the system.")
		print()
		print("       " + green("--changed-use"))
		desc = "This is an alias for --reinstall=changed-use."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--changelog")+" ("+green("-l")+" short option)")
		print("              When pretending, also display the ChangeLog entries for packages")
		print("              that will be upgraded.")
		print()
		print("       "+green("--color") + " < " + turquoise("y") + " | "+ turquoise("n")+" >")
		print("              Enable or disable color output. This option will override NOCOLOR")
		print("              (see make.conf(5)) and may also be used to force color output when")
		print("              stdout is not a tty (by default, color is disabled unless stdout")
		print("              is a tty).")
		print()
		print("       "+green("--columns"))
		print("              Display the pretend output in a tabular form. Versions are")
		print("              aligned vertically.")
		print()
		print("       "+green("--complete-graph") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "This causes emerge to consider the deep dependencies of all" + \
			" packages from the world set. With this option enabled," + \
			" emerge will bail out if it determines that the given operation will" + \
			" break any dependencies of the packages that have been added to the" + \
			" graph. Like the --deep option, the --complete-graph" + \
			" option will significantly increase the time taken for dependency" + \
			" calculations. Note that, unlike the --deep option, the" + \
			" --complete-graph option does not cause any more packages to" + \
			" be updated than would have otherwise been updated with the option disabled."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--config-root=DIR"))
		desc = "Set the PORTAGE_CONFIGROOT environment variable " + \
			"which is documented in the emerge(1) man page."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--debug")+" ("+green("-d")+" short option)")
		print("              Tell emerge to run the ebuild command in --debug mode. In this")
		print("              mode, the bash build environment will run with the -x option,")
		print("              causing it to output verbose debug information print to stdout.")
		print("              --debug is great for finding bash syntax errors as providing")
		print("              very verbose information about the dependency and build process.")
		print()
		print("       "+green("--deep") + " " + turquoise("[DEPTH]") + \
			" (" + green("-D") + " short option)")
		print("              This flag forces emerge to consider the entire dependency tree of")
		print("              packages, instead of checking only the immediate dependencies of")
		print("              the packages. As an example, this catches updates in libraries")
		print("              that are not directly listed in the dependencies of a package.")
		print("              Also see --with-bdeps for behavior with respect to build time")
		print("              dependencies that are not strictly required.")
		print()

		if _ENABLE_DYN_LINK_MAP:
			print("       " + green("--depclean-lib-check") + " [ %s | %s ]" % \
				(turquoise("y"), turquoise("n")))
			desc = "Account for library link-level dependencies during " + \
				"--depclean and --prune actions. This " + \
				"option is enabled by default. In some cases this can " + \
				"be somewhat time-consuming."
			for line in wrap(desc, desc_width):
				print(desc_indent + line)
			print()

		print("       "+green("--emptytree")+" ("+green("-e")+" short option)")
		desc = "Reinstalls target atoms and their entire deep " + \
			"dependency tree, as though no packages are currently " + \
			"installed. You should run this with --pretend " + \
			"first to make sure the result is what you expect."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--exclude") + " " + turquoise("ATOMS"))
		desc = "A space separated list of package names or slot atoms. " + \
			"Emerge won't  install any ebuild or binary package that " + \
			"matches any of the given package atoms."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--fail-clean") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "Clean up temporary files after a build failure. This is " + \
			"particularly useful if you have PORTAGE_TMPDIR on " + \
			"tmpfs. If this option is enabled, you probably also want " + \
			"to enable PORT_LOGDIR (see make.conf(5)) in " + \
			"order to save the build log."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--fetchonly")+" ("+green("-f")+" short option)")
		print("              Instead of doing any package building, just perform fetches for")
		print("              all packages (main package as well as all dependencies.) When")
		print("              used in combination with --pretend all the SRC_URIs will be")
		print("              displayed multiple mirrors per line, one line per file.")
		print()
		print("       "+green("--fetch-all-uri")+" ("+green("-F")+" short option)")
		print("              Same as --fetchonly except that all package files, including those")
		print("              not required to build the package, will be processed.")
		print()
		print("       " + green("--getbinpkg") + \
			" [ %s | %s ] (%s short option)" % \
			(turquoise("y"), turquoise("n"), green("-g")))
		print("              Using the server and location defined in PORTAGE_BINHOST, portage")
		print("              will download the information from each binary file there and it")
		print("              will use that information to help build the dependency list. This")
		print("              option implies '-k'. (Use -gK for binary-only merging.)")
		print()
		print("       " + green("--getbinpkgonly") + \
			" [ %s | %s ] (%s short option)" % \
			(turquoise("y"), turquoise("n"), green("-G")))
		print("              This option is identical to -g, as above, except it will not use")
		print("              ANY information from the local machine. All binaries will be")
		print("              downloaded from the remote server without consulting packages")
		print("              existing in the packages directory.")
		print()
		print("       " + green("--jobs") + " " + turquoise("[JOBS]") + " ("+green("-j")+" short option)")
		desc = "Specifies the number of packages " + \
			"to build simultaneously. If this option is " + \
			"given without an argument, emerge will not " + \
			"limit the number of jobs that " + \
			"can run simultaneously. Also see " + \
			"the related --load-average option. " + \
			"Note that interactive packages currently force a setting " + \
			"of --jobs=1. This issue can be temporarily avoided " + \
			"by specifying --accept-properties=-interactive."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--keep-going") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "Continue as much as possible after " + \
			"an error. When an error occurs, " + \
			"dependencies are recalculated for " + \
			"remaining packages and any with " + \
			"unsatisfied dependencies are " + \
			"automatically dropped. Also see " + \
			"the related --skipfirst option."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--load-average") + " " + turquoise("LOAD"))
		desc = "Specifies that no new builds should " + \
			"be started if there are other builds " + \
			"running and the load average is at " + \
			"least LOAD (a floating-point number). " + \
			"This option is recommended for use " + \
			"in combination with --jobs in " + \
			"order to avoid excess load. See " + \
			"make(1) for information about " + \
			"analogous options that should be " + \
			"configured via MAKEOPTS in " + \
			"make.conf(5)."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--newuse")+" ("+green("-N")+" short option)")
		desc = "Tells emerge to include installed packages where USE " + \
			"flags have changed since compilation. This option " + \
			"also implies the --selective option."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--noconfmem"))
		print("              Portage keeps track of files that have been placed into")
		print("              CONFIG_PROTECT directories, and normally it will not merge the")
		print("              same file more than once, as that would become annoying. This")
		print("              can lead to problems when the user wants the file in the case")
		print("              of accidental deletion. With this option, files will always be")
		print("              merged to the live fs instead of silently dropped.")
		print()
		print("       "+green("--nodeps")+" ("+green("-O")+" short option)")
		print("              Merge specified packages, but don't merge any dependencies.")
		print("              Note that the build may fail if deps aren't satisfied.")
		print() 
		print("       "+green("--noreplace")+" ("+green("-n")+" short option)")
		print("              Skip the packages specified on the command-line that have")
		print("              already been installed.  Without this option, any packages,")
		print("              ebuilds, or deps you specify on the command-line *will* cause")
		print("              Portage to remerge the package, even if it is already installed.")
		print("              Note that Portage won't remerge dependencies by default.")
		desc = "Also note that this option takes " + \
			"precedence over options such as --newuse, preventing a package " + \
			"from being reinstalled even though the corresponding USE flag settings " + \
			"may have changed."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print() 
		print("       "+green("--nospinner"))
		print("              Disables the spinner regardless of terminal type.")
		print()
		print("       "+green("--oneshot")+" ("+green("-1")+" short option)")
		print("              Emerge as normal, but don't add packages to the world profile.")
		print("              This package will only be updated if it is depended upon by")
		print("              another package.")
		print()
		print("       "+green("--onlydeps")+" ("+green("-o")+" short option)")
		print("              Only merge (or pretend to merge) the dependencies of the")
		print("              specified packages, not the packages themselves.")
		print()
		print("       " + green("--package-moves") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "Perform package moves when necessary. This option " + \
			"is enabled by default. WARNING: This option " + \
			"should remain enabled under normal circumstances. " + \
			"Do not disable it unless you know what you are " + \
			"doing."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--pretend")+" ("+green("-p")+" short option)")
		print("              Instead of actually performing the merge, simply display what")
		print("              ebuilds and tbz2s *would* have been installed if --pretend")
		print("              weren't used.  Using --pretend is strongly recommended before")
		print("              installing an unfamiliar package.  In the printout, N = new,")
		print("              U = updating, R = replacing, F = fetch  restricted, B = blocked")
		print("              by an already installed package, D = possible downgrading,")
		print("              S = slotted install. --verbose causes affecting use flags to be")
		print("              printed out accompanied by a '+' for enabled and a '-' for")
		print("              disabled USE flags.")
		print()
		print("       "+green("--quiet")+" ("+green("-q")+" short option)")
		print("              Effects vary, but the general outcome is a reduced or condensed")
		print("              output from portage's displays.")
		print()
		print("       "+green("--quiet-build"))
		desc = "Redirect all build output to logs alone, and do not " + \
			"display it on stdout."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--quiet-unmerge-warn"))
		desc = "Disable the warning message that's shown prior to " + \
			"--unmerge actions. This option is intended " + \
			"to be set in the make.conf(5) " + \
			"EMERGE_DEFAULT_OPTS variable."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--rebuilt-binaries") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "Replace installed packages with binary packages that have " + \
			"been rebuilt. Rebuilds are detected by comparison of " + \
			"BUILD_TIME package metadata. This option is enabled " + \
			"automatically when using binary packages " + \
			"(--usepkgonly or --getbinpkgonly) together with " + \
			"--update and --deep."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--rebuilt-binaries-timestamp") + "=%s" % turquoise("TIMESTAMP"))
		desc = "This option modifies emerge's behaviour only if " + \
			"--rebuilt-binaries is given. Only binaries that " + \
			"have a BUILD_TIME that is larger than the given TIMESTAMP " + \
			"and that is larger than that of the installed package will " + \
			"be considered by the rebuilt-binaries logic."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--reinstall ") + turquoise("changed-use"))
		print("              Tells emerge to include installed packages where USE flags have")
		print("              changed since installation.  Unlike --newuse, this option does")
		print("              not trigger reinstallation when flags that the user has not")
		print("              enabled are added or removed.")
		print()
		print("       "+green("--root=DIR"))
		desc = "Set the ROOT environment variable " + \
			"which is documented in the emerge(1) man page."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--root-deps[=rdeps]"))
		desc = "If no argument is given then build-time dependencies of packages for " + \
			"ROOT are installed to " + \
			"ROOT instead of /. If the rdeps argument is given then discard " + \
			"all build-time dependencies of packages for ROOT. This option is " + \
			"only meaningful when used together with ROOT and it should not " + \
			"be enabled under normal circumstances. For currently supported " + \
			"EAPI values, the build-time dependencies are specified in the " + \
			"DEPEND variable. However, behavior may change for new " + \
			"EAPIs when related extensions are added in the future."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--select") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "Add specified packages to the world set (inverse of " + \
			"--oneshot). This is useful if you want to " + \
			"use EMERGE_DEFAULT_OPTS to make " + \
			"--oneshot behavior default."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--selective") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "This is similar to the --noreplace option, except that it " + \
			"does not take precedence over options such as --newuse. " + \
			"Some options, such as --update, imply --selective. " + \
			"Use --selective=n if you want to forcefully disable " + \
			"--selective, regardless of options like --update."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--skipfirst"))
		desc = "This option is only valid when " + \
			"used with --resume.  It removes the " + \
			"first package in the resume list. " + \
			"Dependencies are recalculated for " + \
			"remaining packages and any that " + \
			"have unsatisfied dependencies or are " + \
			"masked will be automatically dropped. " + \
			"Also see the related " + \
			"--keep-going option."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--tree")+" ("+green("-t")+" short option)")
		print("              Shows the dependency tree using indentation for dependencies.")
		print("              The packages are also listed in reverse merge order so that")
		print("              a package's dependencies follow the package. Only really useful")
		print("              in combination with --emptytree, --update or --deep.")
		print()
		print("       " + green("--unordered-display"))
		desc = "By default the displayed merge list is sorted using the " + \
			"order in which the packages will be merged. When " + \
			"--tree is used together with this option, this " + \
			"constraint is removed, hopefully leading to a more " + \
			"readable dependency tree."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       "+green("--update")+" ("+green("-u")+" short option)")
		desc = "Updates packages to the best version available, which may " + \
			"not always be the  highest version number due to masking " + \
			"for testing and development. Package atoms specified on " + \
			"the command line are greedy, meaning that unspecific " + \
			"atoms may match multiple versions of slotted packages."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--use-ebuild-visibility") + " [ %s | %s ]" % \
			(turquoise("y"), turquoise("n")))
		desc = "Use unbuilt ebuild metadata for visibility " + \
			"checks on built packages."
		for line in wrap(desc, desc_width):
			print(desc_indent + line)
		print()
		print("       " + green("--usepkg") + \
			" [ %s | %s ] (%s short option)" % \
			(turquoise("y"), turquoise("n"), green("-k")))
		print("              Tell emerge to use binary packages (from $PKGDIR) if they are")
		print("              available, thus possibly avoiding some time-consuming compiles.")
		print("              This option is useful for CD installs; you can export")
		print("              PKGDIR=/mnt/cdrom/packages and then use this option to have")
		print("              emerge \"pull\" binary packages from the CD in order to satisfy") 
		print("              dependencies.")
		print()
		print("       " + green("--usepkgonly") + \
			" [ %s | %s ] (%s short option)" % \
			(turquoise("y"), turquoise("n"), green("-K")))
		print("              Like --usepkg above, except this only allows the use of binary")
		print("              packages, and it will abort the emerge if the package is not")
		print("              available at the time of dependency calculation.")
		print()
		print("       "+green("--verbose")+" ("+green("-v")+" short option)")
		print("              Effects vary, but the general outcome is an increased or expanded")
		print("              display of content in portage's displays.")
		print()
		print("       "+green("--with-bdeps")+" < " + turquoise("y") + " | "+ turquoise("n")+" >")
		print("              In dependency calculations, pull in build time dependencies that")
		print("              are not strictly required. This defaults to 'n' for installation")
		print("              actions and 'y' for the --depclean action. This setting can be")
		print("              added to EMERGE_DEFAULT_OPTS (see make.conf(5)) and later")
		print("              overridden via the command line.")
		print()
