File indexing completed on 2024-04-14 15:49:55

0001 #!/bin/sh
0002 # Copyright (C) 2013~2014 by Yichao Yu
0003 # yyc1992@gmail.com
0004 #
0005 # Redistribution and use in source and binary forms, with or without
0006 # modification, are permitted provided that the following conditions
0007 # are met:
0008 #
0009 # 1. Redistributions of source code must retain the above copyright
0010 #    notice, this list of conditions and the following disclaimer.
0011 # 2. Redistributions in binary form must reproduce the above copyright
0012 #    notice, this list of conditions and the following disclaimer in the
0013 #    documentation and/or other materials provided with the distribution.
0014 #
0015 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
0016 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
0017 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
0018 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
0019 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
0020 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0021 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0022 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0023 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
0024 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0025 
0026 helper_cache=${__CMAKE_HELPER_UTILS_CACHE}
0027 cache_base=${CMAKE_GENERAL_BASE}
0028 . "${cache_base}/cmake_helper_general_export.sh"
0029 action=$1
0030 shift
0031 
0032 __load_command_setting() {
0033     for __varname in "$@"; do
0034         eval "${__varname}="'${__command_'"${name}_${__varname}}"
0035     done
0036 }
0037 
0038 __load_all_command_settings() {
0039     . "${helper_cache}/command_${name}_setting.sh"
0040     __load_command_setting working_dir input_file output_file error_file \
0041         env_file
0042 }
0043 
0044 rewrite_cmd_settings() {
0045     name=$1
0046     shift
0047     __load_all_command_settings
0048     for var in env_file input_file output_file error_file working_dir; do
0049         quoted=${!var//\'/\'\\\'\'}
0050         printf "__command_${name}_${var}='%s'\n" "${quoted}"
0051     done > "${helper_cache}/command_${name}_setting.sh"
0052 }
0053 
0054 run_command() {
0055     name=$1
0056     shift
0057     __load_all_command_settings
0058     [ "x${env_file}x" != xx ] && {
0059         . "${env_file}" || return 1
0060     }
0061     [ "x${input_file}x" != xx ] && {
0062         exec < "${input_file}" || return 1
0063     }
0064     [ "x${output_file}x" != xx ] && {
0065         exec > "${output_file}" || return 1
0066     }
0067     [ "x${error_file}x" != xx ] && {
0068         exec 2> "${error_file}" || return 1
0069     }
0070     [ "x${working_dir}x" != xx ] && {
0071         cd "${working_dir}" || return 1
0072     }
0073     "__command_${name}_run" "$@"
0074 }
0075 
0076 clear_cache() {
0077     for path in "$@"; do
0078         [ -d "${path}" ] || continue
0079         "${CMAKE_HELPER_CMAKE_COMMAND}" -E remove_directory "${path}"
0080         "${CMAKE_HELPER_CMAKE_COMMAND}" -E make_directory "${path}"
0081     done > /dev/null 2>&1
0082 }
0083 
0084 case "$action" in
0085     --clear-cache)
0086         clear_cache "$@"
0087         exit $?
0088         ;;
0089     --run-command)
0090         run_command "$@"
0091         exit $?
0092         ;;
0093     --rewrite-cmd-settings)
0094         rewrite_cmd_settings "$@"
0095         exit $?
0096         ;;
0097 esac
0098 exit 1