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