termux_step_massage() { cd "$TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX" # Remove lib/charset.alias which is installed by gettext-using packages: rm -f lib/charset.alias # Remove non-english man pages: test -d share/man && (cd share/man; for f in $(ls | grep -v man); do rm -Rf $f; done ) if [ -z "${TERMUX_PKG_KEEP_INFOPAGES+x}" ]; then # Remove info pages: rm -Rf share/info fi # Remove locale files we're not interested in:: rm -Rf share/locale if [ -z "${TERMUX_PKG_KEEP_SHARE_DOC+x}" ]; then # Remove info pages: rm -Rf share/doc fi # Remove old kept libraries (readline): find . -name '*.old' -delete # Remove static libraries: if [ $TERMUX_PKG_KEEP_STATIC_LIBRARIES = "false" ]; then find . -name '*.a' -delete find . -name '*.la' -delete fi # Move over sbin to bin: for file in sbin/*; do if test -f "$file"; then mv "$file" bin/; fi; done # Remove world permissions and add write permissions. # The -f flag is used to suppress warnings about dangling symlinks (such # as ones to /system/... which may not exist on the build machine): find . -exec chmod -f u+w,g-rwx,o-rwx \{\} \; if [ "$TERMUX_DEBUG" = "" ]; then # Strip binaries. file(1) may fail for certain unusual files, so disable pipefail. set +e +o pipefail find . -type f | xargs -r file | grep -E "(executable|shared object)" | grep ELF | cut -f 1 -d : | \ xargs -r "$STRIP" --strip-unneeded --preserve-dates set -e -o pipefail fi # Remove DT_ entries which the android 5.1 linker warns about: find . -type f -print0 | xargs -r -0 "$TERMUX_ELF_CLEANER" # Fix shebang paths: while IFS= read -r -d '' file do head -c 100 "$file" | grep -E "^#\!.*\\/bin\\/.*" | grep -q -E -v "^#\! ?\\/system" && sed --follow-symlinks -i -E "1 s@^#\!(.*)/bin/(.*)@#\!$TERMUX_PREFIX/bin/\2@" "$file" done < <(find -L . -type f -print0) test ! -z "$TERMUX_PKG_RM_AFTER_INSTALL" && rm -Rf $TERMUX_PKG_RM_AFTER_INSTALL find . -type d -empty -delete # Remove empty directories if [ -d share/man ]; then # Compress man pages with gzip: find share/man -type f -print0 | xargs -r -0 gzip # Update man page symlinks, e.g. unzstd.1 -> zstd.1: while IFS= read -r -d '' file do local _link_value _link_value=$(readlink $file) rm $file ln -s $_link_value.gz $file.gz done < <(find share/man -type l -print0) fi # Sub packages: if [ -d include ] && [ -z "${TERMUX_PKG_NO_DEVELSPLIT}" ]; then # Add virtual -dev sub package if there are include files: local _DEVEL_SUBPACKAGE_FILE=$TERMUX_PKG_TMPDIR/${TERMUX_PKG_NAME}-dev.subpackage.sh echo TERMUX_SUBPKG_INCLUDE=\"include share/vala share/man/man3 lib/pkgconfig share/aclocal lib/cmake $TERMUX_PKG_INCLUDE_IN_DEVPACKAGE\" > "$_DEVEL_SUBPACKAGE_FILE" echo "TERMUX_SUBPKG_DESCRIPTION=\"Development files for ${TERMUX_PKG_NAME}\"" >> "$_DEVEL_SUBPACKAGE_FILE" if [ -n "$TERMUX_PKG_DEVPACKAGE_DEPENDS" ]; then echo "TERMUX_SUBPKG_DEPENDS=\"$TERMUX_PKG_NAME,$TERMUX_PKG_DEVPACKAGE_DEPENDS\"" >> "$_DEVEL_SUBPACKAGE_FILE" else echo "TERMUX_SUBPKG_DEPENDS=\"$TERMUX_PKG_NAME\"" >> "$_DEVEL_SUBPACKAGE_FILE" fi fi # Now build all sub packages rm -Rf "$TERMUX_TOPDIR/$TERMUX_PKG_NAME/subpackages" for subpackage in $TERMUX_PKG_BUILDER_DIR/*.subpackage.sh $TERMUX_PKG_TMPDIR/*subpackage.sh; do test ! -f "$subpackage" && continue local SUB_PKG_NAME SUB_PKG_NAME=$(basename "$subpackage" .subpackage.sh) # Default value is same as main package, but sub package may override: local TERMUX_SUBPKG_PLATFORM_INDEPENDENT=$TERMUX_PKG_PLATFORM_INDEPENDENT local SUB_PKG_DIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/subpackages/$SUB_PKG_NAME local TERMUX_SUBPKG_DEPENDS="" local TERMUX_SUBPKG_CONFLICTS="" local TERMUX_SUBPKG_REPLACES="" local TERMUX_SUBPKG_CONFFILES="" local SUB_PKG_MASSAGE_DIR=$SUB_PKG_DIR/massage/$TERMUX_PREFIX local SUB_PKG_PACKAGE_DIR=$SUB_PKG_DIR/package mkdir -p "$SUB_PKG_MASSAGE_DIR" "$SUB_PKG_PACKAGE_DIR" # shellcheck source=/dev/null source "$subpackage" for includeset in $TERMUX_SUBPKG_INCLUDE; do local _INCLUDE_DIRSET _INCLUDE_DIRSET=$(dirname "$includeset") test "$_INCLUDE_DIRSET" = "." && _INCLUDE_DIRSET="" if [ -e "$includeset" ] || [ -L "$includeset" ]; then # Add the -L clause to handle relative symbolic links: mkdir -p "$SUB_PKG_MASSAGE_DIR/$_INCLUDE_DIRSET" mv "$includeset" "$SUB_PKG_MASSAGE_DIR/$_INCLUDE_DIRSET" fi done local SUB_PKG_ARCH=$TERMUX_ARCH test -n "$TERMUX_SUBPKG_PLATFORM_INDEPENDENT" && SUB_PKG_ARCH=all cd "$SUB_PKG_DIR/massage" local SUB_PKG_INSTALLSIZE SUB_PKG_INSTALLSIZE=$(du -sk . | cut -f 1) tar -cJf "$SUB_PKG_PACKAGE_DIR/data.tar.xz" . mkdir -p DEBIAN cd DEBIAN cat > control <<-HERE Package: $SUB_PKG_NAME Architecture: ${SUB_PKG_ARCH} Installed-Size: ${SUB_PKG_INSTALLSIZE} Maintainer: $TERMUX_PKG_MAINTAINER Version: $TERMUX_PKG_FULLVERSION Homepage: $TERMUX_PKG_HOMEPAGE HERE test ! -z "$TERMUX_SUBPKG_DEPENDS" && echo "Depends: $TERMUX_SUBPKG_DEPENDS" >> control test ! -z "$TERMUX_SUBPKG_CONFLICTS" && echo "Conflicts: $TERMUX_SUBPKG_CONFLICTS" >> control test ! -z "$TERMUX_SUBPKG_REPLACES" && echo "Replaces: $TERMUX_SUBPKG_REPLACES" >> control echo "Description: $TERMUX_SUBPKG_DESCRIPTION" >> control tar -czf "$SUB_PKG_PACKAGE_DIR/control.tar.gz" . for f in $TERMUX_SUBPKG_CONFFILES; do echo "$TERMUX_PREFIX/$f" >> conffiles; done # Create the actual .deb file: TERMUX_SUBPKG_DEBFILE=$TERMUX_DEBDIR/${SUB_PKG_NAME}${DEBUG}_${TERMUX_PKG_FULLVERSION}_${SUB_PKG_ARCH}.deb test ! -f "$TERMUX_COMMON_CACHEDIR/debian-binary" && echo "2.0" > "$TERMUX_COMMON_CACHEDIR/debian-binary" ar cr "$TERMUX_SUBPKG_DEBFILE" \ "$TERMUX_COMMON_CACHEDIR/debian-binary" \ "$SUB_PKG_PACKAGE_DIR/control.tar.gz" \ "$SUB_PKG_PACKAGE_DIR/data.tar.xz" # Go back to main package: cd "$TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX" done # .. remove empty directories (NOTE: keep this last): find . -type d -empty -delete # Make sure user can read and write all files (problem with dpkg otherwise): chmod -R u+rw . }