# organized / sorted USE flags

## chris.pickett

EDIT:  I plan on cleaning this up sometime and summarizing at the top for everyone.  There is also a great script that Narada wrote to list USE flag info for your system, I'll write about it at some point too.

Hi.  I am installing Gentoo for the first time.  I found it a nightmare going through all the different USE flags, trying to determine which ones to set / unset / leave alone for my system.  Sure, some of them are obvious, but many are not and require googling.

So, while waiting for bootstrapping to complete, I've organized the USE flags into many different sections.  It helps me a lot to think of them like this.

I rearranged them and grouped them under new headings.  I'm sure that some of the time, they are not organized properly, so I need your help with that (I will edit this post if you like -- let me know what's best).  I also think that it might be handy to have a couple of fields next to the use flag name, such that you can sort on the 1st, 2nd, 3rd field easily at the command line.

If anyone thinks it's worth submitting to the official doc maintainers, I'd be more than happy; just tell me if so and where :)

So, here we go:

computer_languages:

atlas Adds support for atlas instead of blas in dev-lang/R

guile Adds support for dev-util/guile (interpreter for Scheme)

java Adds support for Java

perl Adds support/bindings for the Perl language.

python Adds support/bindings for the Python language

ruby Adds support/bindings for the Ruby language

xml Check/Support flag for XML library (version 1)

xml2 Check/Support flag for XML library (version 2)

core_cpu_type: 

x86 indicates that architecture is x86

ppc indicates that architecture is PowerPC

ppc64 indicates that architecture is PowerPC64

sparc indicates that architecture is (32-bit) Sparc

alpha indicates that architecture is 64-bit Alpha

mips indicates that architecture is MIPS based

hppa indicates that architecture is HP PA-Risc

arm indicates that architecture is ARM

amd64 indicates that architecture is AMD64

databases:

berkdb Adds support for sys-libs/db (Berkeley DB for MySQL)

firebird Adds support for the Firebird relational database

freetds Adds support for the TDS protocol to connect to MSSQL/Sybase databases

gdbm Adds support for sys-libs/gdbm (GNU database libraries)

informix Adds support for Informix database

innodb Adds innodb support for mySQL (transaction support)

libg++ Adds C++ modules in dev-db/postgresql (libpq++)

mysql Adds mySQL support

oci8 Adds Oracle Support

odbc Adds ODBC Support (Open DataBase Connectivity)

postgres Adds support for the postgresql database

sqlite Adds support for sqlite - embedded sql database

desktop_environments:

gnome Adds GNOME support

kde Adds support for kde-base/kde (K Desktop Enviroment)

displays:

dga Adds DGA Support (Xfree86) (DGA=Direct Graphic Access)

directfb Adds support for DirectFB layer (library for FB devices)

fbcon Adds framebuffer support for the console, via the kernel

ggi Adds support for media-libs/libggi (non-X video api/drivers)

gpm Adds support for sys-libs/gpm (Console-based mouse driver)

ncurses Adds ncurses support (console display library)

opengl Adds support for OpenGL

slang Adds support for the slang text display library (it's like ncurses, but different)

svga Adds support for SVGAlib (graphics library)

truetype Adds support for FreeType and/or FreeType2 fonts

X Adds support for XFree86

xosd Sends display using the X On Screen Display library

distributed_computing:

afs Adds OpenAFS support (distributed file system)

mpi Adds MPI (Message Passing Interface) layer to the apps that support it.

extra_hardware:

acpi Adds support for Advanced Configuration and Power Interface

apm Adds APM (Advanced Power Management) support

cdr Adds support for CD writer hardware (e.g. compile the koncd app in kdemultimedia)

cups Add support for CUPS (Common Unix Printing System)

dvd Adds support for DVDs

dvdr Adds support for DVD writer hardware (e.g. in xcdroast)

foomaticdb Adds support for the foomatic printing driver database

gphoto2 Adds digital camera support

gps Adds support for Global Positioning System

joystick Add support for joysticks in all packages

lirc Adds support for lirc (Linux's Infra-Red Remote Control)

nocardbus Disables cardbus support in pcmcia-cs

pcmcia Adds support for PCMCIA slots/devices found on laptop computers

pda Adds support for portable devices.

pnp Adds support for PNP in pcmcia-cs (Plug-N-Play)

ppds Adds support for automatically generated ppd (printing driver) files

scanner Adds support for scanner hardware (e.g. build the sane frontend in kdegraphics)

slp Adds Service Locator Protocol support to CUPS

usb Adds USB support to applications that have optional USB support (e.g. cups)

wavelan Tells pcmcia-cs that you want to use the built-in wvlan drivers instead of the Orinoco drivers

xinerama Add support for XFree86's xinerama extension, which allows you to stretch your display across multiple monitors

human_languages:

bidi Enables bidirectional language support

canna Adds support for the Canna kana to kanji conversion engine

cjk Adds support for Multi-byte character languages (Chinese, Japanese, Korean)

freewnn Adds support for FreeWnn kana to kanji conversion engine

mule Adds multi-language support to XEmacs

nls Adds Native Language Support (using gettext - GNU locale utilities)

unicode Adds support for Unicode

instant_messaging:

aim Enable AIM IM protocol support

icq Enable ICQ IM protocol support

jabber Enable jabber IM protocol support

msn Enable MSN Messenger IM protocol support

oscar Enable Oscar (AIM/ICQ) IM protocol support

yahoo Enable Yahoo Messenger IM protocol support

internal_and_or_BE_CAREFUL:

bootstrap !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used during original system bootstrapping

build !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used for creating build images and the first half of bootstrapping.

livecd !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used during livecd building.

selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur

static !!do not set this during bootstrap!! Causes things to be statically linked instead of dynamically

mail:

evo Adds support for evolution in gnumeric and multisync

imap Adds support for IMAP

ldap Adds LDAP support (Lightweight Directory Access Protocol)

maildir Adds support for maildir (~/.maildir) style mail spools

mbox Adds support for mbox (/var/spool/mail) style mail spools

xface Adds xface support -- only in use for sylpheed and sylpheed-claws

multimedia_audio:

audiofile Adds support for libaudiofile where applicable

encode Adds support for MEncoder or LaME encoder, wherever applicable

flac Adds support for the flac audio codec

mad Adds support for mad (high-quality mp3 decoder library and cli frontend)

mikmod Adds libmikmod support to allow playing of SoundTracker-style music files

oggvorbis Adds support for the OggVorbis audio encoding

speex Adds support for the speex audio codec

multimedia_images:

aalib Adds support for media-libs/aalib (ASCII-Graphics Library)

gif Adds GIF image support

imlib Adds support for media-libs/imlib (Image loading and rendering library)

imagemagick Enables support for Imagemagick (image converter)

jpeg Adds JPEG image support

lcms Adds lcms support to media-gfx/imagemagick (Color management)

png Adds support for libpng (PNG images)

tiff Adds support for the tiff image format

wmf Adds support for the wmf vector image format

multimedia_video:

avi Adds Win32 AVI support and also adds avifile (Library for avi) support

dvb Adds support for DVB (Digital Video Broadcasting)

theora Adds support for the Theora Video Compression Codec

xv Adds in optional support for the Xvideo extension (an X API for video playback)

multimedia_other:

flash Adds support for creating flash files using Ming

gd Adds support for media-libs/libgd (to generate graphics on the fly)

gd-external Use the external version of libgd rather than the bundled one (possibly dangerous)

gstreamer Adds support for media-libs/gstreamer (Streaming media)

matrox Adds Matrox MGA support to mplayer

mpeg Adds libmpeg3 support to various packages.

quicktime Adds support for OpenQuickTime

xmms Check/Support for XMMS (X MultiMedia System) player.

networking:

apache2 Chooses Apache2 support when a package supports both Apache1 and Apache2

adns Adds support for the adns DNS client library

curl Adds support for client-side URL transfer library

dedicated Adds support for dedicated game servers

ethereal Adds support for ethereal wiretap log support in kismet

ipv6 Adds support for IP version 6

kerberos Adds kerberos support

krb4 Adds optional kerberos 4 compatibility support

samba Adds support for SAMBA

sasl Adds support for the Simple Authentication and Security Layer

snmp Adds support for the Simple Network Management Protocol if available

socks5 Adds support for the socks5 proxy

ssl Adds support for Secure Socket Layer connections

tcpd Adds support for TCP wrappers

vhosts Adds support for installing web-based applications into a virtual-hosting environment

yaz Adds in optional support for the Z39.50 Protocol for Information Retrieval (YAZ)

office_like_stuff:

bonobo Adds support for gnome-base/bonobo (Gnome CORBA interfaces)

cscope Enables cscope interface -- in vim for example

emacs Adds support for GNU Emacs

gb Adds support for Gnome Basic to gnumeric

junit Adds junit awareness -- useful for developers.

leim Adds input methods support to Emacs

libgda Adds GNU Data Access (CORBA wrapper) support for gnumeric

mcal Adds support for MCAL calender system

pdflib Adds support for PDF (Portable Document Format)

plotutils Adds plotutils support to gnuplot (library for 2-D vector graphics)

spell Adds dictionary support

tetex Adds support for teTeX

processor_instruction_sets: 

3dnow Adds support for 3dnow multimedia processor instructions

altivec Adds support for optimizations for G4 and G5/ppc970 processors

ev6 Assume Alpha processor is EV6 or better

mmx Adds support for optimizations for Pentium MMX and Athlon class processors

sse fast floating point optimisation for Pentium class chips

scientific:

fftw Use FFTW library for computing Fourier transforms

ginac Adds app-sci/ginac (symbolic math) support

gmp Adds support for dev-libs/gmp (GNU MP library)

netcdf Enable NetCDF data format support

security:

acl Adds support for Access Control Lists

caps Use Linux capabilities library to control privileges.

crypt Add support for encryption -- using mcrypt or gpg where applicable

hardened activate the default security implementation of specific Gentoo Hardened patches (kernel, gcc, glibc, binutils)

pam Adds support PAM (Pluggable Authentication Modules)

prelude Adds support/bindings for the Prelude Intrusion Detection System

trusted used by pcmcia-cs to see if a regular user can add and remove pcmcia cards

server_only_stuff:

fastcgi Add support for the FastCGI interface

fdftk Add supports for Adobe's FDF toolkit.

zeo Adds support for Zope Enterprise Objects

sound:

alsa Adds support for media-libs/alsa-lib (Advanced Linux Sound Architecture)

arts Adds support for aRts: the KDE sound daemon

esd Adds support for media-sound/esound (Enlightened Sound Daemon)

jack Adds support for the JACK Audio Connection Kit

ladcca Adds Linux Audio Developer's Configuration and Connection API support (LADCCA)

nas Adds support for network audio sound

oss Adds support for OSS (Open Sound System)

system:

accessibility Adds support for accessibility (eg 'at-spi' library)

bindist Flag to enable or disable options for prebuilt (GRP) packages (eg. due to licensing issues)

debug Tells configure and the makefiles to build for debugging. Effects vary acrosss packages, but generally it will at least add -g to CFLAGS. Remember to set FEATURES+=nostrip too.

doc Adds extra documentation (API, Javadoc, etc)

fam Enable FAM support (File Alteration Monitor)

icc Add support for the Intel C++ Compiler (does _not_ set $CC)

icc-pgo Enable PGO data generation or use when use icc.

jikes Compile Java source code with jikes (faster)

memlimit Adds memory usage limiting in supporting programs

nhc98 Use the nhc98 Haskell compiler instead of GHC if the package supports it

nocd Tells emerge to install all files required to run the application without a CD mounted

offensive Enables potentially offensive items in packages

readline enables support for libreadline, a GNU line-editing library that most everyone wants.

sdl Adds support for Simple Direct Layer (media library)

videos Tells portage to install optional video files (used in some games)

zlib Adds support for zlib (de)compression

video_cards:

3dfx Adds support for 3dfx video cards to XFree86. See: voodoo3

voodoo3 Adds support for 3Dfx's Voodoo3 video chipset, else defaults to Voodoo4/5 support if not in USE.

web_browsing:

emacs-w3 Add support for Emacs/W3 where applicable

libwww Adds libwww support (General purpose WEB API)

mozilla Adds mozilla support

widgets:

gtk Adds support for x11-libs/gtk+ (The GIMP Toolkit)

gtk2 Use gtk+-2.0.0 over gtk+-1.2 in cases where a program supports both.

gtkhtml Adds support for gnome-extra/gtkhtml

lesstif Use lesstif over openmotif in cases where a program supports both

motif Adds motif support (x11-libs/openmotif x11-libs/lesstif)

qt Adds support for the Qt library.

tcltk Support for Tcl and/or Tk

Xaw3d Adds support of the 3d athena widget set

wxwindows Adds support for wxWindows/wxGTKLast edited by chris.pickett on Mon Apr 12, 2004 9:38 am; edited 1 time in total

----------

## smith84594

Well....

if you forget a flag and emerge keeps giving you errors after you add it in, you can always do a emerge -e -D world....

...*expletive deleted*

Yeah.  Good job.  This would make gen2'ers lives a whole hell of alot nicer.

Definately should be submitted to the documentators.

Better yet, if they could somehow make include that as part of the default makefile (commented out of course), it would make system customization a snap  :Very Happy: 

----------

## chris.pickett

So, who do I contact?

I've since discovered the whole NPTL thing (an undocumented USE flag), and just from the output of

# emerge --pretend --verbose system

there's a few other undocumented flags:

undocumented:

chroot ???

justify ???

nptl Add support for the Native Posix Thread Library

pwdb ???

skey ???

ucs2 ???

threads ???

X509 ???

Anybody wanna help fill in the ???'s?

----------

## karnesky

 *chris.pickett wrote:*   

> 
> 
> there's a few other undocumented flags:
> 
> chroot Enable chrooting in openssh
> ...

 

I filled them in.  Try emerging ufed (the USE flags editor) & you can see all the description & have a convenient way to flip things on or off.

----------

## karnesky

You can also look at /usr/portage/profiles/use.desc or "euse -i [flag]"

----------

## chris.pickett

Thanks for pointing that out (I missed it in make.conf).  I'll send a message to gentoo-dev, see what they say about if it's a good idea, where the best place to make the change would be, and if ufed could be changed to have use flag categories.  Cheers!

----------

## chris.pickett

After some more experience installing ... I've come to think that the best way to deal with USE flags is to set them incrementally, when you need them, as determined by 'emerge -a' or 'emerge -p'.  I think a lot of newbies probably obsess over whether they've got every single flag set properly, and whether they've looked at each flag (certainly I've seen a few other posts about it); it would be helpful if the install guide said something along the lines of "just worry about those USE flags affecting the packages you want to install NOW".  Of course, categorization could still be useful, but I thought I would mention this in case any newcomers are reading this post.

----------

## revertex

Maybe a moderator can make this thead sticky?

----------

## wolf31o2

You can also look in /usr/portage/profiles/use.local.desc to see the flags that you are calling "undocumented".  Gentoo has both global use flags and also local use flags.  Local flags are ones that only affect a single package and are not deemed usable in other packages.

----------

## lolowen

what about pic? it adds -fpic when compiling libaries

----------

## cgreene

Very useful!  Just setup a new gentoo install on a laptop and I got my use flags setup much better than I did when I setup this machine.

----------

## kaidon

after a few gentoo installations, and after installing and compiling tons of things i never really needed/wanted i came up with this:

i start with

USE="-* x86"

and then, as chris.pickett pointed out, add more USE flags as i emerge stuff.

like this i can allways focus on what i'm installing right now.

the -* turns off all previously set flags, even the default ones.

cheers

----------

## vlack

 *karnesky wrote:*   

> You can also look at /usr/portage/profiles/use.desc or "euse -i [flag]"

 

euse should be put in the install docs somewhere. 

Just this morning I set up a tcsh alias 'alias ugrep "grep \!* /usr/portage/profiles/use.desc"' to accomplish this very same thing... heh.

----------

## Molerat

Well chris.pickett, I found your post very informative.

I'm one of the relative n00bs that is overwhelmed by use flags.  And while there is a description associated with each, they do often require a bit of googling to figure out what they mean:

"atlas - adds support for atlas instead of blas in dev-lang/R"

That tells me nothing.  It took a Google search to figure out just what atlas and blas were.

FWIW, I think Gentoo could use a bit more documentation by way of USE flags.  Yes, we all get that they are powerful, but one has to do a bit of homework (Google, read the forums) before they one really gets a sense of how best to use them.

Anywho, thanks for the reference!

----------

## beastmaster

my USE flag just keep growing and growing   :Rolling Eyes: 

----------

## Dreamsmith

 *beastmaster wrote:*   

> my USE flag just keep growing and growing  

 

There's a nice trick for keeping your USE variable down in size and keeping things sorted: a lot of USE flags are only used by a few packages.  Instead of adding them to the global USE flag, instead put them in /etc/portage/package.use.  For example, the GAPING_SECURITY_HOLE flag is only used by one package (netcat), and even if it wasn't, that's the kind of thing you'd probably want to set on a package by package basis anyhow.  Instead of adding it to your global USE flag, instead add the line:

net-analyzer/netcat GAPING_SECURITY_HOLE

to /etc/portage/package.use and keep the global flag clean.

(Incidently, the so called "gaping security hole" in netcat is mostly harmless and sometimes useful.  I agree with the Debian packager that thinks this should be the default.)

----------

## someguy42

Wow! I've been looking for something like this for quite a while! Great job, and thanks!

----------

## dhurt

Found this thread earlier today while browsing around and then come to find out I needed it tonight.  Thanks for putting it together  :Very Happy: 

----------

## DevSolar

 *Molerat wrote:*   

> 
> 
> I'm one of the relative n00bs that is overwhelmed by use flags.  And while there is a description associated with each, they do often require a bit of googling to figure out what they mean...
> 
> 

 

Same with me; that's why I started work on USE Flags explained in the Gentoo Wiki. As a first step, I want to add a link to every USE flag that points to some page relevant to the flag in question.

Since I am pretty busy at all times, and without my home system ATM (installing Gentoo...  :Wink:  ), I would very much welcome even the most minute help.

@ chris.picket:

I would strongly suggest moving your excellent list to the Gentoo Wiki, too. From my experience, a Wiki is just the thing for user-contributed documentation like yours. I think the USE flag documentation requires significant improvement, and in the Wiki, every user can add a link or an explanation (instead of you having to edit your initial post every time).

I invite you to categorize the lines of the aforementioned Wiki page to fit your grouping (actually, anyone interested could do that), and we could continue from there.

Does that sound like a plan?

----------

## RedRaider

Nice list  :Smile:  Yesterday I compared the USE flags in my make.default to the flags explained in the handbook and noticed that there were a few flags that weren't documented too:

bitmap-fonts

f77

font-server

fortran

truetype-fonts

type1-fonts

How about highlighting the USE flags in your list that are turned on by default in make.default?

----------

## DevSolar

If you refer to the Wiki list, just go for it and add / edit what you consider appropriate. That's what a Wiki is for!   :Very Happy: 

As for me, I didn't find much time to continue with that list, as I'm working on several other projects that have priority right now, so your help will be much appreciated.

----------

## Mattwolf7

http://www.gentoo-portage.com/USE

Every package and their use flags and what the flags mean.

----------

## griffinme

"oggvorbis - Adds support for the OggVorbis audio encoding - DEPRECATED useflag"

"vorbis - Adds support for the OggVorbis audio codec"

From my use.desc

Great post

Been very helpful in getting my settings for make the way I want them.

I have an Athlon64, I keep seeing people posting with sse and 3Dnow and such in their USE flags. Aren't those covered by 'march=~k8'?

From the Gentoo AMD64 documentation; 

"3.j. USE Flags That Are Ignored

The mmx, 3dnow, sse and sse2 USE flags are ignored on AMD64, since all AMD64 processors support those instruction sets. The are ignored because they enable 32bit assembly optimisation for some packages."

Are people just not aware of this or is the documentation wrong?

----------

## petteyg359

Hmm...

emerge --info | grep FEATURES

showed also 3dnowext and mmxext... I don't know if they're valid USE flags, but CPUID lists my Athlon XP 2700+ as having:

AMD 3DNow!

AMD 3DNow! Professional

AMD Enhanced 3DNow!

AMD Extended MMX

I assume 3dnow includes the top two, 3dnowext is AMD Enhanced 3DNow!, and mmxext is AMD Extended MMX. From doing "emerge --verbose" on stuff, I haven't seen either 3dnowext or mxxext listed, but they're in my make.conf anyway.

----------

