File: Properly-build-shared-and-static-libraries-programs.patch

package info (click to toggle)
liblinear 2.1.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 488 kB
  • sloc: cpp: 2,789; ansic: 1,742; python: 425; makefile: 127; sh: 9
file content (96 lines) | stat: -rw-r--r-- 3,114 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
From: Christian Kastner <debian@kvr.at>
Date: Fri, 9 Jul 2010 18:09:09 +0200
Subject: Properly build shared and static libraries, programs

Modify upstream's Makefile to properly build shared and static libraries,
and link upstream's programs to the shared libraries. Furthermore, provide
and install target.

Forwarded: not-needed
Last-Update: 2016-04-24
---
 Makefile | 66 +++++++++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 45 insertions(+), 21 deletions(-)

diff --git a/Makefile b/Makefile
index 99fdece..6f0a0f9 100644
--- a/Makefile
+++ b/Makefile
@@ -1,32 +1,56 @@
 CXX ?= g++
 CC ?= gcc
-CFLAGS = -Wall -Wconversion -O3 -fPIC
-LIBS =
+CFLAGS +=
+LDFLAGS += -L.
+LIBS +=
 SHVER = 3
-OS = $(shell uname)
 
-all: train predict
+# Libraries must not be compiled/linked with -pie, -fpie or -FPIE
+LIB_CFLAGS += $(filter-out -fPIE,$(CFLAGS)) -fPIC
+LIB_LDFLAGS += $(filter-out -fPIE, $(filter-out -pie,$(LDFLAGS)))
+LIB_LIBS += $(LIBS) -lblas
 
-lib: linear.o tron.o
-	if [ "$(OS)" = "Darwin" ]; then \
-		SHARED_LIB_FLAG="-dynamiclib -Wl,-install_name,liblinear.so.$(SHVER)"; \
-	else \
-		SHARED_LIB_FLAG="-shared -Wl,-soname,liblinear.so.$(SHVER)"; \
-	fi; \
-	$(CXX) $${SHARED_LIB_FLAG} linear.o tron.o -o liblinear.so.$(SHVER)
+PROG_CFLAGS += $(CFLAGS)
+PROG_LDFLAGS += $(LDFLAGS)
+PROG_LIBS += $(LIBS) -llinear
 
-train: tron.o linear.o train.c
-	$(CXX) $(CFLAGS) -o train train.c tron.o linear.o $(LIBS)
+DMAJOR ?= 0
+DMINOR ?= 0
+LIBFILE = liblinear.so.$(SHVER).$(DMAJOR).$(DMIJOR)
 
-predict: tron.o linear.o predict.c
-	$(CXX) $(CFLAGS) -o predict predict.c tron.o linear.o $(LIBS)
+bindir ?= /usr/bin/
+libdir ?= /usr/lib/
+bindest = $(DESTDIR)$(bindir)
+libdest = $(DESTDIR)$(libdir)
 
-tron.o: tron.cpp tron.h
-	$(CXX) $(CFLAGS) -c -o tron.o tron.cpp
 
-linear.o: linear.cpp linear.h
-	$(CXX) $(CFLAGS) -c -o linear.o linear.cpp
+all: liblinear-train liblinear-predict liblinear.a
+
+liblinear-train: train.c $(LIBFILE)
+	$(CXX) $(CPPFLAGS) $(PROG_CFLAGS) $(PROG_LDFLAGS) -o $@ train.c $(PROG_LIBS)
+
+liblinear-predict: predict.c $(LIBFILE)
+	$(CXX) $(CPPFLAGS) $(PROG_CFLAGS) $(PROG_LDFLAGS) -o $@ predict.c $(PROG_LIBS)
+
+$(LIBFILE): linear.cpp linear.h tron.cpp tron.h
+	$(CXX) $(CPPFLAGS) $(LIB_CFLAGS) $(LIB_LDFLAGS) -shared \
+		-Wl,-soname,liblinear.so.$(SHVER) \
+		-o $@ linear.cpp tron.cpp $(LIB_LIBS)
+	ln -s $@ liblinear.so.$(SHVER)
+	ln -s liblinear.so.$(SHVER) liblinear.so
+
+liblinear.a:
+	$(CXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -c -o linear-static.o linear.cpp
+	$(CXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -c -o tron-static.o tron.cpp
+	ar cru liblinear.a linear-static.o tron-static.o
+
+install: all
+	install -d $(bindest) $(libdest)
+	install liblinear-train liblinear-predict -m 755 $(bindest)
+	install liblinear.a -m 644 $(libdest)
+	install $(LIBFILE) -m 644 $(libdest)
+	cd $(libdest) && ln -s $(LIBFILE) liblinear.so.$(SHVER)
+	cd $(libdest) && ln -s liblinear.so.$(SHVER) liblinear.so
 
 clean:
-	make -C matlab clean
-	rm -f *~ tron.o linear.o train predict liblinear.so.$(SHVER)
+	rm -f *~ *.o *.a *.so* liblinear-train liblinear-predict