| #!/bin/sh | 
 | ## | 
 | ##  configure | 
 | ## | 
 | ##  This script is the front-end to the build system. It provides a similar | 
 | ##  interface to standard configure scripts with some extra bits for dealing | 
 | ##  with toolchains that differ from the standard POSIX interface and | 
 | ##  for extracting subsets of the source tree. In theory, reusable parts | 
 | ##  of this script were intended to live in build/make/configure.sh, | 
 | ##  but in practice, the line is pretty blurry. | 
 | ## | 
 | ##  This build system is based in part on the FFmpeg configure script. | 
 | ## | 
 |  | 
 | #source_path="`dirname \"$0\"`" | 
 | source_path=${0%/*} | 
 | . "${source_path}/build/make/configure.sh" | 
 |  | 
 | show_help(){ | 
 |     show_help_pre | 
 |     cat << EOF | 
 | Advanced options: | 
 |   ${toggle_libs}                  libraries | 
 |   ${toggle_examples}              examples | 
 |   ${toggle_analyzer}              analyzer | 
 |   ${toggle_docs}                  documentation | 
 |   ${toggle_unit_tests}            unit tests | 
 |   ${toggle_decode_perf_tests}     build decoder perf tests with unit tests | 
 |   ${toggle_encode_perf_tests}     build encoder perf tests with unit tests | 
 |   --cpu=CPU                       tune for the specified CPU (ARM: cortex-a8, X86: sse3) | 
 |   --libc=PATH                     path to alternate libc | 
 |   --size-limit=WxH                max size to allow in the decoder | 
 |   --as={yasm|nasm|auto}           use specified assembler [auto, yasm preferred] | 
 |   --sdk-path=PATH                 path to root of sdk (android builds only) | 
 |   ${toggle_codec_srcs}            in/exclude codec library source code | 
 |   ${toggle_debug_libs}            in/exclude debug version of libraries | 
 |   ${toggle_static_msvcrt}         use static MSVCRT (VS builds only) | 
 |   ${toggle_highbitdepth}          enable 16-bit generic pixel pipeline (used by high bitdepth profiles) | 
 |   ${toggle_lowbitdepth}           enable 8-bit optimized pixel pipeline | 
 |   ${toggle_av1}                  AV1 codec support | 
 |   ${toggle_internal_stats}        output of encoder internal stats for debug, if supported (encoders) | 
 |   ${toggle_postproc}              postprocessing | 
 |   ${toggle_multithread}           multithreaded encoding and decoding | 
 |   ${toggle_spatial_resampling}    spatial sampling (scaling) support | 
 |   ${toggle_realtime_only}         enable this option while building for real-time encoding | 
 |   ${toggle_onthefly_bitpacking}   enable on-the-fly bitpacking in real-time encoding | 
 |   ${toggle_error_concealment}     enable this option to get a decoder which is able to conceal losses | 
 |   ${toggle_coefficient_range_checking} | 
 |                                   enable decoder to check if intermediate | 
 |                                   transform coefficients are in valid range | 
 |   ${toggle_runtime_cpu_detect}    runtime cpu detection | 
 |   ${toggle_shared}                shared library support | 
 |   ${toggle_static}                static library support | 
 |   ${toggle_small}                 favor smaller size over speed | 
 |   ${toggle_postproc_visualizer}   macro block / block level visualizers | 
 |   ${toggle_webm_io}               enable input from and output to WebM container | 
 |   ${toggle_libyuv}                enable libyuv | 
 |   ${toggle_accounting}            enable bit accounting | 
 |   ${toggle_inspection}            enable bitstream inspection | 
 |  | 
 | Codecs: | 
 |   Codecs can be selectively enabled or disabled individually, or by family: | 
 |       --disable-<codec> | 
 |   is equivalent to: | 
 |       --disable-<codec>-encoder | 
 |       --disable-<codec>-decoder | 
 |  | 
 |   Codecs available in this distribution: | 
 | EOF | 
 | #restore editor state ' | 
 |  | 
 |     family=""; | 
 |     last_family=""; | 
 |     c=""; | 
 |     str=""; | 
 |     for c in ${CODECS}; do | 
 |         family=${c%_*} | 
 |         if [ "${family}" != "${last_family}" ]; then | 
 |             [ -z "${str}" ] || echo "${str}" | 
 |             str="$(printf '    %10s:' ${family})" | 
 |         fi | 
 |         str="${str} $(printf '%10s' ${c#*_})" | 
 |         last_family=${family} | 
 |     done | 
 |     echo "${str}" | 
 |     show_help_post | 
 | } | 
 |  | 
 | ## | 
 | ## BEGIN APPLICATION SPECIFIC CONFIGURATION | 
 | ## | 
 |  | 
 | # all_platforms is a list of all supported target platforms. Maintain | 
 | # alphabetically by architecture, generic-gnu last. | 
 | all_platforms="${all_platforms} arm64-darwin-gcc" | 
 | all_platforms="${all_platforms} arm64-linux-gcc" | 
 | all_platforms="${all_platforms} armv7-android-gcc"   #neon Cortex-A8 | 
 | all_platforms="${all_platforms} armv7-darwin-gcc"    #neon Cortex-A8 | 
 | all_platforms="${all_platforms} armv7-linux-rvct"    #neon Cortex-A8 | 
 | all_platforms="${all_platforms} armv7-linux-gcc"     #neon Cortex-A8 | 
 | all_platforms="${all_platforms} armv7-none-rvct"     #neon Cortex-A8 | 
 | all_platforms="${all_platforms} armv7-win32-vs12" | 
 | all_platforms="${all_platforms} armv7-win32-vs14" | 
 | all_platforms="${all_platforms} armv7s-darwin-gcc" | 
 | all_platforms="${all_platforms} armv8-linux-gcc" | 
 | all_platforms="${all_platforms} mips32-linux-gcc" | 
 | all_platforms="${all_platforms} mips64-linux-gcc" | 
 | all_platforms="${all_platforms} sparc-solaris-gcc" | 
 | all_platforms="${all_platforms} x86-android-gcc" | 
 | all_platforms="${all_platforms} x86-darwin8-gcc" | 
 | all_platforms="${all_platforms} x86-darwin8-icc" | 
 | all_platforms="${all_platforms} x86-darwin9-gcc" | 
 | all_platforms="${all_platforms} x86-darwin9-icc" | 
 | all_platforms="${all_platforms} x86-darwin10-gcc" | 
 | all_platforms="${all_platforms} x86-darwin11-gcc" | 
 | all_platforms="${all_platforms} x86-darwin12-gcc" | 
 | all_platforms="${all_platforms} x86-darwin13-gcc" | 
 | all_platforms="${all_platforms} x86-darwin14-gcc" | 
 | all_platforms="${all_platforms} x86-darwin15-gcc" | 
 | all_platforms="${all_platforms} x86-darwin16-gcc" | 
 | all_platforms="${all_platforms} x86-iphonesimulator-gcc" | 
 | all_platforms="${all_platforms} x86-linux-gcc" | 
 | all_platforms="${all_platforms} x86-linux-icc" | 
 | all_platforms="${all_platforms} x86-os2-gcc" | 
 | all_platforms="${all_platforms} x86-solaris-gcc" | 
 | all_platforms="${all_platforms} x86-win32-gcc" | 
 | all_platforms="${all_platforms} x86-win32-vs12" | 
 | all_platforms="${all_platforms} x86-win32-vs14" | 
 | all_platforms="${all_platforms} x86_64-android-gcc" | 
 | all_platforms="${all_platforms} x86_64-darwin9-gcc" | 
 | all_platforms="${all_platforms} x86_64-darwin10-gcc" | 
 | all_platforms="${all_platforms} x86_64-darwin11-gcc" | 
 | all_platforms="${all_platforms} x86_64-darwin12-gcc" | 
 | all_platforms="${all_platforms} x86_64-darwin13-gcc" | 
 | all_platforms="${all_platforms} x86_64-darwin14-gcc" | 
 | all_platforms="${all_platforms} x86_64-darwin15-gcc" | 
 | all_platforms="${all_platforms} x86_64-darwin16-gcc" | 
 | all_platforms="${all_platforms} x86_64-iphonesimulator-gcc" | 
 | all_platforms="${all_platforms} x86_64-linux-gcc" | 
 | all_platforms="${all_platforms} x86_64-linux-icc" | 
 | all_platforms="${all_platforms} x86_64-solaris-gcc" | 
 | all_platforms="${all_platforms} x86_64-win64-gcc" | 
 | all_platforms="${all_platforms} x86_64-win64-vs12" | 
 | all_platforms="${all_platforms} x86_64-win64-vs14" | 
 | all_platforms="${all_platforms} generic-gnu" | 
 |  | 
 | # all_targets is a list of all targets that can be configured | 
 | # note that these should be in dependency order for now. | 
 | all_targets="libs examples docs" | 
 |  | 
 | # all targets available are enabled, by default. | 
 | for t in ${all_targets}; do | 
 |     [ -f "${source_path}/${t}.mk" ] && enable_feature ${t} | 
 | done | 
 |  | 
 | if ! perl --version >/dev/null; then | 
 |     die "Perl is required to build" | 
 | fi | 
 |  | 
 |  | 
 | if [ "`cd \"${source_path}\" && pwd`" != "`pwd`" ]; then | 
 |   # test to see if source_path already configured | 
 |   if [ -f "${source_path}/aom_config.h" ]; then | 
 |     die "source directory already configured; run 'make distclean' there first" | 
 |   fi | 
 | fi | 
 |  | 
 | # check installed doxygen version | 
 | doxy_version=$(doxygen --version 2>/dev/null) | 
 | doxy_major=${doxy_version%%.*} | 
 | if [ ${doxy_major:-0} -ge 1 ]; then | 
 |     doxy_version=${doxy_version#*.} | 
 |     doxy_minor=${doxy_version%%.*} | 
 |     doxy_patch=${doxy_version##*.} | 
 |  | 
 |     [ $doxy_major -gt 1 ] && enable_feature doxygen | 
 |     [ $doxy_minor -gt 5 ] && enable_feature doxygen | 
 |     [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable_feature doxygen | 
 | fi | 
 |  | 
 | # disable codecs when their source directory does not exist | 
 | [ -d "${source_path}/av1" ] || disable_codec av1 | 
 |  | 
 | # install everything except the sources, by default. sources will have | 
 | # to be enabled when doing dist builds, since that's no longer a common | 
 | # case. | 
 | enabled doxygen && enable_feature install_docs | 
 | enable_feature install_bins | 
 | enable_feature install_libs | 
 |  | 
 | enable_feature static | 
 | enable_feature optimizations | 
 | enable_feature dependency_tracking | 
 | enable_feature spatial_resampling | 
 | enable_feature multithread | 
 | enable_feature os_support | 
 | enable_feature highbitdepth | 
 |  | 
 | CODECS=" | 
 |     av1_encoder | 
 |     av1_decoder | 
 | " | 
 | CODEC_FAMILIES=" | 
 |     av1 | 
 | " | 
 |  | 
 | ARCH_LIST=" | 
 |     arm | 
 |     mips | 
 |     x86 | 
 |     x86_64 | 
 | " | 
 | ARCH_EXT_LIST_X86=" | 
 |     mmx | 
 |     sse | 
 |     sse2 | 
 |     sse3 | 
 |     ssse3 | 
 |     sse4_1 | 
 |     avx | 
 |     avx2 | 
 | " | 
 | ARCH_EXT_LIST=" | 
 |     neon | 
 |     neon_asm | 
 |  | 
 |     mips32 | 
 |     dspr2 | 
 |     msa | 
 |     mips64 | 
 |  | 
 |     ${ARCH_EXT_LIST_X86} | 
 | " | 
 | HAVE_LIST=" | 
 |     ${ARCH_EXT_LIST} | 
 |     aom_ports | 
 |     fexcept | 
 |     pthread_h | 
 |     unistd_h | 
 |     wxwidgets | 
 | " | 
 | EXPERIMENT_LIST=" | 
 |     fp_mb_stats | 
 |     cdef | 
 |     var_tx | 
 |     rect_tx | 
 |     rect_tx_ext | 
 |     tpl_mv | 
 |     dual_filter | 
 |     convolve_round | 
 |     compound_round | 
 |     ext_tx | 
 |     tx64x64 | 
 |     sub8x8_mc | 
 |     ext_intra | 
 |     intra_interp | 
 |     filter_intra | 
 |     intra_edge | 
 |     intrabc | 
 |     ext_inter | 
 |     interintra | 
 |     wedge | 
 |     compound_segment | 
 |     ext_refs | 
 |     global_motion | 
 |     new_quant | 
 |     supertx | 
 |     ans | 
 |     ec_multisymbol | 
 |     loop_restoration | 
 |     ext_partition | 
 |     ext_partition_types | 
 |     unpoison_partition_ctx | 
 |     ext_tile | 
 |     motion_var | 
 |     ncobmc | 
 |     warped_motion | 
 |     q_adapt_probs | 
 |     bitstream_debug | 
 |     alt_intra | 
 |     palette | 
 |     palette_delta_encoding | 
 |     daala_ec | 
 |     rawbits | 
 |     ec_smallmul | 
 |     pvq | 
 |     cfl | 
 |     xiphrc | 
 |     cb4x4 | 
 |     chroma_2x2 | 
 |     chroma_sub8x8 | 
 |     frame_size | 
 |     delta_q | 
 |     ext_delta_q | 
 |     adapt_scan | 
 |     filter_7bit | 
 |     parallel_deblocking | 
 |     parallel_deblocking_15tap | 
 |     loopfiltering_across_tiles | 
 |     tile_groups | 
 |     ec_adapt | 
 |     tempmv_signaling | 
 |     rd_debug | 
 |     reference_buffer | 
 |     coef_interleave | 
 |     entropy_stats | 
 |     masked_tx | 
 |     dependent_horztiles | 
 |     daala_dist | 
 |     tripred | 
 |     palette_throughput | 
 |     ref_adapt | 
 |     lv_map | 
 |     txk_sel | 
 |     mv_compress | 
 |     frame_superres | 
 |     new_multisymbol | 
 |     compound_singleref | 
 |     aom_qm | 
 |     lowdelay_compound | 
 |     smooth_hv | 
 | " | 
 | CONFIG_LIST=" | 
 |     dependency_tracking | 
 |     external_build | 
 |     install_docs | 
 |     install_bins | 
 |     install_libs | 
 |     install_srcs | 
 |     debug | 
 |     gprof | 
 |     gcov | 
 |     rvct | 
 |     gcc | 
 |     msvs | 
 |     pic | 
 |     big_endian | 
 |  | 
 |     codec_srcs | 
 |     debug_libs | 
 |  | 
 |     runtime_cpu_detect | 
 |     postproc | 
 |     multithread | 
 |     internal_stats | 
 |     ${CODECS} | 
 |     ${CODEC_FAMILIES} | 
 |     encoders | 
 |     decoders | 
 |     static_msvcrt | 
 |     spatial_resampling | 
 |     realtime_only | 
 |     onthefly_bitpacking | 
 |     error_concealment | 
 |     shared | 
 |     static | 
 |     small | 
 |     postproc_visualizer | 
 |     os_support | 
 |     unit_tests | 
 |     webm_io | 
 |     libyuv | 
 |     accounting | 
 |     inspection | 
 |     decode_perf_tests | 
 |     encode_perf_tests | 
 |     coefficient_range_checking | 
 |     lowbitdepth | 
 |     highbitdepth | 
 |     experimental | 
 |     size_limit | 
 |     ${EXPERIMENT_LIST} | 
 |     analyzer | 
 | " | 
 | CMDLINE_SELECT=" | 
 |     dependency_tracking | 
 |     external_build | 
 |     extra_warnings | 
 |     werror | 
 |     install_docs | 
 |     install_bins | 
 |     install_libs | 
 |     install_srcs | 
 |     debug | 
 |     gprof | 
 |     gcov | 
 |     pic | 
 |     optimizations | 
 |     ccache | 
 |     runtime_cpu_detect | 
 |     thumb | 
 |  | 
 |     libs | 
 |     examples | 
 |     analyzer | 
 |     docs | 
 |     libc | 
 |     as | 
 |     size_limit | 
 |     codec_srcs | 
 |     debug_libs | 
 |  | 
 |     postproc | 
 |     multithread | 
 |     internal_stats | 
 |     ${CODECS} | 
 |     ${CODEC_FAMILIES} | 
 |     static_msvcrt | 
 |     spatial_resampling | 
 |     realtime_only | 
 |     onthefly_bitpacking | 
 |     error_concealment | 
 |     shared | 
 |     static | 
 |     small | 
 |     postproc_visualizer | 
 |     unit_tests | 
 |     webm_io | 
 |     libyuv | 
 |     accounting | 
 |     inspection | 
 |     decode_perf_tests | 
 |     encode_perf_tests | 
 |     coefficient_range_checking | 
 |     lowbitdepth | 
 |     aom_highbitdepth | 
 |     highbitdepth | 
 |     experimental | 
 | " | 
 |  | 
 | process_cmdline() { | 
 |     for opt do | 
 |         optval="${opt#*=}" | 
 |         case "$opt" in | 
 |         --disable-codecs) | 
 |           for c in ${CODEC_FAMILIES}; do disable_codec $c; done | 
 |           ;; | 
 |         --enable-?*|--disable-?*) | 
 |         eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` | 
 |         if is_in ${option} ${EXPERIMENT_LIST}; then | 
 |             if enabled experimental; then | 
 |                 ${action}_feature $option | 
 |             else | 
 |                 log_echo "Ignoring $opt -- not in experimental mode." | 
 |             fi | 
 |         elif is_in ${option} "${CODECS} ${CODEC_FAMILIES}"; then | 
 |             ${action}_codec ${option} | 
 |         else | 
 |             process_common_cmdline $opt | 
 |         fi | 
 |         ;; | 
 |         *) process_common_cmdline "$opt" | 
 |         ;; | 
 |         esac | 
 |     done | 
 | } | 
 |  | 
 | post_process_cmdline() { | 
 |     c="" | 
 |  | 
 |     # Enable all detected codecs, if they haven't been disabled | 
 |     for c in ${CODECS}; do soft_enable $c; done | 
 |  | 
 |     # Enable the codec family if any component of that family is enabled | 
 |     for c in ${CODECS}; do | 
 |         enabled $c && enable_feature ${c%_*} | 
 |     done | 
 |  | 
 |     # Set the {en,de}coders variable if any algorithm in that class is enabled | 
 |     for c in ${CODECS}; do | 
 |         enabled ${c} && enable_feature ${c##*_}s | 
 |     done | 
 |  | 
 |     # Enable adopted experiments by default | 
 |     soft_enable cb4x4 | 
 |     soft_enable filter_7bit | 
 |     soft_enable reference_buffer | 
 |     soft_enable delta_q | 
 |     soft_enable tile_groups | 
 |     soft_enable rect_tx | 
 |     soft_enable global_motion | 
 |     soft_enable ext_tx | 
 |     soft_enable cdef | 
 |     soft_enable ec_adapt | 
 |     soft_enable ext_intra | 
 |     soft_enable mv_compress | 
 |     soft_enable ext_refs | 
 |     soft_enable dual_filter | 
 |     soft_enable motion_var | 
 |     soft_enable warped_motion | 
 |     soft_enable ext_delta_q | 
 |     soft_enable loopfiltering_across_tiles | 
 |     soft_enable ec_smallmul | 
 |  | 
 |     # Backwards/jenkins compatibility with --enable-aom-highbitdepth | 
 |     enabled aom_highbitdepth && enable_feature highbitdepth | 
 |  | 
 |     # Enable low-bitdepth pixel pipeline by default | 
 |     soft_enable lowbitdepth | 
 |  | 
 |     ! enabled ans && soft_enable daala_ec | 
 |     soft_enable ec_multisymbol | 
 |     soft_enable palette | 
 |     soft_enable alt_intra | 
 |     soft_enable palette_throughput | 
 |  | 
 |     # Workaround features currently incompatible with highbitdepth | 
 |     enabled tx64x64 && disable_feature highbitdepth | 
 |     enabled ext_partition && disable_feature highbitdepth | 
 |  | 
 |     # Fix up experiment dependencies | 
 |     enabled pvq && enable_feature ec_adapt | 
 |     enabled cfl && enable_feature ec_multisymbol | 
 |     enabled ec_adapt && enable_feature ec_multisymbol | 
 |     enabled new_multisymbol && enable_feature ec_multisymbol | 
 |     enabled ec_multisymbol && ! enabled ans && soft_enable daala_ec | 
 |     enabled ec_multisymbol && ! enabled daala_ec && soft_enable ans | 
 |     enabled palette_throughput && soft_enable palette | 
 |     enabled ext_delta_q && soft_enable delta_q | 
 |     enabled txk_sel && soft_enable lv_map | 
 |     enabled compound_round && soft_enable convolve_round | 
 |     enabled smooth_hv && soft_enable alt_intra | 
 |     enabled intra_edge && enable_feature ext_intra | 
 |  | 
 |     if ! enabled delta_q && enabled ext_delta_q; then | 
 |       log_echo "ext_delta_q requires delta_q, so disabling ext_delta_q" | 
 |       disable_feature ext_delta_q | 
 |     fi | 
 |     if enabled rawbits && ! enabled daala_ec; then | 
 |       log_echo "rawbits requires daala_ec, so disabling rawbits" | 
 |       disable_feature rawbits | 
 |     fi | 
 |     if enabled ec_smallmul && ! enabled daala_ec; then | 
 |       log_echo "ec_smallmul requires daala_ec, so disabling ec_smallmul" | 
 |       disable_feature ec_smallmul | 
 |     fi | 
 |     if enabled ext_tile; then | 
 |       log_echo "ext_tile not compatible with reference_buffer, so" | 
 |       log_echo "disabling reference_buffer" | 
 |       disable_feature reference_buffer | 
 |     fi | 
 |     if enabled ext_tile; then | 
 |       log_echo "ext_tile not compatible with tile_groups, so" | 
 |       log_echo "disabling tile_groups" | 
 |       disable_feature tile_groups | 
 |     fi | 
 |     # Enable accounting and inspection when building the analyzer | 
 |     if enabled analyzer; then | 
 |       soft_enable accounting | 
 |       soft_enable inspection | 
 |     fi | 
 | } | 
 |  | 
 | process_targets() { | 
 |     enabled child || write_common_config_banner | 
 |     write_common_target_config_h ${BUILD_PFX}aom_config.h | 
 |     write_common_config_targets | 
 |  | 
 |     # Calculate the default distribution name, based on the enabled features | 
 |     cf="" | 
 |     DIST_DIR=aom | 
 |     for cf in $CODEC_FAMILIES; do | 
 |         if enabled ${cf}_encoder && enabled ${cf}_decoder; then | 
 |             DIST_DIR="${DIST_DIR}-${cf}" | 
 |         elif enabled ${cf}_encoder; then | 
 |             DIST_DIR="${DIST_DIR}-${cf}cx" | 
 |         elif enabled ${cf}_decoder; then | 
 |             DIST_DIR="${DIST_DIR}-${cf}dx" | 
 |         fi | 
 |     done | 
 |     enabled debug_libs && DIST_DIR="${DIST_DIR}-debug" | 
 |     enabled codec_srcs && DIST_DIR="${DIST_DIR}-src" | 
 |     ! enabled postproc && DIST_DIR="${DIST_DIR}-nopost" | 
 |     ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt" | 
 |     ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs" | 
 |     DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}" | 
 |     case "${tgt_os}" in | 
 |     win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md" | 
 |           DIST_DIR="${DIST_DIR}-${tgt_cc}" | 
 |           ;; | 
 |     esac | 
 |     if [ -f "${source_path}/build/make/version.sh" ]; then | 
 |         ver=`"$source_path/build/make/version.sh" --bare "$source_path"` | 
 |         DIST_DIR="${DIST_DIR}-${ver}" | 
 |         VERSION_STRING=${ver} | 
 |         ver=${ver%%-*} | 
 |         VERSION_PATCH=${ver##*.} | 
 |         ver=${ver%.*} | 
 |         VERSION_MINOR=${ver##*.} | 
 |         ver=${ver#v} | 
 |         VERSION_MAJOR=${ver%.*} | 
 |     fi | 
 |     enabled child || cat <<EOF >> config.mk | 
 |  | 
 | PREFIX=${prefix} | 
 | ifeq (\$(MAKECMDGOALS),dist) | 
 | DIST_DIR?=${DIST_DIR} | 
 | else | 
 | DIST_DIR?=\$(DESTDIR)${prefix} | 
 | endif | 
 | LIBSUBDIR=${libdir##${prefix}/} | 
 |  | 
 | VERSION_STRING=${VERSION_STRING} | 
 |  | 
 | VERSION_MAJOR=${VERSION_MAJOR} | 
 | VERSION_MINOR=${VERSION_MINOR} | 
 | VERSION_PATCH=${VERSION_PATCH} | 
 |  | 
 | CONFIGURE_ARGS=${CONFIGURE_ARGS} | 
 | EOF | 
 |     enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk | 
 |  | 
 |     # | 
 |     # Write makefiles for all enabled targets | 
 |     # | 
 |     for tgt in libs examples docs solution; do | 
 |         tgt_fn="$tgt-$toolchain.mk" | 
 |  | 
 |         if enabled $tgt; then | 
 |             echo "Creating makefiles for ${toolchain} ${tgt}" | 
 |             write_common_target_config_mk $tgt_fn ${BUILD_PFX}aom_config.h | 
 |             #write_${tgt}_config | 
 |         fi | 
 |     done | 
 |  | 
 | } | 
 |  | 
 | process_detect() { | 
 |     if enabled shared; then | 
 |         # Can only build shared libs on a subset of platforms. Doing this check | 
 |         # here rather than at option parse time because the target auto-detect | 
 |         # magic happens after the command line has been parsed. | 
 |         case "${tgt_os}" in | 
 |         linux|os2|darwin*|iphonesimulator*) | 
 |             # Supported platforms | 
 |             ;; | 
 |         *) | 
 |             if enabled gnu; then | 
 |                 echo "--enable-shared is only supported on ELF; assuming this is OK" | 
 |             else | 
 |                 die "--enable-shared only supported on ELF, OS/2, and Darwin for now" | 
 |             fi | 
 |             ;; | 
 |         esac | 
 |     fi | 
 |     if [ -z "$CC" ] || enabled external_build; then | 
 |         echo "Bypassing toolchain for environment detection." | 
 |         enable_feature external_build | 
 |         check_header() { | 
 |             log fake_check_header "$@" | 
 |             header=$1 | 
 |             shift | 
 |             var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'` | 
 |             disable_feature $var | 
 |             # Headers common to all environments | 
 |             case $header in | 
 |                 stdio.h) | 
 |                     true; | 
 |                 ;; | 
 |                 *) | 
 |                     result=false | 
 |                     for d in "$@"; do | 
 |                         [ -f "${d##-I}/$header" ] && result=true && break | 
 |                     done | 
 |                     ${result:-true} | 
 |             esac && enable_feature $var | 
 |  | 
 |             # Specialize windows and POSIX environments. | 
 |             case $toolchain in | 
 |                 *-win*-*) | 
 |                     # Don't check for any headers in Windows builds. | 
 |                     false | 
 |                 ;; | 
 |                 *) | 
 |                     case $header in | 
 |                         pthread.h) true;; | 
 |                         unistd.h) true;; | 
 |                         *) false;; | 
 |                     esac && enable_feature $var | 
 |             esac | 
 |             enabled $var | 
 |         } | 
 |         check_ld() { | 
 |             true | 
 |         } | 
 |     fi | 
 |     check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}" | 
 |     check_ld <<EOF || die "Toolchain is unable to link executables" | 
 | int main(void) {return 0;} | 
 | EOF | 
 |     # check system headers | 
 |     check_header pthread.h | 
 |     check_header unistd.h # for sysconf(3) and friends. | 
 |  | 
 |     check_header aom/aom_integer.h -I${source_path} && enable_feature aom_ports | 
 |  | 
 |     check_ld <<EOF && enable_feature fexcept | 
 | #define _GNU_SOURCE | 
 | #include <fenv.h> | 
 | int main(void) { (void)feenableexcept(FE_DIVBYZERO | FE_INVALID); return 0; } | 
 | EOF | 
 | } | 
 |  | 
 | process_toolchain() { | 
 |     process_common_toolchain | 
 |  | 
 |     # Enable some useful compiler flags | 
 |     if enabled gcc; then | 
 |         enabled werror && check_add_cflags -Werror | 
 |         check_add_cflags -Wall | 
 |         check_add_cflags -Wdisabled-optimization | 
 |         check_add_cflags -Wfloat-conversion | 
 |         check_add_cflags -Wpointer-arith | 
 |         check_add_cflags -Wtype-limits | 
 |         check_add_cflags -Wvla | 
 |         check_add_cflags -Wimplicit-function-declaration | 
 |         check_add_cflags -Wuninitialized | 
 |         check_add_cflags -Wunused | 
 |         check_add_cflags -Wsign-compare | 
 |         check_add_cflags -Wlogical-op | 
 |         check_add_cflags -Wstack-usage=320000 | 
 |         # Enabling the following warning (in combination with -Wunused above) | 
 |         # for C++ generates errors in third_party code including googletest and | 
 |         # libyuv. So enable it only for C code. | 
 |         check_cflags "-Wextra" && add_cflags_only "-Wextra" | 
 |         # Enabling the following warning for C++ generates some useless warnings | 
 |         # about some function parameters shadowing class member function names. | 
 |         # So, only enable this warning for C code. | 
 |         check_cflags "-Wshadow" && add_cflags_only "-Wshadow" | 
 |         if enabled mips || [ -z "${INLINE}" ]; then | 
 |           enabled extra_warnings || check_add_cflags -Wno-unused-function | 
 |         fi | 
 |         # gtest makes heavy use of undefined pre-processor symbols | 
 |         check_cflags "-Wundef" && add_cflags_only "-Wundef" | 
 |         # Avoid this warning for third_party C++ sources. Some reorganization | 
 |         # would be needed to apply this only to test/*.cc. | 
 |         check_cflags -Wshorten-64-to-32 && add_cflags_only -Wshorten-64-to-32 | 
 |     fi | 
 |  | 
 |     if enabled icc; then | 
 |         enabled werror && check_add_cflags -Werror | 
 |         check_add_cflags -Wall | 
 |         check_add_cflags -Wpointer-arith | 
 |  | 
 |         # ICC has a number of floating point optimizations that we disable | 
 |         # in favor of deterministic output WRT to other compilers | 
 |         add_cflags -fp-model precise | 
 |     fi | 
 |  | 
 |     if enabled analyzer; then | 
 |       soft_enable wxwidgets | 
 |       if ! wx-config --version > /dev/null; then | 
 |         die "Couldn't find wx-config" | 
 |       fi | 
 |  | 
 |       add_cxxflags_only $(wx-config --cppflags) | 
 |       add_extralibs $(wx-config --libs) | 
 |     fi | 
 |  | 
 |     # Enable extra, harmless warnings. These might provide additional insight | 
 |     # to what the compiler is doing and why, but in general, but they shouldn't | 
 |     # be treated as fatal, even if we're treating warnings as errors. | 
 |     GCC_EXTRA_WARNINGS=" | 
 |         -Wdisabled-optimization | 
 |         -Winline | 
 |     " | 
 |     enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}" | 
 |     RVCT_EXTRA_WARNINGS=" | 
 |         --remarks | 
 |     " | 
 |     enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}" | 
 |     if enabled extra_warnings; then | 
 |         for w in ${EXTRA_WARNINGS}; do | 
 |             check_add_cflags ${w} | 
 |             enabled gcc && enabled werror && check_add_cflags -Wno-error=${w} | 
 |         done | 
 |     fi | 
 |  | 
 |     # ccache only really works on gcc toolchains | 
 |     enabled gcc || soft_disable ccache | 
 |  | 
 |     # Enable the postbuild target if building for visual studio. | 
 |     case "$tgt_cc" in | 
 |         vs*) enable_feature msvs | 
 |              enable_feature solution | 
 |              vs_version=${tgt_cc##vs} | 
 |              VCPROJ_SFX=vcxproj | 
 |              gen_vcproj_cmd=${source_path}/build/make/gen_msvs_vcxproj.sh | 
 |              enabled werror && gen_vcproj_cmd="${gen_vcproj_cmd} --enable-werror" | 
 |              all_targets="${all_targets} solution" | 
 |              INLINE="__forceinline" | 
 |         ;; | 
 |     esac | 
 |  | 
 |     # Other toolchain specific defaults | 
 |     case $toolchain in x86*) soft_enable postproc;; esac | 
 |  | 
 |     if enabled postproc_visualizer; then | 
 |         enabled postproc || die "postproc_visualizer requires postproc to be enabled" | 
 |     fi | 
 |  | 
 |     # Enable unit tests by default if we have a working C++ compiler. | 
 |     case "$toolchain" in | 
 |         *-vs*) | 
 |             soft_enable unit_tests | 
 |             soft_enable webm_io | 
 |             soft_enable libyuv | 
 |         ;; | 
 |         *-android-*) | 
 |             soft_enable webm_io | 
 |             soft_enable libyuv | 
 |             # GTestLog must be modified to use Android logging utilities. | 
 |         ;; | 
 |         *-darwin-*) | 
 |             # iOS/ARM builds do not work with gtest. This does not match | 
 |             # x86 targets. | 
 |         ;; | 
 |         *-iphonesimulator-*) | 
 |             soft_enable webm_io | 
 |             soft_enable libyuv | 
 |         ;; | 
 |         *-win*) | 
 |             # Some mingw toolchains don't have pthread available by default. | 
 |             # Treat these more like visual studio where threading in gtest | 
 |             # would be disabled for the same reason. | 
 |             check_cxx "$@" <<EOF && soft_enable unit_tests | 
 | int z; | 
 | EOF | 
 |             check_cxx "$@" <<EOF && soft_enable webm_io | 
 | int z; | 
 | EOF | 
 |             check_cxx "$@" <<EOF && soft_enable libyuv | 
 | int z; | 
 | EOF | 
 |         ;; | 
 |         *) | 
 |             enabled pthread_h && check_cxx "$@" <<EOF && soft_enable unit_tests | 
 | int z; | 
 | EOF | 
 |             check_cxx "$@" <<EOF && soft_enable webm_io | 
 | int z; | 
 | EOF | 
 |             check_cxx "$@" <<EOF && soft_enable libyuv | 
 | int z; | 
 | EOF | 
 |         ;; | 
 |     esac | 
 |     # libwebm needs to be linked with C++ standard library | 
 |     enabled webm_io && LD=${CXX} | 
 |  | 
 |     # append any user defined extra cflags | 
 |     if [ -n "${extra_cflags}" ] ; then | 
 |         check_add_cflags ${extra_cflags} || \ | 
 |         die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler" | 
 |     fi | 
 |     if [ -n "${extra_cxxflags}" ]; then | 
 |         check_add_cxxflags ${extra_cxxflags} || \ | 
 |         die "Requested extra CXXFLAGS '${extra_cxxflags}' not supported by compiler" | 
 |     fi | 
 | } | 
 |  | 
 |  | 
 | ## | 
 | ## END APPLICATION SPECIFIC CONFIGURATION | 
 | ## | 
 | CONFIGURE_ARGS="$@" | 
 | process "$@" | 
 | print_webm_license ${BUILD_PFX}aom_config.c "/*" " */" | 
 | cat <<EOF >> ${BUILD_PFX}aom_config.c | 
 | #include "aom/aom_codec.h" | 
 | static const char* const cfg = "$CONFIGURE_ARGS"; | 
 | const char *aom_codec_build_config(void) {return cfg;} | 
 | EOF |