aboutsummarylogtreecommitdiffstats
path: root/PKGBUILD
blob: be3626d53b5732afeb4f6c747ce7498e2e14a837 (plain)
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
# Maintainer: Marco Rubin <marco.rubin@protonmail.com>
# Maintainer: sukanka <su975853527[AT]gmail.com>
# Contributor: Batuhan Baserdem <lastname dot firstname at gmail>

pkgbase=matlab
pkgname=(matlab)
pkgrel=2
pkgver=9.13.0.2049777
pkgdesc='A high-level language for numerical computation and visualization'
arch=(x86_64)
url='https://www.mathworks.com'
license=(custom)
depends=(matlab-meta)
makedepends=('findutils' 'gendesk' 'icoutils' 'python')
provides=('matlab-bin' 'matlab' 'python-matlabengine')
source=(
  'local://matlab.tar'
  'local://matlab.fik'
  'local://matlab.lic'
)
b2sums=(SKIP SKIP SKIP)

# Example list of products for a partial install. Check the README for details.
# Leave empty for a full installation.
_products=(
  "MATLAB"
  "Simulink"
)
_release='R2022b'
_instdir=usr/local/MATLAB/R2022b

pkgver() {
  cat "${srcdir}/${pkgbase}/VersionInfo.xml" | sed --quiet 's|\s*<version>\(.*\)</version>\s*|\1|p'
}

prepare() {
  msg2 "Release from tarball: ${_release}"

  msg2 "Modifying installer settings..."
  _fik=$(grep -o '[0-9-]*' "${srcdir}/matlab.fik")
  _set="${srcdir}/${pkgbase}/installer_input.txt"
  sed -i "s|^# destinationFolder=|destinationFolder=${srcdir}/build|" "${_set}"
  sed -i "s|^# fileInstallationKey=|fileInstallationKey=${_fik}|"     "${_set}"
  sed -i "s|^# agreeToLicense=|agreeToLicense=yes|"                   "${_set}"
  sed -i "s|^# outputFile=|outputFile=${srcdir}/../install.log|"      "${_set}"
  sed -i "s|improveMATLAB=yes|improveMATLAB=no|"                      "${_set}"
  sed -i "s|^# licensePath=|licensePath=${srcdir}/matlab.lic|"        "${_set}"

  # Install specified products if _products is non-empty.
  if [ "${#_products[@]}" -gt '0' ]; then
    for _prod in "${_products[@]}"; do
      sed -i 's|^#\(product.'"${_prod}"'\)$|\1|' "${_set}"
    done
  fi

  msg2 "Generating desktop file..."
  gendesk -f -n \
    --pkgname "${pkgbase}" \
    --pkgdesc "${pkgdesc}" \
    --name "MATLAB ${_release}" \
    --genericname "MATLAB" \
    --comment 'Programming and numeric computing platform' \
    --categories "Development;Education;Science;Mathematics;IDE" \
    --mimetypes "application/x-matlab-data;text/x-matlab" \
    --icon "${pkgbase}" \
    --exec 'matlab'
}

build() {
  msg2 "Running original installer..."
  # -inputFile makes the installation non-interactive.
  "${srcdir}/${pkgbase}/install" -inputFile "${srcdir}/${pkgbase}/installer_input.txt"
}

package_matlab() {
  msg2 "Moving files from build area to package area directly to save space..."
  install -dm755 "$(dirname "${pkgdir}/${_instdir}")"
  mv "${srcdir}/build" "${pkgdir}/${_instdir}"

  msg2 "Installing license..."
  install -Dm644 "${srcdir}/${pkgbase}/license_agreement.txt" \
    "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"

  msg2 "Symlinking executables..."
  install -dm755 "${pkgdir}/usr/bin/"
  for _executable in deploytool matlab mbuild activate_matlab.sh; do
    ln -s "/${_instdir}/bin/${_executable}" "${pkgdir}/usr/bin/${_executable}"
  done
  # This would otherwise conflict with mixtex.
  ln -s "/${_instdir}/bin/mex" "${pkgdir}/usr/bin/mex-${pkgbase}"
  # This would otherwise conflict with Mathematica.
  ln -s "/${_instdir}/bin/mcc" "${pkgdir}/usr/bin/mcc-${pkgbase}"
  # Allow external software to find the MATLAB linter binary.
  ln -s "/${_instdir}/bin/glnxa64/mlint" "${pkgdir}/usr/bin/mlint"

  msg2 "Installing desktop files..."
  install -Dm644 "${srcdir}/${pkgbase}.desktop" \
    "${pkgdir}/usr/share/applications/${pkgbase}.desktop"
  install -Dm644 "${srcdir}/${pkgbase}/bin/glnxa64/cef_resources/matlab_icon.png" \
    "$pkgdir/usr/share/pixmaps/$pkgbase.png"

  msg2 "Linking mex options to ancient libraries..."
  _sysdir="bin/glnxa64/mexopts"
  mkdir -p "${pkgdir}/${_instdir}/backup/${_sysdir}"
  cp "${pkgdir}/${_instdir}/${_sysdir}/gcc_glnxa64.xml" \
    "${pkgdir}/${_instdir}/backup/${_sysdir}/"
  sed -i "s/gcc/${gccexc}/g" "${pkgdir}/${_instdir}/${_sysdir}/gcc_glnxa64.xml"
  cp "${pkgdir}/${_instdir}/${_sysdir}/g++_glnxa64.xml" \
    "${pkgdir}/${_instdir}/backup/${_sysdir}/"
  sed -i "s/g++/${gppexc}/g" "${pkgdir}/${_instdir}/${_sysdir}/g++_glnxa64.xml"
  cp "${pkgdir}/${_instdir}/${_sysdir}/gfortran.xml" \
    "${pkgdir}/${_instdir}/backup/${_sysdir}/"
  sed -i "s/gfortran/${gfortranexc}/g" "${pkgdir}/${_instdir}/${_sysdir}/gfortran.xml"
  cp "${pkgdir}/${_instdir}/${_sysdir}/gfortran6.xml" \
    "${pkgdir}/${_instdir}/backup/${_sysdir}/"
  sed -i "s/gfortran/${gfortranexc}/g" "${pkgdir}/${_instdir}/${_sysdir}/gfortran6.xml"

  msg2 "Removing unused libraries..."
  # <MATLABROOT>/sys/os/glnxa64/README.libstdc++
  _sysdir="sys/os/glnxa64"
  install -dm755 "${pkgdir}/${_instdir}/backup/${_sysdir}"
  mv "${pkgdir}/${_instdir}/${_sysdir}/"{libstdc++.so.*,libgcc_s.so.*,libgfortran.so.*,libquadmath.so.*} \
    "${pkgdir}/${_instdir}/backup/${_sysdir}/"
  mv "${pkgdir}/${_instdir}"/bin/glnxa64/libfreetype.so.* \
    "${pkgdir}/${_instdir}"/backup/bin/glnxa64/
}