diff options
author | Batuhan Başerdem | 2020-09-21 12:15:55 -0400 |
---|---|---|
committer | Batuhan Başerdem | 2020-09-21 12:15:55 -0400 |
commit | 5ca0cf7b816f8598da6ef9ec907371f1fd613e89 (patch) | |
tree | d9d0b00b89421b70f71ea821e942af96e347eee2 /PKGBUILD | |
parent | 61c74f9b0db5cd07e474ebd5dd824a1b6eea3b87 (diff) | |
download | aur-5ca0cf7b816f8598da6ef9ec907371f1fd613e89.tar.gz |
PKGBUILD updated for 2020-a
Diffstat (limited to 'PKGBUILD')
-rw-r--r-- | PKGBUILD | 399 |
1 files changed, 247 insertions, 152 deletions
@@ -1,165 +1,260 @@ -# Maintainer: Grey Christoforo <first name at last name dot net> - -## This PKGBUILD creates an Arch Linux package for the proprietary MATLAB application. -## In order to build the package, the user must supply: -## 1) a plain text file installation key as file `matlab.fik` -## and -## 2) the software tarball as `matlab.tar` from MATLAB ISO image or as downloaded by the installer -## A typical matlab tarball structure looks like this: -#matlab.tar -#├── activate.ini* -#├── archives/ -#│ ├── common/ -#│ └── glnxa64/ -#│ ├── matlab/ -#│ ├── matlab_code_analyzer/ -#│ ├── matlabconnector/ -#│ ├── matlabdata/ -#│ ├── matlab_desktop_glnxa64_1535004605.enc* -#│ ├── matlab_desktop_glnxa64_1535004605.xml* -#│ ├── ... other toolbox/product files & folders go here -#├── bin/ -#├── help/ -#├── install* -#├── installer_input.txt* -#├── install_guide.pdf* -#├── java/ -#├── license_agreement.txt* -#├── patents.txt* -#├── readme.txt* -#├── sys/ -#├── trademarks.txt* -#├── ui/ -#└── VersionInfo.xml* - -## Maybe you'd create this archive like this: -## 1) download the matlab installer form themathworks, let's imagine that file is ~/Downloads/matlab_R2019b_glnxa64.zip -## 2) extract it: unzip ~/Downloads/matlab_R2019b_glnxa64.zip -d ~/matlab -## 3) run the installer almost completely through manually: ~/matlab/install -downloadFolder ${HOME}/matlab/dl -destinationFolder ${HOME}/matlab/deleteme -## you must enter all your proper license info here, the purpose of this is to get the toolbox files you'll need for the offline install later -## when you see that the installer has finished downloading everything, press the Cancel button in the gui and end the installer early -## you don't really want the installer to extract/decrypt the files it has downloaded -## 4) delete anything that might have started to be installed in the above step: rm -rf ~/matlab/deleteme -## 5) now you can create the tarball you'll need here: tar -cvf matlab.tar -C ~/matlab/ . - -## You can get your file installation key (that you must manually put into matlab.fik) from https://mathworks.com/licensecenter -## Then maybe you could make the matlab.fik file you need for this package like this: -## echo "xxxxx-xxxxx-xxxxx-xxxxx-..." > matlab.fik - -## This PKGBUILD no longer attempts to activate the product. -## The user will be prompted to undertake their activation method of choice when the GUI is first run. -## Activation could be automated by running /opt/matlab/bin/activate_matlab.sh after this package is installed. -## Activation could be further automated in matlab.install (a file that doesn't exist at this time) - -## This package will conflict with /usr/bin/mex from texlive-bin -## You could fix that by installing it with the pacman option --overwrite /usr/bin/mex -## /ust/bin/mex from texlive-bin is just a symlink - -# partial install -_partialinstall=false +# Maintainer: Batuhan Baserdem <lastname dot firstname at gmail> +# Matlab packaging for archlinux +name=MATLAB +version='2020a' +instdir="/opt/tmw/${name}-${version}" pkgname=matlab -_install_dir="/opt/${pkgname}" -# as of R2019b Update 4, MATLAB's version number is: -pkgver=9.7.0.1296695 +pkgver=9.8.0.1323502 pkgrel=1 pkgdesc='A high-level language for numerical computation and visualization' arch=('x86_64') url='http://www.mathworks.com' license=(custom) -makedepends=('gendesk') -depends=('gconf' - 'glu' - 'gstreamer0.10-base' - 'gtk2' - 'libunwind' - 'libxp' - 'libxpm' - 'libxtst' - 'nss' - 'portaudio' - 'python' - 'qt5-svg' - 'qt5-webkit' - 'qt5-websockets' - 'qt5-x11extras' - 'xerces-c') -optdepends=('gcc6: For MEX support') - -source=("local:///matlab.tar" - "local:///matlab.fik") -md5sums=("SKIP" "SKIP") -#PKGEXT='.pkg.tar' - -OPTIONS=(!strip staticlibs) +makedepends=('gendesk' 'python' 'findutils' 'libselinux') +# For 2020a; from https://hub.docker.com/r/mathworks/matlab-deps/dockerfile +# Some of the dependencies are probably not needed; if in case contact the maintainer +depends=( + 'ca-certificates' + 'lsb-release' + 'alsa-lib' + 'atk' + 'libcap' + 'libcups' + 'libdbus' + 'fontconfig' + 'libgcrypt' + 'gdk-pixbuf2' + 'gst-plugins-base' + 'gstreamer' + 'gtk2' + 'krb5' + 'nspr' + 'nss' + 'pam' + 'pango' + 'cairo' + 'libselinux' + 'libsm' + 'libsndfile' + 'libx11' + 'libxcb' + 'libxcomposite' + 'libxcursor' + 'libxdamage' + 'libxext' + 'libxfixes' + 'libxft' + 'libxi' + 'libxmu' + 'libxrandr' + 'libxrender' + 'libxslt' + 'libxss' + 'libxt' + 'libxtst' + 'libxxf86vm' + 'procps-ng' + 'xorg-server-xvfb' + 'x11vnc' + 'sudo' + 'zlib') +# These I got from arch before and afraid to play around +depends+=( + 'gcc6' + 'gconf' + 'glu' + 'gstreamer0.10-base' + 'libunwind' + 'libxp' + 'libxpm' + 'portaudio' + 'qt5-svg' + 'qt5-webkit' + 'qt5-websockets' + 'qt5-x11extras' + 'xerces-c') +provides=('matlab-licenses' 'matlab-engine-for-python' 'matlab-bin') +source=("matlab.tar.gz" + "matlab.fik" + "matlab.lic" + "matlab.script") +md5sums=(SKIP SKIP SKIP SKIP) + +# Limit products to lower size, set this to true to do a partial install +partialinstall=false +# Example list of products for a partial install; check README.md for details +products=( + "MATLAB" + #---MATLAB Product Family---# + "Curve_Fitting_Toolbox" # Math and Optimization + "Database_Toolbox" # Database Access and Reporting + "Deep_Learning_Toolbox" + "Global_Optimization_Toolbox" + "GPU_Coder" + "MATLAB_Coder" # Code Generation + "MATLAB_Compiler" # Application Deployement + "MATLAB_Compiler_SDK" + "Optimization_Toolbox" + "Parallel_Computing_Toolbox" # Parallel computing + "Partial_Differential_Equation_Toolbox" + "Reinforcement_Learning_Toolbox" + "Statistics_and_Machine_Learning_Toolbox" # AI, Data Science, Statistics + "Symbolic_Math_Toolbox" + "Text_Analytics_Toolbox" + #---Application Products---# + "Audio_Toolbox" + "Bioinformatics_Toolbox" # Computational Biology + "Computer_Vision_Toolbox" + "Image_Processing_Toolbox" # Image Processing and Computer Vision + "Signal_Processing_Toolbox" # Signal Processing + "Wavelet_Toolbox" +) prepare() { - msg2 'Generating .desktop launcher file' - gendesk -f -n --pkgname "${pkgname}" \ - --pkgdesc "${pkgdesc}" \ - --categories "Development;Education;Science;Mathematics;IDE" \ - --exec "${_install_dir}/bin/matlab -desktop" - - msg2 'Reading file installation key from matlab.fik' - _fik=$(grep -o [0-9-]* matlab.fik) - - msg2 'Modifying the installer settings' - sed -i "s,^# destinationFolder=,destinationFolder=${pkgdir}${_install_dir}," installer_input.txt - sed -i "s,^# agreeToLicense=,agreeToLicense=yes," installer_input.txt - sed -i "s,^# mode=,mode=silent," installer_input.txt - sed -i "s,^# outputFile=,outputFile=${srcdir}/installer_output.txt," installer_input.txt - sed -i "s,^# fileInstallationKey=,fileInstallationKey=${_fik}," installer_input.txt - - if [ ! -z ${_products+isSet} ]; then - msg2 'Building a package with a subset of the licensed products.' - for _product in "${_products[@]}"; do - sed -i "/^#product.${_product}$/ s/^#//" installer_input.txt - done - fi + # Extract file installation key + _fik=$(grep -o '[0-9-]*' "${srcdir}/${pkgname}.fik") + + # Modify the installer settings' + _set="${srcdir}/${pkgname}/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|^# licensePath=|licensePath=${srcdir}/matlab.lic|" "${_set}" + + # Select products if partialinstall is set + if [ "${partialinstall}" = 'true' ]; then + for _prod in "${products[@]}"; do + sed -i 's|^#\(product.'"${_prod}"'\)|\1|' "${_set}" + done + fi + + # Desktop file + # Implemented a fix for intel gpus with mesa 20; + # https://wiki.archlinux.org/index.php/MATLAB#OpenGL_acceleration + # https://wiki.archlinux.org/index.php/Intel_graphics#Old_OpenGL_Driver_(i965) + gendesk -f -n \ + --pkgname "${pkgname}" \ + --pkgdesc "${pkgdesc}" \ + --categories "Development;Education;Science;Mathematics;IDE" \ + --mimetypes "application/x-matlab-data;text/x-matlab" \ + --exec 'sh -c '\''if [ "${MATLAB_INTEL_OVERRIDE}" = "yes" ] ; then exec env MESA_LOADER_DRIVER_OVERRIDE=i965 matlab -desktop ; else exec matlab -desktop ; fi'\' } -package() { - msg2 'Starting MATLAB installer' - ## I assume it's a bad idea, but I had to unset a few vars to prevent - ## fakeroot from slowing the matlab installer to a crawl (commented out by default) - LDLP=${LD_LIBRARY_PATH} - LDP=${LD_PRELOAD} - unset LD_LIBRARY_PATH - unset LD_PRELOAD - ./install -t -inputFile "${srcdir}/installer_input.txt" - - if [ $? -eq 0 ]; then - msg2 'Matlab installer done without error' - else - meg2 'Error encountered while running matlab installer' - fi - - export LD_LIBRARY_PATH="$LDLP" - export LD_PRELOAD="$LDP" - - msg2 'Installing license agreement file' - install -D -m644 "${pkgdir}${_install_dir}/license_agreement.txt" "${pkgdir}/usr/share/licenses/tmw/${pkgname}/LICENSE" - - #msg2 'Creating links for license.dat' - #mv "${pkgdir}${_install_dir}/licenses" "${pkgdir}${_install_dir}/licenses.bak" - #ln -s "/etc/matlab/licenses/" "${pkgdir}${_install_dir}/licenses" - - msg2 'Creating links for executables' - install -d -m755 "${pkgdir}/usr/bin/" - for _executable in deploytool matlab mbuild mcc mex; do - ln -s "${_install_dir}/bin/${_executable}" "${pkgdir}/usr/bin/${_executable}" - done - - msg2 'Installing .desktop launcher files' - install -D -m644 "${pkgname}.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop" - install -D -m644 "${pkgdir}${_install_dir}/help/matlab/matlab_env/matlab_desktop_icon.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png" +build() { + # Using the installer with the -inputFile parameter will automatically + # cause the installation to be non-interactive + "${srcdir}/${pkgname}/install" -inputFile "${srcdir}/${pkgname}/installer_input.txt" + + # Create spoofing for Python API + # https://aur.archlinux.org/packages/matlab-engine-for-python/ + cd "${srcdir}/build/extern/engines/python" + # Getting appropriate python version for spoofing + _matminor="$(find "${srcdir}/build/extern/engines/python" \ + -name 'matlabengineforpython3*.so' | + sort | + sed 's|.*matlabengineforpython3_\([0-9]\)\.so|\1|g' | + tail -1)" + echo 'import sys' > "${srcdir}/sitecustomize.py" + echo "sys.version_info = (3, ${_matminor}, 0)" >> "${srcdir}/sitecustomize.py" + } -if ${_partialinstall} && [ -z ${_products+isSet} ]; then - _products=( - "MATLAB" - #"Curve_Fitting_Toolbox" - # fill in toolboxes/products here as needed for a partial install - # hint: look in your installer_input.txt file for names to use here - ) -fi +package() { + # Install the python API + # https://www.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html + cd "${srcdir}/build/extern/engines/python" + PYTHONPATH="${srcdir}" python setup.py \ + install --root="${pkgdir}" --optimize 1 + # Spoofing trick to fool matlab into believing 3.8 is supported + _matminor="$(find "${srcdir}/build/extern/engines/python" \ + -name 'matlabengineforpython3*.so' | + sort | + sed 's|.*matlabengineforpython3_\([0-9]\)\.so|\1|g' | + tail -1)" + _prefix="$(python -c 'import sys; print(sys.prefix)')" + _pytminor="$(python -c 'import sys; print(sys.version_info.minor)')" + # Correct file names + if [[ "${_pytminor}" != "${_matminor}" ]]; then + mv "${pkgdir}/${_prefix}/lib/python3".{"${_matminor}","${_pytminor}"} + _egginfo="$(ls "${pkgdir}/${_prefix}/lib/python3.${_pytminor}/site-packages/"*"-py3.${_matminor}.egg-info")" + mv "${_egginfo}" "${_egginfo%py3."${_matminor}".egg-info}py3.${_pytminor}.egg-info" + sed -i "s|sys.version_info|(3, $_matminor, 0)|" \ + "${pkgdir}/${_prefix}/lib/python3.${_pytminor}/site-packages/matlab/engine/__init__.py" + fi + # Fix erronous referances in the _arch.txt files + errstr="${srcdir}/build/extern/engines/python/" + trustr="${instdir}/extern/engines/python/" + for _dir in \ + "${srcdir}/build/extern/engines/python/build/lib/matlab/engine" \ + "${pkgdir}/${_prefix}/lib/python3.${_pytminor}/site-packages/matlab/engine" \ + ; do + sed -i "s|${errstr}|${trustr}|" "${_dir}/_arch.txt" + done + + # Moving files from build area + install -dm 0755 "$(dirname "${pkgdir}/${instdir}")" + mv "${srcdir}/build" "${pkgdir}/${instdir}" + + # Copying license + install -D -m644 "${srcdir}/${pkgname}/license_agreement.txt" \ + "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + + # Symlink executables' + install -d -m755 "${pkgdir}/usr/bin/" + for _executable in deploytool matlab mbuild mcc; 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-${pkgname}" + # Why is this in this directory, I wonder... + ln -s "${instdir}/bin/glnxa64/mlint" "${pkgdir}/usr/bin/mlint" + + # Install desktop files + install -D -m644 "${srcdir}/${pkgname}.desktop" \ + "${pkgdir}/usr/share/applications/${pkgname}.desktop" + + # Create backup directories + mkdir -p "${pkgdir}/${instdir}/backup/bin/glnxa64/mexopts" + mkdir -p "${pkgdir}/${instdir}/backup/sys/os/glnxa64" + + # Link 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/gcc-6/g" "${pkgdir}/${instdir}/${sysdir}/gcc_glnxa64.xml" + cp "${pkgdir}/${instdir}/${sysdir}/g++_glnxa64.xml" \ + "${pkgdir}/${instdir}/backup/${sysdir}/" + sed -i "s/g++/g++-6/g" "${pkgdir}/${instdir}/${sysdir}/g++_glnxa64.xml" + cp "${pkgdir}/${instdir}/${sysdir}/gfortran.xml" \ + "${pkgdir}/${instdir}/backup/${sysdir}/" + sed -i "s/gfortran/gfortran-6/g" "${pkgdir}/${instdir}/${sysdir}/gfortran.xml" + cp "${pkgdir}/${instdir}/${sysdir}/gfortran6.xml" \ + "${pkgdir}/${instdir}/backup/${sysdir}/" + sed -i "s/gfortran/gfortran-6/g" "${pkgdir}/${instdir}/${sysdir}/gfortran6.xml" + + # Remove unused library files + # <MATLABROOT>/sys/os/glnxa64/README.libstdc++ + sysdir="sys/os/glnxa64" + mkdir -p "${pkgdir}/${instdir}/backup/${sysdir}" + mv "${pkgdir}/${instdir}/${sysdir}/"{libstdc++.so.6.0.22,libstdc++.so.6} \ + "${pkgdir}/${instdir}/backup/${sysdir}/" + mv "${pkgdir}/${instdir}/${sysdir}/libgcc_s.so.1" \ + "${pkgdir}/${instdir}/backup/${sysdir}/" + mv "${pkgdir}/${instdir}/${sysdir}/"{libgfortran.so.3.0.0,libgfortran.so.3} \ + "${pkgdir}/${instdir}/backup/${sysdir}/" + mv "${pkgdir}/${instdir}/${sysdir}/"{libquadmath.so.0.0.0,libquadmath.so.0} \ + "${pkgdir}/${instdir}/backup/${sysdir}/" + + # make sure MATLAB can find libgfortran.so.3 + mkdir -p "${pkgdir}/${instdir}/backup/bin" + cp "${pkgdir}/${instdir}/bin/matlab" "${pkgdir}/${instdir}/backup/bin" + sed -i 's|LD_LIBRARY_PATH="`eval echo $LD_LIBRARY_PATH`"|LD_LIBRARY_PATH="`eval echo $LD_LIBRARY_PATH`:/usr/lib/gcc/x86_64-pc-linux-gnu/'$(pacman -Q gcc6 | awk '{print $2}' | cut -d- -f1)'"|g' "${pkgdir}/${instdir}/bin/matlab" + + # https://bbs.archlinux.org/viewtopic.php?id=236821 + # These steps were deleted cause matlab switched to new freetype + + # Install the script file to make scripting easier with matlab + install -Dm 0755 "${srcdir}/matlab.script" "${pkgdir}/usr/bin/matscript" +} |