#!/bin/bash # Slackware build script for gnatstudio-bin # Copyright 2024, Zhu, Qun-Ying # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cd $(dirname $0) ; CWD=$(pwd) PRGNAM=gnatstudio-bin VERSION=${VERSION:-25.0w.20240506} SRC_FILE="gnatstudio-25.0w-20240506-x86_64-linux-bin.tar.gz" BUILD=${BUILD:-1} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} if [ -z "$ARCH" ]; then case "$( uname -m )" in x86_64 ) ARCH=x86_64 ;; * ) echo "Only x86_64 is supported." exit ;; esac fi if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" exit 0 fi TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP mkdir -p $PKG/opt/gnatstudio tar xvf $CWD/$SRC_FILE -C $PKG/opt/gnatstudio --strip-components=1 cd $PKG/opt/gnatstudio rm doinstall chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; mkdir -p $PKG/etc/profile.d cat $CWD/gnatstudio-bin.sh > $PKG/etc/profile.d/gnatstudio-bin.sh cat $CWD/gnatstudio-bin.csh > $PKG/etc/profile.d/gnatstudio-bin.csh chmod +x $PKG/etc/profile.d/* # the binary release of gnatstudio has so many duplicate files, most of them # are suppose to be symbolic links :( # change directory to support libs and replase those duplicate files with # symbolic link (cd $PKG/opt/gnatstudio/lib/gnatstudio/ ln -sf libatk-1.0.so.0 libatk-1.0.so ln -sf libatk-bridge-2.0.so.0 libatk-bridge-2.0.so ln -sf libatspi.so.0 libatspi.so ln -sf libcairo-gobject.so.2 libcairo-gobject.so ln -sf libcairo-script-interpreter.so.2 libcairo-script-interpreter.so ln -sf libcairo.so.2 libcairo.so ln -sf libcroco-0.6.so.3 libcroco-0.6.so ln -sf libcups.so.2 libcups.so ln -sf libcupsimage.so.2 libcupsimage.so ln -sf libdbus-1.so.3 libdbus-1.so ln -sf libepoxy.so.0 libepoxy.so ln -sf libexpat.so.1 libexpat.so ln -sf libffi.so.8 libffi.so ln -sf libfontconfig.so.1 libfontconfig.so ln -sf libfreetype.so.6 libfreetype.so ln -sf libfribidi.so.0 libfribidi.so ln -sf libgailutil-3.so.0 libgailutil-3.so ln -sf libgdk-3.so.0 libgdk-3.so ln -sf libgdk_pixbuf-2.0.so.0 libgdk_pixbuf-2.0.so ln -sf libgettextlib-0.20.2.so libgettextlib.so ln -sf libgettextpo.so.0 libgettextpo.so ln -sf libgettextsrc-0.20.2.so libgettextsrc.so ln -sf libgio-2.0.so.0 libgio-2.0.so ln -sf libgirepository-1.0.so.1 libgirepository-1.0.so ln -sf libgladeui-2.so.13 libgladeui-2.so ln -sf libglib-2.0.so.0 libglib-2.0.so ln -sf libgmodule-2.0.so libgmodule-2.0.so.0 ln -sf libgnatcoll_core.so.25.0w libgnatcoll_core.so.25 ln -sf libgnatcoll_gmp.so.25.0w libgnatcoll_gmp.so.25 ln -sf libgnatcoll_iconv.so.25.0w libgnatcoll_iconv.so.25 ln -sf libgnatcoll_projects.so.25.0w libgnatcoll_projects.so.25 ln -sf libgnatcoll_python3.so.25.0w libgnatcoll_python3.so.25 ln -sf libgnatcoll_sql.so.25.0w libgnatcoll_sql.so.25 ln -sf libgnatcoll_sqlite.so.25.0w libgnatcoll_sqlite.so.25 ln -sf libgnatcoll_xref.so.25.0w libgnatcoll_xref.so.25 ln -sf libgobject-2.0.so.0 libgobject-2.0.so ln -sf libgthread-2.0.so.0 libgthread-2.0.so ln -sf libgtk-3.so.0 libgtk-3.so ln -sf libgtkada.so.25.0w libgtkada.so.25 ln -sf libharfbuzz-gobject.so.0 libharfbuzz-gobject.so ln -sf libharfbuzz-subset.so.0 libharfbuzz-subset.so ln -sf libharfbuzz.so.0 libharfbuzz.so ln -sf libjpeg.so.8 libjpeg.so ln -sf libpango-1.0.so.0 libpango-1.0.so ln -sf libpangocairo-1.0.so.0 libpangocairo-1.0.so ln -sf libpangoft2-1.0.so.0 libpangoft2-1.0.so ln -sf libpixman-1.so.0 libpixman-1.so ln -sf libpng16.so.16 libpng16.so ln -sf libpng16.so libpng.so ln -sf librsvg-2.so.2 librsvg-2.so ln -sf libtextstyle.so.0 libtextstyle.so ln -sf libxml2.so.2 libxml2.so ln -sf libxmlada_dom.so.25.0w libxmlada_dom.so.25 ln -sf libxmlada_input_sources.so.25.0w libxmlada_input_sources.so.25 ln -sf libxmlada_sax.so.25.0w libxmlada_sax.so.25 ln -sf libxmlada_schema.so.25.0w libxmlada_schema.so.25 ln -sf libxmlada_unicode.so.25.0w libxmlada_unicode.so.25 ln -sf libz.so.1 libz.so chmod +x libgcc_s* preloadable_libintl.so ) (cd $PKG/opt/gnatstudio/share/gnatstudio/python/lib/python3.9/site-packages/libadalang/ ln -sf /opt/gnatstudio/lib/gnatstudio/libadalang.so ln -sf /opt/gnatstudio/lib/gnatstudio/libadasat.so ln -sf /opt/gnatstudio/lib/gnatstudio/libgcc_s.so.1 ln -sf /opt/gnatstudio/lib/gnatstudio/libgnarl-25.20240411.so ln -sf /opt/gnatstudio/lib/gnatstudio/libgnat-25.20240411.so ln -sf /opt/gnatstudio/lib/gnatstudio/libgnatcoll_core.so.25 ln -sf /opt/gnatstudio/lib/gnatstudio/libgnatcoll_core.so.25.0w ln -sf /opt/gnatstudio/lib/gnatstudio/libgnatcoll_gmp.so.25 ln -sf /opt/gnatstudio/lib/gnatstudio/libgnatcoll_gmp.so.25.0w ln -sf /opt/gnatstudio/lib/gnatstudio/libgnatcoll_iconv.so.25 ln -sf /opt/gnatstudio/lib/gnatstudio/libgnatcoll_iconv.so.25.0w ln -sf /opt/gnatstudio/lib/gnatstudio/libgnatcoll_projects.so.25 ln -sf /opt/gnatstudio/lib/gnatstudio/libgnatcoll_projects.so.25.0w ln -sf /opt/gnatstudio/lib/gnatstudio/libgpr.so ln -sf /opt/gnatstudio/lib/gnatstudio/libgpr2.so ln -sf /opt/gnatstudio/lib/gnatstudio/liblangkit_support.so ln -sf /opt/gnatstudio/lib/gnatstudio/libprettier_ada.so ln -sf /opt/gnatstudio/lib/gnatstudio/libvss-gnat.so ln -sf /opt/gnatstudio/lib/gnatstudio/libvss-json.so ln -sf /opt/gnatstudio/lib/gnatstudio/libvss-regexp.so ln -sf /opt/gnatstudio/lib/gnatstudio/libvss.so ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_dom.so.25 ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_dom.so.25.0w ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_input_sources.so.25 ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_input_sources.so.25.0w ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_sax.so.25 ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_sax.so.25.0w ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_schema.so.25 ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_schema.so.25.0w ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_unicode.so.25 ln -sf /opt/gnatstudio/lib/gnatstudio/libxmlada_unicode.so.25.0w ) (cd $PKG/opt/gnatstudio/share/doc/gnatstudio/html/tutorial rm -rf _static ln -sf /opt/gnatstudio/share/doc/gnatdoc/html/users_guide/_static cd $PKG/opt/gnatstudio/share/doc/gnatstudio/html/users_guide rm -rf _static ln -sf /opt/gnatstudio/share/doc/gnatdoc/html/users_guide/_static ) # move some packages only in # opt/gnatstudio/libexec/gnatstudio/gnathub/share/gnathub/python # to opt/gnatstudio/share/gnatstudio/python, then replace it with a softlink python_libexec_path="$PKG/opt/gnatstudio/libexec/gnatstudio/gnathub/share/gnathub/python/" python_share_path="$PKG/opt/gnatstudio/share/gnatstudio/python" mv ${python_libexec_path}/bin/flask ${python_share_path}/bin mv ${python_libexec_path}/bin/pygmentize ${python_share_path}/bin ( cd ${python_libexec_path}/lib/python3.9/site-packages rm -rf _distutils_hack pip* pkg_resources setuptools* wheel* README.txt \ distutils-precedence.pth ) mv ${python_libexec_path}/lib/python3.9/site-packages/* ${python_share_path}/lib/python3.9/site-packages/ rm -rf ${python_libexec_path} ( cd $PKG/opt/gnatstudio/libexec/gnatstudio/gnathub/share/gnathub/ ln -sf /opt/gnatstudio/share/gnatstudio/python ) function symlink_duplicate_file() { file_prefix=$(echo $1 | rev | cut -d . -f 3- | rev) file0=${file_prefix}.pyc file1=${file_prefix}.opt-1.pyc file2=${file_prefix}.opt-2.pyc sum0=$(md5sum $file0 2> /dev/null | cut -d ' ' -f 1) sum1=$(md5sum $file1 2> /dev/null | cut -d ' ' -f 1) sum2=$(md5sum $file2 2> /dev/null | cut -d ' ' -f 1) if [ ! -z "$sum2" -a "$sum2" = "$sum1" ]; then ln -sf $file2 $file1 fi if [ ! -z "$sum1" -a "$sum0" = "$sum1" ]; then ln -sf $file1 $file0 fi if [ ! -z "$sum2" -a "$sum2" = "$sum0" ]; then ln -sf $file2 $file0 fi } function remove_duplicate_pycache_files() { base_name=$(basename $1) if [ "$base_name" = "__pycache__" ] ; then (cd $1 mapfile -t match_files < <(find -name "*.opt-1.pyc" -printf '%f\n') for each_file in "${match_files[@]}"; do symlink_duplicate_file $each_file done if [ "$1" = "$PKG/opt/gnatstudio/share/gnatstudio/python/lib/python3.9/test/__pycache__" ]; then if [ -f "test_tcl.cpython-39.opt-2.pyc" ]; then symlink_duplicate_file "test_tcl.cpython-39.opt-2.pyc" elif [ -f "test_pprint.cpython-39.opt-2.pyc" ]; then symlink_duplicate_file "test_pprint.cpython-39.opt-2.pyc" else echo "no opt-2.pyc found" fi fi ) else mapfile -t subdirs < <(find $1 -maxdepth 1 -type d) for each_subdir in "${subdirs[@]}" ; do if [ "$each_subdir" != "$1" ]; then remove_duplicate_pycache_files $each_subdir fi done fi } ( cd ${python_share_path}/bin ln -sf coverage-3.9 coverage3 ln -sf coverage-3.9 coverage ln -sf python3 python # use system terminfo cd ${python_share_path}/lib/python3.9/lib-dynext/share rm -rf terminfo ln -sf /usr/share/terminfo remove_duplicate_pycache_files ${python_share_path}/lib/python3.9 ) mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION mv COPYING3 README $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/doinst.sh > $PKG/install/doinst.sh cat $CWD/douninst.sh > $PKG/install/douninst.sh cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE