Solaris/anpassning av mjukvara
Från Basvrak
< Solaris
Anpassning av mjukvara, eller "hur man behöver peta på möget för att få det att bygga under solaris"
- bygga pfstools
- a) skiter sig troligtvis duktigt då den försöker länka in libMagick++, om du bygger med gcc. Lösningen är att bygga med suns kompilator ELLER länka mot ett libMagick++ som inte ligger i /usr/lib (dvs inte levererats med solaris och därmed inte byggts med suns kompilator)
- b) Lyckas du få (a) att fungera kommer nästa problem, troligtvis är det för gammalt jox som skickats med solaris, och du behöver mao mecka om så den hittar ditt hembyggda fina lib istället. Skicka in IMAGEMAGICK_LIBS="-R/usr/local/lib -L/usr/local/lib -lMagick++ -lWand -lMagick" som prefix till configure för att ordna detta. Glöm inte motsvarande med IMAGEMAGICK_CFLAGS.
- c) väl förbi imagemagick uppstår nästa problem, "finite()". Den allvetande skräphögen refererar till finite som en bsdism, och föreslår C99-varianten "isfinite()" istället. Riktigt så enkelt är det inte, då kompilatoreländet tokvägrar att inse att den skall använda macrot. Definiera därför __C99FEATURES__ tidigt i den problematiska källkoden (minst före math.h inkluderas)
- d) får du problem med konstiga libbar och grejor efter allt det där är fixat så beror det på att du försöker snebygga mellan olika versioner av g++, se till att allt är byggt med samma version...
- pfscalibrate
- jpeg2hdrgen kräver gawk, byt awk mot gawk i scriptet
- bygga ufraw
- * ufraw_ufraw.c:437: error: too many arguments to function `ctime_r'
- anledningen till att detta skiter sig är att man försöker kompensera för gamla solarisversioner, åtminstone i opensolaris är ctime_r posix-korrekt. Redigera bort det extra argumentet.
- du behöver även libexiv2 för att fixa exif (typiskt bra), se helvetet nedan.
- bygga lensfun (http://lensfun.berlios.de/)
- # editera configurescriptet för att köra gmake istället för make vid versionskontroll av make (sedan bygger du genom att skriva "gmake", såklart)
- # installation fallerar med "cp -d illegal option" eller nåt sånt. Ändra i filen build/mak/host/posix.mak så den använder gcp istället för cp. (Orsaken till att det inte fungerar är att -d är en gnuism som inte stödjs av posix, makefilen har mao ett extra fint namn)
- # sen visar det sig att hela installationsmöget är kackigt så man får kopiera grejorna för hand ändå
- använda locate / glocate
- editera glocate-scriptet så att LC_ALL='C' står överst, annars skiter sig sort med UTF-8
- taglib (http://developer.kde.org/~wheeler/taglib.html) med tillhörande perlmodul
- 1. konfigurera och bygg taglib med CXX="/opt/csw/gcc3/bin/g++" CC="/opt/csw/gcc3/bin/gcc"
- 2. perlmodulen (Audio::Taglib) har en trasig makefil, man behöver redigera Makefile.PL för att ta bort kontrollen om "fel" operativsystem
- 3. sed i Makefile.PL har fel argument, kräver gnu sed. installera gsed med blastwave och ändra Makefile.PL från sed till gsed
- 4. möget kräver gcc men det är sannolikt att perl konfar att bygga med solaris. byt ut -KPIC mot -fPIC i den genererade filen (eller korrigera ditt perl)
- 5. byt OPTIMIZE = -xO3 -xtarget=generic -xarch=generic mot OPTIMIZE = -O3 i Makefile
- 6. byt CCFLAGS = -D_REENTRANT -xO3 -xtarget=generic -xarch=generic -I/opt/csw/bdb44/include -I/opt/csw/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 mot CCFLAGS = -D_REENTRANT -O3 -I/opt/csw/bdb44/include -I/opt/csw/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
- 7. Makefile.PL hårdkodar CC till g++, anropa make med PATH=/opt/csw/gcc3/bin:$PATH gmake
- 8. sannolikt klagar make på nåt fel med iconv. (./include/iconv_wrap.h:30: error: invalid conversion from 'char**' to 'const char**'). Redigera in ett cast, (const char **)inbuf, inbytesleft,
- libexiv2: ändra den hårdkodade SHELL i config/Makefile.in, xmpsdk/src/Makefile samt src/Makefile till /bin/bash istället för /bin/sh
- dock kukar bygget ur kraftfullt, man behöver en gcc som är byggd för att använda gnu ld. Detta kan man lösa på följande sätt:
- symlänka /usr/ccs/bin/gd till gnu ld
- leta reda på "collect2" i gcc-trädet. SÄKERHETSKOPIERA DEN!
- redigera collect2 med emacs, byt ut /usr/ccs/bin/ld mot /usr/ccs/bin/gd
- bygg
- återställ collect2 (om du inte vill köra gnu ld längre)
- gpscorrelate: I linux gäller att char *ctime_r(const time_t *timep, char *buf);, i solaris (som inte är opensolaris) tar den ytterligare ett argument, storleken på buf, så alla ctime_r-anrop behöver ändras.
- Dessutom behöver makefilen hackas lite, man får lägga till lite "-R" för att peka ut runpaths för libbar (ex där exiv2 bor), och ställa om så den länkar mha g++ istället för gcc
- ffpmeg har en egen sida
