diff options
author | Allan McRae <allan@archlinux.org> | 2015-01-27 11:41:06 +1000 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2015-02-01 21:20:08 +1000 |
commit | 295a3491adc4af5c8634ac82777212ed9c664457 (patch) | |
tree | 71617111c4816357abae2a7d89d451f06e2d63c1 /scripts/libmakepkg | |
parent | 33466000d63e88e7a2ac7b1278a5966595fba707 (diff) |
makepkg: split package tidying into libmakepkg
Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'scripts/libmakepkg')
-rw-r--r-- | scripts/libmakepkg/.gitignore | 12 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy.sh.in | 60 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/build_references.sh.in | 36 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/docs.sh.in | 35 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/emptydirs.sh.in | 35 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/libtool.sh.in | 35 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/missing_backup.sh.in | 36 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/optipng.sh.in | 41 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/purge.sh.in | 42 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/staticlibs.sh.in | 40 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/strip.sh.in | 64 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/upx.sh.in | 41 | ||||
-rw-r--r-- | scripts/libmakepkg/tidy/zipman.sh.in | 58 |
13 files changed, 535 insertions, 0 deletions
diff --git a/scripts/libmakepkg/.gitignore b/scripts/libmakepkg/.gitignore index d1c680d8..7072d8b9 100644 --- a/scripts/libmakepkg/.gitignore +++ b/scripts/libmakepkg/.gitignore @@ -1 +1,13 @@ +tidy.sh +tidy/build_references.sh +tidy/docs.sh +tidy/emptydirs.sh +tidy/libtool.sh +tidy/missing_backup.sh +tidy/optipng.sh +tidy/purge.sh +tidy/staticlibs.sh +tidy/strip.sh +tidy/upx.sh +tidy/zipman.sh util.sh diff --git a/scripts/libmakepkg/tidy.sh.in b/scripts/libmakepkg/tidy.sh.in new file mode 100644 index 00000000..483afcbf --- /dev/null +++ b/scripts/libmakepkg/tidy.sh.in @@ -0,0 +1,60 @@ +#!/bin/bash +# +# tidy.sh - functions for modifying/removing installed files before +# package creation +# +# Copyright (c) 2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_SH" ] && return +LIBMAKEPKG_TIDY_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" + +for lib in "$LIBRARY/tidy/"*.sh; do + source "$lib" +done + + +packaging_options=('strip' 'docs' 'libtool' 'staticlibs' 'emptydirs' 'zipman' + 'purge' 'upx' 'optipng' 'debug') +readonly -a packaging_options + + +tidy_install() { + cd_safe "$pkgdir" + msg "$(gettext "Tidying install...")" + + # options that remove unwanted files + tidy_docs + tidy_purge + tidy_libtool + tidy_staticlibs + tidy_emptydirs + + # warn about packaging issues + # TODO: move these to another module + warn_missing_backup + warn_build_references + + # options that reduce file sizes + tidy_zipman + tidy_strip + tidy_upx + tidy_optipng +} diff --git a/scripts/libmakepkg/tidy/build_references.sh.in b/scripts/libmakepkg/tidy/build_references.sh.in new file mode 100644 index 00000000..2611869a --- /dev/null +++ b/scripts/libmakepkg/tidy/build_references.sh.in @@ -0,0 +1,36 @@ +#!/bin/bash +# +# build_references.sh - Warn about files containing references to build directories +# +# Copyright (c) 2013-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_BUILD_REFERENCES_SH" ] && return +LIBMAKEPKG_TIDY_BUILD_REFERENCES_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" + + +warn_build_references() { + if find "${pkgdir}" -type f -print0 | xargs -0 grep -q -I "${srcdir}" ; then + warning "$(gettext "Package contains reference to %s")" "\$srcdir" + fi + if find "${pkgdir}" -type f -print0 | xargs -0 grep -q -I "${pkgdirbase}" ; then + warning "$(gettext "Package contains reference to %s")" "\$pkgdir" + fi +} diff --git a/scripts/libmakepkg/tidy/docs.sh.in b/scripts/libmakepkg/tidy/docs.sh.in new file mode 100644 index 00000000..09b7234c --- /dev/null +++ b/scripts/libmakepkg/tidy/docs.sh.in @@ -0,0 +1,35 @@ +#!/bin/bash +# +# docs.sh - Remove documentation files from the package +# +# Copyright (c) 2008-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_DOCS_SH" ] && return +LIBMAKEPKG_TIDY_DOCS_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" +source "$LIBRARY/util/option.sh" + + +tidy_docs() { + if check_option "docs" "n" && [[ -n ${DOC_DIRS[*]} ]]; then + msg2 "$(gettext "Removing doc files...")" + rm -rf -- ${DOC_DIRS[@]} + fi +} diff --git a/scripts/libmakepkg/tidy/emptydirs.sh.in b/scripts/libmakepkg/tidy/emptydirs.sh.in new file mode 100644 index 00000000..8cdb4b09 --- /dev/null +++ b/scripts/libmakepkg/tidy/emptydirs.sh.in @@ -0,0 +1,35 @@ +#!/bin/bash +# +# emptydirs.sh - Remove empty directories from the package +# +# Copyright (c) 2013-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_EMPTYDIRS_SH" ] && return +LIBMAKEPKG_TIDY_EMPTYDIRS_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" +source "$LIBRARY/util/option.sh" + + +tidy_emptydirs() { + if check_option "emptydirs" "n"; then + msg2 "$(gettext "Removing empty directories...")" + find . -depth -type d -exec rmdir '{}' + 2>/dev/null + fi +} diff --git a/scripts/libmakepkg/tidy/libtool.sh.in b/scripts/libmakepkg/tidy/libtool.sh.in new file mode 100644 index 00000000..e1dafe6d --- /dev/null +++ b/scripts/libmakepkg/tidy/libtool.sh.in @@ -0,0 +1,35 @@ +#!/bin/bash +# +# libtool.sh - Remove libtool files from the package +# +# Copyright (c) 2013-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_LIBTOOL_SH" ] && return +LIBMAKEPKG_TIDY_LIBTOOL_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" +source "$LIBRARY/util/option.sh" + + +tidy_libtool() { + if check_option "libtool" "n"; then + msg2 "$(gettext "Removing "%s" files...")" "libtool" + find . ! -type d -name "*.la" -exec rm -f -- '{}' + + fi +} diff --git a/scripts/libmakepkg/tidy/missing_backup.sh.in b/scripts/libmakepkg/tidy/missing_backup.sh.in new file mode 100644 index 00000000..fae04a27 --- /dev/null +++ b/scripts/libmakepkg/tidy/missing_backup.sh.in @@ -0,0 +1,36 @@ +#!/bin/bash +# +# missing_backup.sh - Warn about missing files in the backup array +# +# Copyright (c) 2013-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_MISSING_BACKUP_SH" ] && return +LIBMAKEPKG_TIDY_MISSING_BACKUP_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" + + +warn_missing_backup() { + local file + for file in "${backup[@]}"; do + if [[ ! -f $file ]]; then + warning "$(gettext "%s entry file not in package : %s")" "backup" "$file" + fi + done +} diff --git a/scripts/libmakepkg/tidy/optipng.sh.in b/scripts/libmakepkg/tidy/optipng.sh.in new file mode 100644 index 00000000..1cd74f54 --- /dev/null +++ b/scripts/libmakepkg/tidy/optipng.sh.in @@ -0,0 +1,41 @@ +#!/bin/bash +# +# optipng.sh - Compress PNG files using optpng +# +# Copyright (c) 2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_OPTIPNG_SH" ] && return +LIBMAKEPKG_TIDY_OPTIPNG_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" +source "$LIBRARY/util/option.sh" + + +tidy_optipng() { + if check_option "optipng" "y"; then + msg2 "$(gettext "Optimizing PNG images...")" + local png + find . -type f -iname "*.png" 2>/dev/null | while read -r png ; do + if [[ $(file --brief --mime-type "$png") = 'image/png' ]]; then + optipng "${OPTIPNGFLAGS[@]}" "$png" &>/dev/null || + warning "$(gettext "Could not optimize PNG image : %s")" "${png/$pkgdir\//}" + fi + done + fi +} diff --git a/scripts/libmakepkg/tidy/purge.sh.in b/scripts/libmakepkg/tidy/purge.sh.in new file mode 100644 index 00000000..dbc03813 --- /dev/null +++ b/scripts/libmakepkg/tidy/purge.sh.in @@ -0,0 +1,42 @@ +#!/bin/bash +# +# purge.sh - Remove unwanted files from the package +# +# Copyright (c) 2008-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_PURGE_SH" ] && return +LIBMAKEPKG_TIDY_PURGE_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" +source "$LIBRARY/util/option.sh" + + +tidy_purge() { + if check_option "purge" "y" && [[ -n ${PURGE_TARGETS[*]} ]]; then + msg2 "$(gettext "Purging unwanted files...")" + local pt + for pt in "${PURGE_TARGETS[@]}"; do + if [[ ${pt} = "${pt//\/}" ]]; then + find . ! -type d -name "${pt}" -exec rm -f -- '{}' + + else + rm -f ${pt} + fi + done + fi +} diff --git a/scripts/libmakepkg/tidy/staticlibs.sh.in b/scripts/libmakepkg/tidy/staticlibs.sh.in new file mode 100644 index 00000000..7dbe8011 --- /dev/null +++ b/scripts/libmakepkg/tidy/staticlibs.sh.in @@ -0,0 +1,40 @@ +#!/bin/bash +# +# staticlibs.sh - Remove static library files from the package +# +# Copyright (c) 2013-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_STATICLIBS_SH" ] && return +LIBMAKEPKG_TIDY_STATICLIBS_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" +source "$LIBRARY/util/option.sh" + + +tidy_staticlibs() { + if check_option "staticlibs" "n"; then + msg2 "$(gettext "Removing static library files...")" + local l + while read -rd '' l; do + if [[ -f "${l%.a}.so" || -h "${l%.a}.so" ]]; then + rm "$l" + fi + done < <(find . ! -type d -name "*.a" -print0) + fi +} diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in new file mode 100644 index 00000000..4fe334bd --- /dev/null +++ b/scripts/libmakepkg/tidy/strip.sh.in @@ -0,0 +1,64 @@ +#!/bin/bash +# +# strip.sh - Strip debugging symbols from binary files +# +# Copyright (c) 2007-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_STRIP_SH" ] && return +LIBMAKEPKG_TIDY_STRIP_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" +source "$LIBRARY/util/option.sh" + + +tidy_strip() { + if check_option "strip" "y"; then + msg2 "$(gettext "Stripping unneeded symbols from binaries and libraries...")" + # make sure library stripping variables are defined to prevent excess stripping + [[ -z ${STRIP_SHARED+x} ]] && STRIP_SHARED="-S" + [[ -z ${STRIP_STATIC+x} ]] && STRIP_STATIC="-S" + + if check_option "debug" "y"; then + dbgdir="$pkgdir-@DEBUGSUFFIX@/usr/lib/debug" + mkdir -p "$dbgdir" + fi + + local binary strip_flags + find . -type f -perm -u+w -print0 2>/dev/null | while read -rd '' binary ; do + case "$(file -bi "$binary")" in + *application/x-sharedlib*) # Libraries (.so) + strip_flags="$STRIP_SHARED";; + *application/x-archive*) # Libraries (.a) + strip_flags="$STRIP_STATIC";; + *application/x-object*) + case "$binary" in + *.ko) # Kernel module + strip_flags="$STRIP_SHARED";; + *) + continue;; + esac;; + *application/x-executable*) # Binaries + strip_flags="$STRIP_BINARIES";; + *) + continue ;; + esac + strip_file "$binary" ${strip_flags} + done + fi +} diff --git a/scripts/libmakepkg/tidy/upx.sh.in b/scripts/libmakepkg/tidy/upx.sh.in new file mode 100644 index 00000000..9012cd3e --- /dev/null +++ b/scripts/libmakepkg/tidy/upx.sh.in @@ -0,0 +1,41 @@ +#!/bin/bash +# +# upx.sh - Compress package binaries with UPX +# +# Copyright (c) 2011-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_UPX_SH" ] && return +LIBMAKEPKG_TIDY_UPX_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" +source "$LIBRARY/util/option.sh" + + +tidy_upx() { + if check_option "upx" "y"; then + msg2 "$(gettext "Compressing binaries with %s...")" "UPX" + local binary + find . -type f -perm -u+w 2>/dev/null | while read -r binary ; do + if [[ $(file --brief --mime-type "$binary") = 'application/x-executable' ]]; then + upx "${UPXFLAGS[@]}" "$binary" &>/dev/null || + warning "$(gettext "Could not compress binary : %s")" "${binary/$pkgdir\//}" + fi + done + fi +} diff --git a/scripts/libmakepkg/tidy/zipman.sh.in b/scripts/libmakepkg/tidy/zipman.sh.in new file mode 100644 index 00000000..8557789b --- /dev/null +++ b/scripts/libmakepkg/tidy/zipman.sh.in @@ -0,0 +1,58 @@ +#!/bin/bash +# +# zipman.sh - Compress man and info pages +# +# Copyright (c) 2011-2015 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[ -n "$LIBMAKEPKG_TIDY_ZIPMAN_SH" ] && return +LIBMAKEPKG_TIDY_ZIPMAN_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" +source "$LIBRARY/util/option.sh" + + +tidy_zipman() { + if check_option "zipman" "y" && [[ -n ${MAN_DIRS[*]} ]]; then + msg2 "$(gettext "Compressing man and info pages...")" + local file files inode link + while read -rd ' ' inode; do + read file + find ${MAN_DIRS[@]} -type l 2>/dev/null | + while read -r link ; do + if [[ "${file}" -ef "${link}" ]] ; then + rm -f "$link" "${link}.gz" + if [[ ${file%/*} = ${link%/*} ]]; then + ln -s -- "${file##*/}.gz" "${link}.gz" + else + ln -s -- "/${file}.gz" "${link}.gz" + fi + fi + done + if [[ -z ${files[$inode]} ]]; then + files[$inode]=$file + gzip -9 -n -f "$file" + else + rm -f "$file" + ln "${files[$inode]}.gz" "${file}.gz" + chmod 644 "${file}.gz" + fi + done < <(find ${MAN_DIRS[@]} -type f \! -name "*.gz" \! -name "*.bz2" \ + -exec @INODECMD@ '{}' + 2>/dev/null) + fi +} |