summaryrefslogtreecommitdiffhomepage
path: root/subr/tarballs.subr
blob: 303c652236d70387eec708c4e52a4146bb8e6f4d (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
#
# . ./build.vars and set -o errexit -o noglob are assumed.
#

do_tarball_dist() {
	TARBALL_FNAME=${TARBALL_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.${TARBALL_SUFFIX};	
	secure_rm ${PREFIX_BASENAME}/lib.bak;
	insecure_mkdir ${PREFIX_BASENAME}/lib.bak;
	tar -C ${PREFIX_BASENAME}/lib -cpf - . | tar -C ${PREFIX_BASENAME}/lib.bak -xpf -;
	log_msg info "Backed up ${PREFIX_BASENAME}/lib.";
	for _dtd_lname in $(find native/lib \(							\
			-iname \*.so -or -iname \*.so.\* -or -iname \*.so.\*.\* -or	\
			-iname \*.so.\*.\*.\* \) -and \( -not -iname \*.lib.a \) -and -type l); do
		if [ "${_dtd_lname#/}" = "${_dtd_lname}" ]; then
			_dtd_lname="${PWD}/${_dtd_lname}";
		fi;
		_dtd_fname="$(readlink -f -- ${_dtd_lname})";
		if [ -f "${_dtd_fname}" ]; then
			secure_rm ${_dtd_lname}; ln -f -- "${_dtd_fname}" "${_dtd_lname}";
		fi;
	done;
	log_msg info "Converted symbolic links in ${PREFIX_BASENAME}/lib to hard links.";

	tar -cpf - $(find . -maxdepth 2 -mindepth 1 -type d				\
			-not -path ./native -not -path ./native/lib.bak			\
			-not -path ./tmp -not -path ./tmp/\*)				\
		midipix_shortcut.vbs midipix.sh	README					|\
	${TARBALL_COMPRESS_CMD} ${TARBALL_COMPRESS_ARGS} -c > ${TARBALL_FNAME};
	log_msg info "Finished building binary distribution tarball.";
	if [ -x "$(which gpg 2>/dev/null)" -a -n "${TARBALL_SIGN_GPG_KEY}" ] &&\
				gpg --list-keys "${TARBALL_SIGN_GPG_KEY}" >/dev/null 2>&1; then
		gpg --armor --passphrase-file /dev/null					\
			--local-user "${TARBALL_SIGN_GPG_KEY}" --sign ${TARBALL_FNAME};
		log_msg info "Signed binary distribution tarball.";
	fi;
	secure_rm ${PREFIX_BASENAME}/lib; mv -- ${PREFIX_BASENAME}/lib.bak ${PREFIX_BASENAME}/lib;
	log_msg info "Restored ${PREFIX_BASENAME}/lib.";
};

do_tarball_toolchain() {
	TARBALL_CROSS_FNAME=${TARBALL_CROSS_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.${TARBALL_SUFFIX};	
	tar -cpf - bin include lib lib64 libexec share ${PKG_TARGET}			|\
	${TARBALL_COMPRESS_CMD} ${TARBALL_COMPRESS_ARGS} -c > ${TARBALL_CROSS_FNAME};
	log_msg info "Finished building toolchain tarball.";
	if [ -x "$(which gpg 2>/dev/null)" -a -n "${TARBALL_CROSS_SIGN_GPG_KEY}" ] &&\
				gpg --list-keys "${TARBALL_CROSS_SIGN_GPG_KEY}" >/dev/null 2>&1; then
		gpg --armor --passphrase-file /dev/null					\
			--local-user "${TARBALL_CROSS_SIGN_GPG_KEY}" --sign ${TARBALL_CROSS_FNAME};
		log_msg info "Signed toolchain tarball.";
	fi;
};

do_tarball_minipix() {
	TARBALL_MINIPIX_FNAME=${TARBALL_MINIPIX_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.${TARBALL_SUFFIX};	
	tar -cpf - minipix 								\
		midipix_shortcut.vbs midipix.sh README					|\
	${TARBALL_COMPRESS_CMD} ${TARBALL_COMPRESS_ARGS} -c > ${TARBALL_MINIPIX_FNAME};
	log_msg info "Finished building binary Minipix distribution tarball.";
	if [ -x "$(which gpg 2>/dev/null)" -a -n "${TARBALL_MINIPIX_SIGN_GPG_KEY}" ] &&\
				gpg --list-keys "${TARBALL_MINIPIX_SIGN_GPG_KEY}" >/dev/null 2>&1; then
		gpg --armor --passphrase-file /dev/null					\
			--local-user "${TARBALL_MINIPIX_SIGN_GPG_KEY}" --sign ${TARBALL_MINIPIX_FNAME};
		log_msg info "Signed binary Minipix distribution tarball.";
	fi;
};

do_tarball_src() {
	TARBALL_SRC_FNAME=${TARBALL_SRC_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.${TARBALL_SUFFIX};
	log_msg info "Building source tarball...";
	tar -cpf - $(find tmp -mindepth 2 -maxdepth 2				\
		-not -path tmp/.\*						\
		-not -path tmp/ntctty/.git					\
		-not -path tmp/psxscl/.git					\
		-not -path tmp/ptycon/.git)					|\
	${TARBALL_COMPRESS_CMD} ${TARBALL_COMPRESS_ARGS} -c > ${TARBALL_SRC_FNAME};
	log_msg info "Finished building source tarball.";
	if [ -x "$(which gpg 2>/dev/null)" -a -n "${TARBALL_SRC_SIGN_GPG_KEY}" ] &&\
				gpg --list-keys "${TARBALL_SRC_SIGN_GPG_KEY}" >/dev/null 2>&1; then
		gpg --armor --passphrase-file /dev/null				\
			--local-user "${TARBALL_SRC_SIGN_GPG_KEY}" --sign ${TARBALL_SRC_FNAME};
		log_msg info "Signed source tarball.";
	fi;
};

do_tarballs() {
	if [ ${BUILD_SCRIPT_RC:-0} -eq 0 ]\
	&& [ ${ARG_TARBALL:-0} -eq 1 ]; then
		log_msg info "Building distribution tarballs...";
		case ${TARBALL_SUFFIX} in
		bz2)	if [ -n "$(which pbzip2 2>/dev/null)" ]; then
				TARBALL_COMPRESS_CMD="pbzip2";
			else
				TARBALL_COMPRESS_CMD="bzip2";
			fi; ;;
		gz)	if [ -n "$(which pigz 2>/dev/null)" ]; then
				TARBALL_COMPRESS_CMD="pigz";
			else
				TARBALL_COMPRESS_CMD="gzip";
			fi; ;;
		xz)	TARBALL_COMPRESS_CMD="xz";
			TARBALL_COMPRESS_ARGS="-T0"; ;;
		*)	log_msg failexit "Unknown tarball suffix \`.${TARBALL_SUFFIX}'.";
		esac;
		cd ${PREFIX}; PREFIX_BASENAME=${PREFIX_NATIVE##*/};
		do_tarball_dist; do_tarball_toolchain; do_tarball_minipix;
		if [ "${BUILD}" = "debug" ]; then
			do_tarball_src;
		fi;
	fi;
};

# vim:filetype=sh