Statistics
| Branch: | Tag: | Revision:

amiro-blt / ide / QtCreator / QtCreatorSetup.sh @ 316a2b34

History | View | Annotate | Download (31.723 KB)

1 4cce70a8 Thomas Schöpping
################################################################################
2 1da30dfc Thomas Schöpping
# AMiRo-BLT is an bootloader and toolchain designed for the Autonomous Mini    #
3
# Robot (AMiRo) platform.                                                      #
4 4cce70a8 Thomas Schöpping
# Copyright (C) 2016..2017  Thomas Schöpping et al.                            #
5
#                                                                              #
6
# This program is free software: you can redistribute it and/or modify         #
7
# it under the terms of the GNU General Public License as published by         #
8
# the Free Software Foundation, either version 3 of the License, or            #
9
# (at your option) any later version.                                          #
10
#                                                                              #
11
# This program is distributed in the hope that it will be useful,              #
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of               #
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
14
# GNU General Public License for more details.                                 #
15
#                                                                              #
16
# You should have received a copy of the GNU General Public License            #
17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.        #
18
#                                                                              #
19
# This research/work was supported by the Cluster of Excellence Cognitive      #
20
# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is   #
21
# funded by the German Research Foundation (DFG).                              #
22
################################################################################
23
24 69661903 Thomas Schöpping
#!/bin/bash
25
26 4cce70a8 Thomas Schöpping
################################################################################
27 1da30dfc Thomas Schöpping
# GENERIC FUNCTIONS                                                            #
28 4cce70a8 Thomas Schöpping
################################################################################
29 69661903 Thomas Schöpping
30 0a42f078 Thomas Schöpping
### print an error message #####################################################
31
# Prints a error <message> to standard output.
32
#If variable 'LOG_FILE' is specified, the message is also appended to the given file.
33
#
34
# usage:      printError <message>
35
# arguments:  <message>
36
#                 Message string to print.
37
# return:     n/a
38
#
39 1da30dfc Thomas Schöpping
function printError {
40
  local string="ERROR:   $1"
41
  # if a log file is specified
42 0a42f078 Thomas Schöpping
  if [ -n "$LOG_FILE" ]; then
43 1da30dfc Thomas Schöpping
    printf "[$(date '+%Y-%m-%d %H:%M:%S')] $string" >> $LOG_FILE
44 69661903 Thomas Schöpping
  fi
45 1da30dfc Thomas Schöpping
  printf "$(tput setaf 1)>>> $string$(tput sgr 0)" 1>&2
46
}
47 69661903 Thomas Schöpping
48 0a42f078 Thomas Schöpping
### print a warning message ####################################################
49
# Prints a warning <message> to standard output.
50
#If variable 'LOG_FILE' is specified, the message is also appended to the given file.
51
#
52
# usage:      printMessage <message>
53
# arguments:  <message>
54
#                 Message string to print.
55
# return:     n/a
56
#
57 1da30dfc Thomas Schöpping
function printWarning {
58
  local string="WARNING: $1"
59
  # if a log file is specified
60 0a42f078 Thomas Schöpping
  if [ -n "$LOG_FILE" ]; then
61 1da30dfc Thomas Schöpping
    printf "[$(date '+%Y-%m-%d %H:%M:%S')] $string" >> $LOG_FILE
62
  fi
63 0a42f078 Thomas Schöpping
  printf "$(tput setaf 3)>>> $string$(tput sgr 0)"
64 1da30dfc Thomas Schöpping
}
65
66 0a42f078 Thomas Schöpping
### print an information message ###############################################
67
# Prints an information <message> to standard output.
68
#If variable 'LOG_FILE' is specified, the message is also appended to the given file.
69
#
70
# usage:      printInfo <message>
71
# arguments:  <message>
72
#                 Message string to print.
73
# return:     n/a
74
#
75 1da30dfc Thomas Schöpping
function printInfo {
76
  local string="INFO:    $1"
77
  # if a log file is specified
78 0a42f078 Thomas Schöpping
  if [ -n "$LOG_FILE" ]; then
79 1da30dfc Thomas Schöpping
    printf "[$(date '+%Y-%m-%d %H:%M:%S')] $string" >> $LOG_FILE
80
  fi
81 0a42f078 Thomas Schöpping
  printf "$(tput setaf 2)>>> $string$(tput sgr 0)"
82 1da30dfc Thomas Schöpping
}
83
84 0a42f078 Thomas Schöpping
### print a message to file ####################################################
85
# Appends a <message> to a log file, specified by the variable 'LOG_FILE'.
86
#
87
# usage       printLog <message>
88
# arguments:  <message>
89
#                 Message string to print.
90
# return:     n/a
91
#
92 1da30dfc Thomas Schöpping
function printLog {
93
  local string="LOG:     $1"
94
  # if a log file is specified
95 0a42f078 Thomas Schöpping
  if [ -n "$LOG_FILE" ]; then
96 1da30dfc Thomas Schöpping
    printf "[$(date '+%Y-%m-%d %H:%M:%S')] $string" >> $LOG_FILE
97 69661903 Thomas Schöpping
  fi
98 1da30dfc Thomas Schöpping
}
99
100 0a42f078 Thomas Schöpping
### exit the script normally ###################################################
101
# Prints a delimiter and exits the script normally (returns 0).
102
#
103
# usage:      quitScript
104
# arguments:  n/a
105
# return:     0
106
#                 No error or warning occurred.
107
#
108 1da30dfc Thomas Schöpping
function quitScript {
109 3719a40a Thomas Schöpping
  printInfo "exiting $(realpath ${BASH_SOURCE[0]})\n"
110
  printf "\n"
111 1da30dfc Thomas Schöpping
  printf "######################################################################\n"
112
  exit 0
113 69661903 Thomas Schöpping
}
114
115 0a42f078 Thomas Schöpping
### read a user input ##########################################################
116
# Reads a single character user input from a set up <options> and stores it in
117
# a given <return> variable.
118
#
119
# usage:      readUserInput <options> <return>
120
# arguments:  <options>
121
#                 String definiing the set of valid characters.
122
#                 If the string is empty, the user can input any character.
123
#             <return>
124
#                 Variable to store the selected character to.
125
# return:     n/a
126
#
127 1da30dfc Thomas Schöpping
function readUserInput {
128 0a42f078 Thomas Schöpping
  local input=""
129 1da30dfc Thomas Schöpping
  # read user input
130 0a42f078 Thomas Schöpping
  while [ -z $input ] || ( [ -n "$1" ] && [[ ! $input =~ ^[$1]$ ]] ); do
131
    read -p "your selection: " -n 1 -e input
132
    if [ -z $input ] || ( [ -n "$1" ] && [[ ! $input =~ ^[$1]$ ]] ); then
133
      printWarning "[$input] is no valid action\n"
134 69661903 Thomas Schöpping
    fi
135
  done
136 0a42f078 Thomas Schöpping
  printLog "[$input] has been selected\n"
137
  eval $2="$input"
138 1da30dfc Thomas Schöpping
}
139 69661903 Thomas Schöpping
140 0a42f078 Thomas Schöpping
### check whether argument is an option ########################################
141
# Checks a <string> whether it is an option.
142
# Options are defined to either start with '--' followed by any string, or
143
# to start with a single '-' followed by a single character, or
144
# to start with a single '-' followed by a single character, a '=' and any string.
145
# Examples: '--option', '--option=arg', '-o', '-o=arg', '--'
146
#
147
# usage:      parseIsOption <string>
148
# arguments:  <string>
149
#                 A string to check whether it is an option.
150
# return:     0
151
#                 <string> is an option.
152
#             -1
153
#                 <string> is not an option.
154
#
155
function parseIsOption {
156
  if [[ "$1" =~ ^-(.$|.=.*) ]] || [[ "$1" =~ ^--.* ]]; then
157
    return 0
158
  else
159 1da30dfc Thomas Schöpping
    return -1
160 69661903 Thomas Schöpping
  fi
161 0a42f078 Thomas Schöpping
}
162 1da30dfc Thomas Schöpping
163 0a42f078 Thomas Schöpping
### set the log file ###########################################################
164
# Sets a specified <infile> as log file and checks whether it already exists.
165
# If so, the log may either be appended to the file, its content can be cleared,
166
# or no log is generated at all.
167
# The resulting path is stored in <outvar>.
168
#
169
# usage:      setLogFile [--option=<option>] [--quiet] <infile> <outvar>
170
# arguments:  --option=<option>
171
#                 Select what to do if <file> already exists.
172 0dc9f2f9 Thomas Schöpping
#                 Possible values are 'a', 'c', 'r' and 'n'.
173
#                 - a: append (starts with a separator)
174
#                 - c: continue (does not insert a seperator)
175 0a42f078 Thomas Schöpping
#                 - r: delete and restart
176
#                 - n: no log
177
#                 If no option is secified but <file> exists, an interactive selection is provided.
178
#             --quiet
179
#                 Suppress all messages.
180
#             <infile>
181
#                 Path of the wanted log file.
182
#             <outvar>
183
#                 Variable to store the path of the log file to.
184
# return:     0
185
#                 No error or warning occurred.
186
#             -1
187
#                 Error: invalid input
188
#
189
function setLogFile {
190
  local filepath=""
191 1da30dfc Thomas Schöpping
  local option=""
192 0a42f078 Thomas Schöpping
  local quiet=false
193
194
  # parse arguments
195
  local otherargs=()
196
  while [ $# -gt 0 ]; do
197
    if ( parseIsOption $1 ); then
198
      case "$1" in
199
        -o=*|--option=*)
200
          option=${1#*=}; shift 1;;
201
        -o*|--option*)
202
          option="$2"; shift 2;;
203
        -q|--quiet)
204
          quiet=true; shift 1;;
205
        *)
206
          printError "invalid option: $1\n"; shift 1;;
207
      esac
208
    else
209
      otherargs+=("$1")
210
      shift 1
211
    fi
212 1da30dfc Thomas Schöpping
  done
213 0a42f078 Thomas Schöpping
  filepath=$(realpath ${otherargs[0]})
214 69661903 Thomas Schöpping
215 1da30dfc Thomas Schöpping
  # if file already exists
216 0a42f078 Thomas Schöpping
  if [ -e $filepath ]; then
217 1da30dfc Thomas Schöpping
    # if no option was specified, ask what to do
218 0a42f078 Thomas Schöpping
    if [ -z "$option" ]; then
219
      printWarning "log file $filepath already esists\n"
220
      local userinput=""
221
      printf "Select what to do:\n"
222 1da30dfc Thomas Schöpping
      printf "  [A] - append log\n"
223
      printf "  [R] - restart log (delete existing file)\n"
224
      printf "  [N] - no log\n"
225 0a42f078 Thomas Schöpping
      readUserInput "AaRrNn" userinput
226 1da30dfc