Avancerade funktioner

Delvis bygga en modul

Det är möjligt att bara bygga delar av en enda KDE-modul. Du kanske till exempel bara vill kompilera ett program från en modul. kdesrc-build har funktioner som gör det enkelt. Det finns flera komplementära sätt att göra det.

Ta bort kataloger från en byggplats

Det möjligt att ladda ner ett helt arkiv men låta byggsystemet utelämna ett antal kataloger när byggprocessen utförs. Det kräver att modulen använder CMake och att modulens byggsystem tillåter att katalogen som ska tas bort är valfri.

Det bestäms med alternativet do-not-compile.

Viktigt

Alternativet kräver minst att byggsystemet för modulen konfigureras om efter det har ändrats. Det görs med kommandot kdesrc-build --reconfigure modul.

För att ta bort katalogen python från byggprocessen för kdebindings:

module kdebindings
  do-not-compile python
end module

Notera

Funktionen beror på vissa standardkonventioner som används i de flesta moduler i KDE. Därför kanske den inte fungerar för alla program.

Stöd för grenar och taggar i kdesrc-build

Vad är grenar och taggar?

Git stöder hantering av historik för KDE:s källkod. KDE använder stödet för att skapa grenar för utveckling, och att ge arkivet en tagg då och då med utgåvan av en ny version.

Till exempel kan utvecklarna av KMail arbeta med en ny funktion i en annan gren för att undvika att förstöra versionen som används av de flesta utvecklare. Grenen har pågående utveckling, samtidigt som huvudgrenen (som kallas master) kan ha pågående utveckling.

En tagg är å andra sidan en ögonblicksbild av källkodsarkivet vid en viss tid. Det används av KDE:s administrationsgrupp för att markera en version av koden som är lämplig för en utgåva och fortfarande tillåta att utvecklare arbetar med koden.

Hur man använder grenar och taggar

Stöd för grenar och taggar hanteras med en uppsättning alternativ, som rör sig från en generell begäran om en version, till en specifik webbadress att ladda ner för avancerade användare.

Det enklaste sättet är att använda alternativen branch och tag. Du använder helt enkelt alternativet tillsammans med namnet på den önskade grenen eller taggen för en modul, så försöker kdesrc-build avgöra lämplig plats i KDE:s arkiv att ladda ner från. För de flesta moduler i KDE fungerar det mycket bra.

För att ladda ner kdelibs från KDE 4.6 (som helt enkelt är känt som grenen 4.6):

module kdelibs
  branch 4.6
  # övriga alternativ...
end module

Eller, för att ladda ner kdemultimedia som det var när det gavs ut med KDE 4.6.1:

module kdemultimedia
  tag 4.6.1
  # övriga alternativ...
end module

Tips

Du kan ställa in ett allmänt grenvärde, men om du gör det, glöm inte att ange en annan gren för moduler som inte ska använda den allmänna grenen.

Stöd för avancerade grenalternativ

kdesrc-build stöder två alternativ i situationer då branch och tag gissar fel angående den riktiga sökvägen: module-base-path och override-url.

  • Alternativet module-base-path används för att hjälpa kdesrc-build fylla i saknade delar av modulens sökväg. I KDE:s arkiv är alla sökvägar av formen gitRoot/module-base-path/modulnamn. Normalt kan kdesrc-build räkna ut den lämpliga delen i mitten själv. När det inte går, kan du använda module-base-path så här:

    module kdesupport
        # kdesupport stöder diverse taggar för att enkelt organisera
        # programvaran för en given utgåva av KDE-plattformen.
        module-base-path tags/kdesupport-for-4.5
    end module
    

    Det skulle göra att kdesrc-build laddar ner kdesupport från (i det här exemplet) git://invent.kde.org/home/kdetags/kdesupport-for-4.5.

    Tips

    I tidigare versioner av kdesrc-build, hanterades module-base-path annorlunda. Om du stöter på problem vid användning av en gammal definition av module-base-path, bör du nog verifiera att den verkliga sökvägen är den som kdesrc-build förväntar sig genom att använda väljaren --pretend.

  • Alternativet override-url kräver å andra sidan att du anger den exakta sökvägen att ladda ner från. Det låter dig dock hämta från sökvägar som kdesrc-build inte skulle ha någon möjlighet att ladda ner från. För närvarande bör alternativet module-base-path vara tillräckligt för alla webbadresser för Git källkod.

    Viktigt

    kdesrc-build rör inte eller korrigerar något värde som du anger för override-url överhuvudtaget, så om du byter inställningen repository, kan du också behöva uppdatera det här.

Stoppar bygget i förtid

Bygget fortsätter normalt även om allvarliga fel uppstår

kdesrc-build uppdaterar, bygger och installerar normalt alla moduler i den angivna listan över moduler att bygga, även om en modul misslyckas att bygga. Detta är vanligtvis en bekvämlighet för att du ska kunna uppdatera programvarupaket även om ett enkelt misstag görs i ett av källkodsarkiven under utvecklingen som gör att bygget fallerar.

Du kan dock önska att kdesrc-build stoppar vad det gör när det inte lyckas att bygga och installera en modul. Det kan hjälpa dig att spara tid som kommer att gå till spillo på att komma vidare när moduler som finns kvar i bygglistan inte heller kommer att kunna byggas med lyckat resultat, särskilt om du aldrig har lyckats bygga modulerna i listan.

Stoppar inte i förtid med --no-stop-on-failure

Den primära metoden för att göra det är att använda kommandoradsväljaren --no-stop-on-failure när kdesrc-build körs.

Väljaren kan också anges i inställningsfilen för att göra den till normalt beteende.

Det är också möjligt att tala om för kdesrc-build att sluta bygga under körning efter att ha slutfört den aktuella modulen den arbetar med. Det är i motsats till att avbryta kdesrc-build med ett kommando som Ctrl+C, vilket avbryter kdesrc-build omedelbart, och förlorar arbetet för den aktuella modulen.

Viktigt

Avbryta kdesrc-build under installation av en module när alternativet use-clean-install är aktiverat innebär att den avbrutna modulen är otillgänglig tills kdesrc-build kan bygga modulen med lyckat resultat.

Om du behöver avbryta kdesrc-build utan att tillåta en snygg avstängning i detta fall, försök åtminstone undvika att göra detta medan kdesrc-build installerar en modul.

Stoppar kdesrc-build snyggt när stop-on-failure är false

Som nämnts ovan är det möjligt att få kdesrc-build att snyggt avsluta tidigt när det väl har slutfört modulen det arbetar med. För att göra det måste du skicka signalen POSIX HUP till kdesrc-build

Du kan göra detta med ett kommando som pkill (på Linux®-system) enligt följande:

$ pkill -HUP kdesrc-build

Om det lyckas kommer du att se ett meddelande i utmatningen från kdesrc-build som liknar:

[ build ] tog emot SIGHUP, kommer att avsluta efter den här modulen

Notera

kdesrc-build kan visa meddelandet flera gånger beroende på antalet individuella kdesrc-build processer som är aktiva. Det är normalt och inte en indikation av ett fel.

När kdesrc-build har bekräftat signalen kommer den att sluta bearbetningen efter att den aktuella modulen har byggts och installerats. Om kdesrc-build fortfarande uppdaterar källkoden när begäran tas emot, kommer kdesrc-build att stoppa efter uppdateringen av modulens källkod är klar. När både uppdaterings- och byggprocessen har stoppats tidigt, kommer kdesrc-build skriva ut sina delresultat och avsluta.

Hur kdesrc-build försöker försäkra sig om en lyckad byggprocess

Automatisk ombyggnad

kdesrc-build innehöll tidigare funktioner för att automatiskt försöka bygga om modulen efter ett fel (eftersom ibland fungerade försöket att göra om, på grund av fel i byggsystemet vid den tiden). Tack vare bytet till CMake lider inte byggsystemet längre av dessa fel, och därför försöker inte kdesrc-build bygga en modul mer än en gång. Det finns dock situationer då kdesrc-build automatiskt utför åtgärder.

  • Om du ändrar configure-flags eller cmake-options för en modul, detekterar kdesrc-build det och kör automatiskt om configure eller cmake för modulen.

  • Om byggsystemet inte finns (även om kdesrc-build inte tog bort det) skapar kdesrc-build automatiskt om det. Det är användbart för att ge möjligheten att utföra en fullständig --refresh-build för en specifik modul utan att den utförs för andra moduler.

Bygga om en modul manuellt

Om du gör en ändring i en moduls inställningsalternativ, eller om modulens källkod ändras på ett sätt som kdesrc-build inte känner igen, kan du behöva bygga om modulen manuellt.

Du kan göra det genom att helt enkelt köra kdesrc-build --refresh-build modul.

Om du skulle vilja att kdesrc-build istället automatiskt bygger om modulen under nästa normala bygguppdatering, kan du skapa en särskild fil. Varje modul har en byggkatalog. Om du skapar en fil som heter .refresh-me i en moduls byggkatalog, bygger kdesrc-build om modulen nästa gång byggprocessen sker, även om det normalt skulle utföra den snabbare inkrementella byggprocessen.

Tips

Normalt är byggkatalogen ~/kdesrc/build/modul/. Om du ändrar inställning av alternativet build-dir, använd den istället för ~/kdesrc/build.

Bygg om med .refresh-me för modulen kdelibs:

% touch ~/kdesrc/build/kdelibs/.refresh-me
% kdesrc-build

Ändra inställning av miljövariabler

Normalt använder kdesrc-build miljön som är närvarande vid start när program körs för att utföra uppdateringar och bygga. Det är användbart när du kör kdesrc-build från kommandoraden.

Dock kan du vilja ändra inställning av miljövariabler som kdesrc-build inte direkt tillhandahåller ett alternativ för. (För att exempelvis ställa in eventuella miljövariabler som behövs när kdesrc-build körs i bakgrunden via Cron.) Det är möjligt med alternativet set-env.

I motsats till de flesta alternativ kan det anges flera gånger, och accepterar två värden, åtskilda med mellanslag. Det första är namnet på miljövariabeln som ska sättas, och resten av raden är dess värde.

Ställ in DISTRO=BSD för alla moduler:

global
  set-env DISTRO BSD
end global

Återuppta byggprocesser

Återuppta en misslyckad eller avbruten byggprocess

Du kan tala om för kdesrc-build att börja bygga från en annan modul än det normalt skulle göra. Det kan vara användbart när en uppsättning moduler misslyckades, eller om du avbröt en körning i mitten. Du kan styra det med väljarna --resume-from och --resume-after.

Notera

Äldre versioner av kdesrc-build hoppade över uppdatering av källkod när ett bygge återupptogs. Det görs inte längre standardmässigt, men man kan alltid använda kommandoradsväljaren --no-src för att hoppa över uppdateringen.

Återuppta byggprocessen med början på kdebase:

% kdesrc-build --resume-from=kdebase

Återuppta byggprocessen med början efter kdebase (i fallet du fixade problemet för hand och installerade modulen själv):

% kdesrc-build --resume-after=kdebase

Om det senaste bygget med kdesrc-build slutade med ett byggfel, kan du också använda kommandoradsväljaren --resume, som återupptar det senaste bygget med modulen som misslyckades. Källkods- och metadatauppdateringar hoppas också över (men om du behöver dem, är det i allmänhet bättre att använda --resume-from istället).

Ignorera moduler i en byggprocess

På samma sätt som du kan återuppta byggprocessen från en modul, kan du istället välja att uppdatera och bygga normalt, men ignorera en uppsättning moduler.

Du kan göra det med väljaren --ignore-modules. Den talar om för kdesrc-build att ignorera alla följande moduler på kommandoraden när en uppdatering och byggprocess utförs.

Ignorera extragear/multimedia och kdereview under en fullständig körning:

% kdesrc-build --ignore-modules extragear/multimedia kdereview

Ändra alternativ från kommandoraden

Ändra allmänna alternativ

Du kan ändra uppsättningen alternativ som läses från inställningsfilen direkt från kommandoraden. Ändringen överskrider inställningen i filen, men är bara tillfällig. Den gäller bara så länge den fortfarande är närvarande på kommandoraden.

kdesrc-build låter dig ändra alternativ namngivna som alternativnamn genom att ange en väljare på kommandoraden på formen --alternativnamn=värde. kdesrc-build känner igen om det inte vet vad alternativet är, ock söker efter namnet i sin lista med alternativnamn. Om det inte känner igen namnet, får du en varning, annars kommer det ihåg värdet du ställde in det till och överskrider en eventuell inställning från filen.

Ställa in alternativet source-dir till /dev/null för test:

% kdesrc-build --pretend --källkodskatalog=/dev/null

Ändra modulalternativ

Det är också möjligt att bara ändra alternativ för en viss modul. Syntaxen är liknande: --modul,alternativnamn=värde.

Ändringen överskrider eventuell duplicerad inställning för modulen som hittas i inställningsfilen, och gäller bara när alternativet skickas med på kommandoraden.

Använda en annan byggkatalog för modulen kdeedu:

% kdesrc-build --kdeedu,byggkatalog=temporärbygg