-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcreate_makefile.sh
executable file
·137 lines (122 loc) · 3.22 KB
/
create_makefile.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/bash
function get_deps () {
grep "^Require" $1.v \
| sed 's/Require Import \(.*\)\..*$/\1/' \
| sed 's/Require Export \(.*\)\..*$/\1/' \
| sed 's/Require \(.*\)\..*$/\1/'
}
containsElement () {
local e
for e in "${@:2}"; do
[[ "$e" == "$1" ]] && return 0;
done
return 1
}
declare -A aa
declare -a remfiles
declare -a allfiles
#declare -a temp
remfiles=("all")
allfiles=("all")
echo "`date`" > debug
while true
do
#printf '%s\n' "==+== ${remfiles[@]} ==+=="
if [[ ${#remfiles[@]} -eq 0 ]]
then
echo "++++++ no more files" >> debug
break
else
file=${remfiles[0]}
remfiles=("${remfiles[@]:1}")
#printf '%s\n' "++=++ ${remfiles[@]} ++=++"
echo "===============================" >> debug
echo "++++++ file: ${file}" >> debug
temp=`get_deps $file`
deps=()
for f in $temp
do
if [ -e "${f}.v" ]
then deps+=("$f")
else
if [ -e "syntax/${f}.v" ]
then deps+=("syntax/$f")
else
if [ -e "semantics/${f}.v" ]
then deps+=("semantics/$f")
else
if [ -e "substitution/${f}.v" ]
then deps+=("substitution/$f")
else
if [ -e "axioms/${f}.v" ]
then deps+=("axioms/$f")
else
if [ -e "checker/${f}.v" ]
then deps+=("checker/$f")
else
if [ -e "examples/${f}.v" ]
then deps+=("examples/$f")
else
if [ -e "coq-tools/${f}.v" ]
then deps+=("coq-tools/$f")
else echo "${f} doesn't exist" >> debug
fi
fi
fi
fi
fi
fi
fi
fi
done
#printf '%s\n' "++=++ ${deps[@]} ++=++"
#deps=("${temp[@]}")
aa[$file]=${deps[@]}
for i in "${deps[@]}"
do
#echo "checking $i"
containsElement "$i" "${allfiles[@]}"
n=$?
if [[ $n -eq 1 ]]
then
echo "++ new dependency: ${i}" >> debug
remfiles=("${remfiles[@]}" "$i")
allfiles=("${allfiles[@]}" "$i")
else echo "++ not new dependency: ${i}" >> debug
fi
done
fi
done
echo "# Makefile generated by create_makefile.sh" > Makefile
echo "" >> Makefile
echo "default : all.vo" >> Makefile
echo "" >> Makefile
echo "clean :" >> Makefile
echo " rm -f syntax/.*.aux syntax/*.glob syntax/*.vo" >> Makefile
echo " rm -f semantics/.*.aux semantics/*.glob semantics/*.vo" >> Makefile
echo " rm -f substitution/.*.aux substitution/*.glob substitution/*.vo" >> Makefile
echo " rm -f axioms/.*.aux axioms/*.glob axioms/*.vo" >> Makefile
echo " rm -f checker/.*.aux checker/*.glob checker/*.vo" >> Makefile
echo " rm -f examples/.*.aux examples/*.glob examples/*.vo" >> Makefile
echo " rm -f coq-tools/.*.aux coq-tools/*.glob coq-tools/*.vo" >> Makefile
for i in "${!aa[@]}"
do
#echo "-------------------"
#echo "++ ${i}"
echo "" >> Makefile
echo -n "${i}.vo : ${i}.v" >> Makefile
if [[ ${#aa[$i]} -eq 0 ]]
then
echo "${i} doesn't have dependencies"
else
#echo "${aa[$i]}"
IFS=' ' read -a vals <<< "${aa[$i]}"
for f in "${vals[@]}"
do
#echo "---- ${f}"
echo -n " ${f}.vo" >> Makefile
done
fi
echo "" >> Makefile
echo " coqc -R coq-tools util -R syntax syntax -R semantics semantics -R substitution substitution -R axioms axioms -R checker checker -R examples examples ${i}.v" >> Makefile
done