chiark / gitweb /
25e5d14604234e99087940c3128e15186183a7dc
[preload-hacks] / Makefile
1 ### -*-makefile-*-
2 ###
3 ### Makefile for preload-hacks
4 ###
5 ### (c) 2008 Straylight/Edgeware
6 ###
7
8 ###----- Licensing notice ---------------------------------------------------
9 ###
10 ### This file is part of the preload-hacks package.
11 ###
12 ### Preload-hacks are free software; you can redistribute it and/or modify
13 ### them under the terms of the GNU General Public License as published by
14 ### the Free Software Foundation; either version 2 of the License, or (at
15 ### your option) any later version.
16 ###
17 ### Preload-hacks are distributed in the hope that it will be useful, but
18 ### WITHOUT ANY WARRANTY; without even the implied warranty of
19 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
20 ### Public License for more details.
21 ###
22 ### You should have received a copy of the GNU General Public License along
23 ### with preload-hacks; if not, write to the Free Software Foundation, Inc.,
24 ### 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
26 PACKAGE                  = preload-hacks
27 VERSION                 := $(shell ./auto-version)
28
29 .SECONDEXPANSION: #sorry
30
31 ###--------------------------------------------------------------------------
32 ### Configuration.
33
34 ## Where to install things.
35 prefix                   = /usr/local
36 exec_prefix              = ${prefix}
37 bindir                   = ${exec_prefix}/bin
38 libdir                   = ${exec_prefix}/lib
39 datadir                  = ${prefix}/share
40 mandir                   = ${datadir}/man
41 man1dir                  = ${mandir}/man1
42
43 ## Private installation tree for packagers.
44 DESTDIR                  =
45
46 ###--------------------------------------------------------------------------
47 ### Quiet building.
48
49 ## Verbosity.
50 V                        = 0
51
52 ## Compilation.
53 V_CC                     = $(V_CC_$(V))$(CC)
54 V_CC_0                   = @echo "  CC     $@";
55
56 ## Linking.
57 V_LD                     = $(V_LD_$(V))$(LD)
58 V_LD_0                   = @echo "  LD     $@";
59
60 ## Generation.
61 V_GEN                    = $(V_GEN_$(V))
62 V_GEN_0                  = @echo "  GEN    $@";
63
64 ###--------------------------------------------------------------------------
65 ### Build parameters.
66
67 ## Mess with these if you like.
68 CC                       = gcc
69 LD                       = gcc
70 CFLAGS                   = -O2 -g -Wall
71 LDFLAGS                  =
72 LDLIBS                   = -ldl
73 INSTALL                  = install
74 INST_BIN                 = $(INSTALL) -c -m755
75 INST_LIB                 = $(INSTALL) -c -m644
76 INST_MAN                 = $(INSTALL) -c -m644
77 INST_BIN                 = $(INSTALL) -c -m755
78 MKDIRS                   = $(INSTALL) -d -m755
79
80 ## Probably best if you leave these alone.
81 REAL_CFLAGS              = $(CFLAGS) -fPIC
82 REAL_LDFLAGS             = $(LDFLAGS) -shared
83
84 ###--------------------------------------------------------------------------
85 ### Main targets.
86
87 ## noip
88 HACKS                   += noip
89 noip_SOURCES             = noip.c
90
91 ## uopen
92 HACKS                   += uopen
93 uopen_SOURCES            = uopen.c
94
95 ## Sources.
96 ALL_SOURCES              = $(foreach h,$(HACKS),$($h_SOURCES))
97 DISTFILES               += $(ALL_SOURCES)
98
99 ## Libraries.
100 LIBS                    += $(addsuffix .so, $(HACKS))
101 TARGETS                 += $(LIBS)
102
103 ## Scripts.
104 SCRIPTS                  = $(HACKS)
105 TARGETS                 += $(SCRIPTS)
106 DISTFILES               += withlib.in
107
108 ## Manual pages.
109 MAN1                    += $(addsuffix .1, $(HACKS))
110 DISTFILES               += $(MAN1)
111
112 ###--------------------------------------------------------------------------
113 ### Distribution arrangements.
114
115 ## Names.
116 distdir                  = $(PACKAGE)-$(VERSION)
117 DISTTAR                  = $(distdir).tar.gz
118
119 ## Distribute the build utilities.
120 DISTFILES               += Makefile
121 DISTFILES               += auto-version
122
123 ## Documentation.
124 DISTFILES               += README
125
126 ## Licensing.
127 DISTFILES               += COPYING
128
129 ## Debian.
130 debpkg                   = noip uopen
131 DISTFILES               += debian/changelog debian/copyright
132 DISTFILES               += debian/control debian/rules debian/compat
133 DISTFILES               += debian/source/format
134 DISTFILES               += $(patsubst %, debian/%.install, $(debpkg))
135 DISTFILES               += $(patsubst %, debian/%.lintian-overrides, \
136                                 $(debpkg))
137
138 ###--------------------------------------------------------------------------
139 ### Building.
140
141 all: $(TARGETS)
142 .PHONY: ALL
143
144 clean:
145         rm -f *.o $(TARGETS)
146 .PHONY: clean
147
148 ## Building sources.
149 %.o: %.c
150         $(V_CC) -c $(REAL_CFLAGS) $< -o $@
151
152 ## Constructing preload hacks.
153 $(addsuffix .so,$(HACKS)): %.so: $$(patsubst %.c,%.o,$$($$*_SOURCES))
154         $(V_LD) $(REAL_LDFLAGS) $< $(LDLIBS) -o $@
155
156 ## Constructing the scripts.
157 $(SCRIPTS): %: withlib.in
158         $(V_GEN)sed "s/@lib@/$@/" withlib.in >$@.new && \
159                 chmod +x $@.new && mv $@.new $@
160
161 ###--------------------------------------------------------------------------
162 ### Installation.
163
164 install: all
165         $(MKDIRS) $(DESTDIR)$(bindir)
166         $(INST_BIN) $(SCRIPTS) $(DESTDIR)$(bindir)
167         $(MKDIRS) $(DESTDIR)$(libdir)
168         $(INST_BIN) $(LIBS) $(DESTDIR)$(libdir)
169         $(MKDIRS) $(DESTDIR)$(man1dir)
170         $(INST_MAN) $(MAN1) $(DESTDIR)$(man1dir)
171 .PHONY: install
172
173 uninstall:
174         rm -f $(addprefix $(DESTDIR)$(libdir)/, $(LIBS))
175         rm -f $(addprefix $(DESTDIR)$(bindir)/, $(SCRIPTS))
176         rm -f $(addprefix $(DESTDIR)$(man1dir)/, $(MAN1))
177 .PHONY: uninstall
178
179 ###--------------------------------------------------------------------------
180 ### Distribution.
181
182 distdir:
183         rm -rf $(distdir)
184         mkdir $(distdir)
185         echo $(VERSION) >$(distdir)/RELEASE
186         for i in $(DISTFILES); do \
187           case "$$i" in \
188             */*) \
189               d=$${i%/*} && $(MKDIRS) $(distdir)/$$d || exit 1 \
190               ;; \
191           esac; \
192           ln $$i $(distdir)/$$i || exit 1; \
193         done
194 .PHONY: distdir
195
196 dist: distdir
197         tar chozf $(DISTTAR) $(distdir)
198         rm -rf $(distdir)
199 .PHONY: dist
200
201 distcheck: dist
202         rm -rf _distcheck
203         mkdir _distcheck
204         cd _distcheck && \
205         tar xvfz ../$(DISTTAR) && \
206         cd $(distdir) && \
207         make && \
208         make install DESTDIR=../_install && \
209         make dist
210         rm -rf _distcheck
211
212 ###----- That's all, folks --------------------------------------------------