 Makefile.linux       | 18 ++++++++-------
 lib/Makefile.linux   | 23 ++++++++++++-------
 tools/Makefile.linux | 64 ++++++++++++++++++++--------------------------------
 3 files changed, 50 insertions(+), 55 deletions(-)

diff --git a/Makefile.linux b/Makefile.linux
index 24ca137..51fc88c 100644
--- a/Makefile.linux
+++ b/Makefile.linux
@@ -47,19 +47,21 @@ documentation:
 
 
 # Installation settings
-LIBDIR  = /usr/lib/
-INCDIR  = /usr/local/include/
-BINDIR  = /usr/local/bin/
-MAN1DIR = /usr/local/share/man/man1/
-CP = cp
+LIBDIR  = $(DESTDIR)/usr/@GENTOO_LIBDIR@/$(DEB_HOST_MULTIARCH)
+INCDIR  = $(DESTDIR)/usr/include/
+BINDIR  = $(DESTDIR)/usr/bin/
+MAN1DIR = $(DESTDIR)/usr/share/man/man1/
+CP = cp -P
 MKDIR = mkdir -p
 
-install:
-	$(CP) lib/libopenctm.so $(LIBDIR)
+$(LIBDIR) $(INCDIR) $(BINDIR) $(MAN1DIR):
+	mkdir -p "$@"
+
+install: $(LIBDIR) $(INCDIR) $(BINDIR) $(MAN1DIR)
+	$(CP) lib/libopenctm.so* $(LIBDIR)
 	$(CP) lib/openctm.h $(INCDIR)
 	$(CP) lib/openctmpp.h $(INCDIR)
 	$(CP) tools/ctmconv $(BINDIR)
 	$(CP) tools/ctmviewer $(BINDIR)
-	$(MKDIR) $(MAN1DIR)
 	$(CP) doc/ctmconv.1 $(MAN1DIR)
 	$(CP) doc/ctmviewer.1 $(MAN1DIR)
diff --git a/lib/Makefile.linux b/lib/Makefile.linux
index 7643127..1e622ec 100644
--- a/lib/Makefile.linux
+++ b/lib/Makefile.linux
@@ -27,13 +27,18 @@
 ###############################################################################
 
 LZMADIR = liblzma
-CC = gcc
-CFLAGS = -O3 -W -Wall -c -fPIC -DOPENCTM_BUILD -I$(LZMADIR) -DLZMA_PREFIX_CTM -std=c99 -pedantic
-CFLAGS_LZMA = -O3 -W -Wall -c -fPIC -DLZMA_PREFIX_CTM -std=c99 -pedantic
+CC ?= gcc
+CFLAGS += -W -Wall -c -fPIC -std=c99 -pedantic
+INCDEF = -DOPENCTM_BUILD -I$(LZMADIR) -DLZMA_PREFIX_CTM
+INCDEF_LZMA = -DLZMA_PREFIX_CTM
 RM = rm -f
 DEPEND = $(CPP) -MM
 
-DYNAMICLIB = libopenctm.so
+VERSION = 1.0.3
+SOVERSION = 1
+LIBNAME = libopenctm.so
+SONAME = $(LIBNAME).$(SOVERSION)
+DYNAMICLIB = $(LIBNAME).$(VERSION)
 
 OBJS = openctm.o \
        stream.o \
@@ -64,16 +69,18 @@ LZMA_SRCS = $(LZMADIR)/Alloc.c \
 all: $(DYNAMICLIB)
 
 clean:
-	$(RM) $(DYNAMICLIB) $(OBJS) $(LZMA_OBJS)
+	$(RM) $(DYNAMICLIB) $(SONAME) $(LIBNAME) $(OBJS) $(LZMA_OBJS)
 
 $(DYNAMICLIB): $(OBJS) $(LZMA_OBJS)
-	gcc -shared -s -Wl,-soname,$@ -o $@ $(OBJS) $(LZMA_OBJS) -lm
+	$(CC) $(LDFLAGS) -shared -s -Wl,-soname,$(SONAME) -o $@ $(OBJS) $(LZMA_OBJS) -lm
+	ln -s $(DYNAMICLIB) $(SONAME)
+	ln -s $(DYNAMICLIB) $(LIBNAME)
 
 %.o: %.c
-	$(CC) $(CFLAGS) $<
+	$(CC) $(CPPFLAGS) $(CFLAGS) $(INCDEF) $<
 
 %.o: $(LZMADIR)/%.c
-	$(CC) $(CFLAGS_LZMA) $<
+	$(CC) $(CPPFLAGS) $(CFLAGS) $(INCDEF_LZMA) $<
 
 depend:
 	$(DEPEND) $(SRCS) $(LZMA_SRCS) > make.depend
diff --git a/tools/Makefile.linux b/tools/Makefile.linux
index fa3e6e5..46276d1 100644
--- a/tools/Makefile.linux
+++ b/tools/Makefile.linux
@@ -26,49 +26,50 @@
 ###############################################################################
 
 OPENCTMDIR = ../lib
-GLEWDIR = glew
-JPEGDIR = jpeg
+# Use system libs if possible
+#GLEWDIR = glew
+GLEWDIR = /usr/include/GL
+#JPEGDIR = jpeg
 RPLYDIR = rply
-TINYXMLDIR = tinyxml
-ZLIBDIR = zlib
-PNGLITEDIR = pnglite
+# rply in libvxl1-dev is version 1.1, we need v. 1.01
+#RPLYDIR = /usr/include/vxl/rply
+#TINYXMLDIR = tinyxml
+#ZLIBDIR = zlib
+#PNGLITEDIR = pnglite
 
-CPP = g++
-CPPFLAGS = -c -O3 -W -Wall `pkg-config --cflags gtk+-2.0` -I$(OPENCTMDIR) -I$(RPLYDIR) -I$(JPEGDIR) -I$(TINYXMLDIR) -I$(GLEWDIR) -I$(ZLIBDIR) -I$(PNGLITEDIR)
+CXX ?= g++
+CC ?= gcc
+CXXFLAGS += -W -Wall `pkg-config --cflags gtk+-2.0` -I$(OPENCTMDIR) -I$(RPLYDIR) -I$(GLEWDIR)
 
 MESHOBJS = mesh.o meshio.o ctm.o ply.o rply.o stl.o 3ds.o dae.o obj.o lwo.o off.o wrl.o
 CTMCONVOBJS = ctmconv.o common.o systimer.o convoptions.o $(MESHOBJS)
-CTMVIEWEROBJS = ctmviewer.o common.o image.o systimer.o sysdialog_gtk.o convoptions.o glew.o pnglite.o $(MESHOBJS)
+CTMVIEWEROBJS = ctmviewer.o common.o image.o systimer.o sysdialog_gtk.o convoptions.o $(MESHOBJS)
 CTMBENCHOBJS = ctmbench.o systimer.o
 
 all: ctmconv ctmviewer ctmbench
 
 clean:
 	rm -f ctmconv ctmviewer ctmbench $(CTMCONVOBJS) $(CTMVIEWEROBJS) $(CTMBENCHOBJS) bin2c phong_frag.h phong_vert.h
-	cd $(JPEGDIR) && $(MAKE) -f makefile.linux clean
-	cd $(TINYXMLDIR) && $(MAKE) -f Makefile.linux clean
-	cd $(ZLIBDIR) && $(MAKE) -f Makefile.linux clean
 
-libopenctm.so: $(OPENCTMDIR)/libopenctm.so
-	cp $< $@
+ctmconv: $(CTMCONVOBJS)
+	$(CXX) $(LDFLAGS) -s -o $@ -L$(OPENCTMDIR) $(CTMCONVOBJS) -lopenctm -ltinyxml
 
-ctmconv: $(CTMCONVOBJS) $(TINYXMLDIR)/libtinyxml.a libopenctm.so
-	$(CPP) -s -o $@ -L$(OPENCTMDIR) -L$(TINYXMLDIR) $(CTMCONVOBJS) -Wl,-rpath,. -lopenctm -ltinyxml
+ctmviewer: $(CTMVIEWEROBJS)
+	$(CXX) $(LDFLAGS) -s -o $@ -L$(OPENCTMDIR) $(CTMVIEWEROBJS) -lopenctm \
+	-ltinyxml -ljpeg -lpnglite -lz -lGL -lglut -lGLU -lGLEW \
+	-lgtk-x11-2.0 -lgobject-2.0 -lglib-2.0
 
-ctmviewer: $(CTMVIEWEROBJS) $(JPEGDIR)/libjpeg.a $(TINYXMLDIR)/libtinyxml.a $(ZLIBDIR)/libz.a libopenctm.so
-	$(CPP) -s -o $@ -L$(OPENCTMDIR) -L$(TINYXMLDIR) -L$(JPEGDIR) -L$(ZLIBDIR) $(CTMVIEWEROBJS) -Wl,-rpath,. -lopenctm -ltinyxml -ljpeg -lz -lglut `pkg-config --libs gtk+-2.0`
-
-ctmbench: $(CTMBENCHOBJS) libopenctm.so
-	$(CPP) -s -o $@ -L$(OPENCTMDIR) $(CTMBENCHOBJS) -Wl,-rpath,. -lopenctm
+ctmbench: $(CTMBENCHOBJS)
+	$(CXX) $(LDFLAGS) -s -o $@ -L$(OPENCTMDIR) $(CTMBENCHOBJS) -lopenctm
 
 %.o: %.cpp
-	$(CPP) $(CPPFLAGS) -o $@ $<
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
 
 ctmconv.o: ctmconv.cpp systimer.h convoptions.h mesh.h meshio.h
 ctmviewer.o: ctmviewer.cpp common.h image.h systimer.h sysdialog.h mesh.h meshio.h phong_vert.h phong_frag.h icons/icon_open.h icons/icon_save.h icons/icon_help.h
 ctmbench.o: ctmbench.cpp systimer.h
 common.o: common.cpp common.h
-image.o: image.cpp image.h common.h $(JPEGDIR)/libjpeg.a
+image.o: image.cpp image.h common.h
 systimer.o: systimer.cpp systimer.h
 sysdialog_gtk.o: sysdialog_gtk.cpp sysdialog.h
 convoptions.o: convoptions.cpp convoptions.h
@@ -91,22 +92,7 @@ phong_frag.h: phong.frag bin2c
 	./bin2c phong.frag phongFragSrc > $@
 
 bin2c: bin2c.cpp
-	$(CPP) -Os -W -Wall -o $@ $<
-
-$(JPEGDIR)/libjpeg.a:
-	cd $(JPEGDIR) && $(MAKE) -f makefile.linux libjpeg.a
-
-$(ZLIBDIR)/libz.a:
-	cd $(ZLIBDIR) && $(MAKE) -f Makefile.linux
-
-glew.o: $(GLEWDIR)/glew.c
-	gcc -c -Os -W -I$(GLEWDIR) -o $@ $<
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -Os -W -Wall -o $@ $<
 
 rply.o: $(RPLYDIR)/rply.c
-	gcc -c -O2 -W -I$(RPLYDIR) -o $@ $<
-
-pnglite.o: $(PNGLITEDIR)/pnglite.c
-	gcc -c -O2 -W -I$(PNGLITEDIR) -o $@ $<
-
-$(TINYXMLDIR)/libtinyxml.a:
-	cd $(TINYXMLDIR) && $(MAKE) -f Makefile.linux
+	$(CC) $(CPPFLAGS) $(CFLAGS) -c -O2 -W -I$(RPLYDIR) -o $@ $<
