-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild
More file actions
executable file
·224 lines (202 loc) · 7.73 KB
/
build
File metadata and controls
executable file
·224 lines (202 loc) · 7.73 KB
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#!/bin/bash -ex
TAGNAME="$1"
QT_SPECIFIED="$2"
EXTRA_PATH="$3"
PATH=/bin:/sbin:/usr/bin:/usr/sbin
if [ -n "${EXTRA_PATH}" ]; then
PATH=${PATH}:${EXTRA_PATH}
fi
export PATH
MACOSX_DEPLOYMENT_TARGET=10.13
export MACOSX_DEPLOYMENT_TARGET
PLD=$(pwd)
THREADS=$(sysctl -n hw.ncpu)
PREFIX=${PLD}/mrtrix3
if [ -f "${PREFIX}-build-deps.tar.gz" ]; then
DEPCACHE=1
echo "Reusing previously built dependencies"
tar xfz ${PREFIX}-build-deps.tar.gz
else
# Grab latest versions from git
EIGEN_VERSION=3.4.0
echo "Using eigen ${EIGEN_VERSION}"
TIFF_VERSION=$(git ls-remote --tags https://gitlab.com/libtiff/libtiff.git | awk '{print $2}' | grep -v '\^{}$' | grep -v alpha | grep -v beta | grep -v rc | grep v.* | sort -V | tail -1)
TIFF_VERSION=${TIFF_VERSION#*/*/v}
echo "Using tiff ${TIFF_VERSION}"
PNG_VERSION=$(git ls-remote --tags https://github.com/glennrp/libpng.git | awk '{print $2}' | grep -v '\^{}$' | grep -v alpha | grep -v beta | grep -v rc | grep v.* | sort -V | tail -1)
PNG_VERSION=${PNG_VERSION#*/*/v}
echo "Using png ${PNG_VERSION}"
FFTW_VERSION=$(git ls-remote --tags https://github.com/FFTW/fftw3.git | awk '{print $2}' | grep -v '\^{}$' | grep -v alpha | grep -v beta | grep -v rc | grep 'fftw-3' | sort -V | tail -1)
FFTW_VERSION=${FFTW_VERSION#*/*/fftw-}
echo "Using fftw ${FFTW_VERSION}"
if [ -n "${QT_SPECIFIED}" ]; then
QT_VERSION="${QT_SPECIFIED}"
echo "Using user-specified qt ${QT_VERSION}"
else
QT_VERSION=$(git ls-remote --tags https://code.qt.io/qt/qt5.git | awk '{print $2}' | grep -v '\^{}$' | grep -v alpha | grep -v beta | grep -v rc | grep -v '-' | grep '5.' | sort -V | tail -1)
QT_VERSION=${QT_VERSION#*/*/v}
echo "Using auto-detected qt ${QT_VERSION}"
fi
IFS=. read -r maj min pat <<< "$QT_VERSION"
IFS=. read -r rq_maj rq_min rq_pat <<< "5.15.9"
QT_GREATER_EQUAL_5_15_9=$((
maj > rq_maj \
|| (maj == rq_maj && min > rq_min) \
|| (maj == rq_maj && min == rq_min && pat >= rq_pat)
))
MACOS_UNIVERSAL_FLAGS=""
if (( QT_GREATER_EQUAL_5_15_9 )); then
echo "Qt version >= 5.15.9 detected, using universal build flags"
MACOS_UNIVERSAL_FLAGS="-arch arm64 -arch x86_64 -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}"
else
echo "Qt version < 5.15.9 detected, disabling universal build flags"
fi
# EIGEN
SECONDS=0
DNAME=eigen-${EIGEN_VERSION}
FNAME=eigen-${EIGEN_VERSION}.tar.bz2
curl -s -O -L https://gitlab.com/libeigen/eigen/-/archive/${EIGEN_VERSION}/${FNAME}
tar xf ${FNAME}
mkdir -p ${PREFIX}/include/
cp -R ${DNAME}/Eigen ${PREFIX}/include
cp -R ${DNAME}/unsupported ${PREFIX}/include
rm -r ${FNAME} ${DNAME}
EIGEN_SECONDS=${SECONDS}
# TIFF
SECONDS=0
DNAME=tiff-${TIFF_VERSION}
FNAME=${DNAME}.tar.gz
curl -s -O -L http://download.osgeo.org/libtiff/${FNAME}
tar xf ${FNAME}
cd ${DNAME}
CFLAGS="${MACOS_UNIVERSAL_FLAGS}" ./configure -q -prefix ${PREFIX} --enable-shared=NO --without-x --disable-jpeg --disable-old-jpeg --disable-lzma --disable-zstd --disable-webp
make install > /dev/null
cd ..
rm -r ${FNAME} ${DNAME}
TIFF_SECONDS=${SECONDS}
# PNG
SECONDS=0
DNAME=libpng-${PNG_VERSION}
FNAME=${DNAME}.tar.xz
curl -s -O -L https://ftp.osuosl.org/pub/blfs/conglomeration/libpng/${FNAME}
tar xf ${FNAME}
cd ${DNAME}
CFLAGS="${MACOS_UNIVERSAL_FLAGS}" ./configure -q -prefix ${PREFIX} --enable-shared=NO
make install > /dev/null
cd ..
rm -r ${FNAME} ${DNAME}
PNG_SECONDS=${SECONDS}
# FFTW
SECONDS=0
DNAME=fftw-${FFTW_VERSION}
FNAME=${DNAME}.tar.gz
curl -s -O http://www.fftw.org/${FNAME}
tar xf ${FNAME}
cd ${DNAME}
if [ "$(arch)" != "arm64" ]; then
CFLAGS="${MACOS_UNIVERSAL_FLAGS}" ./configure -q -prefix ${PREFIX} --disable-doc --disable-fortran --disable-debug --enable-threads --disable-dependency-tracking --enable-sse2 --enable-avx --enable-avx2
else
CFLAGS="${MACOS_UNIVERSAL_FLAGS}" ./configure -q -prefix ${PREFIX} --disable-doc --disable-fortran --disable-debug --enable-threads --disable-dependency-tracking
fi
make install > /dev/null
cd ..
rm -r ${FNAME} ${DNAME}
FFTW_SECONDS=${SECONDS}
# QT5 BASE
SECONDS=0
DNAME=qtbase-everywhere-src-${QT_VERSION}
if (( QT_GREATER_EQUAL_5_15_9 )); then
DNAME=qtbase-everywhere-opensource-src-${QT_VERSION}
fi
FNAME=${DNAME}.tar.xz
curl -s -O https://ftp.nluug.nl/languages/qt/archive/qt/${QT_VERSION%.*}/${QT_VERSION}/submodules/${FNAME}
tar xf ${FNAME}
# The top folder name is not always the same as the tarball name
QTBASE_TOP_FOLDER=$(tar -tf ${FNAME} | head -1 | cut -d '/' -f 1)
cd ${QTBASE_TOP_FOLDER}
QT_BUILD_FLAGS=(
-opensource
-confirm-license
-release
-no-dbus
-no-openssl
-no-harfbuzz
-no-freetype
-no-cups
-no-framework
-nomake examples
-prefix "${PREFIX}"
)
if (( QT_GREATER_EQUAL_5_15_9 )); then
QT_BUILD_FLAGS+=(-device-option QMAKE_APPLE_DEVICE_ARCHS='x86_64 arm64')
fi
./configure "${QT_BUILD_FLAGS[@]}"
make -j ${THREADS} > /dev/null
make install > /dev/null
cd ..
rm -r ${FNAME} ${QTBASE_TOP_FOLDER}
QTBASE_SECONDS=${SECONDS}
# QT5 SVG
SECONDS=0
DNAME=qtsvg-everywhere-src-${QT_VERSION}
if (( QT_GREATER_EQUAL_5_15_9 )); then
DNAME=qtsvg-everywhere-opensource-src-${QT_VERSION}
fi
FNAME=${DNAME}.tar.xz
curl -s -O https://ftp.nluug.nl/languages/qt/archive/qt/${QT_VERSION%.*}/${QT_VERSION}/submodules/${FNAME}
tar xf ${FNAME}
# The top folder name is not always the same as the tarball name
QTSVG_TOP_FOLDER=$(tar -tf ${FNAME} | head -1 | cut -d '/' -f 1)
cd ${QTSVG_TOP_FOLDER}
${PREFIX}/bin/qmake
make -j ${THREADS} > /dev/null
make install > /dev/null
cd ..
rm -r ${FNAME} ${QTSVG_TOP_FOLDER}
QTSVG_SECONDS=${SECONDS}
tar cpfz ${PREFIX}-build-deps.tar.gz mrtrix3
fi
# MRTRIX3
SECONDS=0
git clone https://github.com/MRtrix3/mrtrix3.git mrtrix3-src -b ${TAGNAME}
cd ${PREFIX}-src
MRTRIX_VERSION=$(git describe --abbrev=8 | tr '-' '_')
CFLAGS="${MACOS_UNIVERSAL_FLAGS} -I${PREFIX}/include" LINKFLAGS="${MACOS_UNIVERSAL_FLAGS} -L${PREFIX}/lib -Wl,-rpath,${PREFIX}/lib" TIFF_LINKFLAGS="-ltiff" PATH=${PREFIX}/bin:${PATH} ./configure
NUMBER_OF_PROCESSORS=${THREADS} ./build
cd ..
MRTRIX_SECONDS=${SECONDS}
mv ${PREFIX} ${PREFIX}_dep
mkdir -p ${PREFIX}
cp -R ${PREFIX}-src/bin ${PREFIX}
cp -R ${PREFIX}-src/lib ${PREFIX}
cp -R ${PREFIX}-src/share ${PREFIX}
cp -R ${PREFIX}-src/matlab ${PREFIX}
rm -rf ${PREFIX}-src
cp -a ${PREFIX}_dep/lib/libQt5{Core,Gui,OpenGL,PrintSupport,Network,Svg,Widgets}.*.dylib ${PREFIX}/lib
mkdir -p ${PREFIX}/bin/plugins/{platforms,imageformats,styles}
cp -a ${PREFIX}_dep/plugins/platforms/libqcocoa.dylib ${PREFIX}/bin/plugins/platforms
cp -a ${PREFIX}_dep/plugins/imageformats/libqsvg.dylib ${PREFIX}/bin/plugins/imageformats
cp -a ${PREFIX}_dep/plugins/styles/libqmacstyle.dylib ${PREFIX}/bin/plugins/styles
rm -rf ${PREFIX}_dep
cp -R ${PLD}/MRView.app ${PREFIX}/bin
mkdir -p ${PREFIX}/bin/MRView.app/Contents/MacOS/
mv ${PREFIX}/bin/mrview ${PREFIX}/bin/MRView.app/Contents/MacOS/
cp ${PLD}/mrview ${PREFIX}/bin
cp -R ${PLD}/SHView.app ${PREFIX}/bin
mkdir -p ${PREFIX}/bin/SHView.app/Contents/MacOS/
mv ${PREFIX}/bin/shview ${PREFIX}/bin/SHView.app/Contents/MacOS/
cp ${PLD}/shview ${PREFIX}/bin
cd ${PREFIX}/..
tar cfz mrtrix3-macos-${TAGNAME}.tar.gz mrtrix3
rm -rf ${PREFIX}
TOTAL_SECONDS=$((EIGEN_SECONDS + TIFF_SECONDS + PNG_SECONDS + FFTW_SECONDS + QTBASE_SECONDS + QTSVG_SECONDS + MRTRIX_SECONDS))
if [[ ! -n "$DEPCACHE" ]]; then
echo "eigen ${EIGEN_VERSION}: ${EIGEN_SECONDS} s"
echo "tiff ${TIFF_VERSION}: ${TIFF_SECONDS} s"
echo "png ${PNG_VERSION}: ${PNG_SECONDS} s"
echo "fftw ${FFTW_VERSION}: ${FFTW_SECONDS} s"
echo "qtbase ${QT_VERSION}: ${QTBASE_SECONDS} s"
echo "qtsvg ${QT_VERSION}: ${QTSVG_SECONDS} s"
fi
echo "mrtrix ${MRTRIX_VERSION}: ${MRTRIX_SECONDS} s"
echo "total : ${TOTAL_SECONDS} s"