dpkg-architecture(1)

NAZWA
dpkg-architecture - ustawia i zwraca architekturę budowania pakietów.

SKŁADNIA
dpkg-architecture [opcje] [polecenia]

OPIS
dpkg-architecture dostarcza sposobu na określenie i ustawienie architektury budowania oraz architektury docelowej dla budowania pakietów.

Architektura budowania jest zawsze określana przez wywołanie dpkg i nie może być ustawiona w linii poleceń.

Można podać architekturę docelową przez podanie jednej lub obu opcji spośród -a i -t. Wartość domyślna jest określana przez wywołanie programu gcc(1), a w razie gdy CC i gcc nie są dostępne, jest taka sama jak architektura budowania. Wystarczy podać tylko jedną spośród opcji -a i -t, ponieważ ta druga zostanie ustawiona na sensowną wartość domyślną. Co więcej, często podanie jednej opcji jest lepsze niż podanie ich obu naraz, gdyż dpkg-architecture wypisze ostrzeżenie, jeśli podane wartości nie będą odpowiadały wartościom domyślnym.

POLECENIA

-l  Wyświetla zmienne środowiskowe, po jednej w każdej linii, w formacie ZMIENNA=wartość. Jest to domyślna akcja.

-earchitektura-debiana
    Sprawdza równoważność architektur. Domyślnie architektura-debiana jest porównywana z bieżącą architekturą Debiana, traktowaną jako architektura gospodarza. Ta akcja nie rozwija masek architektur. Polecenie kończy się kodem wyjścia 0 jeśli dopasowanie architektur się powiodło, lub kodem 1 jeśli nie było dopasowania.

-imaska-architektury
    Sprawdzenie architektury przez rozwinięcie w odpowiedni sposób maski-architektury i porównanie z bieżącą architekturą Debiana. Polecenie kończy się kodem wyjścia 0 jeśli dopasowanie architektur się powiodło, lub kodem 1 jeśli nie było dopasowania.

-qnazwa-zmiennej
    Wyświetla wartość pojedynczej zmiennej.

-s  Wyświetla polecenie export, które może być użyte do ustawienia zmiennych środowiskowych za pomocą eval.

-u  Wyświetla polecenie podobne do -s, jednakże ze wszystkimi zmiennymi nieustawionymi.

-c polecenie
    Wykonuje polecenie w środowisku, które ma wszystkie zmienne ustawione na wyznaczone wartości.

-L  Wyświetla listę poprawnych nazw architektur.

--help
    Wyświetla informację o użytkowaniu i kończy działanie.

--version
    Wyświetla informację o wersji i pomyślnie kończy działanie.

OPCJE

-aarchitektura-debiana
    Ustawia architekturę Debiana.

-ttyp-systemu-gnu
    Ustawia typ systemu GNU.

-f  Honorowane są wartości ustawione w istniejących zmiennych środowiskowych o tych samych nazwach, co używane w skryptach (np. użyte przez dpkg-architecture), chyba że jest obecna ta flaga wymuszenia. Pozwala to na nadpisanie wartości nawet jeśli wywołanie dpkg-architecture jest ukryte głęboko w jakimś innym skrypcie (np. dpkg-buildpackage(1)).

WARUNKI

maszyna budowania
    Rodzaj maszyny, na której pakiet jest budowany.

maszyna docelowa
    Rodzaj maszyny, dla której pakiet jest budowany.

architektura Debiana
    Łańcuch znaków zawierający architekturę Debiana, która określa drzewo binarne w archiwum FTP. Przykłady: i386, sparc, hurd-i386.

maska architektury
    Maska architektury jest specjalnym łańcuchem znaków, który będzie pasował do każdej architektury, która jest jego częścią. Ogólna postać jest następująca: <jądro>-<procesor>. Przykłady: linux-any, any-i386, hurd-any.

typ systemu GNU
    Łańcuch znaków określający architekturę składający się z dwóch części oddzielonych myślnikiem: procesor i system. Przykłady: i386-linux-gnu, sparc-linux-gnu, i386-gnu, x86_64-netbsd.

ZMIENNE
dpkg-architecture ustawia następujące zmienne:

DEB_BUILD_ARCH
    Architektura wg Debiana komputera, na którym budowany jest pakiet.

DEB_BUILD_ARCH_OS
    Nazwa systemu wg Debiana komputera, na którym budowany jest pakiet.

DEB_BUILD_ARCH_CPU
    Nazwa procesora wg Debiana komputera, na którym budowany jest pakiet.

DEB_BUILD_ARCH_BITS
    Rozmiar wskaźnika na komputerze budującym (w bitach).

DEB_BUILD_ARCH_ENDIAN
    Kolejność bajtów (endian) na komputerze budującym (little / big).

DEB_BUILD_GNU_CPU
    The CPU part of DEB_BUILD_GNU_TYPE.

DEB_BUILD_GNU_SYSTEM
    Cześć dotycząca systemu z DEB_BUILD_GNU_TYPE.

DEB_BUILD_GNU_TYPE
    Typ systemu GNU komputera, na którym budowany jest pakiet.

DEB_BUILD_MULTIARCH
    The clarified GNU system type of the build machine, used for filesystem paths.

DEB_HOST_ARCH
    Architektura wg Debiana dla maszyny docelowej.

DEB_BUILD_ARCH_OS
    Nazwa systemu wg Debiana dla maszyny docelowej.

DEB_HOST_ARCH_CPU
    Nazwa procesora wg Debiana dla maszyny docelowej.

DEB_HOST_ARCH_BITS
    Rozmiar wskaźnika na maszynie docelowej (w bitach).

DEB_HOST_ARCH_ENDIAN
    Kolejność bajtów (endian) na maszynie docelowej (little / big).

DEB_HOST_GNU_CPU
    Część dotycząca CUP z DEB_HOST_GNU_TYPE.

DEB_HOST_GNU_SYSTEM
    Część dotycząca systemu z DEB_HOST_GNU_TYPE.

DEB_HOST_GNU_TYPE
    Typ systemu GNU dla maszyny docelowej.

DEB_HOST_MULTIARCH
    The clarified GNU system type of the host machine, used for filesystem paths.

DEBIAN/RULES
Zmienne środowiskowe ustawione przez dpkg-architecture są przekazywane do debian/rules jako zmienne programu make (patrz dokumentacja do make). Jednakże nie należy na nich polegać, gdyż psuje to ręczne uruchomienie tego skryptu. Zamiast tego, należy zawsze inicjować je, używając dpkg-architecture z opcją -q. Poniżej znajduje się parę przykładów, które także pokazują, jak można polepszyć wsparcie dla kompilacji krzyżowej pakietu:

Zamiast:

    ARCH=`dpkg --print-architecture`
    configure $(ARCH)-linux

proszę używać:

    DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
    DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
    configure --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)

Zamiast:

    ARCH=`dpkg --print-architecture`
    ifeq ($(ARCH),alpha)
      ...
    endif

proszę używać:

    DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH)
    ifeq ($(DEB_HOST_ARCH),alpha)
      ...
    endif

albo jeśli trzeba sprawdzić tylko typ CPU lub OS, należy użyć zmiennych DEB_HOST_ARCH_CPU lub DEB_HOST_ARCH_OS.

Ogólnie wywoływanie dpkg w pliku rules w celu pobrania informacji o architekturze jest przestarzałe (chyba że chce się zachować kompatybilność wsteczną, patrz niżej). W szczególności opcja --print-architecture jest niezbyt wiarygodna, ponieważ istnieją architektury Debiana, które nie są równe nazwie procesora.

KOMPATYBILNOŚĆ WSTECZNA
Zmienne DEB_*_ARCH_BITS oraz DEB_*_ARCH_ENDIAN zostały wprowadzone w dpkg-dev 1.15.4. Używanie ich w debian/rules wymaga więc zależności czasu budowania dla dpkg-dev (>= 1.15.4).

Zmienne DEB_HOST_ARCH_CPU oraz DEB_HOST_ARCH_OS są dostępne w miarę nowych wersjach dpkg-architecture (od dpkg 1.13.2). Wcześniej w plikach debian/rules były sprawdzane zmienne DEB_HOST_GNU_CPU lub DEB_HOST_GNU_TYPE, które zostały zmienione.

Wszystkie pliki debian/rules, decydujące na podstawie tych zmiennych jak i co kompilować, powinny być zaktualizowane i przystosowane do używania nowych zmiennych i ich wartości. Aby zachować wsteczną kompatybilność z poprzednimi wersjami dpkg-dev, można użyć następującego kodu:

    DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU 2>/dev/null)
    DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null)
    # Bierze pod uwagę wyjście ze starego dpkg-architecture.
    ifeq ($(DEB_HOST_ARCH_CPU),)
      DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_GNU_CPU)
      ifeq ($(DEB_HOST_ARCH_CPU),x86_64)
        DEB_HOST_ARCH_CPU := amd64
      endif
    endif
    ifeq ($(DEB_HOST_ARCH_OS),)
      DEB_HOST_ARCH_OS := $(subst -gnu,,$(shell dpkg-architecture -qDEB_HOST_GNU_SYSTEM))
      ifeq ($(DEB_HOST_ARCH_OS),gnu)
        DEB_HOST_ARCH_OS := hurd
      endif
    endif

I podobnie dla DEB_BUILD_ARCH_CPU oraz DEB_BUILD_ARCH_OS.

Jeśli chcesz wciąż obsługiwać wersje dpkg-dev, które nie zawierają dpkg-architecture, to poniższy kod wykonuje to zadanie:

    DEB_BUILD_ARCH := $(shell dpkg --print-architecture)
    DEB_BUILD_GNU_CPU := $(patsubst hurd-%,%,$(DEB_BUILD_ARCH))
    ifeq ($(filter-out hurd-%,$(DEB_BUILD_ARCH)),)
      DEB_BUILD_GNU_SYSTEM := gnu
    else
      DEB_BUILD_GNU_SYSTEM := linux-gnu
    endif
    DEB_BUILD_GNU_TYPE=$(DEB_BUILD_GNU_CPU)-$(DEB_BUILD_GNU_SYSTEM)
    DEB_HOST_ARCH := $(DEB_BUILD_ARCH)
    DEB_HOST_GNU_CPU := $(DEB_BUILD_GNU_CPU)
    DEB_HOST_GNU_SYSTEM := $(DEB_BUILD_GNU_SYSTEM)
    DEB_HOST_GNU_TYPE := $(DEB_BUILD_GNU_TYPE)

Umieść podzbiór tych linii na górze pliku debian/rules; te domyślne wartości będą nadpisane przez dpkg-architecture, jeśli jest używane.

Nie ma potrzeby używania pełnego zestawu zmiennych. Można wybrać spójny ich zbiór, zawierający wartości używane w pliku rules. Na przykład, jeżeli potrzebna jest tylko architektura Debiana maszyny, dla której budowany jest pakiet, wystarczające jest użycie "DEB_HOST_ARCH=`dpkg --print-architecture`" (tak naprawdę jest to architektura Debiana maszyny, na której jest budowany pakiet, ale proszę pamiętać, że próbujemy tylko zachować wsteczną zgodność z natywną kompilacją).

Opcje -e i -i zostały wprowadzone w miarę nowych wersjach dpkg-architecture (od wersji dpkg 1.13.13).

PRZYKŁADY
dpkg-buildpackage akceptuje opcję -a i przekazuje ją do dpkg-architecture. Inne przykłady:

    CC=i386-gnu-gcc dpkg-architecture -c debian/rules build

    eval `dpkg-architecture -u`

Sprawdzanie, czy architektura jest równa architekturze bieżącej lub podanej:

    dpkg-architecture -elinux-alpha

    dpkg-architecture -amips -elinux-mips

Sprawdzanie, czy architektura bieżąca podana przez -a jest systemem Linuksa:

    dpkg-architecture -ilinux-any

    dpkg-architecture -ai386 -ilinux-any

PLIKI
Wszystkie te pliki muszą być obecne, aby dpkg-architecture w ogóle działał. Ich położenie możnazmienić w czasie działania programu przez ustawienie zmiennej środowiskowej DPKG_DATADIR.

/usr/share/dpkg/cputable
    Tabela znanych nazw procesorów i ich mapowanie na nazwy GNU.

/usr/share/dpkg/ostable
    Tabela nazw znanych systemów operacyjnych i ich mapowanie na nazwy GNU.

/usr/share/dpkg/triplettable
    Mapowanie między trójkami architektur Debiana a nazwami architektur Debiana.

ZOBACZ TAKŻE
dpkg-buildpackage(1), dpkg-cross(1).

AUTOR
dpkg-architecture i ta strona podręcznika ekranowego zostały napisane Marcusa Brinkmanna <brinkmd@debian.org>.

TŁUMACZE
Piotr Roszatycki <dexter@debian.org>, 1999
Bartosz Feński <fenio@debian.org>, 2004-2005
Robert Luberda <robert@debian.org>, 2006-2008
Wiktor Wandachowicz <siryes@gmail.com>, 2008