1
2VERSION = 0.0.1
3
4CC = gcc
5
6CTFMERGE = /bin/true
7CTFCONVERT = /bin/true
8
9GNUTAR = tar
10
11PWD := $(shell pwd)
12UNAME_S := $(shell uname -s)
13PLATFORM_OK = false
14
15CFILES = dynstr.c proto.c common.c base64.c crc32.c reqid.c
16OBJS = $(CFILES:%.c=%.o)
17HDRS = dynstr.h plat.h proto.h common.h base64.h crc32.h reqid.h
18CFLAGS = -I$(PWD) -Wall -Wextra -Werror -g -O2
19LDLIBS =
20
21BINDIR = ${PREFIX}/sbin
22MANSECT = 1m
23MANDIR = ${PREFIX}/man/man$(MANSECT)
24DESTDIR = $(PWD)/proto
25
26PROGS = \
27	mdata-get \
28	mdata-list \
29	mdata-put \
30	mdata-delete
31
32PROTO_PROGS = \
33	$(PROGS:%=$(DESTDIR)$(BINDIR)/%)
34
35PROTO_MANPAGES = \
36	$(PROGS:%=$(DESTDIR)$(MANDIR)/%.$(MANSECT))
37
38INSTALL_TARGETS = \
39	$(PROTO_PROGS) \
40	$(PROTO_MANPAGES)
41
42#
43# Platform-specific definitions
44#
45
46ifeq ($(UNAME_S),SunOS)
47CFLAGS += -D__HAVE_BOOLEAN_T
48CFILES += plat/sunos.c plat/unix_common.c
49HDRS += plat/unix_common.h
50LDLIBS += -lnsl -lsocket -lsmbios
51PLATFORM_OK = true
52GNUTAR = gtar
53endif
54
55ifeq ($(UNAME_S),Linux)
56CFILES += plat/linux.c plat/unix_common.c
57HDRS += plat/unix_common.h
58PLATFORM_OK = true
59MANSECT = 1
60INSTALL_TARGETS += $(DESTDIR)/lib/smartdc/mdata-get
61PKGNAME = joyent-mdata-client
62endif
63
64ifeq ($(UNAME_S),DragonFly)
65CC = cc
66
67CTFMERGE = /usr/bin/true
68CTFCONVERT = /usr/bin/true
69
70CFLAGS += -Wno-typedef-redefinition
71CFILES += plat/freebsd.c plat/unix_common.c
72HDRS += plat/unix_common.h
73PLATFORM_OK = true
74MANSECT = 1
75endif
76
77ifeq ($(PLATFORM_OK),false)
78$(error Unknown platform: $(UNAME_S))
79endif
80
81#
82# Build Targets
83#
84
85.PHONY:	all world
86world:	all
87all:	$(PROGS)
88
89%.o:	%.c
90	$(CC) -c $(CFLAGS) -o $@ $<
91	$(CTFCONVERT) -l mdata-client $@
92
93mdata-%:	$(OBJS) $(HDRS) mdata_%.o
94	$(CC) $(CFLAGS) $(LDLIBS) -o $@ $(@:mdata-%=mdata_%).o $(OBJS)
95	$(CTFMERGE) -l mdata-client -o $@ $(OBJS) $(@:mdata-%=mdata_%).o
96
97#
98# Install Targets
99#
100
101.PHONY:	install
102install:	$(INSTALL_TARGETS)
103
104$(DESTDIR)$(BINDIR)/%: %
105	@mkdir -p $(DESTDIR)$(BINDIR)
106	cp $< $@
107	touch $@
108
109$(DESTDIR)$(MANDIR)/%.$(MANSECT): man/man1m/%.1m
110	@mkdir -p $(DESTDIR)$(MANDIR)
111	sed 's/__SECT__/$(MANSECT)/g' < $< > $@
112
113$(DESTDIR)/lib/smartdc/mdata-%:
114	@mkdir -p $$(dirname $@)
115	@rm -f $@
116	ln -s $(BINDIR)/$$(basename $@) $@
117
118#
119# SmartOS (smartos-live) Package Manifest Targets
120#
121
122.PHONY: manifest
123manifest:
124	cp manifest $(DESTDIR)/$(DESTNAME)
125
126.PHONY: mancheck_conf
127mancheck_conf:
128
129.PHONY: update
130update:
131	git pull --rebase
132
133#
134# Debian Package Targets
135#
136#
137
138.PHONY: package-debian
139package-debian:
140	debuild -us -uc
141
142source-tarball:
143	if [ -z $(RELEASE_DIRECTORY) ]; then \
144		echo "error: define RELEASE_DIRECTORY" >&2; \
145		exit 1; \
146	fi
147	if [ -z $(PKGNAME) ]; then \
148		echo "error: define PKGNAME" >&2; \
149		exit 1; \
150	fi
151	$(GNUTAR) \
152		-zc -f $(RELEASE_DIRECTORY)/$(PKGNAME)_$(VERSION).orig.tar.gz \
153		--exclude=.git \
154		--transform 's,^,$(PKGNAME)_$(VERSION)/,' \
155		*
156
157#
158# Cleanup Targets
159#
160
161.PHONY:	clean
162clean:
163	rm -f $(PROGS) $(OBJS)
164
165.PHONY:	clobber
166clobber:	clean
167	rm -rf $(PWD)/proto
168