Provided by: dpkg-dev_1.18.4ubuntu1.7_all bug

NAMN

       dpkg-buildflags - returnerar byggflaggor att använda för att bygga paket

SYNOPS

       dpkg-buildflags [flagga...] kommando

BESKRIVNING

       dpkg-buildflags är ett verktyg för att hämta kompileringsflaggor att använda för att bygga
       Debianpaket. De förvalda flaggorna anges av leverantören, men de kan utökas/överstyras  på
       flera sätt:

       1.     på hela systemet med /etc/dpkg/buildflags.conf;

       2.     för   den   nuvarande   användaren  med  $XDG_CONFIG_HOME/dpkg/buildflags.conf  där
              $XDG_CONFIG_HOME har standardvärdet $HOME/.config;

       3.     temporärt av användaren med miljövariabler (se stycket MILJÖ).

       4.     dynamiskt av paketansvariga med  miljövariabler  som  sätts  via  debian/rules  (se
              stycket MILJÖ).

       Konfigurationsfilerna kan innehålla två sorters direktiv:

       SET flagga värde
              Överstyr flaggan flagga till att ha värdet värde.

       STRIP flagga värde
              Ta bort alla flaggor som listas i värde från flaggan som anges i flagga.

       APPEND flagga värde
              Utöka  flaggan  flagga  genom  att  lägga  till alternativen som anges i värde. Ett
              blanksteg läggs till före värdet om flaggans nuvarande värde inte är tomt.

       PREPEND flagga värde
              Utöka flaggan flagga genom att lägga till alternativen som anges i värde först. Ett
              blanksteg läggs till efter värdet om flaggans nuvarande värde inte är tomt.

       Konfigurationsfilerna  kan  innehålla kommentarer på rader som börjar med ett nummertecken
       (#). Även tomma rader ignoreras.

KOMMANDON

       --dump Print to standard output all compilation flags and their values. It prints one flag
              per  line  separated  from  its  value by an equal sign (“flag=value”). This is the
              default action.

       --list Skriv ut listan över flaggor som stöds av den aktuella leverantören (en  per  rad).
              Se stycket FLAGGOR SOM STÖDS för mer information om dem.

       --status
              Display   any   information  that  can  be  useful  to  explain  the  behaviour  of
              dpkg-buildflags  (since  dpkg  1.16.5):  relevant  environment  variables,  current
              vendor,  state  of  all feature flags. Also print the resulting compiler flags with
              their origin.

              Detta är tänkt att köras från debian/rules så att byggloggen innehåller ett tydligt
              spår  över  de använda byggflaggorna. Det kan vara användbart för att diagnostisera
              problem rörande dessa.

       --export=format
              Skriv kommandon som kan användas för att  exportera  alla  kompileringsflaggor  för
              något  specifikt verktyg. Om format inte anges antas sh. Endast kompileringsflaggor
              som börjar med en stor bokstav tas med, andra antas  att  inte  vara  lämpliga  för
              miljön. Format som stöds:

              sh     Skalkommandon för att sätta och exportera alla kompileringsflaggor i miljön.
                     Flaggvärdena citeras så att utdata är redo att utvärderas av ett skal.

              cmdline
                     Argument att sända till byggprogrammets kommandorad  för  att  använda  alla
                     kompileringsflaggor  (sedan  dpkg  1.17.0).  Flaggornas värde citeras enligt
                     skalsyntax.

              configure
                     Detta är ett gammalt alias för cmdline.

              make   Make-direktiv för att sätta och exportera alla kompileringsflaggor i miljön.
                     Utdata  kan  skrivas  till  ett  makefil-fragment  och  utvärderas  med  ett
                     include-direktiv.

       --get flagga
              Skriv ut värdet på flaggan på standard ut. Avslutar med 0 om flaggan  är  känd,  om
              inte avslutar den med 1.

       --origin flagga
              Anger ursprunget till flaggan som returneras av --get. Avslutar med 0 om flaggan är
              känd, om inte avslutar med 1. Ursprunget kan vara ett av följande värden:

              vendor originalflagga satt av leverantören returneras;

              system flaggan är satt/modifierad av systemkonfigurationen;

              user   flaggan är satt/modifierad av användarkonfigurationen;

              env    flaggan är satt/modifierad av en miljöspecifik konfiguration.

       --query-features area
              Print the features enabled for a given area (since dpkg 1.16.2). The only currently
              recognized  areas  on  Debian  and  derivatives  are qa, reproducible, sanitize and
              hardening, see the FEATURE AREAS section for more details. Exits with 0 if the area
              is known otherwise exits with 1.

              Utdata är på RFC822-headerformat, med en sektion per funktion. Till exempel:

                Feature: pie
                Enabled: no

                Feature: stackprotector
                Enabled: yes

       --help Visar hjälpskärm och avslutar.

       --version
              Visar version och avslutar.

FLAGGOR SOM STÖDS

       CFLAGS Flaggor  för  C-kompilatorn. Standardvärdet som satts av leverantören innehåller -g
              och den förvalda optimeringsnivån (vanligtvis  -O2,  eller  -O0  om  miljövariabeln
              DEB_BUILD_OPTIONS definierar noopt).

       CPPFLAGS
              Flaggor för C-förprocesseraren. Förvalt värde: tomt.

       CXXFLAGS
              Flaggor för C++-kompilatorn. Samma som CFLAGS.

       OBJCFLAGS
              Flaggor för Objective C-kompilatorn. Samma som CFLAGS.

       OBJCXXFLAGS
              Flaggor för Objective C++-kompilatorn. Samma som CFLAGS.

       GCJFLAGS
              Flaggor för GNU Java-kompilatorn (gcj). En delmängd av CFLAGS.

       FFLAGS Flaggor för Fortran 7-kompilatorn. En delmängd av CFLAGS.

       FCFLAGS
              Flaggor för Fortran 9x-kompilatorn. Samma som CFLAGS.

       LDFLAGS
              Flaggor  som sänds till kompilatorn vid länkning av binärer eller delade objekt (om
              länkaren  anropas  direkt  måste  -Wl  och  ,  tas  bort   från   dessa   flaggor).
              Standardvärde: tomt.

       Nya flaggor kan komma att läggas till i framtiden om behovet uppstår (till exempel för att
       stöda andra språk).

FUNKTIONSOMRÅDEN

       Each  area  feature  can  be  enabled  and   disabled   in   the   DEB_BUILD_OPTIONS   and
       DEB_BUILD_MAINT_OPTIONS  environment  variable's area value with the ‘+’ and ‘-’ modifier.
       For example, to enable the hardening “pie” feature and disable the “fortify”  feature  you
       can do this in debian/rules:

         export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify

       The  special  feature  all  (valid  in any area) can be used to enable or disable all area
       features at the same time. Thus disabling everything in the hardening  area  and  enabling
       only “format” and “fortify” can be achieved with:

         export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify

   qa
       Flera  kommandoradsflaggor  (beskrivna  nedan)  kan  användas för att göra det lättare att
       hitta problem i källkoden eller byggsystemet.

       bug    Den här inställningen (inaktiverad som standard) lägger till  alla  varningsflaggor
              som   på  ett  pålitligt  sätt  detekterar  problematisk  källkod.  Varningarna  är
              ödesdigra.

       canary Den  här  inställningen  (inaktiverad  som   standard)   lägger   till   overksamma
              tjallarflaggor  till byggflaggorna, så att byggloggarna kan kontrolleras för att se
              hur byggflaggor vidarebefordras för att göra det  enklare  att  hitta  när  vanliga
              byggflagor  utesluts. De enda flaggor som stöds är för närvarande CPPFLAGS, CFLAGS,
              OBJCFLAGS,    CXXFLAGS    och    OBJCXXFLAGS    med    flaggorna     satta     till
              -D__DEB_CANARY_flag_slumpmässigt-id__,       och       LDFLAGS       satt      till
              -Wl,-z,deb-canary-slumpmässigt-id.

   sanitize
       Several compile-time options (detailed below) can be used to  help  sanitize  a  resulting
       binary  against memory corruptions, memory leaks, use after free, threading data races and
       undefined behavior bugs.

       address
              This  setting  (disabled  by  default)  adds  -fsanitize=address  to  LDFLAGS   and
              -fsanitize=address -fno-omit-frame-pointer to CFLAGS and CXXFLAGS.

       thread This  setting  (disabled by default) adds -fsanitize=thread to CFLAGS, CXXFLAGS and
              LDFLAGS.

       leak   This setting (disabled  by  default)  adds  -fsanitize=leak  to  LDFLAGS.  It  gets
              automatically disabled if either the address or the thread features are enabled, as
              they imply it.

       undefined
              This setting (disabled by default) adds -fsanitize=undefined  to  CFLAGS,  CXXFLAGS
              and LDFLAGS.

   hardening
       Du  kan  använda  flera  kompileringsflaggor (se detaljer nedan) för att härda den färdiga
       binären mot minnesfördärvningsangrepp, eller för att  ge  ytterligare  varningsmeddelanden
       under  kompileringen.  Förutom  det  som  anges  nedan  aktiveras  dessa  som standard för
       arkitekturer som stöder dem.

       format This setting (enabled by default) adds -Wformat -Werror=format-security to  CFLAGS,
              CXXFLAGS,  OBJCFLAGS  and  OBJCXXFLAGS. This will warn about improper format string
              uses, and will fail when format functions are used in a way that represent possible
              security problems. At present, this warns about calls to printf and scanf functions
              where the format string is not a string literal and there are no format  arguments,
              as in printf(foo); instead of printf("%s", foo); This may be a security hole if the
              format string came from untrusted input and contains ‘%n’.

       fortify
              This setting (enabled by default) adds -D_FORTIFY_SOURCE=2 to CPPFLAGS. During code
              generation the compiler knows a great deal of information about buffer sizes (where
              possible), and attempts to replace insecure unlimited length buffer function  calls
              with  length-limited  ones.  This  is  especially  useful  for  old,  crufty  code.
              Additionally, format strings in writable memory that contain ‘%n’ are  blocked.  If
              an application depends on such a format string, it will need to be worked around.

              Observera  att  för att den här flaggan ska ha någon funktion måste källkoden också
              kompileras med -O1 eller  högre.  Om  miljövariabeln  DEB_BUILD_OPTIONS  innehåller
              noopt kommer stödet för fortify att inaktiverats, på grund av nya varningar som ges
              av glibc 2.16 och senare.

       stackprotector
              Inställningen (aktiverad som standard om stackprotectorstrong inte används)  lägger
              till  -fstack-protector --param=ssp-buffer-size=4 till CFLAGS, CXXFLAGS, OBJCFLAGS,
              OBJCXXFLAGS, GCJFLAGS, FFLAGS och FCFLAGS. Detta  lägger  till  säkerhetskontroller
              mot  stacköverskrivningar,  vilket  gör  att  många  möjliga  kodinjiceringsangrepp
              istället avbryter programmet. I det bästa fallet gör det kodinjiceringsangrepp till
              överbelastnignsangrepp eller icke-problem (beroende på programmet).

              Den  här  funktionen  kräver  länkning  mot  glibc  (eller  ett annat bibliotek som
              tillhandahåller __stack_chk_fail), så det  måste  inaktiveras  när  du  bygger  med
              -nostdlib eller -ffreestanding eller liknande.

       stackprotectorstrong
              Inställningen  (aktiverad  som  standard) lägger till -fstack-protector-strong till
              CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, GCJFLAGS, FFLAGS och FCFLAGS. Detta är en
              starkare variant av stackprotector, men utan markanta prestandaminskningar.

              Om du inaktiverar stackprotector inaktiveras även denna inställning.

              Funktionen  har  samma  krav  som stackprotector, och kräver dessutom gcc 4.9 eller
              senare.

       relro  Inställningen (aktiverad som standard) lägger till -Wl,-z,relro till  LDFLAGS.  Vid
              inläsning  av  programmet måste länkaren skriva till flera ELF-minnessektioner. Den
              här  inställningen  flaggar  till  inläsaren  att  dessa  sektioner   skall   göras
              skrivskyddade  innan  programmet  får  kontroll.  Detta  skyddar huvudsaklingen mot
              GOT-överskrivningsangrepp. Om inställningen inaktiveras  kommer  även  bindnow  att
              inaktiveras.

       bindnow
              Inställningen  (inaktiverad  som standard) lägger till -Wl,-z,bindnow till LDFLAGS.
              Vid inläsning av programmet löses alla dynamiska symboler, vilket gör att hela  PLT
              kan  markeras  som  skrivskyddad  (på  grund av relro ovan). Inställningen kan inte
              aktiveras om relro inte är aktiverad.

       pie    Inställningen (inaktiverad som standard) lägger till -fPIE till  CFLAGS,  CXXFLAGS,
              OBJCFLAGS, OBJCXXFLAGS, GCJFLAGS, FFLAGS och FCFLAGS, samt -fPIE -pie till LDFLAGS.
              Positionsoberoende  exekverbara  program  (PIE)  behövs  för  att  dra  fördel   av
              slumpmässig  adressrymd  (ASLR),  vilket  stöds av vissa versioner av kärnan. Medan
              ASLR redan kan användas för datautrymmen i stacken  och  heap:en  (brk  och  mmap),
              måste  kodområden  först  kompileras  som  positionsoberoende. Delade bibliotek gör
              redan detta  (-fPI  C),  så  de  drar  automatiskt  fördel  av  ASLR  medan  binära
              .text-regioner  måste  byggas  med  PIE  för  att  uppnå  ASLR.  När  detta sker är
              ROP-angrepp (Return Oriented Programming) mycket svårare eftersom  det  inte  finns
              några statiska platser att studsa från i ett minnesfördärvningsangrepp.

              Detta  är  inte  kompatibelt  med  -fPIC så man måste vara försiktig när man bygger
              delade objekt.

              Eftersom  PIE  i  tillägg  implementeras  med  ett  generellt  register  kan  vissa
              arkitekturer  (huvudsakligen  i386)  se  prestandaförluster  upp till 15% i väldigt
              textsegment-tunga  programs  körning;  de  flesta  körningar  ser  mindre  än   1%.
              Arkitekturer med många generella register (t.ex amd64) ser inte en lika stor värsta
              falls-förlust.

   reproducible
       Kompileringsflaggorna  som  anges  nedan  kan  användas  för  att  göra  det  lättare  att
       reproducera    byggbarhet   eller   tillhandahålla   ytterligare   varningsflaggor   under
       kompileringen. Förutom det som anges nedan aktiveras dessa som standard  för  arkitekturer
       som stöder dem.

       timeless
              This  setting  (enabled  by  default) adds -Wdate-time to CPPFLAGS. This will cause
              warnings when the __TIME__, __DATE__ and __TIMESTAMP__ macros are used.

MILJÖVARIABLER

       Det finns två  uppsättningar  miljövariabler  som  utför  samma  operationer,  den  första
       (DEB_flagga_op)  bör  aldrig  användas inuti debian/rules). Den är tänkt för användare som
       vill  bygga  om  källkodspaketet  med   andra   byggflaggor.   Den   andra   uppsättningen
       (DEB_flagga_MAINT_op)  bör  endast användas i debian/rules av paketansvariga för att ändra
       de slutgiltiga byggflaggorna.

       DEB_flagga_SET
       DEB_flagga_MAINT_SET
              Denna variabel kan användas för att tvinga fram värdet  som  returneras  för  given
              flagga.

       DEB_flagga_STRIP
       DEB_flagga_MAINT_STRIP
              Denna  variabel  kan användas för att tillhandahålla en blankstegsavdelad lista med
              flaggor som kommer att tas bort  från  uppsättningen  flaggor  som  ges  för  given
              flagga.

       DEB_flagga_APPEND
       DEB_flagga_MAINT_APPEND
              Denna  variabel kan användas för att lägga till ytterligare flaggor till värdet som
              returneras för given flagga.

       DEB_flagga_PREPEND
       DEB_flagga_MAINT_PREPEND
              Denna variabel kan användas för att lägga till ytterligare flaggor först  i  värdet
              som returneras för given flagga.

       DEB_BUILD_OPTIONS
       DEB_BUILD_MAINT_OPTIONS
              De  här variablerna kan användas av en användare eller utvecklare för att slå av/på
              olika     områdesfunktioner     som     påverkar      byggflaggorna.      Variabeln
              DEB_BUILD_MAINT_OPTIONS-variabeln  överstyr alla inställningar i funktionsområden i
              DEB_BUILD_OPTIONS. Se avsnittet FUNKTIONSOMRÅDEN för mer information.

FILER

   Konfigurationsfiler
       /etc/dpkg/buildflags.conf
              Konfigurationsfil för hela systemet.

       $XDG_CONFIG_HOME/dpkg/buildflags.conf or
       $HOME/.config/dpkg/buildflags.conf
              Användarens konfigurationsfil.

   Paketeringsstöd
       /usr/share/dpkg/buildflags.mk
              Makefile-klipp som läser in (och eventuellt exporterar) alla flaggor  som  stöd  av
              dpkg-buildflags till variabler (sedan dpkg 1.16.1).

MILJÖVARIABLER

       DEB_VENDOR
              This  setting  defines the current vendor. If not set, it will discover the current
              vendor by reading /etc/dpkg/origins/default.

EXEMPEL

       För att sända byggflaggor till en byggkommandorad i en makefil:

           $(MAKE) $(shell dpkg-buildflags --export=cmdline)

           ./configure $(shell dpkg-buildflags --export=cmdline)

       To set build flags in a shell script or shell fragment, eval can be used to interpret  the
       output and to export the flags in the environment:

           eval "$(dpkg-buildflags --export=sh)" && make

       eller för att sätta positionsparametrarna för att sända till ett kommando:

           eval "set -- $(dpkg-buildflags --export=cmdline)"
           for dir in a b c; do (cd $dir && ./configure "$@" && make); done

   Använda i debian/rules
       Du  bör  anropa  dpkg-buildflags eller inkludera buildflags.mk från filen debian/rules för
       att hämta de byggflaggor det är nödvändigt att  sända  till  byggsystemet.  Observera  att
       äldre  versioner  av  dpkg-buildpackages  (före  dpkg  1.16.1)  exporterade  dessa flaggor
       automatiskt. Du bör dock  inte  bero  på  detta,  eftersom  detta  förhindrar  körning  av
       debian/rules manuellt.

       För  paket  med  autoconf-liknande  byggsystem  kan du sända relevanta flaggor direkt till
       configure eller make(1), som visas ovan.

       For other build systems, or when you need more fine-grained control about which flags  are
       passed  where,  you  can  use --get. Or you can include buildflags.mk instead, which takes
       care of calling dpkg-buildflags and storing the build flags in make variables.

       Om du vill exportera alla  byggflaggor  till  miljön  (där  de  kan  fångas  upp  av  ditt
       byggsystem):

           DPKG_EXPORT_BUILDFLAGS = 1
           include /usr/share/dpkg/buildflags.mk

       För  extra  styrning  av vad som expoteras kan du manuellt exportera variablerna (eftersom
       inga av dem exporteras som standard):

           include /usr/share/dpkg/buildflags.mk
           export CPPFLAGS CFLAGS LDFLAGS

       Du kan naturligtvis dessutom manuellt sända flaggorna till kommandon:

           include /usr/share/dpkg/buildflags.mk
           build-arch:
                $(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)

ÖVERSÄTTNING

       Peter Krefting och Daniel Nylander.