diff --git a/999.tarballs.build b/999.tarballs.build new file mode 100755 index 0000000..11b47e6 --- /dev/null +++ b/999.tarballs.build @@ -0,0 +1,63 @@ +# +# . ./build.vars and set -o errexit are assumed. +# + +if [ ${ARG_TARBALL:-0} -eq 0 ]; then + log_msg "Skipping distribution tarball creation."; + exit 0; +else + log_msg info "Building distribution tarballs..."; + update_build_status build_finish tarball_start; + cd ${PREFIX}; + if [ "${TARBALL_SUFFIX}" = "bz2" ]; then + TARBALL_COMPRESS_CMD="bzip2"; + elif [ "${TARBALL_SUFFIX}" = "gz" ]; then + TARBALL_COMPRESS_CMD="gzip"; + elif [ "${TARBALL_SUFFIX}" = "xz" ]; then + TARBALL_COMPRESS_CMD="xz"; + else + log_msg failexit "Unknown tarball suffix \`.${TARBALL_SUFFIX}'."; + fi; + TARBALL_FNAME=${TARBALL_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.${TARBALL_SUFFIX}; + TARBALL_SRC_FNAME=${TARBALL_SRC_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.${TARBALL_SUFFIX}; +fi; + + +PREFIX_BASENAME=${PREFIX_NATIVE##*/}; +rm_if_exists -m ${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."; +find native/lib -maxdepth 1 -type l \ + -exec sh -c '[ -f "${DEST:=native/lib/$(readlink -- "${0}")}" ] && \ + rm -f -- "${0}" && ln -f -- "${DEST}" "${0}"' {} \;; +log_msg info "Converted symbolic links in ${PREFIX_BASENAME}/lib to hard links."; + +tar -cpf - $(find_with_no_paths "${TARBALL_EXCLUDE_PATHS} native/lib.bak" . \ + -mindepth 1 -maxdepth 2 -type d -not -path ./native) \ + "Create \`Midipix mintty shell' shortcut.vbs" midipix.sh |\ +${TARBALL_COMPRESS_CMD} -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; +rm -rf ${PREFIX_BASENAME}/lib; mv ${PREFIX_BASENAME}/lib.bak ${PREFIX_BASENAME}/lib; +log_msg info "Restored ${PREFIX_BASENAME}/lib."; + + +log_msg info "Building source tarball..."; +tar -cpf - $(find tmp -mindepth 1 -maxdepth 1 -type d) |\ +${TARBALL_COMPRESS_CMD} -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; + +update_build_status tarball_finish; + +# vim:filetype=sh diff --git a/build.sh b/build.sh index db677fd..f7f5a5b 100755 --- a/build.sh +++ b/build.sh @@ -14,7 +14,8 @@ case ${1} in && { ARG_RESTART_SCRIPT="${2%%:*}"; ARG_RESTART_SCRIPT_AT="${2##*:}"; } \ || { ARG_RESTART_SCRIPT="${2}"; ARG_RESTART_SCRIPT_AT=ALL; }; shift; ;; --t) [ ${ARG_TARBALL:-0} -eq 1 ] && exec cat build.usage || ARG_TARBALL=1; ;; +-t*) [ ${ARG_TARBALL:-0} -eq 1 ] && exec cat build.usage || ARG_TARBALL=1; + [ "${1#-t.}" != "${1}" ] && TARBALL_SUFFIX=${1#-t.}; ;; -x) set -o xtrace; ;; -X) set -o xtrace; ARG_DEBUG_TARBALL=1; ;; *=*) set_var_unsafe "$(get_prefix_lrg "${1}" =)" \ @@ -41,7 +42,7 @@ if [ -d ${PREFIX_NATIVE}/usr -o -f ${PREFIX_NATIVE}/usr -o -L ${PREFIX_NATIVE}/u fi; ln -sf . ${PREFIX_NATIVE}/usr; BUILD_NFINI=${BUILD_NSKIP:=${BUILD_NFAIL:=${BUILD_NBUILT:=0}}}; -for BUILD_LVL in 0 1 2 3; do +for BUILD_LVL in 0 1 2 3 ${ARG_TARBALL:+9}; do for BUILD_SCRIPT_FNAME in ${BUILD_LVL}[0-9][0-9].*.build; do if [ -n "${ARG_RESTART_SCRIPT}" ] \ && [ "${ARG_RESTART_SCRIPT}" != "ALL" ] \ @@ -103,46 +104,6 @@ for BUILD_LVL in 0 1 2 3; do done; log_msg info "${BUILD_NFINI} finished, ${BUILD_NSKIP} skipped, and ${BUILD_NFAIL} failed builds in ${BUILD_NBUILT} build script(s)."; build_times_get; log_msg info "Build time: ${BUILD_TIMES_HOURS} hour(s), ${BUILD_TIMES_MINUTES} minute(s), and ${BUILD_TIMES_SECS} second(s)."; -if [ $(( ${BUILD_NFINI} + ${BUILD_NSKIP} )) -ge 0 ] \ -&& [ ${BUILD_NFAIL} -eq 0 ] \ -&& [ ${ARG_TARBALL:-0} -eq 1 ]; then - update_build_status build_finish tarball_start; - log_msg info "Building distribution tarball..."; - cd ${PREFIX}; PREFIX_BASENAME=${PREFIX_NATIVE##*/}; - rm_if_exists -m ${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."; - find native/lib -maxdepth 1 -type l \ - -exec sh -c '[ -f "${DEST:=native/lib/$(readlink -- "${0}")}" ] && \ - rm -f -- "${0}" && ln -f -- "${DEST}" "${0}"' {} \;; - log_msg info "Converted symbolic links in ${PREFIX_BASENAME}/lib to hard links."; - - tar -cJpf ${TARBALL_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.xz\ - $(find_with_no_paths "${TARBALL_EXCLUDE_PATHS} native/lib.bak" . \ - -mindepth 1 -maxdepth 2 -type d -not -path ./native) \ - "Create \`Midipix mintty shell' shortcut.vbs" midipix.sh; - log_msg info "Finished building distribution 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_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.xz; - fi; - rm -rf ${PREFIX_BASENAME}/lib; mv ${PREFIX_BASENAME}/lib.bak ${PREFIX_BASENAME}/lib; - log_msg info "Restored ${PREFIX_BASENAME}/lib."; - log_msg info "Building source tarball..."; - tar -cJpf ${TARBALL_SRC_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.xz\ - $(find tmp -mindepth 1 -maxdepth 1 -type d); - log_msg info "Finished building source 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_SRC_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.tar.xz; - fi; - cd ${OLDPWD}; - update_build_status tarball_finish; -fi; update_build_status finish; clean_build_status; exit ${BUILD_SCRIPT_RC})} 2>&1 | tee ${PREFIX}/${BUILD_LOG_FNAME:=build-$(date ${TIMESTAMP_FMT_STATUS_FILES}).log} & trap "kill -INT $!" HUP INT TERM USR1 USR2; wait; diff --git a/build.usage b/build.usage index 5beef93..a4f8cb7 100644 --- a/build.usage +++ b/build.usage @@ -10,9 +10,11 @@ usage: ./build.sh [-c] [-nd] [-r ALL|name[:step]] [-h] [-t] or at the optionally specified build step. Currently defined build steps are: fetch extract build_dir patch configure clean build install configure1 configure2 build1 build2 install1 install2. - -t Produce a distribution tarball containing $PREFIX - sans $WORKDIR and $PREFIX/src/midipix_build at the end of a - build with zero failures. + -t[.gz|.bz2|.xz] Produce binary distribution and source tarballs containing $PREFIX + sans $WORKDIR and $PREFIX/src/midipix_build and $WORKDIR sans top- + level regular files at the end of a build with zero failures. The + tarballs will be compressed with either gzip, bzip2, or xz and signed + with GPG; the default compression is xz. -x Set the xtrace sh(1)ell option for debugging purposes. -X Set the xtrace sh(1)ell option and compile a tarball containing build.log and $PKG_SUBDIR. Use this option if something goes diff --git a/build.vars b/build.vars index ae6cf1b..b2fcecd 100644 --- a/build.vars +++ b/build.vars @@ -39,6 +39,7 @@ fi; : ${TARBALL_SRC_FNAME_PREFIX:=midipix-${ARCH}.src.}; : ${TARBALL_EXCLUDE_PATHS:="src tmp"}; : ${TARBALL_SRC_SIGN_GPG_KEY=}; +: ${TARBALL_SUFFIX:=xz}; : ${PREFIX_NATIVE:=${PREFIX}/native}; : ${PREFIX_TARGET:=${PREFIX}/${TARGET}}; : ${PREFIX_LVL0:=${PREFIX_TARGET}};