Kirjoittaja Aihe: Makefile asennuksessa ja ehdolliset päätökset  (Luettu 1904 kertaa)

SuperOscar

  • Käyttäjä
  • Viestejä: 3993
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Sattuisiko joku tietämään… Minulla kun on käytössä eri järjestelmiä, eräiden omien apuohjelmien asentamisessa pitää aina valita, pannaanko niiden omistajaksi staff- vai wheel-ryhmä – Debianissa staff, openSUSEssa wheel. Yleensä olen asennusta varten tehnyt skriptin, mutta kävi mielessä, kävisikö Makefile ja ”make install”.

Muuten toimii, mutta ongelma on tuo ryhmän valinta. Lueskelin otsa tuskanhiessä GNU maken ohjeita ja päättelin, että ns. secondary expansion voisi olla ratkaisu: ensimmäisellä lukukerralla Makefile päättäisi ryhmän, toisella lukukerralla asettaisi sen käyttöön.

Tällaista yritin:

Koodia: [Valitse]
# "getent group wheel” palauttaa /etc/group-tiedostosta rivin,
# JOS siellä sellaista on
WHEEL := $(shell getent group wheel)
# Aloitetaan toisen lukukerran erikoisjärjestelyt…
.SECONDEXPANSION:
# Jos $(WHEEL) sisältää toisella lukukerralla jotakin…
ifneq ($$(WHEEL),)
ADMINS := wheel
else
ADMINS := staff
endif
# Seuraava rivi lienee turha, mutta lisäsin kumminkin
.SECONDEXPANSION:
# $(ADMINS)-muuttujan pitäisi toisella lukukerralla sisältää
# oikea ryhmä
INSTALL = install -m 755 -g $$(ADMINS)

Tämä ei todellakaan toimi, edes niin että tietäisi mitä se tekee, koska se jää vain ikuisesti jonnekin.

Voi hyvin olla, että ideani on mahdoton ja oikeasti pitäisi olla skripti, joka generoisi järjestelmäkohtaisesti Makefilen. Se tuntuisi kuitenkin ajanhaaskuulta, koska saman tien skriptillä voi sitten tehdä kaiken.

Mielipiteitä kovemmilta hakkereilta?
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11

SuperOscar

  • Käyttäjä
  • Viestejä: 3993
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Makefile asennuksessa ja ehdolliset päätökset
« Vastaus #1 : 04.03.23 - klo:15.19 »
Itse itselleni vastaten… Ilmeisesti se mitä tavoittelen on makelle liian hienoa, mutta se onnistunee, että ensin asettaa makefilessä ehdoitta muuttujan arvon ja sitten muuttaa sitä komentoriviltä:

Koodia: [Valitse]
make install ADMINS=staff
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11