2019-09-16 18:28:34 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
2019-09-30 16:46:02 +02:00
|
|
|
# Copyright © 2019 Dynare Team
|
|
|
|
#
|
|
|
|
# This file is part of Dynare.
|
|
|
|
#
|
|
|
|
# Dynare is free software: you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
|
|
# (at your option) any later version.
|
|
|
|
#
|
|
|
|
# Dynare is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
2019-09-16 18:28:34 +02:00
|
|
|
set -ex
|
|
|
|
|
2019-11-04 17:10:33 +01:00
|
|
|
ROOTDIR=$(pwd)/..
|
|
|
|
|
2019-09-30 16:45:36 +02:00
|
|
|
# Set the compilers
|
|
|
|
CC=gcc-9
|
|
|
|
CXX=g++-9
|
|
|
|
|
2019-09-20 14:43:48 +02:00
|
|
|
# Set the number of threads
|
|
|
|
NTHREADS=$(nproc)
|
|
|
|
|
2019-11-04 17:10:33 +01:00
|
|
|
# Set dependency directory
|
|
|
|
LIB64="$ROOTDIR"/macOS/deps/lib64
|
|
|
|
|
|
|
|
|
2019-09-16 18:28:34 +02:00
|
|
|
##
|
2019-09-23 11:23:28 +02:00
|
|
|
## Find Dynare Version
|
2019-09-16 18:28:34 +02:00
|
|
|
##
|
2019-11-04 17:10:33 +01:00
|
|
|
DATE=$(date +%Y-%m-%d-%H%M)
|
|
|
|
DATELONG=$(date '+%d %B %Y')
|
|
|
|
if [[ -d ../.git/ ]]; then
|
|
|
|
SHA=$(git rev-parse HEAD)
|
|
|
|
SHASHORT=$(git rev-parse --short HEAD)
|
|
|
|
fi
|
|
|
|
|
2019-09-16 18:28:34 +02:00
|
|
|
if [[ -z $VERSION ]]; then
|
|
|
|
VERSION=$(grep '^AC_INIT(' ../configure.ac | sed 's/AC_INIT(\[dynare\], \[\(.*\)\])/\1/')
|
|
|
|
if [[ -d ../.git/ ]]; then
|
2019-11-04 17:10:33 +01:00
|
|
|
VERSION="$VERSION"-"$SHASHORT"
|
2019-09-16 18:28:34 +02:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-11-04 17:10:33 +01:00
|
|
|
# Install location must be truncated for installation of `gcc`
|
|
|
|
# If it's too long, the headers of the compiled libraries cannot be modified
|
|
|
|
# obliging recompilation on the user's system. Truncate to 5 characters
|
|
|
|
# To allow for distribution version to appear
|
|
|
|
LOCATION=$(echo "$VERSION" | cut -f1 -d"-" | cut -c 1-5)
|
|
|
|
if [[ "$VERSION" == *-unstable* || "$VERSION" == [a-zA-Z]* ]]; then
|
|
|
|
LOCATION="$LOCATION"-"$DATE"
|
|
|
|
fi
|
2019-09-30 16:45:36 +02:00
|
|
|
|
|
|
|
|
2019-09-16 18:28:34 +02:00
|
|
|
##
|
2019-10-15 16:41:24 +02:00
|
|
|
## Compile Dynare doc, dynare++, preprocessor, mex for MATLAB < 2018a
|
2019-09-16 18:28:34 +02:00
|
|
|
##
|
|
|
|
cd "$ROOTDIR"
|
|
|
|
[[ -f configure ]] || autoreconf -si
|
2019-10-15 16:41:24 +02:00
|
|
|
CC=$CC CXX=$CXX ./configure \
|
|
|
|
PACKAGE_VERSION="$VERSION" \
|
|
|
|
PACKAGE_STRING="dynare $VERSION" \
|
|
|
|
CXXFLAGS=-I/usr/local/include \
|
|
|
|
LDFLAGS=-static-libgcc \
|
|
|
|
--with-gsl="$LIB64"/gsl \
|
|
|
|
--with-matio="$LIB64"/matio \
|
|
|
|
--with-slicot="$LIB64"/Slicot/with-underscore \
|
|
|
|
--disable-octave \
|
|
|
|
--with-matlab=/Applications/MATLAB_R2016b.app MATLAB_VERSION=R2016b
|
2019-09-20 15:08:11 +02:00
|
|
|
if [[ -z $CI ]]; then
|
|
|
|
# If not in Gitlab CI, clean the source and build the doc
|
|
|
|
make clean
|
2019-09-20 14:43:48 +02:00
|
|
|
make -j"$NTHREADS" pdf html
|
2019-09-20 15:08:11 +02:00
|
|
|
fi
|
2019-09-20 14:43:48 +02:00
|
|
|
make -j"$NTHREADS"
|
2019-09-16 18:28:34 +02:00
|
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
## Create package
|
|
|
|
##
|
|
|
|
NAME=dynare-"$VERSION"
|
|
|
|
PKGFILES="$ROOTDIR"/macOS/pkg/"$NAME"
|
2019-11-04 17:10:33 +01:00
|
|
|
mkdir -p \
|
|
|
|
"$PKGFILES"/mex/matlab/maci64-7.9-9.3 \
|
|
|
|
"$PKGFILES"/mex/matlab/maci64-9.4-9.7 \
|
|
|
|
"$PKGFILES"/mex/octave \
|
|
|
|
"$PKGFILES"/doc/dynare++ \
|
|
|
|
"$PKGFILES"/dynare++ \
|
|
|
|
"$PKGFILES"/scripts \
|
|
|
|
"$PKGFILES"/contrib/ms-sbvar/TZcode
|
|
|
|
|
|
|
|
if [[ $VERSION == *-unstable* ]]; then
|
|
|
|
echo "$SHA" > "$PKGFILES"/sha.txt
|
|
|
|
fi
|
2019-09-16 18:28:34 +02:00
|
|
|
cp -p "$ROOTDIR"/NEWS "$PKGFILES"
|
|
|
|
cp -p "$ROOTDIR"/COPYING "$PKGFILES"
|
|
|
|
cp -p "$ROOTDIR"/VERSION "$PKGFILES"
|
|
|
|
cp -p "$ROOTDIR"/license.txt "$PKGFILES"
|
|
|
|
|
|
|
|
cp -pr "$ROOTDIR"/matlab "$PKGFILES"
|
|
|
|
cp -pr "$ROOTDIR"/examples "$PKGFILES"
|
|
|
|
|
2019-10-23 18:59:36 +02:00
|
|
|
cp -L "$ROOTDIR"/mex/matlab/* "$PKGFILES"/mex/matlab/maci64-7.9-9.3
|
2019-09-16 18:28:34 +02:00
|
|
|
|
|
|
|
cp -p "$ROOTDIR"/scripts/dynare.el "$PKGFILES"/scripts
|
2019-10-04 09:50:50 +02:00
|
|
|
cp -pr "$ROOTDIR"/contrib/ms-sbvar/TZcode/MatlabFiles "$PKGFILES"/contrib/ms-sbvar/TZcode
|
2019-09-16 18:28:34 +02:00
|
|
|
cp -pr "$ROOTDIR"/contrib/jsonlab "$PKGFILES"/contrib
|
|
|
|
|
|
|
|
cp "$ROOTDIR"/doc/*.pdf "$PKGFILES"/doc
|
|
|
|
cp "$ROOTDIR"/doc/gsa/gsa.pdf "$PKGFILES"/doc
|
|
|
|
cp "$ROOTDIR"/doc/parallel/parallel.pdf "$PKGFILES"/doc
|
|
|
|
cp "$ROOTDIR"/doc/dseries-and-reporting/dseriesReporting.pdf "$PKGFILES"/doc
|
|
|
|
cp "$ROOTDIR"/preprocessor/doc/preprocessor/preprocessor.pdf "$PKGFILES"/doc
|
|
|
|
cp "$ROOTDIR"/preprocessor/doc/macroprocessor/macroprocessor.pdf "$PKGFILES"/doc
|
|
|
|
cp "$ROOTDIR"/doc/manual/build/latex/dynare-manual.pdf "$PKGFILES"/doc
|
|
|
|
cp -r "$ROOTDIR"/doc/manual/build/html "$PKGFILES"/doc/dynare-manual.html
|
|
|
|
|
|
|
|
cp "$ROOTDIR"/dynare++/doc/*.pdf "$PKGFILES"/doc/dynare++
|
|
|
|
|
|
|
|
cp "$ROOTDIR"/dynare++/src/dynare++ "$PKGFILES"/dynare++
|
|
|
|
|
2019-10-03 18:06:37 +02:00
|
|
|
mkdir -p "$PKGFILES"/matlab/modules/dseries/externals/x13/macOS/64
|
|
|
|
cp -p "$ROOTDIR"/macOS/deps/lib64/x13as/x13as "$PKGFILES"/matlab/modules/dseries/externals/x13/macOS/64
|
2019-09-30 16:45:36 +02:00
|
|
|
|
2019-09-16 18:28:34 +02:00
|
|
|
|
|
|
|
##
|
2019-10-15 16:41:24 +02:00
|
|
|
## Create mex for MATLAB ≥ 2018a
|
2019-09-16 18:28:34 +02:00
|
|
|
##
|
|
|
|
cd "$ROOTDIR"/mex/build/matlab
|
|
|
|
make clean
|
2019-10-15 16:41:24 +02:00
|
|
|
CC=$CC CXX=$CXX ./configure \
|
|
|
|
PACKAGE_VERSION="$VERSION" \
|
|
|
|
PACKAGE_STRING="dynare $VERSION" \
|
|
|
|
CXXFLAGS=-I/usr/local/include \
|
|
|
|
LDFLAGS=-static-libgcc \
|
|
|
|
--with-gsl="$LIB64"/gsl \
|
|
|
|
--with-matio="$LIB64"/matio \
|
|
|
|
--with-slicot="$LIB64"/Slicot/with-underscore \
|
|
|
|
--with-matlab=/Applications/MATLAB_R2019b.app MATLAB_VERSION=R2019b
|
2019-09-20 14:43:48 +02:00
|
|
|
make -j"$NTHREADS"
|
2019-09-16 18:28:34 +02:00
|
|
|
cp -L "$ROOTDIR"/mex/matlab/* "$PKGFILES"/mex/matlab/maci64-9.4-9.7
|
|
|
|
|
|
|
|
|
2019-09-24 14:33:33 +02:00
|
|
|
##
|
|
|
|
## Create mex for Octave
|
|
|
|
##
|
|
|
|
cd "$ROOTDIR"/mex/build/octave
|
2019-12-09 17:07:25 +01:00
|
|
|
OCTAVE_VERSION=$(grep OCTAVE_VERSION "$ROOTDIR"/macOS/deps/versions.mk | cut -d'=' -f2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
|
|
OCTAVE_USR_DIR="/Applications/Octave-$OCTAVE_VERSION.app/Contents/Resources/usr"
|
|
|
|
OCTAVE_BIN_DIR="$OCTAVE_USR_DIR/Cellar/octave-octave-app@$OCTAVE_VERSION/$OCTAVE_VERSION/bin"
|
|
|
|
PATH="$OCTAVE_BIN_DIR:$PATH" CC=$CC CXX=$CXX ./configure \
|
2019-10-15 16:41:24 +02:00
|
|
|
PACKAGE_VERSION="$VERSION" \
|
|
|
|
PACKAGE_STRING="dynare $VERSION" \
|
|
|
|
CXXFLAGS=-I/usr/local/include \
|
2019-12-09 17:07:25 +01:00
|
|
|
LDFLAGS="-static-libgcc -L$OCTAVE_USR_DIR/lib " \
|
2019-10-15 16:41:24 +02:00
|
|
|
--with-gsl="$LIB64"/gsl \
|
|
|
|
--with-matio="$LIB64"/matio \
|
|
|
|
--with-slicot="$LIB64"/Slicot/with-underscore
|
2019-12-09 17:07:25 +01:00
|
|
|
PATH="$OCTAVE_BIN_DIR:$PATH" make -j"$NTHREADS"
|
2019-09-24 14:33:33 +02:00
|
|
|
cp -L "$ROOTDIR"/mex/octave/* "$PKGFILES"/mex/octave
|
2019-10-02 15:03:30 +02:00
|
|
|
echo -e "function v = supported_octave_version\nv=\"$(octave --eval "disp(OCTAVE_VERSION)")\";\nend" > "$PKGFILES"/matlab/supported_octave_version.m
|
|
|
|
|
2019-09-24 14:33:33 +02:00
|
|
|
|
2019-09-16 18:28:34 +02:00
|
|
|
##
|
|
|
|
## Make package
|
|
|
|
##
|
|
|
|
cd "$ROOTDIR"/macOS/pkg
|
2019-11-04 17:10:33 +01:00
|
|
|
|
|
|
|
# Dynare option
|
|
|
|
pkgbuild --root "$PKGFILES" --identifier com.cepremap.dynare --version "$VERSION" --install-location /Applications/Dynare/"$LOCATION" "$NAME".pkg
|
|
|
|
|
|
|
|
# GCC option
|
|
|
|
# Create dummy payload for GCC package; otherwise the size is displayed as 0 bytes in the installer
|
|
|
|
dd if=/dev/zero of="$ROOTDIR"/macOS/brewfiles/dummy bs=1m count=800
|
|
|
|
pkgbuild --root "$ROOTDIR"/macOS/brewfiles --identifier com.cepremap.dynare.gcc --version "$VERSION" --scripts "$ROOTDIR"/macOS/scripts --install-location /Applications/Dynare/"$LOCATION" "$NAME"-gcc.pkg
|
|
|
|
|
|
|
|
# Replace variables in displayed files
|
|
|
|
sed "s/VERSION_READ/$VERSION/g" "$ROOTDIR"/macOS/distribution_template.xml > distribution_tmp.xml
|
2019-09-16 18:28:34 +02:00
|
|
|
sed "s/VERSION_NO_SPACE/$VERSION/g" distribution_tmp.xml > distribution.xml
|
2019-11-04 17:10:33 +01:00
|
|
|
sed "s/GCC_BINARY/$CC/g" "$ROOTDIR"/macOS/welcome_template.html > "$ROOTDIR"/macOS/welcome.html
|
|
|
|
sed "s/VERSION_NO_SPACE/$VERSION/g" "$ROOTDIR"/macOS/welcome.html > "$ROOTDIR"/macOS/welcome_tmp.html
|
|
|
|
sed "s/DATE/$DATELONG/g" "$ROOTDIR"/macOS/welcome_tmp.html > "$ROOTDIR"/macOS/welcome.html
|
|
|
|
|
|
|
|
# Create installer
|
2019-09-16 18:28:34 +02:00
|
|
|
productbuild --distribution distribution.xml --resources "$ROOTDIR"/macOS --package-path ./"$NAME".pkg "$NAME"-new.pkg
|
2019-11-04 17:10:33 +01:00
|
|
|
|
|
|
|
# cleanup
|
2019-09-30 16:45:36 +02:00
|
|
|
rm -f ./*.xml
|
2019-09-16 18:28:34 +02:00
|
|
|
rm -rf "$PKGFILES"
|
2019-11-04 17:10:33 +01:00
|
|
|
rm -f "$NAME"-gcc.pkg
|
|
|
|
rm -f "$ROOTDIR"/macOS/brewfiles/dummy
|
|
|
|
rm -f "$ROOTDIR"/macOS/welcome.html
|
|
|
|
rm -f "$ROOTDIR"/macOS/welcome_tmp.html
|
|
|
|
|
|
|
|
# Final pkg
|
2019-09-16 18:28:34 +02:00
|
|
|
mv "$NAME"-new.pkg "$NAME".pkg
|