[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: debian/rules, een rule uitvoeren



Martijn Grendelman schreef:
> Hoi Paul,
> 
>>> Er zit een rule "upstream" in debian/rules van een package wat ik graag
>>> wil uitvoeren. Echter als ik "./debian/rules upstream" doe dan zie ik
>>> alleen "make: 'upstream' is bijgewerkt", terwijl het niets gedaan heeft
>>> (het zou localisatie-bestanden moeten downloaden). Als ik er "echo
>>> hallo" bij zet, dan zie ik dat ook niet uitgevoerd worden. Als ik mijn
>>> eigen rule maak met als inhoud "echo hallo" dan gaat het wel goed.
>>>
>>> Wat doe ik verkeerd?
>> Waarschijnlijk bestaat er al een (leeg) bestand genaamd 'upstream' in de
>> debian directory. Dat bestand moet je even weggooien.
> 
> Dat moet zijn: in de top-level directory van het pakket (de directory van
> waaruit je 'debian/rules upstream' aaroept), niet in de debian/
> direcrtory. Mijn excuses.

Daar staat inderdaad een directory "upstream", en als ik die verwijder
dan gaat hij meer doen. Toch gaat het niet goed.

Als ik kijk naar de code dan wil hij deze directory leegmaken en dan
opnieuw vullen met te downloaden bestanden. Toch weigert hij iets te
doen als deze directory er is. Ik snap de logica niet helmaal.

Dit is de originele code:
-----------------
upstream:
        for XPI in $(wget
http://mirror.switch.ch/ftp/mirror/mozilla/calendar/sunbird/releases/$(VERSION)/langpacks
-O - | grep ".xpi</a>" | awk -F\" '{ print $10 }'); \
        do \
             rm -f upstream/$(basename $$XPI); \
             wget
http://releases.mozilla.org/pub/mozilla.org/calendar/sunbird/releases/$(VERSION)/langpacks/$$XPI;
\
        done
-----------------

Dit is wat ik krijg als ik het uitvoer zonder upstream directory:
-------------
paul@server2:~/sources/icowl2/iceowl-l10n-0.8+debian$ ./debian/rules
upstream
for XPI in ; \
	do \
		rm -f upstream/$XPI; \
		wget
http://releases.mozilla.org/pub/mozilla.org/calendar/sunbird/releases/0.8/langpacks/$XPI;
\
	done
--------------

Terwijl die eerste regel het wel doet (als ik $(VERSION) vervang door
0.8). Wellicht doet de code het gewoon niet, ahum.

>>> Ik vraag me ook af wat een naampje met "$" of "$$" ervoor precies doet,
>>> en waarom zoveel regels eindigen op een backslash, alsof alles op 1
>>> regel moet (loops e.d.).
>> Een $ geeft aan dat het om een variabele gaat; een Make target kan ook een
>> variabele zijn. Een $$ is een geescapete $, dus daarmee kun je het $ teken
>> doorgeven naar een commando.

OK, bedankt.

>> Omdat Make alle commando's in een aparte sub-shell uitvoert, is het
>> noodzakelijk, dat alle commando's die in dezelfde subshell _moeten_ worden
>> uitgevoerd (zoals loops) op dezelfde regel staan. Vandaar de backslashes.
>>
>> Make is een ingewikkelde tool. Zie
>> http://www.gnu.org/software/make/manual/make.html voor de manual.

Dat ziet er bruikbaar uit. Bedankt!

Met vriendelijke groet,
Paul van der Vlis.




-- 
http://www.vandervlis.nl/


Reply to: