Nie jesteś zalogowany na forum.

#1 2017-06-15 09:09:46

pavbaranov
Administrator
Lokalizacja: Kraków
Data rejestracji: 2015-08-22
Liczba postów: 1,653
WWW

Prawidłowe miejsce dla zmiennych w PKGBUILD

Nie tak dawno zaproponowałem pewną sztuczkę umożliwiającą kompilowanie programów korzystających z cmake z wykorzystaniem tzw. flag procesora:
@dracorp zwrócił mi uwagę: https://forum.archlinux.org.pl/viewtopi … 3359#p3359, że zaproponowane miejsce umieszczenia zmiennych (prepare) nie jest dobrym, choćby z tej przyczyny, że makepkg -e tego nie zobaczy (w takim przypadku źródła nie są rozpakowywane, a wykorzystywane są już uprzednio rozpakowane do $srcdir/.
I ma rację.
W jakim miejscu zatem winny te zmienne zostać zdefiniowane?

Ok, krótkie podsumowanie nt. owych flag.
Procesem kompilacji wykonywanym przez makepkg steruje plik makepkg.conf. Tam możemy m.in. zdefiniować flagi dla kompilacji. Teoretycznie wówczas winna ona przebiegać z ich użyciem i w przypadku niektórych programów tak się dzieje. Są co najmniej dwie kategorie programów, które kompilowane są z ich pominięciem. Otóż flag (CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS) wskazanych w makepkg.conf "nie widzą" programy kompilowane z użyciem qmake oraz cmake. Nie pomoże tu dodanie w PKGBUILD pozycji options buildflags, czy makeflags.
W przypadku qmake radzimy sobie poprzez dodanie odpowiednich parametrów w sekcji build. W przypadku cmake należy zmienne wyeksportować podczas budowy.
Czy zatem odpowiednim miejscem jest:
- umieszczenie zmiennych przed sekcją prepare, czy też
- umieszczenie ich w sekcji build, jeszcze przed wywołaniem cmake,
- czy może jeszcze jakieś inne miejsce.
Z pierwszymi dwoma spotkałem się w praktyce. Ostatniego nie jestem w ogóle świadom.


Hardware: AMD: A8-7410 APU with Radeon R5
Software (podaję wyłącznie odrębności): Arch testing+kde-unstable, kernel linux-pb (4.19.8 m.in. PDS, UKSM, BFQ-MQ/SQ), amdgpu (dla CIK), KDE, patche z POLAUR

Offline

#2 2017-06-16 13:49:40

barthalion
Developer
Lokalizacja: Poznań
Data rejestracji: 2015-08-20
Liczba postów: 219
WWW

Odp: Prawidłowe miejsce dla zmiennych w PKGBUILD

Flagi dotyczą kompilacji, kompilacja odbywa się w funkcji build. Dziękuję, dobranoc.

Ale przy okazji wskażę jeszcze inny problem – projekty korzystające z cmake wcale nie muszą brać opcji ze zmiennych środowiskowych takich jak CFLAGS, i zwykle wcale tego nie robią.
Oczywiście zależy od przypadku, ale zwykle najlepszą metodą jest przekazanie do cmake argumentu -DCMAKE_CXX_FLAGS="$CXXFLAGS".

Offline

#3 2017-06-16 14:41:38

dracorp
Użytkownik
Lokalizacja: Poland, Gdańsk
Data rejestracji: 2015-09-06
Liczba postów: 96
WWW

Odp: Prawidłowe miejsce dla zmiennych w PKGBUILD

Jeszcze są zmienne wspólne dla build() i package() np. dla modułów Perla. Ja je umieszczam poza funkcjami.

@pavbaranov: mi też zwrócili uwagę a propos umieszczania zmiennej w prepare().

Offline

Stopka

Napędzają nas PacmanVPS i MegiTeam

Forum oparte na FluxBB