22
22
# And, if the directory exists in your pwd then it will be removed.
23
23
# ###################
24
24
25
- cmd=" $1 "
26
- env=" $2 "
25
+ declare -r cmd=" $1 "
26
+ declare -r env=" $2 "
27
27
curr_dir=" $3 "
28
28
if [ " ${curr_dir} " == " " ]
29
29
then
30
30
curr_dir=" $( pwd) "
31
+ declare -r curr_path=" $( pwd) /src"
32
+ else
33
+ declare -r curr_path=" ${curr_dir} /src"
31
34
fi
32
35
33
36
# Debug mode:
@@ -36,23 +39,41 @@ debug=0
36
39
# Display command usage:
37
40
function usage()
38
41
{
39
- echo " Usage: ux-src [gen|clean] [path]"
40
- echo " gen: generate ux-src directory"
41
- echo " clean: remove ux-src directory"
42
+ echo " Usage: ux-src <gen|clean> <github|local> [path]"
43
+ echo " gen, generate ux-src directory"
44
+ echo " clean, remove ux-src directory"
45
+ echo " github, GitHub Actions environment"
46
+ echo " local, local environment"
47
+ echo " path, the path to the source tree (optional)"
42
48
}
43
49
44
50
# Link files from directory f_dir to directory ux-src with extension f_ext:
45
51
function link_files()
46
52
{
47
- local src_dir=" $1 "
48
- local dst_dir=" $2 "
49
- local f_dir=" $3 "
50
- local f_ext=" $4 "
51
- if [ -d ${src_dir} /${f_dir} ]
53
+ local dir_type=" $1 "
54
+ local src_dir=" $2 "
55
+ local dst_dir=" $3 "
56
+ local f_dir=" $4 "
57
+ local f_ext=" $5 "
58
+ local srch_path=" "
59
+ local x=" $( basename ${src_dir} ) "
60
+ if [ " $dir_type " != " 2" ];
61
+ then
62
+ srch_path=" ${src_dir} /${f_dir} "
63
+ else
64
+ if [ " ${x} " == " ${f_dir} " ];
65
+ then
66
+ srch_path=" ${src_dir} "
67
+ dst_dir=" $( dirname ${dst_dir} ) "
68
+ else
69
+ return
70
+ fi
71
+ fi
72
+ if [ -d ${srch_path} ];
52
73
then
53
- for f in ${src_dir} / ${f_dir } /*
74
+ for f in ${srch_path } /*
54
75
do
55
- if [ ! -f ${f} ]
76
+ if [ ! -f " ${f} " ]
56
77
then
57
78
continue
58
79
else
@@ -81,6 +102,7 @@ function check_path()
81
102
[ " ${last_dir} " == " c++" ] || [ " ${last_dir} " == " C++" ] || \
82
103
[ " ${last_dir} " == " hpp" ] || [ " ${last_dir} " == " HPP" ] || \
83
104
[ " ${last_dir} " == " hxx" ] || [ " ${last_dir} " == " HXX" ] || \
105
+ [ " ${last_dir} " == " h++" ] || [ " ${last_dir} " == " H++" ] || \
84
106
[ " ${last_dir} " == " s" ] || [ " ${last_dir} " == " S" ] || \
85
107
[ " ${last_dir} " == " Hdr" ] || [ " ${last_dir} " == " hdr" ] || \
86
108
[ " ${last_dir} " == " fth" ] || [ " ${last_dir} " == " FTH" ] || \
@@ -97,53 +119,55 @@ function check_path()
97
119
# check for files with the known directory structure and link them in
98
120
# the ux-src directory with their appropriate extension:
99
121
function find_files_and_link() {
100
- local src_dir=" $1 "
101
- local dst_dir=" $2 "
122
+ local dir_type=" $1 "
123
+ local src_dir=" $2 "
124
+ local dst_dir=" $3 "
102
125
103
126
# Link C files (if any):
104
- link_files " ${src_dir} " " ${dst_dir} " " c" " c"
105
- link_files " ${src_dir} " " ${dst_dir} " " C" " c"
127
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " c" " c"
128
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " C" " c"
106
129
107
130
# Link C++ files (if any):
108
- link_files " ${src_dir} " " ${dst_dir} " " cpp" " cpp"
109
- link_files " ${src_dir} " " ${dst_dir} " " CPP" " cpp"
110
- link_files " ${src_dir} " " ${dst_dir} " " cxx" " cxx"
111
- link_files " ${src_dir} " " ${dst_dir} " " CXX" " cxx"
112
- link_files " ${src_dir} " " ${dst_dir} " " cc" " cc"
113
- link_files " ${src_dir} " " ${dst_dir} " " CC" " cc"
114
- link_files " ${src_dir} " " ${dst_dir} " " c++" " cpp"
115
- link_files " ${src_dir} " " ${dst_dir} " " C++" " cpp"
131
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " cpp" " cpp"
132
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " CPP" " cpp"
133
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " cxx" " cxx"
134
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " CXX" " cxx"
135
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " cc" " cc"
136
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " CC" " cc"
137
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " c++" " cpp"
138
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " C++" " cpp"
116
139
117
140
# Link C++ header files (if any):
118
- link_files " ${src_dir} " " ${dst_dir} " " hpp" " hpp"
119
- link_files " ${src_dir} " " ${dst_dir} " " HPP" " hpp"
120
- link_files " ${src_dir} " " ${dst_dir} " " hxx" " hxx"
121
- link_files " ${src_dir} " " ${dst_dir} " " HXX" " hxx"
141
+ link_files " ${dir_type} " " ${src_dir} " " ${dst_dir} " " hpp" " hpp"
142
+ link_files " ${dir_type} " " ${src_dir} " " ${dst_dir} " " HPP" " hpp"
143
+ link_files " ${dir_type} " " ${src_dir} " " ${dst_dir} " " hxx" " hxx"
144
+ link_files " ${dir_type} " " ${src_dir} " " ${dst_dir} " " HXX" " hxx"
145
+ link_files " ${dir_type} " " ${src_dir} " " ${dst_dir} " " h++" " hpp"
122
146
123
147
# Link C header files (if any):
124
- link_files " ${src_dir} " " ${dst_dir} " " h" " h"
125
- link_files " ${src_dir} " " ${dst_dir} " " H" " h"
148
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " h" " h"
149
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " H" " h"
126
150
127
151
# Link Assembler files (if any):
128
- link_files " ${src_dir} " " ${dst_dir} " " s" " s"
129
- link_files " ${src_dir} " " ${dst_dir} " " S" " s"
130
- link_files " ${src_dir} " " ${dst_dir} " " Hdr" " s"
152
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " s" " s"
153
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " S" " s"
154
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " Hdr" " s"
131
155
132
156
# Link Forth files (if any):
133
- link_files " ${src_dir} " " ${dst_dir} " " fth" " fth"
134
- link_files " ${src_dir} " " ${dst_dir} " " FTH" " fth"
157
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " fth" " fth"
158
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " FTH" " fth"
135
159
136
160
# Link Pascal and Prolog files (if any):
137
- link_files " ${src_dir} " " ${dst_dir} " " p" " p"
138
- link_files " ${src_dir} " " ${dst_dir} " " P" " p"
161
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " p" " p"
162
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " P" " p"
139
163
140
164
# Link Perl files (if any):
141
- link_files " ${src_dir} " " ${dst_dir} " " pl" " pl"
142
- link_files " ${src_dir} " " ${dst_dir} " " PL" " pl"
165
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " pl" " pl"
166
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " PL" " pl"
143
167
144
168
# Link BASIC files (if any):
145
- link_files " ${src_dir} " " ${dst_dir} " " bas" " bas"
146
- link_files " ${src_dir} " " ${dst_dir} " " BAS" " bas"
169
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " bas" " bas"
170
+ link_files " ${dir_type} " " ${ src_dir}" " ${dst_dir} " " BAS" " bas"
147
171
148
172
# Find and link local files
149
173
# (that may also be called Makefile.unix etc.):
@@ -154,10 +178,19 @@ function find_files_and_link() {
154
178
then
155
179
for f in ${src_dir} /*
156
180
do
157
- fname=" $( basename ${f} ) "
181
+ local fname=" $( basename ${f} ) "
158
182
# Remove ,fd7 etc. from the filename:
159
183
fname=" $( echo ${fname} | sed ' s/,.*//' ) "
160
- if [ -f ${f} ];
184
+ local fext=" $( echo ${fname} | sed ' s/^.*\.//' ) "
185
+ # Skip files with extensions: .o, .a, .so
186
+ if [ " ${fext} " == " o" ] || [ " ${fext} " == " a" ] ||
187
+ [ " ${fext} " == " od" ] || [ " ${fext} " == " oz" ] ||
188
+ [ " ${fext} " == " odz" ] || [ " ${fext} " == " so" ] ||
189
+ [[ " ${fext} " =~ " so\..*" ]];
190
+ then
191
+ continue
192
+ fi
193
+ if [ -f " ${f} " ];
161
194
then
162
195
if [ " $env " == " github" ]
163
196
then
@@ -181,24 +214,40 @@ function gen_dirs()
181
214
if [ ! -d " ${d} " ]
182
215
then
183
216
local dname2=" $( echo ${d} | sed ' s/^.*\/src\///' ) "
184
- find_files_and_link " ${d} " " ${curr_dir} /ux-src/${dname2} "
217
+ find_files_and_link " 0 " " ${d} " " ${curr_dir} /ux-src/${dname2} "
185
218
else
186
219
local dname=" $( basename " ${d} " ) "
187
220
check_path " ${dname} "
188
221
local rval=$?
189
222
if [ $rval -eq 1 ];
190
223
then
191
- local dname2=" $( echo ${d} | sed ' s/^.*\/src\///' ) "
192
- find_files_and_link " ${d} " " ${curr_dir} /ux-src/${dname2} "
224
+ # local dname2="$(echo ${d} | sed 's/^.*\/src\///')"
225
+ local dname2=" ${d#*/ src/ } "
226
+ if [ " ${dname2} " != " " ]
227
+ then
228
+ find_files_and_link " 2" " ${d} " " ${curr_dir} /ux-src/${dname2} "
229
+ fi
193
230
else
194
231
local dname2=" $( echo ${d} | sed ' s/^.*\/src\///' ) "
195
- if [ ! -d " ${curr_dir} /ux-src/${dname2} " ]
232
+ echo -n " Processing: ${dname2} ... "
233
+ local dname3=" $( basename ${dname2} ) "
234
+ if [ " ${dname3} " != " o" ] && [ " ${dname3} " != " a" ] &&
235
+ [ " ${dname3} " != " od" ] && [ " ${dname3} " != " oz" ] &&
236
+ [ " ${dname3} " != " odz" ] && [ " ${dname3} " != " so" ] ;
196
237
then
197
- mkdir -p " ${curr_dir} /ux-src/${dname2} "
198
- find_files_and_link " ${d} " " ${curr_dir} /ux-src/${dname2} "
238
+ # Skip the o directory (it's not required in the UX world)
239
+ # process everythign else:
240
+ if [ ! -d " ${curr_dir} /ux-src/${dname2} " ]
241
+ then
242
+ mkdir -p " ${curr_dir} /ux-src/${dname2} "
243
+ find_files_and_link " ${rval} " " ${d} " " ${curr_dir} /ux-src/${dname2} "
244
+ fi
245
+ echo " ok"
246
+ # Recursive call to explore the sub-directory
247
+ gen_dirs " ${d} "
248
+ else
249
+ echo " skipped"
199
250
fi
200
- # Recursive call to explore the sub-directory
201
- gen_dirs " ${d} "
202
251
fi
203
252
fi
204
253
done
@@ -224,7 +273,7 @@ check_cmd
224
273
# Check if we are in a RISC OS source tree:
225
274
if [ ! -d ${curr_dir} /src ]
226
275
then
227
- echo " Error: you are not in a RISC OS Community source tree"
276
+ echo " Error: it appears you are not in a RISC OS Community source tree"
228
277
exit 1
229
278
fi
230
279
@@ -234,13 +283,13 @@ then
234
283
echo " Generating ux-src directory in ${curr_dir} "
235
284
236
285
# Generate ux-src:
237
- mkdir ${curr_dir} /ux-src
286
+ mkdir -p ${curr_dir} /ux-src
238
287
239
288
# Generate all the directories in ux-src:
240
- gen_dirs
289
+ gen_dirs " ${curr_path} "
241
290
242
291
# Link main Makefiles:
243
- if [ -f ${curr_dir} /src/Makefile* ]
292
+ if compgen -G " ${curr_dir} /src/Makefile*" > /dev/null ;
244
293
then
245
294
for f in ${curr_dir} /src/Makefile*
246
295
do
256
305
fi
257
306
258
307
# Link the Build Script for Unix:
259
- if [ -f ${curr_dir} /src/MkGCC.sh ]
308
+ if [ -f " ${curr_dir} /src/MkGCC.sh" ]
260
309
then
261
310
if [ " $env " == " github" ]
262
311
then
0 commit comments