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