summaryrefslogtreecommitdiff
path: root/mk/Makefile.rpm
blob: 954fda6e69e8ea6a8864d21f664b8ed325c8b825 (plain)
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# -*- makefile -*-
USE_BRANDING := yes
IMPORT_VERSIONS := yes
include $(B_BASE)/common.mk

RPM_LOCAL_RPMBUILD_OPTIONS := -D '_source_payload w9.gzdio' -D '_binary_payload w9.gzdio' \
	-D '_source_filedigest_algorithm 0' -D '_binary_filedigest_algorithm 0'
include $(B_BASE)/rpmbuild.mk

RPM_BUILT_COOKIE = $(MY_OBJ_DIR)/.rpm_built_cookie

REPO= $(call git_loc,xe-guest-utilities)
REPOSTAMP= $(call git_req,xe-guest-utilities)

STAGING_DIR = $(MY_OBJ_DIR)/staging
INSTALL_DIR = $(STAGING_DIR)/Linux/
VERSIONS_FILE = $(MY_OBJ_DIR)/versions

ARCHS = i386 x86_64

VERSION = $(PRODUCT_VERSION)
RELEASE := $(shell git --git-dir="$(REPO)/.git" rev-list HEAD | wc -l)

SPEC= xe-guest-utilities.spec
SRPM= xe-guest-utilities-$(VERSION)-$(RELEASE).src.rpm

GOTARBALL = /distfiles/golang/go1.4.2.linux-386.tar.gz
GOROOT = $(MY_OBJ_DIR)/go
GOBIN = GOROOT=$(GOROOT) $(GOROOT)/bin/go
GOFLAGS = -a -x -ldflags="-s -w"
GOBUILDDIR = $(MY_OBJ_DIR)/gobuild

GO_SOURCE_REPO = $(call git_loc,xe-guest-utilities)

XE_DAEMON_GO_SOURCES :=
XE_DAEMON_GO_SOURCES += ./xe-daemon/xe-daemon.go  # this should be the first one
XE_DAEMON_GO_SOURCES += ./syslog/syslog.go
XE_DAEMON_GO_SOURCES += ./system/system.go
XE_DAEMON_GO_SOURCES += ./guestmetric/guestmetric.go
XE_DAEMON_GO_SOURCES += ./guestmetric/guestmetric_linux.go
XE_DAEMON_GO_SOURCES += ./xenstoreclient/xenstore.go

XENSTORE_GO_SOURCES :=
XENSTORE_GO_SOURCES += ./xenstore/xenstore.go  # this should be the first one
XENSTORE_GO_SOURCES += ./xenstoreclient/xenstore.go

SOURCES :=
SOURCES += $(RPM_SOURCESDIR)/xe-linux-distribution
SOURCES += $(RPM_SOURCESDIR)/xe-linux-distribution.init
SOURCES += $(RPM_SOURCESDIR)/xe-daemon
SOURCES += $(RPM_SOURCESDIR)/xenstore

SOURCES += $(RPM_SOURCESDIR)/Citrix.repo
SOURCES += $(RPM_SOURCESDIR)/xen-vcpu-hotplug.rules
SOURCES += $(RPM_SOURCESDIR)/LICENSE

TOOLS_TARBALL = $(MY_OUTPUT_DIR)/tools-files.tar.bz2

.PHONY: build
build: $(RPM_BUILT_COOKIE) $(RPM_DIRECTORIES) $(TOOLS_TARBALL) $(ARCHS:%=$(MY_OUTPUT_DIR)/xe-guest-utilities.%.inc) $(MY_SOURCES)/MANIFEST
	@ :

.PHONY: clean
clean:
	rm -f $(RPM_SPECSDIR)/$(SPEC)
	rm -rf $(RPM_BUILDDIR) $(RPM_SOURCESDIR) $(RPM_SPECSDIR)
	rm -f $(RPM_BUILT_COOKIE)
	rm -rf $(GOROOT)
	rm -rf $(DESTDIR)

$(RPM_SPECSDIR)/$(SPEC): $(SPEC).in
	$(call brand,$<) | \
	sed -e 's,@VERSION@,$(VERSION),g' \
	    -e 's,@RELEASE@,$(RELEASE),g' \
	    > $@

$(MY_OUTPUT_DIR)/xe-guest-utilities.%.inc: $(MY_OUTPUT_DIR)/.dirstamp
	( echo XE_GUEST_UTILITIES_PKG_NAME := xe-guest-utilities ; \
	  echo XE_GUEST_UTILITIES_PKG_VERSION := $(VERSION)-$(RELEASE) ; \
	  echo XE_GUEST_UTILITIES_PKG_ARCH := $* ; \
	  echo XE_GUEST_UTILITIES_PKG_FILE := RPMS/$*/xe-guest-utilities-$(VERSION)-$(RELEASE).$*.rpm ; \
	)>$@

$(RPM_BUILT_COOKIE): $(RPM_DIRECTORIES) $(RPM_SPECSDIR)/$(SPEC) $(SOURCES)
	$(RPMBUILD) -bs $(RPM_SPECSDIR)/$(SPEC)
	set -ex ; for arch in $(ARCHS) ; do \
		$(RPMBUILD) --target=$${arch} --rebuild $(RPM_SRPMSDIR)/$(SRPM) ; \
	done

$(MY_SOURCES)/MANIFEST: $(MY_SOURCES_DIRSTAMP)
	( echo "$(COMPONENT) BSD file $(RPM_SRPMSDIR)/$(SRPM)" ; \
        ) >$@

.PHONY: sources
sources: $(MY_SOURCES)/MANIFEST
	@ :

$(RPM_SOURCESDIR)/%: $(REPO)/mk/%
	mkdir -p $(RPM_SOURCESDIR)
	$(call brand,$<) > $@

$(RPM_SOURCESDIR)/xe-daemon: $(XE_DAEMON_GO_SOURCES:%=$(GOBUILDDIR)/%) $(GOROOT)
	$(GOBIN) build $(GOFLAGS) -o $@ $<

$(RPM_SOURCESDIR)/xenstore: $(XENSTORE_GO_SOURCES:%=$(GOBUILDDIR)/%) $(GOROOT)
	$(GOBIN) build $(GOFLAGS) -o $@ $<

$(RPM_SOURCESDIR)/LICENSE: $(REPO)/LICENSE
	$(call brand,$<) > $@

$(GOBUILDDIR)/%: $(GO_SOURCE_REPO)/%
	mkdir -p $$(dirname $@)
	$(call brand,$<) > $@

$(TOOLS_TARBALL): $(RPM_BUILT_COOKIE)
	mkdir -p $(INSTALL_DIR)
	rm -f $(INSTALL_DIR)/versions.rpm
	$(foreach arch,$(ARCHS),\
	echo XE_GUEST_UTILITIES_PKG_FILE_$(arch)=\'xe-guest-utilities-$(VERSION)-$(RELEASE).$(arch).rpm xe-guest-utilities-xenstore-$(VERSION)-$(RELEASE).$(arch).rpm\' >> $(INSTALL_DIR)/versions.rpm ;\
	cp -v $(MY_OUTPUT_DIR)/RPMS/$(arch)/xe-guest-utilities-$(VERSION)-$(RELEASE).$(arch).rpm $(INSTALL_DIR)/ ;\
	cp -v $(MY_OUTPUT_DIR)/RPMS/$(arch)/xe-guest-utilities-xenstore-$(VERSION)-$(RELEASE).$(arch).rpm $(INSTALL_DIR)/ ;\
	)
	tar -C $(STAGING_DIR) -cjf $@ .

$(GOROOT):
	mkdir -p $(GOROOT)
	( cd $(GOROOT)/.. ; \
	  tar xf $(GOTARBALL) ;\
	)