From a8a439f2f11e11830638469ec37ba27700e4b8a2 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Sun, 7 Apr 2024 11:36:49 -0400 Subject: [PATCH 1/6] =?UTF-8?q?Makefile.linux:=20don=E2=80=99t=20assume=20?= =?UTF-8?q?installation=20directories=20already=20exist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile.linux | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile.linux b/Makefile.linux index 24ca137..375d777 100644 --- a/Makefile.linux +++ b/Makefile.linux @@ -55,9 +55,12 @@ CP = cp MKDIR = mkdir -p install: + $(MKDIR) $(LIBDIR) $(CP) lib/libopenctm.so $(LIBDIR) + $(MKDIR) $(INCDIR) $(CP) lib/openctm.h $(INCDIR) $(CP) lib/openctmpp.h $(INCDIR) + $(MKDIR) $(BINDIR) $(CP) tools/ctmconv $(BINDIR) $(CP) tools/ctmviewer $(BINDIR) $(MKDIR) $(MAN1DIR) From 1b01d2b45ec761a5facce73e234fb16f922ce84a Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Sun, 7 Apr 2024 11:39:29 -0400 Subject: [PATCH 2/6] Add DESTDIR to Makefile.linux to support staged installs https://www.gnu.org/prep/standards/html_node/DESTDIR.html --- Makefile.linux | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Makefile.linux b/Makefile.linux index 375d777..48127fd 100644 --- a/Makefile.linux +++ b/Makefile.linux @@ -47,6 +47,7 @@ documentation: # Installation settings +DESTDIR = LIBDIR = /usr/lib/ INCDIR = /usr/local/include/ BINDIR = /usr/local/bin/ @@ -55,14 +56,14 @@ CP = cp MKDIR = mkdir -p install: - $(MKDIR) $(LIBDIR) - $(CP) lib/libopenctm.so $(LIBDIR) - $(MKDIR) $(INCDIR) - $(CP) lib/openctm.h $(INCDIR) - $(CP) lib/openctmpp.h $(INCDIR) - $(MKDIR) $(BINDIR) - $(CP) tools/ctmconv $(BINDIR) - $(CP) tools/ctmviewer $(BINDIR) - $(MKDIR) $(MAN1DIR) - $(CP) doc/ctmconv.1 $(MAN1DIR) - $(CP) doc/ctmviewer.1 $(MAN1DIR) + $(MKDIR) $(DESTDIR)$(LIBDIR) + $(CP) lib/libopenctm.so $(DESTDIR)$(LIBDIR) + $(MKDIR) $(DESTDIR)$(INCDIR) + $(CP) lib/openctm.h $(DESTDIR)$(INCDIR) + $(CP) lib/openctmpp.h $(DESTDIR)$(INCDIR) + $(MKDIR) $(DESTDIR)$(BINDIR) + $(CP) tools/ctmconv $(DESTDIR)$(BINDIR) + $(CP) tools/ctmviewer $(DESTDIR)$(BINDIR) + $(MKDIR) $(DESTDIR)$(MAN1DIR) + $(CP) doc/ctmconv.1 $(DESTDIR)$(MAN1DIR) + $(CP) doc/ctmviewer.1 $(DESTDIR)$(MAN1DIR) From da919129c0275e4301dd2b3085876a6cd83b511c Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Sun, 7 Apr 2024 11:54:34 -0400 Subject: [PATCH 3/6] Version the shared library on Linux (Makefiles only) Fix #16. --- Makefile.linux | 2 +- lib/Makefile.linux | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Makefile.linux b/Makefile.linux index 48127fd..89493c3 100644 --- a/Makefile.linux +++ b/Makefile.linux @@ -57,7 +57,7 @@ MKDIR = mkdir -p install: $(MKDIR) $(DESTDIR)$(LIBDIR) - $(CP) lib/libopenctm.so $(DESTDIR)$(LIBDIR) + $(CP) -P lib/libopenctm.so* $(DESTDIR)$(LIBDIR) $(MKDIR) $(DESTDIR)$(INCDIR) $(CP) lib/openctm.h $(DESTDIR)$(INCDIR) $(CP) lib/openctmpp.h $(DESTDIR)$(INCDIR) diff --git a/lib/Makefile.linux b/lib/Makefile.linux index 9e270e5..8a542a9 100644 --- a/lib/Makefile.linux +++ b/lib/Makefile.linux @@ -33,7 +33,11 @@ CFLAGS_LZMA = -O3 -W -Wall -c -fPIC -DLZMA_PREFIX_CTM -std=c99 -pedantic RM = rm -f DEPEND = $(CPP) -MM -DYNAMICLIB = libopenctm.so +# Increment whenever there is a backwards-incompatible ABI change +ABI_VERSION = 1 + +DYNAMICLIB = libopenctm.so.$(ABI_VERSION) +DYNAMICLIBLINK = libopenctm.so OBJS = openctm.o \ stream.o \ @@ -61,14 +65,17 @@ LZMA_SRCS = $(LZMADIR)/Alloc.c \ .phony: all clean depend -all: $(DYNAMICLIB) +all: $(DYNAMICLIB) $(DYNAMICLIBLINK) clean: - $(RM) $(DYNAMICLIB) $(OBJS) $(LZMA_OBJS) + $(RM) $(DYNAMICLIB) $(DYNAMICLIBLINK) $(OBJS) $(LZMA_OBJS) $(DYNAMICLIB): $(OBJS) $(LZMA_OBJS) gcc -shared -s -Wl,-soname,$@ -o $@ $(OBJS) $(LZMA_OBJS) -lm +$(DYNAMICLIBLINK): $(DYNAMICLIB) + ln -s -f $< $@ + %.o: %.c $(CC) $(CFLAGS) $< From fcfca4d6c52e4b7d2a9ae6efcce18c141ecac09e Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Sun, 7 Apr 2024 12:06:30 -0400 Subject: [PATCH 4/6] Makefile.linux: allow adding/overriding linker flags --- lib/Makefile.linux | 4 +++- tools/Makefile.linux | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/Makefile.linux b/lib/Makefile.linux index 8a542a9..9c7f147 100644 --- a/lib/Makefile.linux +++ b/lib/Makefile.linux @@ -30,6 +30,8 @@ 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 +LDFLAGS = -s +DYNAMICLIBLDFLAGS = -lm $(LDFLAGS) RM = rm -f DEPEND = $(CPP) -MM @@ -71,7 +73,7 @@ clean: $(RM) $(DYNAMICLIB) $(DYNAMICLIBLINK) $(OBJS) $(LZMA_OBJS) $(DYNAMICLIB): $(OBJS) $(LZMA_OBJS) - gcc -shared -s -Wl,-soname,$@ -o $@ $(OBJS) $(LZMA_OBJS) -lm + gcc -shared -Wl,-soname,$@ -o $@ $(OBJS) $(LZMA_OBJS) $(DYNAMICLIBLDFLAGS) $(DYNAMICLIBLINK): $(DYNAMICLIB) ln -s -f $< $@ diff --git a/tools/Makefile.linux b/tools/Makefile.linux index 8de7ac1..c2e84fe 100644 --- a/tools/Makefile.linux +++ b/tools/Makefile.linux @@ -36,6 +36,15 @@ 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) +LDFLAGS = -s -Wl,-rpath,. +CTMCONVLDFLAGS = -L$(OPENCTMDIR) -L$(TINYXMLDIR) +CTMVIEWERLDFLAGS = -L$(OPENCTMDIR) -L$(TINYXMLDIR) -L$(JPEGDIR) -L$(ZLIBDIR) +CTMBENCHLDFLAGS = -L$(OPENCTMDIR) + +CTMCONVLIBS = -lopenctm -ltinyxml +CTMVIEWERLIBS = -lopenctm -ltinyxml -ljpeg -lz -lglut -lGL -lGLU `pkg-config --libs gtk+-2.0` +CTMBENCHLIBS = -lopenctm + 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) @@ -53,13 +62,13 @@ libopenctm.so: $(OPENCTMDIR)/libopenctm.so cp $< $@ ctmconv: $(CTMCONVOBJS) $(TINYXMLDIR)/libtinyxml.a libopenctm.so - $(CPP) -s -o $@ -L$(OPENCTMDIR) -L$(TINYXMLDIR) $(CTMCONVOBJS) -Wl,-rpath,. -lopenctm -ltinyxml + $(CPP) -o $@ $(CTMCONVLDFLAGS) $(CTMCONVOBJS) $(LDFLAGS) $(CTMCONVLIBS) 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 -lGL -lGLU `pkg-config --libs gtk+-2.0` + $(CPP) -o $@ $(CTMVIEWERLDFLAGS) $(CTMVIEWEROBJS) $(LDFLAGS) $(CTMVIEWERLIBS) ctmbench: $(CTMBENCHOBJS) libopenctm.so - $(CPP) -s -o $@ -L$(OPENCTMDIR) $(CTMBENCHOBJS) -Wl,-rpath,. -lopenctm + $(CPP) -o $@ $(CTMBENCHLDFLAGS) $(CTMBENCHOBJS) $(LDFLAGS) $(CTMBENCHLIBS) %.o: %.cpp $(CPP) $(CPPFLAGS) -o $@ $< From bb3229d099ab68208078b954937d0734a6c566e1 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Mon, 8 Apr 2024 11:18:48 -0400 Subject: [PATCH 5/6] Makefile.linux: allow more precise control over compiler flags --- lib/Makefile.linux | 9 +++++---- tools/Makefile.linux | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/Makefile.linux b/lib/Makefile.linux index 9c7f147..a78ad39 100644 --- a/lib/Makefile.linux +++ b/lib/Makefile.linux @@ -28,8 +28,9 @@ 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 +CFLAGS = -O3 -W -Wall -fPIC -std=c99 -pedantic +CFLAGS_LIB = -DOPENCTM_BUILD -DLZMA_PREFIX_CTM -I$(LZMADIR) +CFLAGS_LZMA = -DLZMA_PREFIX_CTM LDFLAGS = -s DYNAMICLIBLDFLAGS = -lm $(LDFLAGS) RM = rm -f @@ -79,10 +80,10 @@ $(DYNAMICLIBLINK): $(DYNAMICLIB) ln -s -f $< $@ %.o: %.c - $(CC) $(CFLAGS) $< + $(CC) -c $(CFLAGS) $(CFLAGS_LIB) $< %.o: $(LZMADIR)/%.c - $(CC) $(CFLAGS_LZMA) $< + $(CC) -c $(CFLAGS) $(CFLAGS_LZMA) $< depend: $(DEPEND) $(SRCS) $(LZMA_SRCS) > make.depend diff --git a/tools/Makefile.linux b/tools/Makefile.linux index c2e84fe..bbfc2d0 100644 --- a/tools/Makefile.linux +++ b/tools/Makefile.linux @@ -34,7 +34,8 @@ 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) +CPPFLAGS = -O3 -W -Wall +CPPFLAGS_INCLUDE = `pkg-config --cflags gtk+-2.0` -I$(OPENCTMDIR) -I$(RPLYDIR) -I$(JPEGDIR) -I$(TINYXMLDIR) -I$(GLEWDIR) -I$(ZLIBDIR) -I$(PNGLITEDIR) LDFLAGS = -s -Wl,-rpath,. CTMCONVLDFLAGS = -L$(OPENCTMDIR) -L$(TINYXMLDIR) @@ -71,7 +72,7 @@ ctmbench: $(CTMBENCHOBJS) libopenctm.so $(CPP) -o $@ $(CTMBENCHLDFLAGS) $(CTMBENCHOBJS) $(LDFLAGS) $(CTMBENCHLIBS) %.o: %.cpp - $(CPP) $(CPPFLAGS) -o $@ $< + $(CPP) -c $(CPPFLAGS) $(CPPFLAGS_INCLUDE) -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 From 346f611e8a804e4d095e1798851ff993a099b36c Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Mon, 8 Apr 2024 11:43:00 -0400 Subject: [PATCH 6/6] Support using system copies of some dependencies - glew - libjpeg - pnglite - rply - tinyxml - zlib --- tools/Makefile.linux | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tools/Makefile.linux b/tools/Makefile.linux index bbfc2d0..340734a 100644 --- a/tools/Makefile.linux +++ b/tools/Makefile.linux @@ -46,11 +46,18 @@ CTMCONVLIBS = -lopenctm -ltinyxml CTMVIEWERLIBS = -lopenctm -ltinyxml -ljpeg -lz -lglut -lGL -lGLU `pkg-config --libs gtk+-2.0` CTMBENCHLIBS = -lopenctm -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 +RPLYOBJS = rply.o +PNGLITEOBJS = pnglite.o +GLEWOBJS = glew.o +MESHOBJS = mesh.o meshio.o ctm.o ply.o $(RPLYOBJS) 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 $(GLEWOBJS) $(PNGLITEOBJS) $(MESHOBJS) CTMBENCHOBJS = ctmbench.o systimer.o +ZLIBSTATIC = $(ZLIBDIR)/libz.a +JPEGSTATIC = $(JPEGDIR)/libjpeg.a +TINYXMLSTATIC = $(JPEGDIR)/libtinyxml.a + all: ctmconv ctmviewer ctmbench clean: @@ -62,10 +69,10 @@ clean: libopenctm.so: $(OPENCTMDIR)/libopenctm.so cp $< $@ -ctmconv: $(CTMCONVOBJS) $(TINYXMLDIR)/libtinyxml.a libopenctm.so +ctmconv: $(CTMCONVOBJS) $(TINYXMLSTATIC) libopenctm.so $(CPP) -o $@ $(CTMCONVLDFLAGS) $(CTMCONVOBJS) $(LDFLAGS) $(CTMCONVLIBS) -ctmviewer: $(CTMVIEWEROBJS) $(JPEGDIR)/libjpeg.a $(TINYXMLDIR)/libtinyxml.a $(ZLIBDIR)/libz.a libopenctm.so +ctmviewer: $(CTMVIEWEROBJS) $(JPEGSTATIC) $(TINYXMLSTATIC) $(ZLIBSTATIC) libopenctm.so $(CPP) -o $@ $(CTMVIEWERLDFLAGS) $(CTMVIEWEROBJS) $(LDFLAGS) $(CTMVIEWERLIBS) ctmbench: $(CTMBENCHOBJS) libopenctm.so @@ -78,7 +85,7 @@ 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 $(JPEGSTATIC) systimer.o: systimer.cpp systimer.h sysdialog_gtk.o: sysdialog_gtk.cpp sysdialog.h convoptions.o: convoptions.cpp convoptions.h @@ -106,7 +113,7 @@ bin2c: bin2c.cpp $(JPEGDIR)/libjpeg.a: cd $(JPEGDIR) && $(MAKE) -f makefile.linux libjpeg.a -$(ZLIBDIR)/libz.a: +$(ZLIBSTATIC): cd $(ZLIBDIR) && $(MAKE) -f Makefile.linux glew.o: $(GLEWDIR)/glew.c