forked from topology-tool-kit/ttk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcloneTTKmodule.sh
executable file
·115 lines (100 loc) · 4.09 KB
/
cloneTTKmodule.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
#!/bin/bash
# Copyright (C) Julien Tierny <[email protected]>
# example: ScalarFieldSmoother MyNewModule
NameSource=$1
NameTarget=$2
smallNameTarget="$(tr '[:upper:]' '[:lower:]' <<< "${NameTarget:0:1}")${NameTarget:1}"
bigNameTarget=$(echo "$NameTarget" | tr '[:lower:]' '[:upper:]')
smallNameSource="$(tr '[:upper:]' '[:lower:]' <<< "${NameSource:0:1}")${NameSource:1}"
bigNameSource=$(echo "$NameSource" | tr '[:lower:]' '[:upper:]')
if [ -z "${NameTarget}" ]; then
echo "Usage:"
echo " $0 <SourceTTKmodule> <DestinationTTKmodule>"
echo "Example:"
echo " $0 ScalarFieldSmoother MyNewModule"
exit 1
fi
# check for dependencies
SED=$(command -v sed 2> /dev/null)
if [ -z "$SED" ]; then
echo "Error: Please install sed."
exit 2
fi
# check for paths
if [ ! -e "scripts/createTTKmodule.sh" ]; then
echo "Error: Please run this script from the top of the source tree"
exit 3
fi
echo "Cloning TTK module '${NameSource}' into '${NameTarget}'..."
function replace {
$SED "s/${smallNameSource}/${smallNameTarget}/g" "$1" > tmp.cmake
mv tmp.cmake "$1"
$SED "s/${NameSource}/${NameTarget}/g" "$1" > tmp.cmake
mv tmp.cmake "$1"
$SED "s/${bigNameSource}/${bigNameTarget}/g" "$1" > tmp.cmake
mv tmp.cmake "$1"
}
mkdir -p core/base 2> /dev/null
mkdir -p core/vtk 2> /dev/null
mkdir -p standalone 2> /dev/null
mkdir -p paraview/ 2> /dev/null
# 1) duplicate the source base code
echo "Creating base code functor 'core/base/${smallNameTarget}'..."
cp -R "core/base/${smallNameSource}" \
"core/base/${smallNameTarget}"
replace "core/base/${smallNameTarget}/CMakeLists.txt"
mv "core/base/${smallNameTarget}/${NameSource}.cpp" \
"core/base/${smallNameTarget}/${NameTarget}.cpp"
replace "core/base/${smallNameTarget}/${NameTarget}.cpp"
mv "core/base/${smallNameTarget}/${NameSource}.h" \
"core/base/${smallNameTarget}/${NameTarget}.h"
replace "core/base/${smallNameTarget}/${NameTarget}.h"
# 2) duplicate the source wrapper
echo "Creating VTK wrapper 'core/vtk/ttk${NameTarget}'..."
cp -R "core/vtk/ttk${NameSource}" \
"core/vtk/ttk${NameTarget}"
replace "core/vtk/ttk${NameTarget}/vtk.module"
replace "core/vtk/ttk${NameTarget}/ttk.module"
mv "core/vtk/ttk${NameTarget}/ttk${NameSource}.cpp" \
"core/vtk/ttk${NameTarget}/ttk${NameTarget}.cpp"
replace "core/vtk/ttk${NameTarget}/ttk${NameTarget}.cpp"
mv "core/vtk/ttk${NameTarget}/ttk${NameSource}.h" \
"core/vtk/ttk${NameTarget}/ttk${NameTarget}.h"
replace "core/vtk/ttk${NameTarget}/ttk${NameTarget}.h"
# 3) duplicate the source standalone modules
if [ -d "standalone/${NameSource}/" ]; then
if [ ! -d "standalone/${NameSource}/cmd" ] \
&& [ ! -d "standalone/${NameSource}/gui" ]; then
# new standalone case
echo "Creating command line standalone program 'standalone/${NameTarget}'..."
cp -R "standalone/${NameSource}/" \
"standalone/${NameTarget}/"
replace "standalone/${NameTarget}/CMakeLists.txt"
replace "standalone/${NameTarget}/main.cpp"
fi
if [ -d "standalone/${NameSource}/cmd" ]; then
echo "Creating command line standalone program 'standalone/${NameTarget}/cmd'..."
mkdir -p "standalone/${NameTarget}"
cp -R "standalone/${NameSource}/cmd/" \
"standalone/${NameTarget}/cmd"
replace "standalone/${NameTarget}/cmd/CMakeLists.txt"
replace "standalone/${NameTarget}/cmd/main.cpp"
fi
if [ -d "standalone/${NameSource}/gui" ]; then
echo "Creating GUI standalone program 'standalone/${NameTarget}/gui'..."
mkdir -p "standalone/${NameTarget}"
cp -R "standalone/${NameSource}/gui/" \
"standalone/${NameTarget}/gui"
replace "standalone/${NameTarget}/gui/CMakeLists.txt"
replace "standalone/${NameTarget}/gui/main.cpp"
fi
fi
# 4) duplicate the source paraview filter
echo "Creating ParaView filter 'paraview/${NameTarget}'..."
cp -R "paraview/xmls/${NameSource}.xml" \
"paraview/xmls/${NameTarget}.xml"
replace "paraview/xmls/${NameTarget}.xml"
echo "Module ${NameTarget} created."
# Due to the use of file(GLOB...) make does not see any changes
# if cmake is not run after the new module is created
echo "/!\\ Please re-run cmake in your build folder to compile it."