Solaris/ffmpeg
Från Basvrak
Innehåll |
Bygga ffmpeg för Solaris 10
Identifierade beroenden
Dokumentationen är riksusel på att tala om vilka beroenden som finns, antagligen för att alla redan har det installerat på sin linux.
Dessa libbar behövs för full funktion:
liba52_decoder_deps="liba52" liba52bin_decoder_extralibs='$ldl' libamr_nb_decoder_deps="libamr_nb" libamr_nb_encoder_deps="libamr_nb" libamr_wb_decoder_deps="libamr_wb" libamr_wb_encoder_deps="libamr_wb" libdirac_decoder_deps="libdirac" libdirac_encoder_deps="libdirac" libfaac_encoder_deps="libfaac" libfaad_decoder_deps="libfaad" libfaadbin_decoder_extralibs='$ldl' libgsm_decoder_deps="libgsm" libgsm_encoder_deps="libgsm" libgsm_ms_decoder_deps="libgsm" libgsm_ms_encoder_deps="libgsm" libmp3lame_encoder_deps="libmp3lame" libschroedinger_decoder_deps="libschroedinger" libschroedinger_encoder_deps="libschroedinger" libtheora_encoder_deps="libtheora" libvorbis_encoder_deps="libvorbis" libx264_encoder_deps="libx264" libxvid_encoder_deps="libxvid" mpeg4aac_decoder_deps="libfaad"
Fixa "configure"
Configure är trasigt och behöver fixas. Börja med att byta ut alla "grep" mot "ggrep" så att gnu grep används. (Förutsätter shellutils eller coreutils eller vad de nu heter, kompilerat med execprefix g)
Dessutom så klarar den inte av att använda environmentvariabler för att hitta binärerna, så man får byta ut hårdkodningen till nm, gcc, strip så det blir rätt.
Sen klagar den på "pr: empty file" en massa.
En del av problemet är att den inte klarar av att generera en korrekt "config.h". Under linux fylls den på med massor av define-grejor (tex ENABLE_AUDIO_BEOS_MUXER), det gör den inte under solaris.
configure-scriptet använder en "toupper"-konstruktion som inte verkar köras.
eval $action \$$(toupper ${option%s})_LIST
solaris använder bash 3.00.16, linux använder bash 3.1.17 blastwave har bash GNU bash, version 3.2.39(1)-release (i386-pc-solaris2.8)
löser /inte/ problemet, inte heller att använda gtr istället för tr
$(<command>) är posixska för `<command>`, byter man alla $(<command>) mot `<command>` verkar det hända mer saker. Bash skall hantera $(), men verkar av någon anledning inte använda detta när det anropas med "eval". Detta kan lätt verifieras genom att sätta in diverse echo före och efter tex anrop av "toupper"
funktionen "find_things" fungerar inte. Detta beror på att den anropar riktiga "sed" och inte gnu sed. Alltså behöver man byta ut detta oxå, precis som med grep.
Byggfel
"ranlib" hittas inte. Detta beror på att solaris inte har något ranlib. detta är ytterligare ett offer för hårdkodningen i configurescriptet, som visserligen har kod för att ersätta ranlib i Makefilen, men sedan låser det till "ranlib". ranlib är normalt ersatt av /bin/true i solaris.
sedan saknas något include-mässigt:
In file included from vhook/imlib2.c:60: /opt/csw/include/Imlib2.h:107: error: syntax error before '*' token
Denna inkluderas från vhook/imlib2.c
Felet beror på att "Display" inte är definierad. "Display" definieras i /usr/include/X11/Xlib.h (/usr/openwin/include/X11/Xlib.h). Denna inkluderas inte (enligt gcc -E)
Man kan diskutera om det är ett fel i Imlib2.h eller i ffmpeg, lösningen är iaf att inkludera Xlib.h före Imlib2.h i imlib2.c
gcc fixar inte optionen "-rdynamic"
Detta motsvaras av "-Wl,-export-dynamic"[1] som även det behöver hackas in i config.mak (dvs ändra configure-scriptet på sikt) configure "skall" kolla om detta fungerar, men det verkar den inte göra
"install" fungerar inte på samma sätt som gnu install, alla "install" i makefilerna måste bytas mot "ginstall" (Makefile, config.mak, subdir.mak)
