wiki:npl/X/libglew

Version 2 (modified by fibology, 15 years ago) (diff)

--

Downloaden en standaard buildscript proberen:

psy npl # mkdir X/libglew
psy npl # cd X/libglew/
psy libglew # wget http://dfn.dl.sourceforge.net/sourceforge/glew/glew-1.4.0-src.tgz
--14:24:01--  http://dfn.dl.sourceforge.net/sourceforge/glew/glew-1.4.0-src.tgz
           => `glew-1.4.0-src.tgz'
Resolving dfn.dl.sourceforge.net... 194.95.236.6
Connecting to dfn.dl.sourceforge.net|194.95.236.6|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 360,075 (352K) [application/x-gzip]

100%[===============================================================================================================>] 360,075      548.15K/s

14:24:03 (546.75 KB/s) - `glew-1.4.0-src.tgz' saved [360075/360075]

psy libglew # cp ../../packagename.SlackBuild.example libglew.SlackBuild
psy libglew # cd ../..
psy npl # ./rebuildcheck X/libglew/libglew.SlackBuild
REBUILD REQUIRED: ./glew-1.4.0-src.tgz has changed!
REBUILDING /home/psy/syn3/npl/X/libglew/libglew.SlackBuild:
Buildroot up-to-date check: ............................................................................................................DONE
Buildroot /home/psy/syn3/builder/buildroot0 repareren/syncen...OK
/home/psy/syn3/npl/X/libglew word gekopieerd naar werkdirectory /home/psy/syn3/builder/buildroot0/tmp/build
*** Chroot naar /home/psy/syn3/builder/buildroot0 en starten van libglew.SlackBuild in /tmp/build:
/dev/pts/43: No such file or directory
1 /tmp/build > basename ./libglew.SlackBuild
1 /tmp/build > sed s/.SlackBuild//
26 /tmp/build > NAME=libglew
1 /tmp/build > ls '*.tar.*'
ls: *.tar.*: No such file or directory
29 /tmp/build > SRC_ARC=
1 /tmp/build > echo
1 /tmp/build > sed 's/.*-//g'
1 /tmp/build > sed 's/\.tar\..*$//g'
32 /tmp/build > VER=
1 /tmp/build > echo
1 /tmp/build > sed 's/\.tar\..*$//g'
35 /tmp/build > SRC_DIR=
1 /tmp/build > arch
39 /tmp/build > ARCH=i586
47 /tmp/build > syn3_unpack
Usage: /bin/syn3_unpack <archive>
Unpacks specified archive in current directory.
Automaticly determins how to unpack the file.
47 /tmp/build > exit 1
*** Er ging iets mis tijdens het bakken in de buildroot!

syn3_unpack herkend geen .tgz files, dus rename file naar .tar.gz met een nette naam zonder src erin:

psy npl # cd X/libglew/
psy libglew # mv glew-1.4.0-src.tgz glew-1.4.0.tar.gz
psy libglew # cd ../..
psy npl # ./rebuildcheck X/libglew/libglew.SlackBuild
...
17 /tmp/build > cd glew-1.4.0
/bin/syn3_build_automake: line 17: cd: glew-1.4.0: No such file or directory

In de source tarbal bevind zich een directory glew, zonder versie nummer. Dus is het nodig SRC_DIR aan te passen in buildscript:

psy npl # mcedit X/libglew/libglew.SlackBuild

psy npl # ./rebuildcheck X/libglew/libglew.SlackBuild
...
18 /tmp/build/glew > ./configure --prefix=/usr --sysconfdir=/etc
/bin/syn3_build_automake: line 18: ./configure: No such file or directory

Aiii...er is blijkbaar geen ./configure. We jumpen in de buildroot en kijken hoe we het pakketje moeten builden:

psy npl # chroot ../builder/buildroot0/
stderr is not a tty - where are you?
[Syn-3] root@darkstar.example.net /# ls
bin/  boot/  dev/  etc/  home/  lib/  mnt/  proc/  root/  sbin/  service/  sys/  tmp/  usr/  var/
[Syn-3] root@darkstar.example.net /# cd /tmp/build/glew
glew               glew-1.4.0.tar.gz
[Syn-3] root@darkstar.example.net /# cd /tmp/build/glew
[Syn-3] root@darkstar.example.net /tmp/build/glew# ls
Makefile  README.txt  auto/  bin/  build/  config/  doc/  include/  lib/  src/
[Syn-3] root@darkstar.example.net /tmp/build/glew# cat README.txt
See doc/index.html for more information.

If you downloaded the tarball from the GLEW website, you just need to:

    Unix:

        make

    Windows:

        use the project file in build/vc6/

If you wish to build GLEW from scratch (update the extension data from
the net or add your own extension information), you need a Unix
environment (including wget, perl, and GNU make).  The extension data
is regenerated from the top level source directory with:

        make extensions
[Syn-3] root@darkstar.example.net /tmp/build/glew# make
cc -O2 -Wall -W -Iinclude  -fPIC  -o src/glew.pic_o -c src/glew.c
cc -O2 -Wall -W -Iinclude   -o src/glew.o -c src/glew.c
In file included from src/glew.c:32:
include/GL/glew.h:1123:20: GL/glu.h: No such file or directory

We hebben de opengl library nodig om tegen te compilen. Dit is libmesa. Als we in de makefile kijken zien we dit:

...
GLEW_DEST ?= /usr
BINDIR ?= $(GLEW_DEST)/bin
LIBDIR ?= $(GLEW_DEST)/lib
INCDIR ?= $(GLEW_DEST)/include/GL
...
install: all
# directories
        $(INSTALL) -d -m 0755 $(BINDIR)
        $(INSTALL) -d -m 0755 $(INCDIR)
        $(INSTALL) -d -m 0755 $(LIBDIR)
...

We hopen dat make && make GLEW_DEST=/tmp/pkg/usr install het pakketje build en op de goede plek pleurt, en voegen #NEED:libmesa toe aan de slackbuild:

In de slackbuild, vervangen we syn3_build_automake door wat andere regels:
build and install sourcefiles
#(use one of the other syn3_build_* scripts when needed)
export CONFIGURE_OPTS=""
export MAKE_OPTS=""
#export NOTEST=1
#syn3_build_automake $SRC_DIR /tmp/pkg || exit 1
pushd $SRC_DIR || exit 1
make -j1 || exit 1
make -j1 GLEW_DIR=/tmp/pkg/usr install || exit 1
popd

Deze NEED zorgt ervoor dat libmesa en alle builddependencies hiervan in de buildroot geinstalled worden.

Hierna build hij nog niet, en zeurt hij nog, terwijl de glu.h wel in de buildroot staat:

...
include/GL/glew.h:1123:20: GL/glu.h: No such file or directory
make: *** [src/glew.pic_o] Error 1
61 /tmp/build/glew > exit 1
*** Er ging iets mis tijdens het bakken in de buildroot!
Error while rebuilding /home/psy/syn3/npl/X/libglew/libglew.SlackBuild!
psy npl # chroot ../builder/buildroot0/
stderr is not a tty - where are you?
[Syn-3] root@darkstar.example.net /# find / |grep glu.h
/usr/X11R6/include/GL/glu.h
/usr/src/Mesa-6.5/docs/glu.html
/usr/src/Mesa-6.5/include/GL/glu.h

Dit betekend dat de makefile niet op de goede plek kijkt. Dit noemen we vanaf nu officieel een 'kutpakket' om te compilen. ;)

We kunnen verder kutten, maar es is veel kans dat de mensen van gentoo of debian al een patch hebben hiervoor. ff zoeken... Mijn gentoo was nog bij 1.3.x, en van debian vond ik deze patch via google: http://ftp.debian.org/debian/pool/main/g/glew/glew_1.4.0-2.diff.gz

Maar dit hielp ook niks, even googlen op de foutmelding...via http://www.google.com/search?hl=en&safe=off&q=glew++%2B+GL%2Fglu.h%3A+No+such+file+or+directory&btnG=Search vind je:

Installation problem - Jahshaka Forums
include/GL/glew.h:1103:20: error: GL/glu.h: No such file or directory .... Is GLEW installed in /usr/include/GL? If installing openlibraries from cvs you ...
www.jahshaka.org/forum/installation-problem-t629.html - 81k - Cached - Similar pages

Klinkt logisch, GL/glu.h moet gewoon in /usr/include staan ipv /usr/X11/include. Is dit een fout in een source pacakge van ons of is glew gewoon krikky? We maken ons niet druk en proberen het ff snel met een symlink in de buildroot:

psy npl # chroot ../builder/buildroot0/
stderr is not a tty - where are you?
[Syn-3] root@darkstar.example.net /# cd /tmp/build/glew
[Syn-3] root@darkstar.example.net /tmp/build/glew# ln -s /usr/X11/include/GL /usr/include/GL
[Syn-3] root@darkstar.example.net /tmp/build/glew# make -j1
cc -O2 -Wall -W -Iinclude  -fPIC  -o src/glew.pic_o -c src/glew.c
cc -shared -Wl,-soname=libGLEW.so.1.4 -o lib/libGLEW.so.1.4.0 src/glew.pic_o  -lXmu -lXi -lGLU -lGL -lXext -lX11
/usr/lib/gcc-lib/i486-slackware-linux/3.3.4/../../../../i486-slackware-linux/bin/ld: cannot find -lXmu
collect2: ld returned 1 exit status
make: *** [lib/libGLEW.so.1.4.0] Error 1

We komen weer een stap verder! Nu hebben we libXmu nog nodig zo te zien. We zoeken even in de filelist waar dat ding staat:

psy npl # ./findpkg libXmu
Package libXmu not found!
psy npl # cat .tmp/files|grep -i libXmu
/home/psy/syn3/npl/X/xorg/lib/mods/libXmu-X11R7.1-1.0.1.tar.gz

Ok, hij hoort onderdeel te zijn van xorg_lib, maar deze hebben we al. (kijk maar naar de output van rebuildcheck) Dit komt omdat je normaal ook /etc/xorg_build.conf moet sourcen. Deze set een aantal omgevings variabellen, zodat bepaalde libraries gevonden kunnen worden. We passen de slackbuild aan zodat hij er ongeveer zo uit ziet en rebuilden nogmaals:

#syn3_build_automake $SRC_DIR /tmp/pkg || exit 1
source /etc/xorg_build.conf || exit 1
ln -s /usr/X11/include/GL /usr/include/GL || exit 1
pushd $SRC_DIR || exit 1
make -j1 || exit 1
make -j1 GLEW_DIR=/tmp/pkg/usr install || exit 1
popd

rebuild:

62 /tmp/build/glew > make -j1
cc -O2 -Wall -W -Iinclude  -fPIC  -o src/glew.pic_o -c src/glew.c
cc -shared -Wl,-soname=libGLEW.so.1.4 -o lib/libGLEW.so.1.4.0 src/glew.pic_o -L/usr/X11R6/lib -lXmu -lXi -lGLU -lGL -lXext -lX11
ln -sf libGLEW.so.1.4.0 lib/libGLEW.so.1.4
ln -sf libGLEW.so.1.4.0 lib/libGLEW.so
cc -O2 -Wall -W -Iinclude   -o src/glew.o -c src/glew.c
ar cr lib/libGLEW.a src/glew.o
cc -O2 -Wall -W -Iinclude  -o bin/glewinfo src/glewinfo.c -Llib -Wl,-Bdynamic -lGLEW -L/usr/X11R6/lib -lXmu -lXi -lGLU -lGL -lXext -lX11
cc -O2 -Wall -W -Iinclude  -o bin/visualinfo src/visualinfo.c -Llib -Wl,-Bdynamic -lGLEW -L/usr/X11R6/lib -lXmu -lXi -lGLU -lGL -lXext -lX11
63 /tmp/build/glew > make -j1 GLEW_DIR=/tmp/pkg/usr install
install -d -m 0755 /usr/bin
install -d -m 0755 /usr/include/GL
install -d -m 0755 /usr/lib
install -s -m 0644 lib/libGLEW.so.1.4.0 /usr/lib/
ln -sf libGLEW.so.1.4.0 /usr/lib/libGLEW.so.1.4
install -m 0644 include/GL/wglew.h /usr/include/GL/
install -m 0644 include/GL/glew.h /usr/include/GL/
install -m 0644 include/GL/glxew.h /usr/include/GL/
install -s -m 0644 lib/libGLEW.a /usr/lib/
ln -sf libGLEW.so.1.4.0 /usr/lib/libGLEW.so
install -s -m 0755 bin/glewinfo bin/visualinfo /usr/bin/
64 /tmp/build/glew > popd
/tmp/build
68 /tmp/build > syn3_strip /tmp/pkg
/bin/syn3_strip: line 11: cd: /tmp/pkg: No such file or directory
68 /tmp/build > exit 1
*** Er ging iets mis tijdens het bakken in de buildroot!

W00t! We zien dat het pakketje wel build, maar het installen gaat nog naar de verkeerde plek. Oops, we gebruiken GLEW_DIR, terwijl het GLEW_DEST moet zijn. (Dit had ik dus verkeerd gelezen ofzo) Dit corrigeren even en rebuilden nogmaals:

63 /tmp/build/glew > make -j1 GLEW_DEST=/tmp/pkg/usr install
install -d -m 0755 /tmp/pkg/usr/bin
install -d -m 0755 /tmp/pkg/usr/include/GL
install -d -m 0755 /tmp/pkg/usr/lib
install -s -m 0644 lib/libGLEW.so.1.4.0 /tmp/pkg/usr/lib/
ln -sf libGLEW.so.1.4.0 /tmp/pkg/usr/lib/libGLEW.so.1.4
install -m 0644 include/GL/wglew.h /tmp/pkg/usr/include/GL/
install -m 0644 include/GL/glew.h /tmp/pkg/usr/include/GL/
install -m 0644 include/GL/glxew.h /tmp/pkg/usr/include/GL/
install -s -m 0644 lib/libGLEW.a /tmp/pkg/usr/lib/
ln -sf libGLEW.so.1.4.0 /tmp/pkg/usr/lib/libGLEW.so
install -s -m 0755 bin/glewinfo bin/visualinfo /tmp/pkg/usr/bin/
64 /tmp/build/glew > popd
/tmp/build
68 /tmp/build > syn3_strip /tmp/pkg
71 /tmp/build > syn3_move_dev /tmp/pkg /tmp/pkgdev
72 /tmp/build > syn3_makepkg /tmp/pkgdev libglew_dev 1.4.0 i586
tar-1.13: libglew_dev.pkg.tar is the archive; not dumped
75 /tmp/build > syn3_makepkg /tmp/pkg libglew 1.4.0 i586
tar-1.13: libglew.pkg.tar is the archive; not dumped
*** Build gelukt.
* Packages terugmoven naar originele directory..
/home/psy/syn3/builder/buildroot0/tmp/build/libglew.arch /home/psy/syn3/builder/buildroot0/tmp/build/libglew_dev.arch ...
/home/psy/syn3/builder/buildroot0/tmp/build/libglew.version /home/psy/syn3/builder/buildroot0/tmp/build/libglew_dev.version ...
/home/psy/syn3/builder/buildroot0/tmp/build/libglew.pkg /home/psy/syn3/builder/buildroot0/tmp/build/libglew_dev.pkg ...

* Klaar ja!
Updating md5 for /home/psy/syn3/npl/X/libglew/libglew.SlackBuild...
Updating dependency information for /home/psy/syn3/npl/X/libglew/libglew.SlackBuild...
All rebuilds completed.

Nu word het hele process doorlopen en lijkt alles goed te gaan. Even in het gemaakte pakketjes kijken of alles goed lijkt:

psy npl # tar -tvzf X/libglew/libglew.pkg
drwxr-xr-x root/root         0 2007-08-25 16:01 ./
drwxr-xr-x root/root         0 2007-08-25 16:01 install/
-rw-r--r-- root/root       182 2007-08-25 16:01 install/doinst.sh
drwxr-xr-x root/root         0 2007-08-25 16:01 usr/
drwxr-xr-x root/root         0 2007-08-25 16:01 usr/lib/
-rw-r--r-- root/root    229040 2007-08-25 16:01 usr/lib/libGLEW.so.1.4.0
drwxr-xr-x root/root         0 2007-08-25 16:01 usr/bin/
-rwxr-xr-x root/root    198356 2007-08-25 16:01 usr/bin/glewinfo
-rwxr-xr-x root/root     10936 2007-08-25 16:01 usr/bin/visualinfo
psy npl # tar -tvzf X/libglew/libglew_dev.pkg
drwxr-xr-x root/root         0 2007-08-25 16:01 ./
drwxr-xr-x root/root         0 2007-08-25 16:01 usr/
drwxr-xr-x root/root         0 2007-08-25 16:01 usr/include/
drwxr-xr-x root/root         0 2007-08-25 16:01 usr/include/GL/
-rw-r--r-- root/root     41824 2007-08-25 16:01 usr/include/GL/wglew.h
-rw-r--r-- root/root    520342 2007-08-25 16:01 usr/include/GL/glew.h
-rw-r--r-- root/root     46077 2007-08-25 16:01 usr/include/GL/glxew.h
drwxr-xr-x root/root         0 2007-08-25 16:01 usr/lib/
-rw-r--r-- root/root    114412 2007-08-25 16:01 usr/lib/libGLEW.a

Dit ziet er keurig uit...een mooie SO file en een keurig development pakketje met headers en de .a file.

Nu nog toevoegen aan SVN en committen, en dan is dit pakketje klaar voor gebruik:

psy npl # svn add X/libglew
A         X/libglew
A         X/libglew/libglew.SlackBuild
A  (bin)  X/libglew/glew-1.4.0.tar.gz
A         X/libglew/libglew.arch
A         X/libglew/libglew_dev.arch
A         X/libglew/libglew.version
A         X/libglew/libglew_dev.version
A  (bin)  X/libglew/libglew.pkg
A  (bin)  X/libglew/libglew_dev.pkg
A         X/libglew/libglew.md5
psy npl # svn commit -m 'libglew, nodig voor openmsx' X/libglew
Adding         X/libglew
Adding  (bin)  X/libglew/glew-1.4.0.tar.gz
Adding         X/libglew/libglew.SlackBuild
Adding         X/libglew/libglew.arch
Adding         X/libglew/libglew.md5
Adding  (bin)  X/libglew/libglew.pkg
Adding         X/libglew/libglew.version
Adding         X/libglew/libglew_dev.arch
Adding  (bin)  X/libglew/libglew_dev.pkg
Adding         X/libglew/libglew_dev.version
Transmitting file data .........
Committed revision 3430.

Nu kan ik verder met de volgende dependency voor openmsx.