diff --git a/build.sh b/build.sh index 1608711..0a09c25 100755 --- a/build.sh +++ b/build.sh @@ -42,7 +42,7 @@ buildp_dispatch_pkg_state() { local _msg="${1}" _group_name="${2}" _pkg_name="${3}"; case "${_msg}" in disabled_pkg) : $((BUILD_NSKIP+=1)); rtl_log_msg vnfo "$(printf "Skipping disabled package \`%s'." "${_pkg_name}")"; ;; - missing_pkg) rtl_log_msg failexit "Error: package \`${_pkg_name}' missing in build.vars."; ;; + missing_pkg) rtl_log_msg failexit "Error: unknown package \`${_pkg_name}'."; ;; msg_pkg) shift 3; rtl_log_msg vucc "$(printf "%s/%s: %s" "${_group_name}" "${_pkg_name}" "${*}")"; ;; skipped_pkg) : $((BUILD_NSKIP+=1)); rtl_log_msg vnfo "$(printf "Skipping finished package \`%s'." "${_pkg_name}")"; ;; start_pkg) rtl_log_msg info "$(printf "[%03d/%03d] Starting \`%s' build..." "${4}" "${5}" "${_pkg_name}")"; ;; diff --git a/dist/dist_digest.dist b/dist/dist_digest.dist new file mode 100644 index 0000000..335b63e --- /dev/null +++ b/dist/dist_digest.dist @@ -0,0 +1,23 @@ +# +# set +o errexit -o noglob is assumed. +# + +pkg_dist_digest_all() { + local _fname=""; + if rtl_lmatch "${ARG_DIST}" "tbz2" "," \ + || rtl_lmatch "${ARG_DIST}" "tgz" "," \ + || rtl_lmatch "${ARG_DIST}" "txz" ","; then + rtl_log_msg info "Compiling SHA256 sums..."; + if [ -e "${PREFIX}/SHA256SUMS" ]; then + rtl_fileop mv "${PREFIX}/SHA256SUMS" "${PREFIX}/SHA256SUMS.last"; + fi; + (cd "${PREFIX}"; + for _fname in $(find "${PREFIX_NATIVE#${PREFIX}/}" -type f -perm /a=x \ + \( -path "${PREFIX_NATIVE#${PREFIX}/}/bin/*" -or \ + -path "${PREFIX_NATIVE#${PREFIX}/}/lib/*" \)); do + sha256sum "${_fname}"; + done > "${PREFIX}/SHA256SUMS"); + fi; +}; + +# vim:filetype=sh diff --git a/dist/dist_gitref.dist b/dist/dist_gitref.dist new file mode 100644 index 0000000..a04b0f0 --- /dev/null +++ b/dist/dist_gitref.dist @@ -0,0 +1,9 @@ +# +# set +o errexit -o noglob is assumed. +# + +pkg_dist_gitref_all() { + (rtl_fileop cd "${MIDIPIX_BUILD_PWD}" && git rev-parse HEAD > "${PREFIX}/build.gitref"); +}; + +# vim:filetype=sh diff --git a/dist/dist_minipix.dist b/dist/dist_minipix.dist new file mode 100644 index 0000000..04267d3 --- /dev/null +++ b/dist/dist_minipix.dist @@ -0,0 +1,78 @@ +# +# set +o errexit -o noglob is assumed. +# + +pkgp_dist_minipix_is_newer() { + local _new_fname="${1}" _new_ts="" _old_dname="${2}" _old_ts=""; + if ! _old_ts="$(stat -c %Y "${_old_dname%%/}/${_new_fname##*/}" 2>/dev/null)" \ + || ! _new_ts="$(stat -c %Y "${_new_fname}" 2>/dev/null)"; then + return 0; + elif [ "${_new_ts}" -gt "${_old_ts}" ]; then + return 0; + else + return 1; + fi; +}; + +pkg_dist_minipix_all() { + local _dname="" _fname="" _pname=""; + if rtl_lmatch "${ARG_DIST}" "minipix" ","; then + for _dname in "${PREFIX_MINIPIX}/bin" "${PREFIX_MINIPIX}/share"; do + if [ ! -e "${_dname}" ]; then + rtl_fileop mkdir "${_dname}"; + fi; + done; + for _fname in clear reset tset; do + if [ -e "${PREFIX_NATIVE}/bin/${_fname}" ]\ + && pkgp_dist_minipix_is_newer "${PREFIX_NATIVE}/bin/${_fname}" "${PREFIX_MINIPIX}/bin"; then + rtl_fileop cp_follow "${PREFIX_NATIVE}/bin/${_fname}" "${PREFIX_MINIPIX}/bin"; + fi; + done; + for _pname in $([ -e "${PREFIX}/minipix_dist/bin" ] && find "${PREFIX}/minipix_dist/bin" \ + -maxdepth 1 -perm /a=x -type f -and \( -not -name "lib*" \)); do + if pkgp_dist_minipix_is_newer "${_pname}" "${PREFIX_MINIPIX}/bin"; then + rtl_fileop cp_follow "${_pname}" "${PREFIX_MINIPIX}/bin"; + fi; + done; + for _fname in libc.so libcrypto.so.45 libexpat.so.1 liblzma.so.5 libmagic.so.1 \ + libncurses.so.6 libncursesw.so.6 libpcre.so.1 libperk.so.0 \ + libpsxscl.so libpython2.7.so.1 libreadline.so.7 libssl.so.47 \ + libu16ports.so.0 libtinfo.so.6 libtinfow.so.6 libunistring.so.2 \ + libuuid.so.1; do + if [ -e "${PREFIX_NATIVE}/lib/${_fname}" ]\ + && pkgp_dist_minipix_is_newer "${PREFIX_NATIVE}/lib/${_fname}" "${PREFIX_MINIPIX}/bin"; then + rtl_fileop cp_follow \ + "${PREFIX_NATIVE}/lib/${_fname}" "${PREFIX_MINIPIX}/bin"; + fi; + done; + for _dname in lib/python2.7 share/gdb; do + if [ -d "${PREFIX}/minipix_dist/${_dname}" ]; then + tar -C "${PREFIX}/minipix_dist" -cpf - "${_dname}" | tar -C "${PREFIX_MINIPIX}" -xpf -; + fi; + done; + for _fname in nano vim; do + if [ -e "${PREFIX}/minipix_dist/share/${_fname}" ]\ + && pkgp_dist_minipix_is_newer "${PREFIX}/minipix_dist/share/${_fname}" "${PREFIX_MINIPIX}/share"; then + rtl_fileop cp_follow "${PREFIX}/minipix_dist/share/${_fname}" "${PREFIX_MINIPIX}/share"; + fi; + done; + if [ ! -L "${PREFIX_MINIPIX}/share/nanorc" ]; then + rtl_fileop ln_symbolic "nano/nanorc.nanorc" "${PREFIX_MINIPIX}/share/nanorc"; + fi; + if [ ! -L "${PREFIX_MINIPIX}/share/vimrc" ]; then + rtl_fileop ln_symbolic "vim/vim74/vimrc_example.vim" "${PREFIX_MINIPIX}/share/vimrc"; + fi; + for _fname in putty putty-256color screen screen-256color xterm xterm-256color; do + _dname="share/terminfo/${_fname%${_fname#[a-zA-Z]}}"; + if [ ! -e "${PREFIX_MINIPIX}/${_dname}" ]; then + rtl_fileop mkdir "${PREFIX_MINIPIX}/${_dname}"; + fi; + if [ -e "${PREFIX_NATIVE}/${_dname}/${_fname}" ]\ + && pkgp_dist_minipix_is_newer "${PREFIX_NATIVE}/${_dname}/${_fname}" "${PREFIX_MINIPIX}/${_dname}"; then + rtl_fileop cp_follow "${PREFIX_NATIVE}/${_dname}/${_fname}" "${PREFIX_MINIPIX}/${_dname}"; + fi; + done; + fi; +}; + +# vim:filetype=sh diff --git a/dist/dist_zipdist.dist b/dist/dist_zipdist.dist new file mode 100644 index 0000000..36c4589 --- /dev/null +++ b/dist/dist_zipdist.dist @@ -0,0 +1,49 @@ +# +# set +o errexit -o noglob is assumed. +# + +pkg_dist_zipdist_all() { + local _dist_fname="" _pkg_name="" _pkglist_fname="${PREFIX}/pkglist.native"; + if rtl_lmatch "${ARG_DIST}" "zipdist" ","; then + echo "msg_pkg dist dist_zipdist Building deployable distribution ZIP archive..." >&3; + rtl_log_msg info "Finished building deployable distribution ZIP archive."; + for _pkg_name in $(cat "${_pkglist_fname}"); do + if ! stat "${BUILD_WORKDIR}/${_pkg_name}-native-${DEFAULT_TARGET}" >/dev/null 2>&1; then + rtl_log_msg failexit "Error: missing package build directory for package \`${_pkg_name}'."; + fi; + done; + _dist_fname="${DEFAULT_ZIPDIST_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.zip"; + if [ -e "${BUILD_WORKDIR}/zipdist" ]; then + rtl_fileop rm "${BUILD_WORKDIR}/zipdist"; + fi; + rtl_fileop mkdir "${BUILD_WORKDIR}/zipdist"; + "${BUILD_WORKDIR}/mpackage/mpackage.sh" \ + --defroot="${DEFAULT_ZIPDIST_DEFROOT}" \ + --flysyms \ + --minroot="${PREFIX_MINIPIX}" \ + --objroot="${BUILD_WORKDIR}" \ + --pkgroot="${BUILD_WORKDIR}/zipdist/pkgroot" \ + --product=Midipix \ + --subset="${_pkglist_fname}" \ + --symbols \ + --sysroot="${BUILD_WORKDIR}/zipdist/sysroot" \ + --target="${DEFAULT_TARGET}" \ + --tmproot="${BUILD_WORKDIR}/zipdist/tmproot" \ + --zipfile="${PREFIX}/${_dist_fname}"; + echo "msg_pkg dist dist_zipdist Finished building deployable distribution ZIP archive." >&3; + rtl_log_msg info "Finished building deployable distribution ZIP archive."; + if [ -n "${DEFAULT_ZIPDIST_SIGN_GPG_KEY}" ]\ + && [ -x "$(which gpg 2>/dev/null)" ]\ + && gpg --list-keys "${DEFAULT_ZIPDIST_SIGN_GPG_KEY}" >/dev/null 2>&1; then + echo "msg_pkg dist dist_zipdist Signing deployable distribution ZIP archive..." >&3; + rtl_log_msg info "Signing deployable distribution ZIP archive..."; + gpg --armor --passphrase-file /dev/null \ + --local-user "${DEFAULT_ZIPDIST_SIGN_GPG_KEY}" \ + --sign "${PREFIX}/${_dist_fname}"; + echo "msg_pkg dist dist_zipdist Signed deployable distribution ZIP archive." >&3; + rtl_log_msg info "Signed deployable distribution ZIP archive."; + fi; + fi; +}; + +# vim:filetype=sh diff --git a/groups/999.dist.group b/groups/999.dist.group new file mode 100644 index 0000000..01af27f --- /dev/null +++ b/groups/999.dist.group @@ -0,0 +1,10 @@ +# +# Build group dist +# +DIST_FORCE=1; +DIST_NO_LOG_VARS=1; +DIST_PACKAGES="dist_digest dist_gitref dist_minipix dist_zipdist"; +: ${PKG_DIST_TARBALLS_DEPENDS:="dist_digest dist_minipix"}; +: ${PKG_DIST_ZIPDIST_DEPENDS:="dist_minipix"}; + +# vim:filetype=sh textwidth=0 diff --git a/groups/999.invariants.group b/groups/999.invariants.group deleted file mode 100644 index f2aa5b8..0000000 --- a/groups/999.invariants.group +++ /dev/null @@ -1,10 +0,0 @@ -# -# Build group invariants -# -INVARIANTS_FORCE=1; -INVARIANTS_NO_LOG_VARS=1; -INVARIANTS_PACKAGES="invariants_digest invariants_gitref invariants_minipix invariants_zipdist"; -: ${PKG_INVARIANTS_TARBALLS_DEPENDS:="invariants_digest invariants_minipix"}; -: ${PKG_INVARIANTS_ZIPDIST_DEPENDS:="invariants_minipix"}; - -# vim:filetype=sh textwidth=0 diff --git a/subr/build_init.subr b/subr/build_init.subr index 213bf7d..aebe3b0 100644 --- a/subr/build_init.subr +++ b/subr/build_init.subr @@ -231,7 +231,9 @@ buildp_init_vars() { if [ -z "${BUILD_GROUPS}" ]; then BUILD_GROUPS="${_default_build_groups}"; fi; - BUILD_GROUPS="$(rtl_lconcat "$(rtl_lfilter "${BUILD_GROUPS}" "invariants")" "invariants")"; + if [ -n "${ARG_DIST}" ]; then + BUILD_GROUPS="$(rtl_lconcat "$(rtl_lfilter "${BUILD_GROUPS}" "dist")" "dist")"; + fi; for _group in ${BUILD_GROUPS}; do if ! rtl_lmatch "${_groups}" "${_group}"; then _rc=1; _status="Error: unknown build group \`${_group}'."; break; diff --git a/subr/ex_pkg_env.subr b/subr/ex_pkg_env.subr index 7f58d3d..9b0d943 100644 --- a/subr/ex_pkg_env.subr +++ b/subr/ex_pkg_env.subr @@ -85,7 +85,11 @@ exp_pkg_env_set() { ex_pkg_env() { local _build_steps_default="${1}" _build_vars_default="${2}" _group_name="${3}" \ _pkg_name="${4}" _restart_at="${5}" _workdir="${6}" _vname=""; - rtl_fileop source_opt "vars/${_pkg_name}.vars"; + if [ "${_group_name}" = "dist" ]; then + rtl_fileop source_opt "dist/${_pkg_name}.dist"; + else + rtl_fileop source_opt "vars/${_pkg_name}.vars"; + fi; if ! exp_pkg_env_set "${_build_vars_default}" "${_group_name}" "${_pkg_name}"\ || ! exp_pkg_env_defaults "${_build_steps_default}" "${_pkg_name}" "${_workdir}"; then return "${?}"; diff --git a/vars/invariants_digest.vars b/vars/invariants_digest.vars deleted file mode 100644 index 0a44465..0000000 --- a/vars/invariants_digest.vars +++ /dev/null @@ -1,23 +0,0 @@ -# -# set +o errexit -o noglob is assumed. -# - -pkg_invariants_digest_all() { - local _fname=""; - if rtl_lmatch "${ARG_DIST}" "tbz2" "," \ - || rtl_lmatch "${ARG_DIST}" "tgz" "," \ - || rtl_lmatch "${ARG_DIST}" "txz" ","; then - rtl_log_msg info "Compiling SHA256 sums..."; - if [ -e "${PREFIX}/SHA256SUMS" ]; then - rtl_fileop mv "${PREFIX}/SHA256SUMS" "${PREFIX}/SHA256SUMS.last"; - fi; - (cd "${PREFIX}"; - for _fname in $(find "${PREFIX_NATIVE#${PREFIX}/}" -type f -perm /a=x \ - \( -path "${PREFIX_NATIVE#${PREFIX}/}/bin/*" -or \ - -path "${PREFIX_NATIVE#${PREFIX}/}/lib/*" \)); do - sha256sum "${_fname}"; - done > "${PREFIX}/SHA256SUMS"); - fi; -}; - -# vim:filetype=sh diff --git a/vars/invariants_gitref.vars b/vars/invariants_gitref.vars deleted file mode 100644 index 755656c..0000000 --- a/vars/invariants_gitref.vars +++ /dev/null @@ -1,9 +0,0 @@ -# -# set +o errexit -o noglob is assumed. -# - -pkg_invariants_gitref_all() { - (rtl_fileop cd "${MIDIPIX_BUILD_PWD}" && git rev-parse HEAD > "${PREFIX}/build.gitref"); -}; - -# vim:filetype=sh diff --git a/vars/invariants_minipix.vars b/vars/invariants_minipix.vars deleted file mode 100644 index 1c188ec..0000000 --- a/vars/invariants_minipix.vars +++ /dev/null @@ -1,78 +0,0 @@ -# -# set +o errexit -o noglob is assumed. -# - -pkgp_invariants_minipix_is_newer() { - local _new_fname="${1}" _new_ts="" _old_dname="${2}" _old_ts=""; - if ! _old_ts="$(stat -c %Y "${_old_dname%%/}/${_new_fname##*/}" 2>/dev/null)" \ - || ! _new_ts="$(stat -c %Y "${_new_fname}" 2>/dev/null)"; then - return 0; - elif [ "${_new_ts}" -gt "${_old_ts}" ]; then - return 0; - else - return 1; - fi; -}; - -pkg_invariants_minipix_all() { - local _dname="" _fname="" _pname=""; - if rtl_lmatch "${ARG_DIST}" "minipix" ","; then - for _dname in "${PREFIX_MINIPIX}/bin" "${PREFIX_MINIPIX}/share"; do - if [ ! -e "${_dname}" ]; then - rtl_fileop mkdir "${_dname}"; - fi; - done; - for _fname in clear reset tset; do - if [ -e "${PREFIX_NATIVE}/bin/${_fname}" ]\ - && pkgp_invariants_minipix_is_newer "${PREFIX_NATIVE}/bin/${_fname}" "${PREFIX_MINIPIX}/bin"; then - rtl_fileop cp_follow "${PREFIX_NATIVE}/bin/${_fname}" "${PREFIX_MINIPIX}/bin"; - fi; - done; - for _pname in $([ -e "${PREFIX}/minipix_dist/bin" ] && find "${PREFIX}/minipix_dist/bin" \ - -maxdepth 1 -perm /a=x -type f -and \( -not -name "lib*" \)); do - if pkgp_invariants_minipix_is_newer "${_pname}" "${PREFIX_MINIPIX}/bin"; then - rtl_fileop cp_follow "${_pname}" "${PREFIX_MINIPIX}/bin"; - fi; - done; - for _fname in libc.so libcrypto.so.45 libexpat.so.1 liblzma.so.5 libmagic.so.1 \ - libncurses.so.6 libncursesw.so.6 libpcre.so.1 libperk.so.0 \ - libpsxscl.so libpython2.7.so.1 libreadline.so.7 libssl.so.47 \ - libu16ports.so.0 libtinfo.so.6 libtinfow.so.6 libunistring.so.2 \ - libuuid.so.1; do - if [ -e "${PREFIX_NATIVE}/lib/${_fname}" ]\ - && pkgp_invariants_minipix_is_newer "${PREFIX_NATIVE}/lib/${_fname}" "${PREFIX_MINIPIX}/bin"; then - rtl_fileop cp_follow \ - "${PREFIX_NATIVE}/lib/${_fname}" "${PREFIX_MINIPIX}/bin"; - fi; - done; - for _dname in lib/python2.7 share/gdb; do - if [ -d "${PREFIX}/minipix_dist/${_dname}" ]; then - tar -C "${PREFIX}/minipix_dist" -cpf - "${_dname}" | tar -C "${PREFIX_MINIPIX}" -xpf -; - fi; - done; - for _fname in nano vim; do - if [ -e "${PREFIX}/minipix_dist/share/${_fname}" ]\ - && pkgp_invariants_minipix_is_newer "${PREFIX}/minipix_dist/share/${_fname}" "${PREFIX_MINIPIX}/share"; then - rtl_fileop cp_follow "${PREFIX}/minipix_dist/share/${_fname}" "${PREFIX_MINIPIX}/share"; - fi; - done; - if [ ! -L "${PREFIX_MINIPIX}/share/nanorc" ]; then - rtl_fileop ln_symbolic "nano/nanorc.nanorc" "${PREFIX_MINIPIX}/share/nanorc"; - fi; - if [ ! -L "${PREFIX_MINIPIX}/share/vimrc" ]; then - rtl_fileop ln_symbolic "vim/vim74/vimrc_example.vim" "${PREFIX_MINIPIX}/share/vimrc"; - fi; - for _fname in putty putty-256color screen screen-256color xterm xterm-256color; do - _dname="share/terminfo/${_fname%${_fname#[a-zA-Z]}}"; - if [ ! -e "${PREFIX_MINIPIX}/${_dname}" ]; then - rtl_fileop mkdir "${PREFIX_MINIPIX}/${_dname}"; - fi; - if [ -e "${PREFIX_NATIVE}/${_dname}/${_fname}" ]\ - && pkgp_invariants_minipix_is_newer "${PREFIX_NATIVE}/${_dname}/${_fname}" "${PREFIX_MINIPIX}/${_dname}"; then - rtl_fileop cp_follow "${PREFIX_NATIVE}/${_dname}/${_fname}" "${PREFIX_MINIPIX}/${_dname}"; - fi; - done; - fi; -}; - -# vim:filetype=sh diff --git a/vars/invariants_zipdist.vars b/vars/invariants_zipdist.vars deleted file mode 100644 index 0963399..0000000 --- a/vars/invariants_zipdist.vars +++ /dev/null @@ -1,49 +0,0 @@ -# -# set +o errexit -o noglob is assumed. -# - -pkg_invariants_zipdist_all() { - local _dist_fname="" _pkg_name="" _pkglist_fname="${PREFIX}/pkglist.native"; - if rtl_lmatch "${ARG_DIST}" "zipdist" ","; then - echo "msg_pkg invariants invariants_zipdist Building deployable distribution ZIP archive..." >&3; - rtl_log_msg info "Finished building deployable distribution ZIP archive."; - for _pkg_name in $(cat "${_pkglist_fname}"); do - if ! stat "${BUILD_WORKDIR}/${_pkg_name}-native-${DEFAULT_TARGET}" >/dev/null 2>&1; then - rtl_log_msg failexit "Error: missing package build directory for package \`${_pkg_name}'."; - fi; - done; - _dist_fname="${DEFAULT_ZIPDIST_FNAME_PREFIX}${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE_START}.zip"; - if [ -e "${BUILD_WORKDIR}/zipdist" ]; then - rtl_fileop rm "${BUILD_WORKDIR}/zipdist"; - fi; - rtl_fileop mkdir "${BUILD_WORKDIR}/zipdist"; - "${BUILD_WORKDIR}/mpackage/mpackage.sh" \ - --defroot="${DEFAULT_ZIPDIST_DEFROOT}" \ - --flysyms \ - --minroot="${PREFIX_MINIPIX}" \ - --objroot="${BUILD_WORKDIR}" \ - --pkgroot="${BUILD_WORKDIR}/zipdist/pkgroot" \ - --product=Midipix \ - --subset="${_pkglist_fname}" \ - --symbols \ - --sysroot="${BUILD_WORKDIR}/zipdist/sysroot" \ - --target="${DEFAULT_TARGET}" \ - --tmproot="${BUILD_WORKDIR}/zipdist/tmproot" \ - --zipfile="${PREFIX}/${_dist_fname}"; - echo "msg_pkg invariants invariants_zipdist Finished building deployable distribution ZIP archive." >&3; - rtl_log_msg info "Finished building deployable distribution ZIP archive."; - if [ -n "${DEFAULT_ZIPDIST_SIGN_GPG_KEY}" ]\ - && [ -x "$(which gpg 2>/dev/null)" ]\ - && gpg --list-keys "${DEFAULT_ZIPDIST_SIGN_GPG_KEY}" >/dev/null 2>&1; then - echo "msg_pkg invariants invariants_zipdist Signing deployable distribution ZIP archive..." >&3; - rtl_log_msg info "Signing deployable distribution ZIP archive..."; - gpg --armor --passphrase-file /dev/null \ - --local-user "${DEFAULT_ZIPDIST_SIGN_GPG_KEY}" \ - --sign "${PREFIX}/${_dist_fname}"; - echo "msg_pkg invariants invariants_zipdist Signed deployable distribution ZIP archive." >&3; - rtl_log_msg info "Signed deployable distribution ZIP archive."; - fi; - fi; -}; - -# vim:filetype=sh