From d30227669fbf77e59e4faf06be1352b5224f4a0b Mon Sep 17 00:00:00 2001 From: Henrik Grimler Date: Thu, 7 Mar 2019 20:35:32 +0100 Subject: [PATCH] build-package: mv code for creating subpackages to new file --- build-package.sh | 3 + docs/BUILD.md | 3 +- scripts/build/termux_create_subpackages.sh | 82 ++++++++++++++++++++++ scripts/build/termux_step_massage.sh | 81 +-------------------- 4 files changed, 88 insertions(+), 81 deletions(-) create mode 100644 scripts/build/termux_create_subpackages.sh diff --git a/build-package.sh b/build-package.sh index c7ae459e7..cb60c4ec9 100755 --- a/build-package.sh +++ b/build-package.sh @@ -116,6 +116,9 @@ termux_step_post_make_install() { # Function to cp (through tar) installed files to massage dir source scripts/build/termux_step_extract_into_massagedir.sh +# Create all subpackages. Run from termux_step_massage +source scripts/build/termux_create_subpackages.sh + # Function to run various cleanup/fixes source scripts/build/termux_step_massage.sh diff --git a/docs/BUILD.md b/docs/BUILD.md index 7acbd342a..bee5fb35f 100644 --- a/docs/BUILD.md +++ b/docs/BUILD.md @@ -62,7 +62,8 @@ Package build flow is controlled by script [build-package.sh](../build-package.s | 16 | `termux_step_make_install` | yes | Install the package. | | 17 | `termux_step_post_make_install` | yes | Hook before extraction. | | 18 | `termux_step_extract_into_massagedir` | no with `make_install` | Extracts installed files. | -| 19 | `termux_step_massage` | no | Remove unusable files and creates subpackages. | +| 19 | `termux_step_massage` | no | Remove unusable files. | +| 19.1 | `termux_create_subpackages` | no | Creates all subpackages. | | 20 | `termux_step_post_massage` | yes | Final hook before packaging. | | 21 | `termux_step_create_datatar` | no | Archive package files. | | 22 | `termux_step_create_debfile` | no | Create package. | diff --git a/scripts/build/termux_create_subpackages.sh b/scripts/build/termux_create_subpackages.sh new file mode 100644 index 000000000..e08bd93dd --- /dev/null +++ b/scripts/build/termux_create_subpackages.sh @@ -0,0 +1,82 @@ +termux_create_subpackages() { + # 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 +} diff --git a/scripts/build/termux_step_massage.sh b/scripts/build/termux_step_massage.sh index 8d739f02e..19e34cf60 100644 --- a/scripts/build/termux_step_massage.sh +++ b/scripts/build/termux_step_massage.sh @@ -69,86 +69,7 @@ termux_step_massage() { 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 + termux_create_subpackages # .. remove empty directories (NOTE: keep this last): find . -type d -empty -delete