chiark / gitweb /
Makefile: Spruce up considerably.
[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 distributed in the hope that it will be useful, but WITHOUT
18 ### ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 ### FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
20 ### more details.
21 ###
22 ### You should have received a copy of the GNU General Public License along
23 ### with mLib; if not, write to the Free Software Foundation, Inc., 59 Temple
24 ### Place - Suite 330, Boston, MA 02111-1307, USA.
25
26 PACKAGE                  = preload-hacks
27 VERSION                 := $(shell ./auto-version)
28
29 ###--------------------------------------------------------------------------
30 ### Configuration.
31
32 ## Where to install things.
33 prefix                   = /usr/local
34 exec_prefix              = ${prefix}
35 bindir                   = ${exec_prefix}/bin
36 libdir                   = ${exec_prefix}/lib
37 datadir                  = ${prefix}/share
38 mandir                   = ${datadir}/man
39 man1dir                  = ${mandir}/man1
40
41 ## Private installation tree for packagers.
42 DESTDIR                  =
43
44 ###--------------------------------------------------------------------------
45 ### Build parameters.
46
47 ## Mess with these if you like.
48 CC                       = gcc
49 LD                       = gcc
50 CFLAGS                   = -O2 -g -Wall
51 LDFLAGS                  =
52 LDLIBS                   = -ldl
53 INSTALL                  = install
54 INST_BIN                 = $(INSTALL) -c -m755
55 INST_LIB                 = $(INSTALL) -c -m644
56 INST_MAN                 = $(INSTALL) -c -m644
57 INST_BIN                 = $(INSTALL) -c -m755
58 MKDIRS                   = $(INSTALL) -d -m755
59
60 ## Probably best if you leave these alone.
61 REAL_CFLAGS              = $(CFLAGS) -fPIC
62 REAL_LDFLAGS             = $(LDFLAGS) -shared
63
64 ###--------------------------------------------------------------------------
65 ### Main targets.
66
67 ## noip
68 HACKS                   += noip
69 NOIP_SOURCES             = noip.c
70 DISTFILES               += $(NOIP_SOURCES)
71
72 ## uopen
73 HACKS                   += uopen
74 UOPEN_SOURCES            = uopen.c
75 DISTFILES               += $(UOPEN_SOURCES)
76
77 ## Libraries.
78 LIBS                    += $(addsuffix .so, $(HACKS))
79 TARGETS                 += $(LIBS)
80
81 ## Scripts.
82 SCRIPTS                  = $(HACKS)
83 TARGETS                 += $(SCRIPTS)
84 DISTFILES               += withlib.in
85
86 ## Manual pages.
87 MAN1                    += $(addsuffix .1, $(HACKS))
88 DISTFILES               += $(MAN1)
89
90 ###--------------------------------------------------------------------------
91 ### Distribution arrangements.
92
93 ## Names.
94 distdir                  = $(PACKAGE)-$(VERSION)
95 DISTTAR                  = $(distdir).tar.gz
96
97 ## Distribute the build utilities.
98 DISTFILES               += Makefile
99 DISTFILES               += auto-version
100
101 ## Documentation.
102 DISTFILES               += README
103
104 ## Licensing.
105 DISTFILES               += COPYING
106
107 ## Debian.
108 debpkg                   = noip uopen
109 DISTFILES               += debian/changelog debian/copyright
110 DISTFILES               += debian/control debian/rules
111 DISTFILES               += $(patsubst %, debian/%.install, $(debpkg))
112 DISTFILES               += $(patsubst %, debian/%.lintian-overrides, \
113                                 $(debpkg))
114
115 ###--------------------------------------------------------------------------
116 ### Building.
117
118 all: $(TARGETS)
119 .PHONY: ALL
120
121 clean:
122         rm -f *.o $(TARGETS)
123 .PHONY: clean
124
125 ## Building sources.
126 %.o: %.c
127         $(CC) -c $(REAL_CFLAGS) $< -o $@
128
129 ## Constructing preload hacks.
130 noip.so: $(patsubst %.c, %.o, $(NOIP_SOURCES))
131         $(LD) $(REAL_LDFLAGS) $< $(LDLIBS) -o $@
132 uopen.so: $(patsubst %.c, %.o, $(UOPEN_SOURCES))
133         $(LD) $(REAL_LDFLAGS) $< $(LDLIBS) -o $@
134
135 ## Constructing the scripts.
136 $(SCRIPTS): withlib.in
137         for i in $(SCRIPTS); do \
138           sed "s/@lib@/$$i/" withlib.in >$$i.new || exit 1; \
139           chmod +x $$i.new || exit 1; \
140           mv $$i.new $$i || exit 1; \
141         done
142
143 ###--------------------------------------------------------------------------
144 ### Installation.
145
146 install: all
147         $(MKDIRS) $(DESTDIR)$(bindir)
148         $(INST_BIN) $(SCRIPTS) $(DESTDIR)$(bindir)
149         $(MKDIRS) $(DESTDIR)$(libdir)
150         $(INST_BIN) $(LIBS) $(DESTDIR)$(libdir)
151         $(MKDIRS) $(DESTDIR)$(man1dir)
152         $(INST_MAN) $(MAN1) $(DESTDIR)$(man1dir)
153 .PHONY: install
154
155 uninstall:
156         rm -f $(addprefix $(DESTDIR)$(libdir)/, $(LIBS))
157         rm -f $(addprefix $(DESTDIR)$(bindir)/, $(SCRIPTS))
158         rm -f $(addprefix $(DESTDIR)$(man1dir)/, $(MAN1))
159 .PHONY: uninstall
160
161 ###--------------------------------------------------------------------------
162 ### Distribution.
163
164 distdir:
165         rm -rf $(distdir)
166         mkdir $(distdir)
167         echo $(VERSION) >$(distdir)/RELEASE
168         for i in $(DISTFILES); do \
169           case "$$i" in \
170             */*) \
171               d=$${i%/*} && $(MKDIRS) $(distdir)/$$d || exit 1 \
172               ;; \
173           esac; \
174           ln $$i $(distdir)/$$i || exit 1; \
175         done
176 .PHONY: distdir
177
178 dist: distdir
179         tar chozf $(DISTTAR) $(distdir)
180         rm -rf $(distdir)
181 .PHONY: dist
182
183 distcheck: dist
184         rm -rf _distcheck
185         mkdir _distcheck
186         cd _distcheck && \
187         tar xvfz ../$(DISTTAR) && \
188         cd $(distdir) && \
189         make && \
190         make install DESTDIR=../_install && \
191         make dist
192         rm -rf _distcheck
193
194 ###----- That's all, folks --------------------------------------------------