Konsten att bygga Program

Bygg i /tmp eller /var/tmp för att se om programmet verkligen kompilerar och fungerar.

Lägg källkoden i /usr/local/hacks/src/<paket-namn>/<version>. T.ex. skulle programmet Foobar 5.8.2 hamna i /usr/local/hacks/src/Foobar/5.8.2. Är /usr/local/hacks/src full finns /usr/local/hacks/src{2,3,4,5} att tillgå.

Bygg programmet i obj om det går, d.v.s.: mkdir obj; cd obj; ../configure --prefix=/usr/local/hacks/vol// && make eller dyl.

Kontrollera att programmet är korrekt länket, d.v.s. (i bash): LD_LIBRARY_PATH= ldd <program> ska inte innehålla rader i stil med:

libfoo.so.42.17 => (file not found)

Om du hittar sådana rader, försök länka om programmet med -R flaggan till gcc.

Om det av nån anledning skulle vara omöjligt att undvika användningen av LD_LIBRARY_PATH, bygg ett "wrapper-sh-skript" alternativt bygg en modul. installera programmet med "make install", försök undvika att lägga saker i:

Program hör hemma under /usr/local/hacks/vol{, 2, 3}. Om man behöver bygga en modul för att få det att funka så gör man det, annars är det helt ok med en mjuklänk från /usr/local/hacks/bin till /usr/local/hacks/vol/<paket-namn>/<version>/bin/<program>.

Kommandot hacks-usage visar diskanvändningen i hacks moduler; kan vara användbar för att hitta ställe att lägga kod och program.

Istället för att lägga man-sidor i /usr/local/hacks/man vill man nog bygga en modul istället som sätter MANPATH till /usr/local/hacks/vol/<paket-namn>/<version>/man eller motsv. Ovanstående gäller även libbar, infosidor och dyl. /usr/local/hacks/common/bin är till för platformsoberoende program d.v.s. skript.

Ta bort all onödig objektkod, d.v.s. rm -R /usr/local/hacks/src/<paket-namn>/<version>/obj eller motsvarande.

Skriv en /usr/local/hacks/src/<paket-namn>/<version>/README.nada som innehåller följande:

Om du modifierat källkoden, så skriv vilka filer du ändrade i och varför. även då om du "bara har lagt till en flagga i Makefile" eller dyl. En variant är att skriva README.nada som ett körbart skript.


Exempel:
För att kompilera detta på nada....

configure.in är trasig
lägg till en rad: 
AC_CHECK_LIB(xnet,inet_addr)
innan den kollar efter inet_addr (med AC_CHECK_FUNCS(...))

src/Makefile är trasig
lägg till -fno-rtti till CXXFLAGS

src/licq.cpp är trasig
lägg till 
#include <errno.h> i include-fils blocket.

src/licq.cpp förutsätter att tar är gtar, typiskt dumt.
Så byt ut "tar z..." till "gtar z...".
Beskriv också hur du kompilerat programmet.
Exempel:
mkdir obj
cd obj
../configure --prefix=/usr/local/hacks/vol/licq/0.51
make
när man länkar vill man lägga till föjande för att slippa LD_LIBRARY_PATH:
        -L/usr/local/hacks/vol/qt/1.42-gnu/lib
        -R/usr/local/hacks/vol/qt/1.42-gnu/lib
        -L/pkg/gcc/2.8.1/lib
        -R/pkg/gcc/2.8.1/lib  
make install

Om du bygger ett program till flera plattformar (läs: både Solaris & IRIX) så hör detta hemma i /misc/hacks/vol/<paket-namn>/<version>. Katalogen /misc/hacks/vol nås även under sökvägen /usr/local/hacks/common/vol. Allt som är plattformsspecefikt länkar man till via @sys. För att få veta vad @sys expanderas till på ditt system, kör fs sysname


Exempel:
$ls -al . .bin
.:
total 13
dr-xr-xr-x   6 jas      usr          2048 Mar 20 00:04 .
drwxr-xr-x   3 jas      usr          2048 Mar 20 00:03 ..
dr-xr-xr-x   4 jas      usr          2048 Mar 20 00:36 .bin
drwxr-xr-x   2 jas      usr          2048 Mar 20 00:32 E-docs
lrwxr-xr-x   1 jas      usr             9 Mar 20 00:04 bin -> .bin/@sys
dr-xr-xr-x   4 jas      usr          2048 Mar 20 19:06 config
dr-xr-xr-x  12 jas      usr          2048 Mar 20 18:58 themes

.bin:
total 10
dr-xr-xr-x   4 jas      usr          2048 Mar 20 00:36 .
dr-xr-xr-x   6 jas      usr          2048 Mar 20 00:04 ..
drwxr-xr-x   2 jas      usr          2048 Mar 20 00:33 sgi_63
lrwxr-xr-x   1 jas      usr             6 Mar 20 00:36 sgi_64 -> sgi_63
drwxr-xr-x   2 jas      usr          2048 Mar 20 00:05 sun4x_551
lrwxr-xr-x   1 jas      usr             9 Mar 20 00:05 sun4x_56 -> sun4x_551


Källkoden ska tas bort när programmet tas bort och inte innan dess. Moduler (/usr/local/hacks/modules) plockas bort när programmet inte finns kvar längre.

När du lagt in något på hacks så uppdaterar du hacks webbsida med nyheten. Filen är /misc/hacks/www/index.html och URLen är http://www.csc.kth.se/hacks/. Dokumentation som är lämplig att läsa med en webbläsare kan gärna länkas till från lämpligt avsnitt i sidan. Använd versionshantering (RCS) på filen. Fixas automatiskt i många versioner av emacs. Det funkar om mode-raden innehåller texten "RCS". (C-x C-q för att börja ändra i en fil och C-x C-q när du är klar.) I vissa versioner av XEmacs måste du ladda VC från undermyn VC i Tools-menyn först. (Eller ha raden "(require 'vc)" i din .emacs.)

Hacks-gruppen
Senast uppdaterad: 2007-08-09