Forward compatibility: flex
[foam-extend-3.2.git] / bin / foamCleanPath
blob883b661ae15bd018c894941f56de4aa35bc5c336
1 #!/bin/sh
2 #------------------------------------------------------------------------------
3 # ========= |
4 # \\ / F ield | foam-extend: Open Source CFD
5 # \\ / O peration |
6 # \\ / A nd | For copyright notice see file Copyright
7 # \\/ M anipulation |
8 #------------------------------------------------------------------------------
9 # License
10 # This file is part of foam-extend.
12 # foam-extend is free software: you can redistribute it and/or modify it
13 # under the terms of the GNU General Public License as published by the
14 # Free Software Foundation, either version 3 of the License, or (at your
15 # option) any later version.
17 # foam-extend is distributed in the hope that it will be useful, but
18 # WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 # General Public License for more details.
22 # You should have received a copy of the GNU General Public License
23 # along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
25 # Script
26 # foamCleanPath
28 # Description
29 # Usage: foamCleanPath [-strip] path [wildcard] .. [wildcard]
31 # Prints its argument (which should be a ':' separated path)
32 # without all
33 # - duplicate elements
34 # - (if '-strip') non-accessible directories
35 # - elements whose start matches a wildcard
37 # Note:
38 # - this routine will fail when directories have embedded spaces
39 # - false matches possible if a wildcard contains '.' (sed regex)
40 #------------------------------------------------------------------------------
41 if [ "$#" -lt 1 -o "$1" = "-h" -o "$1" = "-help" ]
42 then
43 cat <<USAGE 1>&2
44 Usage: ${0##*/} [-strip] path [wildcard] .. [wildcard]
46 Prints its argument (which should be a ':' separated list) cleansed from
47 - duplicate elements
48 - elements whose start matches one of the wildcard(s)
49 - (if '-strip') non-accessible directories
50 USAGE
51 exit 1
55 strip=''
56 if [ "$1" = "-strip" ]
57 then
58 strip=true
59 shift
63 dirList="$1"
64 shift
66 ##DEBUG echo "input>$dirList<" 1>&2
68 # preserve current IFS and split on whitespace
69 oldIFS="$IFS"
70 IFS=' '
72 # "wildcard1 ... wildcardN" may have been passed as a single parameter
73 set -- $*
75 # strip out wildcards via sed
76 while [ "$#" -ge 1 ]
78 wildcard=$1
79 shift
80 ##DEBUG echo "remove>$wildcard<" 1>&2
81 dirList=`echo "$dirList" | sed -e "s@${wildcard}[^:]*:@@g"`
82 done
84 # split on ':' (and on space as well to avoid any surprises)
85 IFS=': '
86 set -- $dirList
88 ##DEBUG echo "intermediate>$dirList<" 1>&2
90 # rebuild the list from scratch
91 unset dirList
92 for dir
94 ##DEBUG echo "check>$dir<" 1>&2
95 #- dirs must exist
96 if [ -e "$dir" ]
97 then
98 #- no duplicate dirs
99 duplicate=`echo " $dirList " | sed -ne "s@ $dir @DUP@p"`
101 if [ ! "$duplicate" ]
102 then
103 dirList="$dirList $dir"
105 elif [ "$strip" != "true" ]
106 then
107 # Print non-existing directories if not in 'strip' mode.
108 dirList="$dirList $dir"
110 done
112 # parse on whitespace
113 IFS=' '
114 set -- $dirList
116 # join on ':'
117 IFS=':'
118 dirList="$*"
120 # restore IFS
121 IFS="$oldIFS"
123 ##DEBUG echo "output>$dirList<" 1>&2
124 echo "$dirList"
126 # -----------------------------------------------------------------------------