1#
2# This Makefile helps create the directory structure on ftp-master,
3# making staging builds a bit more sane.
4#
5# You probably do not want to use this.  Really.
6# You have been warned.
7#
8# Seriously.
9#
10# Don't use this unless you know why you're using it.
11#
12# $FreeBSD: stable/11/release/Makefile.mirrors 349518 2019-06-28 20:28:20Z gjb $
13#
14
15.include "${.CURDIR}/Makefile"
16
17RELEASEDIR?=		/R
18FTPDIR?=		${RELEASEDIR}/ftp-stage
19.if exists(${RELEASEDIR})
20STAGE_TARGETS?=		iso-images-stage
21.endif
22SRCBRANCH!=		${SVN_CMD} info --show-item relative-url ${WORLDDIR}
23
24.if (defined(EMBEDDED_TARGET) && !empty(EMBEDDED_TARGET)) || (defined(EMBEDDEDBUILD) && !empty(EMBEDDEDBUILD))
25. if ${TARGET:Marm*} != "" || ${EMBEDDED_TARGET:Marm*} != ""
26EMBEDDED=		1
27. endif
28.endif
29
30# snapshot
31.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE" || ${BRANCH:MALPHA*} != ""
32SNAPSHOT=		1
33TLD?=			${FTPDIR}/snapshots
34. if !defined(SVNREVISION) || empty(SVNREVISION)
35.  for _D in /usr/bin /usr/local/bin
36.   for _S in svnversion svnliteversion
37.    if exists(${_D}/${_S})
38SVNVERSION?=		${_D}/${_S}
39.    endif
40.   endfor
41.  endfor
42.  if exists(${SVNVERSION}) && !empty(SVNVERSION)
43SVNREVISION!=		${SVNVERSION} ${WORLDDIR}/Makefile
44.  endif
45. endif # !defined(SVNREVISION)
46. if !defined(BUILDDATE) || empty(BUILDDATE)
47.  if exists(${.CURDIR}/${.OBJDIR}/dist/base/bin/sh)
48BUILDDATE!=		cd ${.CURDIR} && date -j -f '%s' $$(stat -f "%c" ${.OBJDIR}/dist/base/bin/sh) +%Y%m%d
49.  else
50BUILDDATE!=		date +%Y%m%d
51.  endif
52. endif
53_SNAP_SUFFIX:=		${BUILDDATE}-r${SVNREVISION}
54.else
55# release
56SNAPSHOT=
57TLD?=			${FTPDIR}/releases
58.endif
59
60.if defined(EMBEDDED) && !empty(EMBEDDED)
61. if ${TARGET:Marm*} != "" && (${TARGET_ARCH:Marm*} != "" || ${TARGET_ARCH} == "aarch64")
62.  if !defined(BOARDNAME) && empty(BOARDNAME)
63BOARDNAME:=		${KERNCONF}
64.  else
65OLDNAME:=		${KERNCONF}
66.  endif
67.  if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE" || ${BRANCH:MALPHA*} != ""
68SNAPSHOT=		1
69.  endif
70IMAGES:=		img
71. endif # arm/armv6
72.endif # embedded
73
74.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
75STAGE_TARGETS+=		vm-images-stage
76VM_DIR=			${TLD}/VM-IMAGES/${REVISION}-${BRANCH}/${TARGET_ARCH}
77.endif
78
79CLEANFILES+=		${STAGE_TARGETS}
80CHECKSUM_FILES?=	SHA512 SHA256
81SNAP_SUFFIX!=		echo ${_SNAP_SUFFIX:S,^-,,1} | tr -d ' '
82ISO_DIR=		${TLD}/${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}
83FTP_DIR=		${TLD}/${TARGET}/${TARGET_ARCH}/${REVISION}-${BRANCH}
84
85remove-old-bits:
86	rm -rf ${FTPDIR}
87
88iso-images-stage:
89	mkdir -p ${ISO_DIR}
90	mkdir -p ${TLD}/ISO-IMAGES/${REVISION}
91.if defined(SNAPSHOT) && !empty(SNAPSHOT)
92	cd ${RELEASEDIR} && rm -f CHECKSUM.*
93. for IMAGE in ${IMAGES}
94.  if defined(EMBEDDED) && !empty(EMBEDDED)
95.   if defined(OLDNAME) && !empty(OLDNAME)
96	@# arm/armv6 IMX6 -> WANDBOARD, for example.
97	cd ${RELEASEDIR} && \
98		mv ${OSRELEASE}-${OLDNAME}.${IMAGE}.xz \
99		${OSRELEASE}-${BOARDNAME}.${IMAGE}.xz
100.   endif
101	cd ${RELEASEDIR} && \
102		mv ${OSRELEASE}-${BOARDNAME}.${IMAGE}.xz \
103		${OSRELEASE}-${BOARDNAME}-${SNAP_SUFFIX}.${IMAGE}.xz
104	cp -p ${RELEASEDIR}/${OSRELEASE}-${BOARDNAME}-${SNAP_SUFFIX}.${IMAGE}.xz \
105		${ISO_DIR}/${OSRELEASE}-${BOARDNAME}-${SNAP_SUFFIX}.${IMAGE}.xz
106	cd ${TLD}/ISO-IMAGES/${REVISION} && \
107		ln -s \
108		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/${OSRELEASE}-${BOARDNAME}-${SNAP_SUFFIX}.${IMAGE}.xz
109.  endif # not embedded
110.   if exists(${RELEASEDIR}/${OSRELEASE}-${IMAGE})
111	cd ${RELEASEDIR} && \
112		mv ${OSRELEASE}-${IMAGE} \
113		${OSRELEASE}-${SNAP_SUFFIX}-${IMAGE}
114	cp -p ${RELEASEDIR}/${OSRELEASE}-${SNAP_SUFFIX}-${IMAGE} \
115		${ISO_DIR}/${OSRELEASE}-${SNAP_SUFFIX}-${IMAGE}
116	cd ${TLD}/ISO-IMAGES/${REVISION} && \
117		ln -s \
118		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/${OSRELEASE}-${SNAP_SUFFIX}-${IMAGE}
119.   endif
120.   if exists(${RELEASEDIR}/${OSRELEASE}-${IMAGE}.xz)
121	cd ${RELEASEDIR} && \
122		mv ${OSRELEASE}-${IMAGE}.xz \
123		${OSRELEASE}-${SNAP_SUFFIX}-${IMAGE}.xz
124	cp -p ${RELEASEDIR}/${OSRELEASE}-${SNAP_SUFFIX}-${IMAGE}.xz \
125		${ISO_DIR}/${OSRELEASE}-${SNAP_SUFFIX}-${IMAGE}.xz
126	cd ${TLD}/ISO-IMAGES/${REVISION} && \
127		ln -s \
128		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/${OSRELEASE}-${SNAP_SUFFIX}-${IMAGE}.xz
129.   endif
130. endfor # images loop
131	cd ${RELEASEDIR} && rm -f CHECKSUM.*
132. for CHECKSUM in ${CHECKSUM_FILES}
133.  if defined(EMBEDDED) && !empty(EMBEDDED)
134	cd ${RELEASEDIR} && ${CHECKSUM:tl} ${OSRELEASE}* > \
135		CHECKSUM.${CHECKSUM}-${OSRELEASE}-${BOARDNAME}-${SNAP_SUFFIX}
136	cp -p ${RELEASEDIR}/CHECKSUM.${CHECKSUM}-${OSRELEASE}-${BOARDNAME}-${SNAP_SUFFIX} \
137		${ISO_DIR}/CHECKSUM.${CHECKSUM}-${OSRELEASE}-${BOARDNAME}-${SNAP_SUFFIX}
138	cd ${TLD}/ISO-IMAGES/${REVISION} && \
139		ln -s \
140		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/CHECKSUM.${CHECKSUM}-${OSRELEASE}-${BOARDNAME}-${SNAP_SUFFIX}
141.  else # not embedded
142	cd ${RELEASEDIR} && ${CHECKSUM:tl} ${OSRELEASE}* > \
143		CHECKSUM.${CHECKSUM}-${OSRELEASE}-${SNAP_SUFFIX}
144	cp -p ${RELEASEDIR}/CHECKSUM.${CHECKSUM}-${OSRELEASE}-${SNAP_SUFFIX} \
145		${ISO_DIR}/CHECKSUM.${CHECKSUM}-${OSRELEASE}-${SNAP_SUFFIX}
146	cd ${TLD}/ISO-IMAGES/${REVISION} && \
147		ln -s \
148		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/CHECKSUM.${CHECKSUM}-${OSRELEASE}-${SNAP_SUFFIX}
149.  endif #
150. endfor # checksum files
151.else # not snapshot
152. for IMAGE in ${IMAGES}
153.  if defined(EMBEDDED) && !empty(EMBEDDED)
154.   if defined(OLDNAME) && !empty(OLDNAME)
155	@# arm/armv6 IMX6 -> WANDBOARD, for example.
156	cd ${RELEASEDIR} && \
157		mv ${OSRELEASE}-${OLDNAME}.${IMAGE}.xz \
158		${OSRELEASE}-${BOARDNAME}.${IMAGE}.xz
159.   endif
160	cp -p ${RELEASEDIR}/${OSRELEASE}-${BOARDNAME}.${IMAGE}.xz \
161		${ISO_DIR}/${OSRELEASE}-${BOARDNAME}.${IMAGE}.xz
162	cd ${TLD}/ISO-IMAGES/${REVISION} && \
163		ln -s \
164		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/${OSRELEASE}-${BOARDNAME}.${IMAGE}.xz
165.  endif # not embedded
166.   if exists(${RELEASEDIR}/${OSRELEASE}-${IMAGE})
167	cd ${RELEASEDIR} && \
168	cp -p ${RELEASEDIR}/${OSRELEASE}-${IMAGE} \
169		${ISO_DIR}/${OSRELEASE}-${IMAGE}
170	cd ${TLD}/ISO-IMAGES/${REVISION} && \
171		ln -s \
172		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/${OSRELEASE}-${IMAGE}
173.   endif
174.   if exists(${RELEASEDIR}/${OSRELEASE}-${IMAGE}.xz)
175	cp -p ${RELEASEDIR}/${OSRELEASE}-${IMAGE}.xz \
176		${ISO_DIR}/${OSRELEASE}-${IMAGE}.xz
177	cd ${TLD}/ISO-IMAGES/${REVISION} && \
178		ln -s \
179		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/${OSRELEASE}-${IMAGE}.xz
180.   endif
181. endfor # images loop
182	cd ${RELEASEDIR} && rm -f CHECKSUM.*
183. for CHECKSUM in ${CHECKSUM_FILES}
184.  if defined(EMBEDDED) && !empty(EMBEDDED)
185	cd ${RELEASEDIR} && ${CHECKSUM:tl} ${OSRELEASE}* > \
186		CHECKSUM.${CHECKSUM}-${OSRELEASE}-${BOARDNAME}
187	cp -p ${RELEASEDIR}/CHECKSUM.${CHECKSUM}-${OSRELEASE}-${BOARDNAME} \
188		${ISO_DIR}/CHECKSUM.${CHECKSUM}-${OSRELEASE}-${BOARDNAME}
189	cd ${TLD}/ISO-IMAGES/${REVISION} && \
190		ln -s \
191		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/CHECKSUM.${CHECKSUM}-${OSRELEASE}-${BOARDNAME}
192.  else # not embedded
193	cd ${RELEASEDIR} && ${CHECKSUM:tl} ${OSRELEASE}* > \
194		CHECKSUM.${CHECKSUM}-${OSRELEASE}
195	cp -p ${RELEASEDIR}/CHECKSUM.${CHECKSUM}-${OSRELEASE} \
196		${ISO_DIR}/CHECKSUM.${CHECKSUM}-${OSRELEASE}
197	cd ${TLD}/ISO-IMAGES/${REVISION} && \
198		ln -s \
199		../../${TARGET}/${TARGET_ARCH}/ISO-IMAGES/${REVISION}/CHECKSUM.${CHECKSUM}-${OSRELEASE}
200.  endif
201. endfor # checksum files
202.endif # release
203.if exists(${RELEASEDIR}/ftp)
204	mkdir -p ${FTP_DIR}
205	cp -p ${RELEASEDIR}/ftp/*.txz ${RELEASEDIR}/ftp/MANIFEST ${FTP_DIR}
206	echo ${BUILDDATE} > ${FTP_DIR}/BUILDDATE
207	echo ${SRCBRANCH} > ${FTP_DIR}/SRCBRANCH
208	echo r${SVNREVISION} > ${FTP_DIR}/REVISION
209	cd ${TLD}/${TARGET} && \
210		ln -s ${TARGET_ARCH}/${REVISION}-${BRANCH} \
211			${REVISION}-${BRANCH}
212.endif
213
214vm-images-stage:
215	mkdir -p ${VM_DIR}
216.if defined(SNAPSHOT) && !empty(SNAPSHOT)
217. if exists(${VM_DIR}/Latest)
218	rm -rf ${VM_DIR}/Latest
219. endif
220	mkdir -p ${VM_DIR}/Latest
221	mkdir -p ${VM_DIR}/${BUILDDATE}
222. for VMFORMAT in ${VMFORMATS}
223	cd ${RELEASEDIR}/vmimages && \
224		mv ${OSRELEASE}.${VMFORMAT}.xz \
225		${OSRELEASE}-${SNAP_SUFFIX}.${VMFORMAT}.xz
226	cp -p ${RELEASEDIR}/vmimages/${OSRELEASE}-${SNAP_SUFFIX}.${VMFORMAT}.xz \
227		${VM_DIR}/${BUILDDATE}/${OSRELEASE}-${SNAP_SUFFIX}.${VMFORMAT}.xz
228	cd ${VM_DIR}/Latest && \
229		ln -s ../${BUILDDATE}/${OSRELEASE}-${SNAP_SUFFIX}.${VMFORMAT}.xz \
230		${OSRELEASE}.${VMFORMAT}.xz
231. endfor
232	cd ${RELEASEDIR}/vmimages && rm -f CHECKSUM.*
233. for CHECKSUM in ${CHECKSUM_FILES}
234	cd ${RELEASEDIR}/vmimages && \
235		${CHECKSUM:tl} ${OSRELEASE}* > CHECKSUM.${CHECKSUM}-${SNAP_SUFFIX}
236	cp -p ${RELEASEDIR}/vmimages/CHECKSUM.${CHECKSUM}-${SNAP_SUFFIX} \
237		${VM_DIR}/${BUILDDATE}/CHECKSUM.${CHECKSUM}-${SNAP_SUFFIX}
238	cd ${VM_DIR}/Latest && \
239		ln -s ../${BUILDDATE}/CHECKSUM.${CHECKSUM}-${SNAP_SUFFIX} \
240		CHECKSUM.${CHECKSUM}
241. endfor
242.else # not snapshot
243. if exists(${VM_DIR}/Latest)
244	rm -rf ${VM_DIR}/Latest
245. endif
246	mkdir -p ${VM_DIR}/Latest
247. for VMFORMAT in ${VMFORMATS}
248	cp -p ${RELEASEDIR}/vmimages/${OSRELEASE}.${VMFORMAT}.xz \
249		${VM_DIR}/Latest/${OSRELEASE}.${VMFORMAT}.xz
250. endfor
251. for CHECKSUM in ${CHECKSUM_FILES}
252	cp -p ${RELEASEDIR}/vmimages/CHECKSUM.${CHECKSUM} \
253		${VM_DIR}/Latest/CHECKSUM.${CHECKSUM}
254. endfor
255.endif
256
257ftp-stage:	remove-old-bits ${STAGE_TARGETS}
258
259