From d91c93c2264d96c0bb6bb6fd60a35d97ef9bebcc Mon Sep 17 00:00:00 2001 From: George Joseph Date: Wed, 9 Aug 2017 07:01:33 -0600 Subject: [PATCH] configure: Add --with-download-cache option To make building without an internet connection easier, a new ./configure option '--with-download-cache' was added that sets the cache for externals (like pjproject, the codecs and the DPMA), AND the sounds files. It can also be specified as an environment variable named "AST_DOWNLOAD_CACHE". The existing '--with-sounds-cache' option / SOUNDS_CACHE_DIR env variable and '--with-externals-cache' option / EXTERNALS_CACHE_DIR env variable remain and if specified, will override '--with-downloads-cache'. Change-Id: I5c3cf15ee61e8fe191b52732303e969854f8d861 --- CHANGES | 7 +++++ build_tools/download_externals | 6 +++- build_tools/list_valid_installed_externals | 6 +++- configure | 35 ++++++++++++++++++++-- configure.ac | 1 + makeopts.in | 5 ++-- third-party/pjproject/configure.m4 | 6 ++-- 7 files changed, 56 insertions(+), 10 deletions(-) diff --git a/CHANGES b/CHANGES index daef5882fa..caf0e5d39c 100644 --- a/CHANGES +++ b/CHANGES @@ -17,6 +17,13 @@ Core * VP9 is now a supported passthrough video codec and it can be used by specifying "vp9" in the allow line. +Build System +------------------ + * A '--with-download-cache' option is now available which is equivalent to + setting '--with-sounds-cache' and '--with-externals-cache' to the same + value. The download cache can also be set via the AST_DOWNLOAD_CACHE + environment variable. + res_pjsip ------------------ * The "external_media_address" on transports is now resolved using dnsmgr and diff --git a/build_tools/download_externals b/build_tools/download_externals index b0a414ed1f..f6cc523907 100755 --- a/build_tools/download_externals +++ b/build_tools/download_externals @@ -26,7 +26,11 @@ if [[ -z "${tmpdir}" ]] ; then fi trap "rm -rf ${tmpdir}" EXIT -sed -r -e "s/^([^ =]+)\s*=\s*(.*)$/\1=\"\2\"/g" ${ASTTOPDIR}/makeopts >${tmpdir}/makeopts +# We have to pre-process the makeopts file so it will be parsable by bash +# Surround values with double quotes +# Convert make $(or) functions to bash ${name:-value} +sed -r -e "s/^([^ =]+)\s*=\s*(.*)$/\1=\"\2\"/g" \ + -e 's/^([^ =]+)="\$\(or ([^,]*),([^)]+)\)"/_tmp="\2"\n\1="${_tmp:-\3}"/g' ${ASTTOPDIR}/makeopts >${tmpdir}/makeopts source ${tmpdir}/makeopts if [[ -z "${ASTMODDIR}" ]] ; then echo "${module_name}: Unable to parse ${ASTTOPDIR}/makeopts." diff --git a/build_tools/list_valid_installed_externals b/build_tools/list_valid_installed_externals index 12aff3f95a..194801c94a 100755 --- a/build_tools/list_valid_installed_externals +++ b/build_tools/list_valid_installed_externals @@ -14,7 +14,11 @@ if [[ -z "${tmpdir}" ]] ; then fi trap "rm -rf ${tmpdir}" EXIT -sed -r -e "s/^([^ =]+)\s*=\s*(.*)$/\1=\"\2\"/g" ${ASTTOPDIR}/makeopts >${tmpdir}/makeopts +# We have to pre-process the makeopts file so it will be parsable by bash +# Surround values with double quotes +# Convert make $(or) functions to bash ${name:-value} +sed -r -e "s/^([^ =]+)\s*=\s*(.*)$/\1=\"\2\"/g" \ + -e 's/^([^ =]+)="\$\(or ([^,]*),([^)]+)\)"/_tmp="\2"\n\1="${_tmp:-\3}"/g' ${ASTTOPDIR}/makeopts >${tmpdir}/makeopts source ${tmpdir}/makeopts if [[ -z "${ASTMODDIR}" ]] ; then echo "${module_name}: Unable to parse ${ASTTOPDIR}/makeopts." diff --git a/configure b/configure index ae9c51b036..472a322806 100755 --- a/configure +++ b/configure @@ -1216,6 +1216,7 @@ AST_NESTED_FUNCTIONS AST_CODE_COVERAGE EXTERNALS_CACHE_DIR SOUNDS_CACHE_DIR +AST_DOWNLOAD_CACHE AST_DEVMODE_STRICT AST_DEVMODE NOISY_BUILD @@ -1369,6 +1370,7 @@ ac_user_opts=' enable_option_checking with_gnu_ld enable_dev_mode +with_download_cache with_sounds_cache with_externals_cache enable_coverage @@ -2113,6 +2115,9 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-download-cache=PATH + use cached sound AND external module tarfiles in + PATH --with-sounds-cache=PATH use cached sound tarfiles in PATH --with-externals-cache=PATH @@ -9037,6 +9042,30 @@ fi +# Check whether --with-download-cache was given. +if test "${with_download_cache+set}" = set; then : + withval=$with_download_cache; + case ${withval} in + n|no) + unset AST_DOWNLOAD_CACHE + ;; + *) + if test "x${withval}" = "x"; then + : + else + AST_DOWNLOAD_CACHE="${withval}" + fi + ;; + esac + +else + : +fi + + + + + # Check whether --with-sounds-cache was given. if test "${with_sounds_cache+set}" = set; then : withval=$with_sounds_cache; @@ -9299,11 +9328,11 @@ $as_echo "configuring" >&6; } PJPROJECT_CONFIGURE_OPTS+=" --host=$host" fi - export TAR PATCH SED NM EXTERNALS_CACHE_DIR DOWNLOAD_TO_STDOUT DOWNLOAD_TIMEOUT DOWNLOAD MD5 CAT + export TAR PATCH SED NM EXTERNALS_CACHE_DIR AST_DOWNLOAD_CACHE DOWNLOAD_TO_STDOUT DOWNLOAD_TIMEOUT DOWNLOAD MD5 CAT export NOISY_BUILD ${GNU_MAKE} --quiet --no-print-directory -C ${PJPROJECT_DIR} \ PJPROJECT_CONFIGURE_OPTS="$PJPROJECT_CONFIGURE_OPTS" \ - EXTERNALS_CACHE_DIR="${EXTERNALS_CACHE_DIR}" \ + EXTERNALS_CACHE_DIR="${EXTERNALS_CACHE_DIR:-${AST_DOWNLOAD_CACHE}}" \ configure if test $? -ne 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 @@ -9316,7 +9345,7 @@ $as_echo "$as_me: Unable to configure ${PJPROJECT_DIR}" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bundled pjproject" >&5 $as_echo_n "checking for bundled pjproject... " >&6; } - PJPROJECT_INCLUDE=$(${GNU_MAKE} --quiet --no-print-directory -C ${PJPROJECT_DIR} PJPROJECT_CONFIGURE_OPTS="$PJPROJECT_CONFIGURE_OPTS" EXTERNALS_CACHE_DIR="${EXTERNALS_CACHE_DIR}" echo_cflags) + PJPROJECT_INCLUDE=$(${GNU_MAKE} --quiet --no-print-directory -C ${PJPROJECT_DIR} PJPROJECT_CONFIGURE_OPTS="$PJPROJECT_CONFIGURE_OPTS" EXTERNALS_CACHE_DIR="${EXTERNALS_CACHE_DIR:-${AST_DOWNLOAD_CACHE}}" echo_cflags) PJPROJECT_CFLAGS="$PJPROJECT_INCLUDE" PBX_PJPROJECT=1 diff --git a/configure.ac b/configure.ac index f53e563548..d5464da9c4 100644 --- a/configure.ac +++ b/configure.ac @@ -407,6 +407,7 @@ AC_SUBST(NOISY_BUILD) AC_SUBST(AST_DEVMODE) AC_SUBST(AST_DEVMODE_STRICT) +AST_OPTION_ONLY([download-cache], [AST_DOWNLOAD_CACHE], [cached sound AND external module tarfiles], []) AST_OPTION_ONLY([sounds-cache], [SOUNDS_CACHE_DIR], [cached sound tarfiles], []) AST_OPTION_ONLY([externals-cache], [EXTERNALS_CACHE_DIR], [cached external module tarfiles], []) diff --git a/makeopts.in b/makeopts.in index 9686826731..913771b13c 100644 --- a/makeopts.in +++ b/makeopts.in @@ -29,8 +29,9 @@ FETCH=@FETCH@ DOWNLOAD=@DOWNLOAD@ DOWNLOAD_TO_STDOUT=@DOWNLOAD_TO_STDOUT@ DOWNLOAD_TIMEOUT=@DOWNLOAD_TIMEOUT@ -SOUNDS_CACHE_DIR=@SOUNDS_CACHE_DIR@ -EXTERNALS_CACHE_DIR=@EXTERNALS_CACHE_DIR@ +AST_DOWNLOAD_CACHE=@AST_DOWNLOAD_CACHE@ +SOUNDS_CACHE_DIR=$(or @SOUNDS_CACHE_DIR@,${AST_DOWNLOAD_CACHE}) +EXTERNALS_CACHE_DIR=$(or @EXTERNALS_CACHE_DIR@,${AST_DOWNLOAD_CACHE}) RUBBER=@RUBBER@ CATDVI=@CATDVI@ KPATHSEA=@KPATHSEA@ diff --git a/third-party/pjproject/configure.m4 b/third-party/pjproject/configure.m4 index 709a706a1b..2d3353476e 100644 --- a/third-party/pjproject/configure.m4 +++ b/third-party/pjproject/configure.m4 @@ -49,11 +49,11 @@ AC_DEFUN([_PJPROJECT_CONFIGURE], PJPROJECT_CONFIGURE_OPTS+=" --host=$host" fi - export TAR PATCH SED NM EXTERNALS_CACHE_DIR DOWNLOAD_TO_STDOUT DOWNLOAD_TIMEOUT DOWNLOAD MD5 CAT + export TAR PATCH SED NM EXTERNALS_CACHE_DIR AST_DOWNLOAD_CACHE DOWNLOAD_TO_STDOUT DOWNLOAD_TIMEOUT DOWNLOAD MD5 CAT export NOISY_BUILD ${GNU_MAKE} --quiet --no-print-directory -C ${PJPROJECT_DIR} \ PJPROJECT_CONFIGURE_OPTS="$PJPROJECT_CONFIGURE_OPTS" \ - EXTERNALS_CACHE_DIR="${EXTERNALS_CACHE_DIR}" \ + EXTERNALS_CACHE_DIR="${EXTERNALS_CACHE_DIR:-${AST_DOWNLOAD_CACHE}}" \ configure if test $? -ne 0 ; then AC_MSG_RESULT(failed) @@ -63,7 +63,7 @@ AC_DEFUN([_PJPROJECT_CONFIGURE], AC_MSG_CHECKING(for bundled pjproject) - PJPROJECT_INCLUDE=$(${GNU_MAKE} --quiet --no-print-directory -C ${PJPROJECT_DIR} PJPROJECT_CONFIGURE_OPTS="$PJPROJECT_CONFIGURE_OPTS" EXTERNALS_CACHE_DIR="${EXTERNALS_CACHE_DIR}" echo_cflags) + PJPROJECT_INCLUDE=$(${GNU_MAKE} --quiet --no-print-directory -C ${PJPROJECT_DIR} PJPROJECT_CONFIGURE_OPTS="$PJPROJECT_CONFIGURE_OPTS" EXTERNALS_CACHE_DIR="${EXTERNALS_CACHE_DIR:-${AST_DOWNLOAD_CACHE}}" echo_cflags) PJPROJECT_CFLAGS="$PJPROJECT_INCLUDE" PBX_PJPROJECT=1