]> git.proxmox.com Git - rustc.git/blame - mk/dist.mk
Imported Upstream version 1.1.0+dfsg1
[rustc.git] / mk / dist.mk
CommitLineData
1a4d82fc
JJ
1# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2# file at the top-level directory of this distribution and at
3# http://rust-lang.org/COPYRIGHT.
4#
5# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8# option. This file may not be copied, modified, or distributed
9# except according to those terms.
10
223e47cc
LB
11######################################################################
12# Distribution
13######################################################################
14
1a4d82fc
JJ
15# Primary targets:
16#
17# * dist - make all distribution artifacts
18# * distcheck - sanity check dist artifacts
19# * dist-tar-src - source tarballs
20# * dist-tar-bins - Ad-hoc Unix binary installers
21# * dist-docs - Stage docs for upload
223e47cc 22
1a4d82fc
JJ
23PKG_NAME := $(CFG_PACKAGE_NAME)
24DOC_PKG_NAME := rust-docs-$(CFG_PACKAGE_VERS)
25MINGW_PKG_NAME := rust-mingw-$(CFG_PACKAGE_VERS)
26
27# License suitable for displaying in a popup
28LICENSE.txt: $(S)COPYRIGHT $(S)LICENSE-APACHE $(S)LICENSE-MIT
29 cat $^ > $@
30
31
32######################################################################
33# Source tarball
34######################################################################
223e47cc 35
1a4d82fc 36PKG_TAR = dist/$(PKG_NAME)-src.tar.gz
223e47cc 37
1a4d82fc
JJ
38PKG_GITMODULES := $(S)src/llvm $(S)src/compiler-rt \
39 $(S)src/rt/hoedown $(S)src/jemalloc
223e47cc
LB
40PKG_FILES := \
41 $(S)COPYRIGHT \
42 $(S)LICENSE-APACHE \
43 $(S)LICENSE-MIT \
970d7e83 44 $(S)AUTHORS.txt \
1a4d82fc 45 $(S)CONTRIBUTING.md \
223e47cc 46 $(S)README.md \
1a4d82fc 47 $(S)RELEASES.md \
223e47cc
LB
48 $(S)configure $(S)Makefile.in \
49 $(S)man \
223e47cc 50 $(addprefix $(S)src/, \
223e47cc 51 compiletest \
1a4d82fc
JJ
52 doc \
53 driver \
223e47cc 54 etc \
d9579d0f 55 error-index-generator \
1a4d82fc 56 $(foreach crate,$(CRATES),lib$(crate)) \
c34b1796 57 libcollectionstest \
1a4d82fc
JJ
58 libcoretest \
59 libbacktrace \
223e47cc 60 rt \
223e47cc
LB
61 rustllvm \
62 snapshots.txt \
1a4d82fc
JJ
63 rust-installer \
64 rustbook \
223e47cc
LB
65 test) \
66 $(PKG_GITMODULES) \
1a4d82fc
JJ
67 $(filter-out config.stamp, \
68 $(MKFILES_FOR_TARBALL))
223e47cc
LB
69
70UNROOTED_PKG_FILES := $(patsubst $(S)%,./%,$(PKG_FILES))
71
223e47cc
LB
72$(PKG_TAR): $(PKG_FILES)
73 @$(call E, making dist dir)
1a4d82fc
JJ
74 $(Q)rm -Rf tmp/dist/$(PKG_NAME)
75 $(Q)mkdir -p tmp/dist/$(PKG_NAME)
223e47cc
LB
76 $(Q)tar \
77 -C $(S) \
78 --exclude-vcs \
79 --exclude=*~ \
80 --exclude=*/llvm/test/*/*.ll \
81 --exclude=*/llvm/test/*/*.td \
82 --exclude=*/llvm/test/*/*.s \
83 --exclude=*/llvm/test/*/*/*.ll \
84 --exclude=*/llvm/test/*/*/*.td \
85 --exclude=*/llvm/test/*/*/*.s \
1a4d82fc
JJ
86 -c $(UNROOTED_PKG_FILES) | tar -x -C tmp/dist/$(PKG_NAME)
87 @$(call E, making $@)
88 $(Q)tar -czf $(PKG_TAR) -C tmp/dist $(PKG_NAME)
89 $(Q)rm -Rf tmp/dist/$(PKG_NAME)
223e47cc 90
1a4d82fc 91dist-tar-src: $(PKG_TAR)
223e47cc 92
1a4d82fc
JJ
93distcheck-tar-src: dist-tar-src
94 $(Q)rm -Rf tmp/distcheck/$(PKG_NAME)
95 $(Q)rm -Rf tmp/distcheck/srccheck
96 $(Q)mkdir -p tmp/distcheck
97 @$(call E, unpacking $(PKG_TAR) in tmp/distcheck/$(PKG_NAME))
98 $(Q)cd tmp/distcheck && tar -xzf ../../$(PKG_TAR)
99 @$(call E, configuring in tmp/distcheck/srccheck)
100 $(Q)mkdir -p tmp/distcheck/srccheck
101 $(Q)cd tmp/distcheck/srccheck && ../$(PKG_NAME)/configure
102 @$(call E, making 'check' in tmp/distcheck/srccheck)
103 $(Q)+make -C tmp/distcheck/srccheck check
104 @$(call E, making 'clean' in tmp/distcheck/srccheck)
105 $(Q)+make -C tmp/distcheck/srccheck clean
106 $(Q)rm -Rf tmp/distcheck/$(PKG_NAME)
107 $(Q)rm -Rf tmp/distcheck/srccheck
223e47cc 108
223e47cc 109
1a4d82fc
JJ
110######################################################################
111# Unix binary installer tarballs
112######################################################################
113
1a4d82fc
JJ
114define DEF_INSTALLER
115
116$$(eval $$(call DEF_PREPARE,dir-$(1)))
117
118dist-install-dir-$(1): PREPARE_HOST=$(1)
119dist-install-dir-$(1): PREPARE_TARGETS=$(2)
120dist-install-dir-$(1): PREPARE_DEST_DIR=tmp/dist/$$(PKG_NAME)-$(1)-image
121dist-install-dir-$(1): PREPARE_DIR_CMD=$(DEFAULT_PREPARE_DIR_CMD)
122dist-install-dir-$(1): PREPARE_BIN_CMD=$(DEFAULT_PREPARE_BIN_CMD)
123dist-install-dir-$(1): PREPARE_LIB_CMD=$(DEFAULT_PREPARE_LIB_CMD)
124dist-install-dir-$(1): PREPARE_MAN_CMD=$(DEFAULT_PREPARE_MAN_CMD)
125dist-install-dir-$(1): PREPARE_CLEAN=true
126dist-install-dir-$(1): prepare-base-dir-$(1) docs compiler-docs
1a4d82fc
JJ
127 $$(Q)mkdir -p $$(PREPARE_DEST_DIR)/share/doc/rust
128 $$(Q)$$(PREPARE_MAN_CMD) $$(S)COPYRIGHT $$(PREPARE_DEST_DIR)/share/doc/rust
129 $$(Q)$$(PREPARE_MAN_CMD) $$(S)LICENSE-APACHE $$(PREPARE_DEST_DIR)/share/doc/rust
130 $$(Q)$$(PREPARE_MAN_CMD) $$(S)LICENSE-MIT $$(PREPARE_DEST_DIR)/share/doc/rust
131 $$(Q)$$(PREPARE_MAN_CMD) $$(S)README.md $$(PREPARE_DEST_DIR)/share/doc/rust
85aaf69f
SL
132
133prepare-overlay-$(1):
134 $$(Q)rm -Rf tmp/dist/$$(PKG_NAME)-$(1)-overlay
135 $$(Q)mkdir -p tmp/dist/$$(PKG_NAME)-$(1)-overlay
136 $$(Q)cp $$(S)COPYRIGHT tmp/dist/$$(PKG_NAME)-$(1)-overlay/
137 $$(Q)cp $$(S)LICENSE-APACHE tmp/dist/$$(PKG_NAME)-$(1)-overlay/
138 $$(Q)cp $$(S)LICENSE-MIT tmp/dist/$$(PKG_NAME)-$(1)-overlay/
139 $$(Q)cp $$(S)README.md tmp/dist/$$(PKG_NAME)-$(1)-overlay/
1a4d82fc 140# This tiny morsel of metadata is used by rust-packaging
85aaf69f 141 $$(Q)echo "$(CFG_VERSION)" > tmp/dist/$$(PKG_NAME)-$(1)-overlay/version
1a4d82fc 142
85aaf69f 143dist/$$(PKG_NAME)-$(1).tar.gz: dist-install-dir-$(1) prepare-overlay-$(1)
1a4d82fc
JJ
144 @$(call E, build: $$@)
145# Copy essential gcc components into installer
146ifdef CFG_WINDOWSY_$(1)
147 $$(Q)rm -Rf tmp/dist/win-rust-gcc-$(1)
148 $$(Q)$$(CFG_PYTHON) $$(S)src/etc/make-win-dist.py tmp/dist/$$(PKG_NAME)-$(1)-image tmp/dist/win-rust-gcc-$(1) $(1)
149 $$(Q)cp -r $$(S)src/etc/third-party tmp/dist/$$(PKG_NAME)-$(1)-image/share/doc/
150endif
151 $$(Q)$$(S)src/rust-installer/gen-installer.sh \
152 --product-name=Rust \
1a4d82fc
JJ
153 --rel-manifest-dir=rustlib \
154 --success-message=Rust-is-ready-to-roll. \
155 --image-dir=tmp/dist/$$(PKG_NAME)-$(1)-image \
156 --work-dir=tmp/dist \
157 --output-dir=dist \
85aaf69f 158 --non-installed-overlay=tmp/dist/$$(PKG_NAME)-$(1)-overlay \
1a4d82fc
JJ
159 --package-name=$$(PKG_NAME)-$(1) \
160 --component-name=rustc \
161 --legacy-manifest-dirs=rustlib,cargo
162 $$(Q)rm -R tmp/dist/$$(PKG_NAME)-$(1)-image
163
164dist-doc-install-dir-$(1): docs compiler-docs
165 $$(Q)mkdir -p tmp/dist/$$(DOC_PKG_NAME)-$(1)-image/share/doc/rust
166 $$(Q)cp -r doc tmp/dist/$$(DOC_PKG_NAME)-$(1)-image/share/doc/rust/html
223e47cc 167
1a4d82fc
JJ
168dist/$$(DOC_PKG_NAME)-$(1).tar.gz: dist-doc-install-dir-$(1)
169 @$(call E, build: $$@)
170 $$(Q)$$(S)src/rust-installer/gen-installer.sh \
171 --product-name=Rust-Documentation \
172 --rel-manifest-dir=rustlib \
173 --success-message=Rust-documentation-is-installed. \
174 --image-dir=tmp/dist/$$(DOC_PKG_NAME)-$(1)-image \
175 --work-dir=tmp/dist \
176 --output-dir=dist \
177 --package-name=$$(DOC_PKG_NAME)-$(1) \
178 --component-name=rust-docs \
179 --legacy-manifest-dirs=rustlib,cargo \
180 --bulk-dirs=share/doc/rust/html
181 $$(Q)rm -R tmp/dist/$$(DOC_PKG_NAME)-$(1)-image
182
183dist-mingw-install-dir-$(1):
184 $$(Q)mkdir -p tmp/dist/rust-mingw-tmp-$(1)-image
185 $$(Q)rm -Rf tmp/dist/$$(MINGW_PKG_NAME)-$(1)-image
186 $$(Q)$$(CFG_PYTHON) $$(S)src/etc/make-win-dist.py \
187 tmp/dist/rust-mingw-tmp-$(1)-image tmp/dist/$$(MINGW_PKG_NAME)-$(1)-image $(1)
188
189dist/$$(MINGW_PKG_NAME)-$(1).tar.gz: dist-mingw-install-dir-$(1)
190 @$(call E, build: $$@)
191 $$(Q)$$(S)src/rust-installer/gen-installer.sh \
192 --product-name=Rust-MinGW \
193 --rel-manifest-dir=rustlib \
194 --success-message=Rust-MinGW-is-installed. \
195 --image-dir=tmp/dist/$$(MINGW_PKG_NAME)-$(1)-image \
196 --work-dir=tmp/dist \
197 --output-dir=dist \
198 --package-name=$$(MINGW_PKG_NAME)-$(1) \
199 --component-name=rust-mingw \
200 --legacy-manifest-dirs=rustlib,cargo
201 $$(Q)rm -R tmp/dist/$$(MINGW_PKG_NAME)-$(1)-image
202
203endef
204
205ifneq ($(CFG_ENABLE_DIST_HOST_ONLY),)
206$(foreach host,$(CFG_HOST),\
207 $(eval $(call DEF_INSTALLER,$(host),$(host))))
223e47cc 208else
1a4d82fc
JJ
209$(foreach host,$(CFG_HOST),\
210 $(eval $(call DEF_INSTALLER,$(host),$(CFG_TARGET))))
211endif
212
213dist-install-dirs: $(foreach host,$(CFG_HOST),dist-install-dir-$(host))
214
215ifdef CFG_WINDOWSY_$(CFG_BUILD)
216MAYBE_MINGW_TARBALLS=$(foreach host,$(CFG_HOST),dist/$(MINGW_PKG_NAME)-$(host).tar.gz)
217endif
218
219ifeq ($(CFG_DISABLE_DOCS),)
220MAYBE_DOC_TARBALLS=$(foreach host,$(CFG_HOST),dist/$(DOC_PKG_NAME)-$(host).tar.gz)
221endif
222
223dist-tar-bins: $(foreach host,$(CFG_HOST),dist/$(PKG_NAME)-$(host).tar.gz) \
224 $(MAYBE_DOC_TARBALLS) $(MAYBE_MINGW_TARBALLS)
225
226# Just try to run the compiler for the build host
227distcheck-tar-bins: dist-tar-bins
228 @$(call E, checking binary tarball)
229 $(Q)rm -Rf tmp/distcheck/$(PKG_NAME)-$(CFG_BUILD)
230 $(Q)rm -Rf tmp/distcheck/tarbininstall
231 $(Q)mkdir -p tmp/distcheck
232 $(Q)cd tmp/distcheck && tar -xzf ../../dist/$(PKG_NAME)-$(CFG_BUILD).tar.gz
233 $(Q)mkdir -p tmp/distcheck/tarbininstall
234 $(Q)sh tmp/distcheck/$(PKG_NAME)-$(CFG_BUILD)/install.sh --prefix=tmp/distcheck/tarbininstall
235 $(Q)sh tmp/distcheck/$(PKG_NAME)-$(CFG_BUILD)/install.sh --prefix=tmp/distcheck/tarbininstall --uninstall
236 $(Q)rm -Rf tmp/distcheck/$(PKG_NAME)-$(CFG_BUILD)
237 $(Q)rm -Rf tmp/distcheck/tarbininstall
238
239######################################################################
240# Docs
241######################################################################
242
243# Just copy the docs to a folder under dist with the appropriate name
244# for uploading to S3
245dist-docs: docs compiler-docs
246 $(Q) rm -Rf dist/doc
247 $(Q) mkdir -p dist/doc/
248 $(Q) cp -r doc dist/doc/$(CFG_PACKAGE_VERS)
223e47cc 249
1a4d82fc
JJ
250distcheck-docs: dist-docs
251
252######################################################################
253# Primary targets (dist, distcheck)
254######################################################################
255
256MAYBE_DIST_TAR_SRC=dist-tar-src
257MAYBE_DISTCHECK_TAR_SRC=distcheck-tar-src
258
259# FIXME #13224: On OS X don't produce tarballs simply because --exclude-vcs don't work.
260# This is a huge hack because I just don't have time to figure out another solution.
261ifeq ($(CFG_OSTYPE), apple-darwin)
262MAYBE_DIST_TAR_SRC=
263MAYBE_DISTCHECK_TAR_SRC=
264endif
265
266# Don't bother with source tarballs on windows just because we historically haven't.
267ifeq ($(CFG_OSTYPE), pc-windows-gnu)
268MAYBE_DIST_TAR_SRC=
269MAYBE_DISTCHECK_TAR_SRC=
270endif
271
272ifneq ($(CFG_DISABLE_DOCS),)
273MAYBE_DIST_DOCS=
274MAYBE_DISTCHECK_DOCS=
275else
276MAYBE_DIST_DOCS=dist-docs
277MAYBE_DISTCHECK_DOCS=distcheck-docs
278endif
279
280dist: $(MAYBE_DIST_TAR_SRC) dist-tar-bins $(MAYBE_DIST_DOCS)
281
282distcheck: $(MAYBE_DISTCHECK_TAR_SRC) distcheck-tar-bins $(MAYBE_DISTCHECK_DOCS)
283 $(Q)rm -Rf tmp/distcheck
223e47cc
LB
284 @echo
285 @echo -----------------------------------------------
1a4d82fc 286 @echo "Rust ready for distribution (see ./dist)"
223e47cc
LB
287 @echo -----------------------------------------------
288
1a4d82fc 289.PHONY: dist distcheck