diff options
Diffstat (limited to 'pki/dogtag/tps-ui/config-ext/build_linux_pki')
-rwxr-xr-x | pki/dogtag/tps-ui/config-ext/build_linux_pki | 318 |
1 files changed, 318 insertions, 0 deletions
diff --git a/pki/dogtag/tps-ui/config-ext/build_linux_pki b/pki/dogtag/tps-ui/config-ext/build_linux_pki new file mode 100755 index 000000000..d9ea91e8c --- /dev/null +++ b/pki/dogtag/tps-ui/config-ext/build_linux_pki @@ -0,0 +1,318 @@ +#!/bin/bash +# BEGIN COPYRIGHT BLOCK +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# (C) 2007 Red Hat, Inc. +# All rights reserved. +# END COPYRIGHT BLOCK + +# Always switch into the base directory above this +# shared shell script prior to executing it so that +# all of its output is written to this directory +cd `dirname $0`/.. + +# Set pre-defined variables +# +# NOTE: Variables prefixed with "LINUX" are defined in the invoking script. +# Variables prefixed with "PKI" are defined in this shared script. +# Variables containing no prefix are reserved for the generated script. +# +PKI_ABORT_SCRIPT="false" +PKI_BASEDIR="../../.." +PKI_BUILD_XML=build.xml +PKI_DIR=pki +PKI_LINUX_DIR=linux +PKI_RELEASE_DIR=release +PKI_RELEASE_SCRIPT=release +PKI_SHARED_SCRIPT=`basename $0` +PKI_SRC_DIR=base + +# Check the values of the passed-in environment variables +if [ "${LINUX_BUILD_SCRIPT}" == "" ]; then + printf "ERROR: The 'LINUX_BUILD_SCRIPT' environment variable is undefined!\n" + PKI_ABORT_SCRIPT="true" +fi +if [ "${LINUX_COMPONENT}" == "" ]; then + printf "ERROR: The 'LINUX_COMPONENT' environment variable is undefined!\n" + PKI_ABORT_SCRIPT="true" +fi +if [ "${LINUX_SPECFILE}" == "" ]; then + printf "ERROR: The 'LINUX_SPECFILE' environment variable is undefined!\n" + PKI_ABORT_SCRIPT="true" +fi +if [ "${PKI_ABORT_SCRIPT}" == "true" ]; then + printf "\n" + printf "The '${PKI_SHARED_SCRIPT}' shared build script MUST be invoked by " + printf "a\nPKI component-specific build script (e. g. - '${LINUX_BUILD_SCRIPT}')\n" + printf "which defines ALL environment variables prefixed by 'LINUX'!\n" + exit 255 +fi + +# Compute remaining variables by assigning their values from the specfile +PKI_SOURCE_CODE_URL="https://pki-svn.fedora.redhat.com/svn/pki/trunk/${PKI_DIR}/${PKI_SRC_DIR}/${LINUX_COMPONENT}" +PKI_PRODUCT_UI_PREFIX=`grep " base_ui_prefix" ${LINUX_SPECFILE} | awk '{ print $3; }'` +PKI_PRODUCT_PREFIX=`grep " base_prefix" ${LINUX_SPECFILE} | awk '{ print $3; }'` +PKI_PRODUCT=`grep " base_component" ${LINUX_SPECFILE} | awk '{ print $3; }'` +if [ "${PKI_PRODUCT_UI_PREFIX}" != "" ]; then + PKI_PRODUCT_BUILD_XML="${PKI_BUILD_XML}" + PKI_PRODUCT_NAME="${PKI_PRODUCT_PREFIX}-${PKI_PRODUCT}" + PKI_PRODUCT_SOURCE_PATH="${PKI_DIR}/${PKI_LINUX_DIR}/${LINUX_COMPONENT}" +elif [ "${PKI_PRODUCT_PREFIX}" != "" ]; then + PKI_PRODUCT_BUILD_XML="${PKI_BASEDIR}/${PKI_DIR}/${PKI_SRC_DIR}/${LINUX_COMPONENT}/${PKI_BUILD_XML}" + PKI_PRODUCT_NAME="${PKI_PRODUCT_PREFIX}-${PKI_PRODUCT}" + PKI_PRODUCT_SOURCE_PATH="${PKI_DIR}/${PKI_SRC_DIR}/${LINUX_COMPONENT}" +else + PKI_PRODUCT_BUILD_XML="${PKI_BASEDIR}/${PKI_DIR}/${PKI_SRC_DIR}/${LINUX_COMPONENT}/${PKI_BUILD_XML}" + PKI_PRODUCT_NAME="${PKI_PRODUCT}" + PKI_PRODUCT_SOURCE_PATH="${PKI_DIR}/${PKI_SRC_DIR}/${LINUX_COMPONENT}" +fi +PKI_RELEASE_ROOT="${PKI_BASEDIR}/${PKI_RELEASE_DIR}/${PKI_PRODUCT_SOURCE_PATH}" +PKI_SOURCE_CODE_LOCAL_REPOSITORY="`pwd`/${PKI_BASEDIR}/${PKI_PRODUCT_SOURCE_PATH}" + +# Always check that local source code for this PKI component is available +if [ ! -d "${PKI_SOURCE_CODE_LOCAL_REPOSITORY}" ]; then + printf "Please checkout the '${LINUX_COMPONENT}' source code from:\n\n" + printf " '${PKI_SOURCE_CODE_URL}'\n\n" + printf "to:\n\n" + printf " '${PKI_SOURCE_CODE_LOCAL_REPOSITORY}'\n\n" + exit 255 +fi + +# Define awk scripts +check_targets=' +BEGIN { + success = "false"; +} + +{ + while( getline < FILENAME > 0 ) { + if( substr( $0, 0, 80 ) ~ "target name" ) { + start = substr( $0, + match( $0, "\"" ) + 1 ); + target = substr( start, + start, + match( start, "\"" ) - 1 ); + if( build_target == target ) { + success = "true"; + } + } + } +} + +END { + printf( "%s", success ); +}' + +display_targets='{ + while( getline < FILENAME > 0 ) { + if( substr( $0, 0, 80 ) ~ "target name" ) { + start = substr( $0, + match( $0, "\"" ) + 1 ); + target = substr( start, + start, + match( start, "\"" ) - 1 ); + } + if( substr( $0, 0, 80 ) ~ "description" ) { + start = substr( $0, + match( $0, "\"" ) + 1 ); + description[target] = substr( start, + start, + match( start, "\"" ) - 1 ); + printf( "'%20s' %s\n", target, description[target] ); + } + } +}' + +# Provide a usage function +usage() { + if [ $# -gt 0 ] ; then + echo + echo "$1" + fi + echo + echo "Usage: ${LINUX_BUILD_SCRIPT} [target]" + echo + echo " where [target] is one of the optional values:" + echo + echo " help --> display '${PKI_PRODUCT_NAME}' usage statement" + awk "$display_targets" ${PKI_PRODUCT_BUILD_XML} + echo + exit 255 +} + +# Verify that the appropriate number of +# command-line parameters have been entered +# and that a valid target has been specified +if [ $# -eq 0 ] ; then + RELEASE_TARGET=main + BUILD_TARGET="" +elif [ $# -eq 1 ] ; then + if [ "$1" == "help" ]; then + usage + else + SUCCESS=`awk -v build_target=$1 "$check_targets" ${PKI_PRODUCT_BUILD_XML}` + if [ "${SUCCESS}" == "false" ]; then + usage "ERROR: Invalid target '$1' specified for '${PKI_PRODUCT_NAME}'!" + else + RELEASE_TARGET=local + BUILD_TARGET="$1" + fi + fi +elif [ $# -gt 1 ] ; then + usage "ERROR: Too many parameters specified for '${PKI_PRODUCT_NAME}'!" +fi + +# This script may ONLY be run on Linux! +PKI_OS=`uname` +if [ "${PKI_OS}" != "Linux" ]; then + printf "The '${LINUX_BUILD_SCRIPT}' script is ONLY executable on a 'Linux' machine!\n" + exit 255 +fi + +# Always start with a new release root directory +rm -rf ${PKI_RELEASE_ROOT} +mkdir -p ${PKI_RELEASE_ROOT} + +# Copy the source code to the release root +cd ${PKI_BASEDIR} +find ${PKI_PRODUCT_SOURCE_PATH} -name .svn -prune -o -name *.swp -prune -o -print | cpio -pdum ${PKI_RELEASE_DIR} > /dev/null 2>&1 +cd - > /dev/null 2>&1 + +# Remove unused files +rm -rf ${PKI_RELEASE_ROOT}/build_* +rm -rf ${PKI_RELEASE_ROOT}/*.spec +if [ -d ${PKI_RELEASE_ROOT}/config-ext ]; then + rm -rf ${PKI_RELEASE_ROOT}/config-ext +fi + +# Create the default spec file +cp ${LINUX_SPECFILE} ${PKI_RELEASE_ROOT}/${PKI_PRODUCT_NAME}.spec + +# Use bash-specific syntax to create the default build script +cat >> ${PKI_RELEASE_ROOT}/${PKI_RELEASE_SCRIPT} << END_OF_SCRIPT +#!/bin/bash + +##################################################################### +### DO NOT EDIT! This script has been automatically generated! ### +##################################################################### + +# Always switch into the base directory of this +# shell script prior to executing it so that all +# of its output is written to this directory +cd \`dirname \$0\` + +# Set pre-defined variables +BUILD_SCRIPT=\`basename \$0\` +BUILD_XML=${PKI_BUILD_XML} +SPECFILE=${PKI_PRODUCT_NAME}.spec + +# Define awk scripts +check_targets=' +BEGIN { + success = "false"; +} + +{ + while( getline < FILENAME > 0 ) { + if( substr( \$0, 0, 80 ) ~ "target name" ) { + start = substr( \$0, + match( \$0, "\"" ) + 1 ); + target = substr( start, + start, + match( start, "\"" ) - 1 ); + if( build_target == target ) { + success = "true"; + } + } + } +} + +END { + printf( "%s", success ); +}' + +display_targets='{ + while( getline < FILENAME > 0 ) { + if( substr( \$0, 0, 80 ) ~ "target name" ) { + start = substr( \$0, + match( \$0, "\"" ) + 1 ); + target = substr( start, + start, + match( start, "\"" ) - 1 ); + } + if( substr( \$0, 0, 80 ) ~ "description" ) { + start = substr( \$0, + match( \$0, "\"" ) + 1 ); + description[target] = substr( start, + start, + match( start, "\"" ) - 1 ); + printf( "'%20s' %s\n", target, description[target] ); + } + } +}' + +# Provide a usage function +usage() { + if [ \$# -gt 0 ] ; then + echo + echo "\$1" + fi + echo + echo "Usage: \${BUILD_SCRIPT} [target]" + echo + echo " where [target] is one of the optional values:" + echo + echo " help --> display '${PKI_PRODUCT_NAME}' usage statement" + awk "\$display_targets" \${BUILD_XML} + echo + exit 255 +} + +# Verify that the appropriate number of +# command-line parameters have been entered +# and that a valid target has been specified +if [ \$# -eq 0 ] ; then + RELEASE_TARGET=main + BUILD_TARGET=main +elif [ \$# -eq 1 ] ; then + if [ "\$1" == "help" ]; then + usage + else + SUCCESS=\`awk -v build_target=\$1 "\$check_targets" \${BUILD_XML}\` + if [ "\${SUCCESS}" == "false" ]; then + usage "ERROR: Invalid target '\$1' specified for '${PKI_PRODUCT_NAME}'!" + else + RELEASE_TARGET=local + BUILD_TARGET="\$1" + fi + fi +elif [ \$# -gt 1 ] ; then + usage "ERROR: Too many parameters specified for '${PKI_PRODUCT_NAME}'!" +fi + +# This script may ONLY be run on Linux! +OS=\`uname\` +if [ "\${OS}" != "Linux" ]; then + printf "The '\${BUILD_SCRIPT}' script is ONLY executable on a 'Linux' machine!\n" + exit 255 +fi + +ant -f config/release.xml -Dbasedir=. -Dspecfile=\${SPECFILE} -Dtarget=\${BUILD_TARGET} \${RELEASE_TARGET} + +END_OF_SCRIPT +chmod 00755 ${PKI_RELEASE_ROOT}/${PKI_RELEASE_SCRIPT} + +cd ${PKI_RELEASE_ROOT} +./${PKI_RELEASE_SCRIPT} ${BUILD_TARGET} + |