#!/usr/local/libexec/buildtool/bt_sh # $Id: sh_head.in,v 1.29 2004/05/08 20:05:19 jmmv Exp $ # Common header for shell scripts, including shared functions. # # buildtool # Copyright (c) 2003, 2004 Julio M. Merino Vidal. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # 3. Neither the name of the author nor the names of contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ProgName=${0##*/} LogName= ConfigFile= DefsFile= DocsFile= LogicFile= # ------------------------------------------------------------------------- # # btcmn_err message # Show error message on stderr and exit with error status. # btcmn_err() { local spaces="$(echo ${ProgName} | sed -e 's/./ /g')" echo "${ProgName}: $1" 1>&2 shift while [ $# -gt 0 ]; do echo "${spaces} $1" 1>&2 shift done exit 1 } # ------------------------------------------------------------------------- # # btcmn_warn message # Show warning message on stderr. # btcmn_warn() { local spaces="$(echo ${ProgName} | sed -e 's/./ /g')" echo "${ProgName}: $1" 1>&2 shift while [ $# -gt 0 ]; do echo "${spaces} $1" 1>&2 shift done } # ------------------------------------------------------------------------- # # btcmn_log_start name # Open the given log file and add a header to it for the current # session. # btcmn_log_start() { LogName=$1 [ -f ${LogName} ] && echo >> ${LogName} echo "-------------------------------------------------------------------------" >> ${LogName} # NOLINT echo "LOG STARTED FOR MODULE ${ProgName} ON $(date)" >> ${LogName} echo >> ${LogName} } # ------------------------------------------------------------------------- # # btcmn_log_name # Get the current log name. # btcmn_log_name() { echo ${LogName} } # ------------------------------------------------------------------------- # # btcmn_log_msg text # Append the given message to the log file. # btcmn_log_msg() { echo $* >> ${LogName} } # ------------------------------------------------------------------------- # # btcmn_req_project # Check if we are executing Buildtool inside a buildtoolized project. # If so, set BT_TOPDIR to its top directory, set all *File variables # pointing to the right script, check if the current Buildtool version # is enough to work with this project and automatically source the defs # block. The function does not return if the check fails. # btcmn_req_project() { local major minor oldpwd config() { btcmn_err "no config() function defined; cannot continue." } defs() { btcmn_err "no defs() function defined; cannot continue." } docs() { btcmn_err "no docs() function defined; cannot continue." } oldpwd=$(pwd) BT_TOPDIR= while [ -z "${BT_TOPDIR}" -a $(pwd) != / ]; do if [ -f Generic.bt -o -f Defs.bt ]; then BT_TOPDIR=$(pwd) else cd .. fi done [ -z "${BT_TOPDIR}" ] && btcmn_err \ "this module needs to be run from inside a Buildtool project" if [ -f Config.bt ]; then ConfigFile=${BT_TOPDIR}/Config.bt else ConfigFile=${BT_TOPDIR}/Generic.bt fi if [ -f Defs.bt ]; then DefsFile=${BT_TOPDIR}/Defs.bt else DefsFile=${BT_TOPDIR}/Generic.bt fi if [ -f Docs.bt ]; then DocsFile=${BT_TOPDIR}/Docs.bt else DocsFile=${BT_TOPDIR}/Generic.bt fi if [ -f Logic.bt ]; then LogicFile=${BT_TOPDIR}/Logic.bt else LogicFile=${BT_TOPDIR}/Generic.bt fi cd ${oldpwd} [ -f Logic.bt ] && LogicFile=$(pwd)/Logic.bt BT_REQUIRE= . ${DefsFile} defs if [ -z "${BT_REQUIRE}" ]; then btcmn_err "broken package; does not define BT_REQUIRE" fi major=$(echo ${BT_REQUIRE} | cut -d . -f 1) minor=$(echo ${BT_REQUIRE} | cut -d . -f 2) [ ${major} -ne 0 -a ${major} -ne 0 ] && \ btcmn_err "this package requires the Buildtool ${major}.x branch" [ ${minor} -gt 16 ] && \ btcmn_err "this package requires Buildtool ${BT_REQUIRE}" } # ------------------------------------------------------------------------- # # btcmn_req_config # Check for the presence of the config script and source it if found. # Does not return if the file is not found. # btcmn_req_config() { [ ! -f ${ConfigFile} ] && btcmn_err "cannot open ${ConfigFile}" config_init() { return 0; } config() { return 0; } . ${ConfigFile} } # ------------------------------------------------------------------------- # # btcmn_req_defs # Check for the presence of the defs script and source it if found. # Does not return if the file is not found. # btcmn_req_defs() { [ ! -f ${DefsFile} ] && btcmn_err "cannot open ${DefsFile}" defs() { return 0; } . ${DefsFile} } # ------------------------------------------------------------------------- # # btcmn_req_docs # Check for the presence of the docs script and source it if found. # Does not return if the file is not found. # btcmn_req_docs() { [ ! -f ${DocsFile} ] && btcmn_err "cannot open ${DocsFile}" docs() { return 0; } . ${DocsFile} } # ------------------------------------------------------------------------- # # btcmn_req_logic # Check for the presence of the logic script and source it if found. # Does not return if the file is not found. # btcmn_req_logic() { [ ! -f ${LogicFile} ] && btcmn_err "cannot open ${LogicFile}" logic() { return 0; } . ${LogicFile} } # ------------------------------------------------------------------------- # # btcmn_req_runtime # Check if we were executed by the main buildtool wrapper program. # btcmn_req_runtime() { if [ ${__BUILDTOOL:-no} != yes ]; then btcmn_err "this program must be run through Buildtool" fi } # ------------------------------------------------------------------------- # # btcmn_run_module module [args] # Execute the given module passing all extra arguments to it. # btcmn_run_module() { local module="$1"; shift case ${module} in config) btcmn_req_project __BUILDTOOL=yes /usr/local/libexec/buildtool/bt_sh ${BT_SH_FLAGS} \ /usr/local/libexec/buildtool/bt_config ${BT_PKG_CONFIG_FLAGS} "$@" ;; dist) btcmn_req_project __BUILDTOOL=yes /usr/local/libexec/buildtool/bt_sh ${BT_SH_FLAGS} \ /usr/local/libexec/buildtool/bt_dist ${BT_PKG_DIST_FLAGS} "$@" ;; doc) btcmn_req_project __BUILDTOOL=yes /usr/local/libexec/buildtool/bt_sh ${BT_SH_FLAGS} \ /usr/local/libexec/buildtool/bt_doc ${BT_PKG_DOC_FLAGS} "$@" ;; lint) btcmn_req_project __BUILDTOOL=yes /usr/local/libexec/buildtool/bt_sh ${BT_SH_FLAGS} \ /usr/local/libexec/buildtool/bt_lint ${BT_PKG_LINT_FLAGS} "$@" ;; logic) btcmn_req_project __BUILDTOOL=yes /usr/local/libexec/buildtool/bt_sh ${BT_SH_FLAGS} \ /usr/local/libexec/buildtool/bt_logic ${BT_PKG_LOGIC_FLAGS} "$@" ;; pkgflags) __BUILDTOOL=yes /usr/local/libexec/buildtool/bt_sh ${BT_SH_FLAGS} \ /usr/local/libexec/buildtool/bt_pkgflags "$@" ;; swcgen) __BUILDTOOL=yes /usr/local/libexec/buildtool/bt_sh ${BT_SH_FLAGS} \ /usr/local/libexec/buildtool/bt_swcgen "$@" ;; wizard) __BUILDTOOL=yes /usr/local/libexec/buildtool/bt_sh ${BT_SH_FLAGS} \ /usr/local/libexec/buildtool/bt_wizard "$@" ;; *) btcmn_err "no such module \`${module}' (internal error)" ;; esac } # ------------------------------------------------------------------------- # Local Variables: *** # mode: shell-script *** # End: *** # vim: syntax=sh # # $Id: frontend.in,v 1.27 2004/02/03 22:59:09 jmmv Exp $ # bt_lint's frontend. # # buildtool # Copyright (c) 2002, 2003, 2004 Julio M. Merino Vidal. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # 3. Neither the name of the author nor the names of contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # Fatal=0 Warn=0 check_rootfiles() { local res echo "=> Checking root files" if [ ! -f README.bt ]; then warn "README.bt not found; it is highly recommended" else grep -v "\$Id.*\$" /usr/local/share/buildtool/templates/README.bt > test.1 # NOLINT grep -v "\$Id.*\$" README.bt > test.2 # NOLINT res=$(cmp test.1 test.2) rm -f test.1 test.2 if [ -n "${res}" ]; then warn "README.bt found but it is outdated or modified" fi fi if [ ! -f CHANGES ]; then warn "CHANGES not found; it is recommended" fi if [ ! -f COPYING ]; then warn "COPYING not found; it is highly recommended" fi if [ ! -f PEOPLE ]; then warn "PEOPLE not found; it is recommended" fi if [ ! -f README ]; then warn "README not found; it is recommended" fi if [ -f AUTHORS ]; then warn "AUTHORS found; PEOPLE is suggested instead" fi if [ -f THANKS ]; then warn "THANKS found; PEOPLE is suggested instead" fi if [ -f Config.bt -o -f Defs.bt -o -f Docs.bt -o -f Logic.bt ]; then warn "it is recommended that you use the unified Generic.bt file in top dir" # NOLINT fi } check_config() { echo "=> Checking configuration script (${ConfigFile})" if grep bt_check_hdr_std ${ConfigFile} >/dev/null; then warn "avoid using bt_check_hdr_std; switch to bt_check_env_{c,cxx}" fi if grep bt_check_prog_cc ${ConfigFile} >/dev/null; then warn "avoid using bt_check_prog_cc; switch to bt_check_env_c" fi if grep bt_check_prog_cpp ${ConfigFile} >/dev/null; then warn "avoid using bt_check_prog_cpp; switch to bt_check_env_{c,cxx}" fi if grep bt_check_prog_cxx ${ConfigFile} >/dev/null; then warn "avoid using bt_check_prog_cxx; switch to bt_check_env_cxx" fi if grep bt_check_prog_ld ${ConfigFile} >/dev/null; then warn "avoid using bt_check_prog_ld; switch to bt_check_env_{c,cxx}" fi } check_defs() { echo "=> Checking definitions (${DefsFile})" [ -z "${BT_REQUIRE}" ] && fatal "no Buildtool version explicitly required" [ ${BT_REQUIRE} != 0.16 ] && \ warn "BT_REQUIRE does not match current Buildtool version (0.16)" [ -z "${BT_PKG_NAME}" ] && fatal "no package name" [ -z "${BT_PKG_VERSION}" ] && fatal "no package version" [ -z "${BT_PKG_LICENSE}" ] && warn "no package license" [ -z "${BT_PKG_COMMENT}" ] && warn "no package comment" [ -z "${BT_PKG_MAINTAINER}" ] && warn "no package maintainer" [ -z "${BT_PKG_HOMEPAGE}" ] && warn "no package homepage" } fatal() { echo "FATAL: $*" Fatal=$((${Fatal} + 1)) } warn() { echo "WARN: $*" Warn=$((${Warn} + 1)) } main() { btcmn_req_runtime btcmn_req_project check_rootfiles check_defs check_config echo "=> Summary" if [ ${Fatal} -gt 0 ]; then btcmn_err "package is INVALID; ${Fatal} fatal errors" fi if [ ${Warn} -gt 0 ]; then btcmn_warn "package should be corrected; ${Warn} warnings" else echo "Package is OK!" fi return 0 } # Local Variables: *** # mode: shell-script *** # End: *** # vim: syntax=sh # # $Id: sh_tail.in,v 1.3 2003/09/23 16:40:23 jmmv Exp $ # Common footer for shell scripts. # # buildtool # Copyright (c) 2003 Julio M. Merino Vidal. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # 3. Neither the name of the author nor the names of contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # main "$@" # Local Variables: *** # mode: shell-script *** # End: *** # vim: syntax=sh