Skip to content
Snippets Groups Projects
  • lcappelli's avatar
    fe86066e
    Rmove the patch file from the .devcontainer folder · fe86066e
    lcappelli authored
    The patch file used by the .devcontainer is needed only by  the build-install-ngx-voms.sh script. This script could use the patch file in the project home dir instead of the copy in the container.
    
    Add an echo in the container specifing that the patch file must exists in the directory where the user runs the script.
    
    Add  a check in the script: if the patch file isn't found, the script adivses the user and exits with an error.
    fe86066e
    History
    Rmove the patch file from the .devcontainer folder
    lcappelli authored
    The patch file used by the .devcontainer is needed only by  the build-install-ngx-voms.sh script. This script could use the patch file in the project home dir instead of the copy in the container.
    
    Add an echo in the container specifing that the patch file must exists in the directory where the user runs the script.
    
    Add  a check in the script: if the patch file isn't found, the script adivses the user and exits with an error.
build-install-ngx-voms.sh 4.04 KiB
#!/bin/sh

# Copyright 2018-2022 Istituto Nazionale di Fisica Nucleare
# SPDX-License-Identifier: EUPL-1.2

# This script builds in debug mode and installs openresty together with the
# ngx_http_voms_module.
#
# The script requires the locations of the openresty bundle and of the
# ngx_http_voms_module code (for example as checked-out from git). The locations
# are expressed by the environment variables OPENRESTY_ROOT and
# NGX_HTTP_VOMS_MODULE_ROOT respectively, if available. If they are not set,
# they are guessed:
# * a unique openresty bundle is looked for in ${HOME}
# * the ngx_http_voms_module code is looked for in the working directory of the
#   continuous integration environment first and then in ${HOME}
#
# The script works best (i.e. it is tested) if run within a docker container
# started from the storm2/ngx-voms-build image.

usage()
{
    echo "USAGE: $0 [OPTIONS] [TEXT]"
    echo ""
    echo "The default optimization level is -O3"
    echo ""
    echo "OPTIONS"
    echo ""
    echo "-h|--help"
    echo "-o|--opt-log to enable the --with-debug option and the optimization level -O2"
    echo "-d|--debug to enable the --with-debug option and the optimization level -O0"
    echo "-c|--coverage to add the --coverage option to the --with-{ld|cc}-opt option and enable the debug options"
    echo ""
}

#The script at the moment allows only debug builds, i.e. "-O0". This option is kept in shell variables cc2, but there is no way to set it to something else. I propose that by default it is set to -O2 (or even -O3) and is set to -O0 only if the option --debug is passed to the script. Moreover --coverage should imply --debug.


cc1=-g
debug=""
cc3=""
cc2=-O2
ld=""

while [ "$1" != "" ]; do
  option=`echo $1 | awk -F= '{print $1}'`
  case $option in
    -o|--opt-log)
      debug='--with-debug'
      cc2=-O2
      echo Enabled the debug option $debug and the optimization level $cc2
      ;;
    -d|--debug)
      debug='--with-debug'
      cc2=-O0
      echo Enabled the debug option $debug and the optimization level $cc2
      ;;
    -c|--coverage)
      cc3=--coverage
      ld='--with-ld-opt=--coverage'
      echo Enabled the coverage options $cc3 $ld
      ;;
    -h|--help)
      usage
      exit
      ;;
    *)
      debug=""
      cc3=""
      cc2=-O2
      ld=""
      ;;
  esac
  shift
done

if [ ! -z "${cc3}" ]; then
    if [ -z "${debug}" ]; then
        debug="--with-debug"
        cc2=-O0
        echo Enabled the debug option $debug and the optimization level $cc2
    fi
fi

if [ -f "${HOME}/openresty-env" ]; then
    . ${HOME}/openresty-env
fi

gcc --version

openresty_root=${OPENRESTY_ROOT:-$(ls -d ${HOME}/openresty-*/ 2> /dev/null)}

if [ $(echo ${openresty_root} | wc -w) != 1 -o ! -d "${openresty_root}" ]; then
    >&2 echo 'Invalid openresty environment ("'${openresty_root}'")'
    exit 1
fi

module_root=${NGX_HTTP_VOMS_MODULE_ROOT:-${CI_PROJECT_DIR:-${HOME}/ngx_http_voms_module}}

if [ ! -d "${module_root}" ]; then
    >&2 echo 'Invalid ngx_http_voms_module environment ("'${module_root}'")'
    exit 1
fi

if [ ! -f "./nginx-httpg_no_delegation.patch" ]; then
    >&2 echo 'nginx-httpg_no_delegation.patch not found in current dir.'
    exit 1
fi

RESTY_PACKAGES_PREFIX=/usr/local/openresty
ZLIB_PREFIX=/usr
OPENSSL_PREFIX=/usr
PCRE_PREFIX=/usr

cd ${openresty_root}
./configure \
	--with-cc="ccache gcc -fdiagnostics-color=always" \
	--with-cc-opt="-DNGX_LUA_ABORT_AT_PANIC -I${ZLIB_PREFIX}/include -I${PCRE_PREFIX}/include -I${OPENSSL_PREFIX}/include" \
        --with-ld-opt="-L${ZLIB_PREFIX}/lib -L${PCRE_PREFIX}/lib -L${OPENSSL_PREFIX}/lib -Wl,-rpath,${ZLIB_PREFIX}/lib:${PCRE_PREFIX}/lib:${OPENSSL_PREFIX}/lib" \
        --with-luajit-xcflags="-DLUAJIT_NUMMODE=2 -DLUAJIT_ENABLE_LUA52COMPAT" \
        ${RESTY_CONFIG_OPTIONS} \
        ${debug} \
        --with-cc-opt="${cc1} ${cc2} ${cc3}" \
         ${ld} \
        --add-module=${module_root}

nginx_version=$(find build -name nginx.h | xargs awk '/define NGINX_VERSION/ {print $3}' | tr -d '"')
cd build/nginx-${nginx_version}
patch -p1 < nginx-httpg_no_delegation.patch
cd -

make -j $(nproc)
make install