forked from artix/artools
		
	Compare commits
	
		
			53 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d8195e2288 | |||
| bfe9130cfb | |||
| 8873a71824 | |||
| bb86a05f2f | |||
| bd611c1af2 | |||
| f4e8f703ea | |||
| aa83bc79bb | |||
| 1bb9687ece | |||
| 48ced03735 | |||
| 0437e66091 | |||
| 9af6d02dea | |||
| 685992cca3 | |||
| 816e13895f | |||
| 6a3f48f181 | |||
| b4d9195c03 | |||
| 0123e6d044 | |||
| e2b2a21ed1 | |||
| 0e2e2875db | |||
| a4d006adef | |||
| 98926fbdd0 | |||
| a1a2289e18 | |||
| 057cbf1691 | |||
| 0b05cbeba1 | |||
| ed5dad3066 | |||
| 76cce316a2 | |||
| 7c152b4f60 | |||
| 79c831c616 | |||
| 6b27c82b86 | |||
| 2cc5047dda | |||
| 08ab8c2137 | |||
| 9ddd962c2c | |||
| a8c07bd7f3 | |||
| 1fcf78bb47 | |||
| 167265944d | |||
| 7ef931026e | |||
| bef2a0b3fa | |||
| 8d6f12f5a9 | |||
| bf6fc3fcff | |||
| 11c73f1086 | |||
| 62e4795000 | |||
| 2f92ba003b | |||
| c19b80adbd | |||
| 1812296bc3 | |||
| cfb3ced261 | |||
| 77c7d1db8e | |||
| eb9f03c5c1 | |||
| 16d0c1759d | |||
| 922afb4e69 | |||
| d22017e1a1 | |||
| 1ea7d2ca8b | |||
| 3cd8632c61 | |||
| b425eac181 | |||
| 4b2d516258 | 
							
								
								
									
										13
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| VERSION=0.12 | VERSION=0.14 | ||||||
|  |  | ||||||
| CHROOT_VERSION=0.9 | CHROOT_VERSION=0.9 | ||||||
|  |  | ||||||
| @@ -34,13 +34,11 @@ PKG_BIN = \ | |||||||
| 	bin/pkg/deploypkg \ | 	bin/pkg/deploypkg \ | ||||||
| 	bin/pkg/commitpkg \ | 	bin/pkg/commitpkg \ | ||||||
| 	bin/pkg/comparepkg \ | 	bin/pkg/comparepkg \ | ||||||
| 	bin/pkg/checkpkg \ |  | ||||||
| 	bin/pkg/mkchrootpkg \ | 	bin/pkg/mkchrootpkg \ | ||||||
| 	bin/pkg/pkg2yaml \ | 	bin/pkg/pkg2yaml \ | ||||||
| 	bin/pkg/buildtree \ | 	bin/pkg/buildtree \ | ||||||
| 	bin/pkg/lddd \ | 	bin/pkg/lddd \ | ||||||
| 	bin/pkg/finddeps \ | 	bin/pkg/links-add | ||||||
| 	bin/pkg/find-libdeps |  | ||||||
|  |  | ||||||
| LN_COMMITPKG = \ | LN_COMMITPKG = \ | ||||||
| 	extrapkg \ | 	extrapkg \ | ||||||
| @@ -87,9 +85,6 @@ LN_DEPLOYPKG = \ | |||||||
| PKG_LIBS = \ | PKG_LIBS = \ | ||||||
| 	$(wildcard lib/pkg/*) | 	$(wildcard lib/pkg/*) | ||||||
|  |  | ||||||
| PKG_LISTS = \ |  | ||||||
| 	$(wildcard data/pkglists/*.list) |  | ||||||
|  |  | ||||||
| PKG_UTIL = lib/util-pkg.sh | PKG_UTIL = lib/util-pkg.sh | ||||||
|  |  | ||||||
| PKG_DATA = \ | PKG_DATA = \ | ||||||
| @@ -169,7 +164,7 @@ install_pkg: | |||||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||||
| 	install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR) | 	install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR) | ||||||
|  |  | ||||||
| 	$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides | 	$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove | ||||||
|  |  | ||||||
| 	for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | 	for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||||
| 	for l in $(LN_BUILDPKG); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done | 	for l in $(LN_BUILDPKG); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||||
| @@ -185,8 +180,6 @@ install_pkg: | |||||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||||
| 	install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | 	install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists |  | ||||||
| 	install $(FILEMODE) $(PKG_LISTS) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists |  | ||||||
| install_cpio: | install_cpio: | ||||||
| 	+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install | 	+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install | ||||||
|  |  | ||||||
|   | |||||||
| @@ -28,6 +28,7 @@ artools | |||||||
| - pkg: | - pkg: | ||||||
|   * namcap |   * namcap | ||||||
|   * git-subrepo |   * git-subrepo | ||||||
|  |   * jshon | ||||||
|  |  | ||||||
| - iso: | - iso: | ||||||
|   * dosfstools |   * dosfstools | ||||||
|   | |||||||
| @@ -71,9 +71,14 @@ else | |||||||
|     cache_dirs=("$cache_dir") |     cache_dirs=("$cache_dir") | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | pacconf_cmd=$(command -v pacman-conf || command -v pacconf) | ||||||
|  | host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#')) | ||||||
|  |      | ||||||
| copy_hostconf () { | copy_hostconf () { | ||||||
|     cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d" |     cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d" | ||||||
|  |      | ||||||
|  |     printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist" | ||||||
|  |      | ||||||
|     [[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" |     [[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" | ||||||
|  |  | ||||||
|     [[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" |     [[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" | ||||||
| @@ -104,6 +109,13 @@ chroot_extra_mount() { | |||||||
|     for m in ${bindmounts_rw[@]}; do |     for m in ${bindmounts_rw[@]}; do | ||||||
|         chroot_mount "${m%%:*}" "$1${m##*:}" -B |         chroot_mount "${m%%:*}" "$1${m##*:}" -B | ||||||
|     done |     done | ||||||
|  |      | ||||||
|  |     for host_mirror in "${host_mirrors[@]}"; do | ||||||
|  |         if [[ $host_mirror == *file://* ]]; then | ||||||
|  |             host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') | ||||||
|  |             chroot_mount "$host_mirror_path" "$1$host_mirror_path" -Br | ||||||
|  |         fi | ||||||
|  |     done | ||||||
| } | } | ||||||
|  |  | ||||||
| umask 0022 | umask 0022 | ||||||
|   | |||||||
| @@ -157,12 +157,12 @@ done | |||||||
|  |  | ||||||
| shift $(($OPTIND - 1)) | shift $(($OPTIND - 1)) | ||||||
|  |  | ||||||
| ${pretend} && display_settings && exit 1 |  | ||||||
|  |  | ||||||
| check_root | check_root | ||||||
|  |  | ||||||
| prepare_traps | prepare_traps | ||||||
|  |  | ||||||
| prepare_build | prepare_build | ||||||
|  |  | ||||||
|  | ${pretend} && display_settings && exit 1 | ||||||
|  |  | ||||||
| build | build | ||||||
|   | |||||||
| @@ -59,7 +59,7 @@ show_deps(){ | |||||||
|  |  | ||||||
|     local archver=$(get_full_version $pkg) |     local archver=$(get_full_version $pkg) | ||||||
|  |  | ||||||
|     msg "repo: %s" "$repo" |     msg2 "repo: %s" "$repo" | ||||||
|     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" |     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" | ||||||
|     msg2 "pkgname: %s" "${pkgname[*]}" |     msg2 "pkgname: %s" "${pkgname[*]}" | ||||||
|     [[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}" |     [[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}" | ||||||
| @@ -78,7 +78,7 @@ from_arch(){ | |||||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" |     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" | ||||||
|  |  | ||||||
|     local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg |     local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||||
|     local repo=$(find_repo "$package") |     local repo=$(find_repo "$package" "${staging}" "${unstable}") | ||||||
|  |  | ||||||
|     src=$package/repos/$repo |     src=$package/repos/$repo | ||||||
|  |  | ||||||
| @@ -87,7 +87,7 @@ from_arch(){ | |||||||
|  |  | ||||||
|     dest=${TREE_DIR_ARTIX}/$tree_dir/$pkg/trunk |     dest=${TREE_DIR_ARTIX}/$tree_dir/$pkg/trunk | ||||||
|  |  | ||||||
|     msg "artix tree: %s" "$tree_dir" |     msg "tree: %s" "$tree_dir" | ||||||
|     show_deps "$src" "$repo" |     show_deps "$src" "$repo" | ||||||
|  |  | ||||||
|     if [[ -d $dest ]];then |     if [[ -d $dest ]];then | ||||||
| @@ -114,7 +114,7 @@ view_build(){ | |||||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" |     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" | ||||||
|  |  | ||||||
|     local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg |     local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||||
|     local repo=$(find_repo "$pkg_path") |     local repo=$(find_repo "$pkg_path" "${staging}" "${unstable}") | ||||||
|  |  | ||||||
|     src=$pkg_path/repos/$repo |     src=$pkg_path/repos/$repo | ||||||
|  |  | ||||||
| @@ -139,6 +139,8 @@ import=false | |||||||
| view=false | view=false | ||||||
| createnew=false | createnew=false | ||||||
| conf=false | conf=false | ||||||
|  | unstable=false | ||||||
|  | staging=true | ||||||
|  |  | ||||||
| PACKAGE='' | PACKAGE='' | ||||||
|  |  | ||||||
| @@ -157,6 +159,8 @@ usage() { | |||||||
|     echo "    -y            Don't clone or pull artix repos" |     echo "    -y            Don't clone or pull artix repos" | ||||||
|     echo '    -i            Import a package from arch repos' |     echo '    -i            Import a package from arch repos' | ||||||
|     echo '    -n            Make new remote subrepo and clone it' |     echo '    -n            Make new remote subrepo and clone it' | ||||||
|  |     echo '    -u            Include kde & gnome unstable (only with -i)' | ||||||
|  |     echo '    -w            Exclude staging (only with -i)' | ||||||
|     echo '    -v            View package depends' |     echo '    -v            View package depends' | ||||||
|     echo '    -h            This help' |     echo '    -h            This help' | ||||||
|     echo '' |     echo '' | ||||||
| @@ -166,7 +170,7 @@ usage() { | |||||||
|  |  | ||||||
| orig_argv=("$0" "$@") | orig_argv=("$0" "$@") | ||||||
|  |  | ||||||
| opts='p:t:g:sinzyvh' | opts='p:t:g:uwsinzyvh' | ||||||
|  |  | ||||||
| while getopts "${opts}" arg; do | while getopts "${opts}" arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
| @@ -178,6 +182,8 @@ while getopts "${opts}" arg; do | |||||||
|         y) sync_artix=false ;; |         y) sync_artix=false ;; | ||||||
|         i) import=true ;; |         i) import=true ;; | ||||||
|         n) createnew=true ;; |         n) createnew=true ;; | ||||||
|  |         w) staging=false ;; | ||||||
|  |         u) unstable=true ;; | ||||||
|         v) view=true ;; |         v) view=true ;; | ||||||
|         h|?) usage 0 ;; |         h|?) usage 0 ;; | ||||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; |         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||||
|   | |||||||
| @@ -1,80 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # |  | ||||||
| # Copyright (C) 2018-19 artoo@artixlinux.org |  | ||||||
| # Copyright (C) 2018 Artix Linux Developers |  | ||||||
| # |  | ||||||
| # 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; version 2 of the License. |  | ||||||
| # |  | ||||||
| # 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. |  | ||||||
|  |  | ||||||
| . @libdir@/artools/util-base.sh |  | ||||||
| . @libdir@/artools/util-pkg.sh |  | ||||||
|  |  | ||||||
| shopt -s extglob |  | ||||||
|  |  | ||||||
| load_user_info |  | ||||||
|  |  | ||||||
| load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" |  | ||||||
| load_vars /etc/makepkg.conf |  | ||||||
|  |  | ||||||
| if [[ ! -f PKGBUILD ]]; then |  | ||||||
|     die 'This must be run in the directory of a built package.' |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| . ./PKGBUILD |  | ||||||
| if [[ $arch == 'any' ]]; then |  | ||||||
|     CARCH='any' |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| STARTDIR=$(pwd) |  | ||||||
| TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX) |  | ||||||
|  |  | ||||||
| for _pkgname in "${pkgname[@]}"; do |  | ||||||
|     target_pkgver=$(get_full_version "$_pkgname") |  | ||||||
|     if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then |  | ||||||
|         die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     ln -s "$pkgfile" "$TEMPDIR" |  | ||||||
|  |  | ||||||
|     pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$_pkgname") |  | ||||||
|  |  | ||||||
|     if [[ $? -ne 0 ]]; then |  | ||||||
|         die "Couldn't download previous package for %s." "$_pkgname" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     oldpkg=${pkgurl##*://*/} |  | ||||||
|  |  | ||||||
|     if [[ ${oldpkg##*/} = ${pkgfile##*/} ]]; then |  | ||||||
|         die "The built package (%s) is the one in the repo right now!" "$_pkgname" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     if [[ $pkgurl = file://* ]]; then |  | ||||||
|         ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg" |  | ||||||
|     elif [[ -f "$PKGDEST/$oldpkg" ]]; then |  | ||||||
|         ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg" |  | ||||||
|     elif [[ -f "$STARTDIR/$oldpkg" ]]; then |  | ||||||
|         ln -s "$STARTDIR/$oldpkg" "$TEMPDIR/$oldpkg" |  | ||||||
|     else |  | ||||||
|         curl -fsLC - --retry 3 --retry-delay 3 -o "$TEMPDIR/$oldpkg" "$pkgurl" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     bsdtar tf "$TEMPDIR/$oldpkg" | sort > "$TEMPDIR/filelist-$_pkgname-old" |  | ||||||
|     bsdtar tf "$pkgfile" | sort > "$TEMPDIR/filelist-$_pkgname" |  | ||||||
|  |  | ||||||
|     sdiff -s "$TEMPDIR/filelist-$_pkgname-old" "$TEMPDIR/filelist-$_pkgname" |  | ||||||
|  |  | ||||||
|     find-libprovides "$TEMPDIR/$oldpkg" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname-old" |  | ||||||
|     find-libprovides "$pkgfile" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname" |  | ||||||
|     if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then |  | ||||||
|         msg "Sonames differ in %s!" "$_pkgname" |  | ||||||
|         echo "$diff_output" |  | ||||||
|     else |  | ||||||
|         msg "No soname differences for %s" "$_pkgname." |  | ||||||
|     fi |  | ||||||
| done |  | ||||||
| @@ -15,6 +15,22 @@ | |||||||
| . @libdir@/artools/util-base.sh | . @libdir@/artools/util-base.sh | ||||||
| . @libdir@/artools/util-pkg.sh | . @libdir@/artools/util-pkg.sh | ||||||
|  |  | ||||||
|  | get_path(){ | ||||||
|  |     local repo="$1" pkg=trunk/PKGBUILD | ||||||
|  |     if [[ $repo != trunk ]]; then | ||||||
|  |         [[ -f repos/$repo-${ARCH}/PKGBUILD ]] && pkg=repos/$repo-${ARCH}/PKGBUILD | ||||||
|  |         [[ -f repos/$repo-any/PKGBUILD ]] && pkg=repos/$repo-any/PKGBUILD | ||||||
|  |     fi | ||||||
|  |     echo $pkg | ||||||
|  | } | ||||||
|  |  | ||||||
|  | prepare_commit(){ | ||||||
|  |     local dest="$1" | ||||||
|  |     [[ -d repos/$dest ]] && git rm -r repos/$dest | ||||||
|  |     [[ ! -d repos ]] && mkdir repos | ||||||
|  |     [[ ! -d repos/$dest ]] && mkdir repos/$dest | ||||||
|  | } | ||||||
|  |  | ||||||
| commit_pkg(){ | commit_pkg(){ | ||||||
|     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") |     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||||
|     if [[ -n ${git_tree} ]];then |     if [[ -n ${git_tree} ]];then | ||||||
| @@ -25,9 +41,13 @@ commit_pkg(){ | |||||||
|  |  | ||||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} |         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||||
|  |  | ||||||
|         . trunk/PKGBUILD |         local pkgbuild=$(get_path "${REPO_SRC}") | ||||||
|  |  | ||||||
|  |         . $pkgbuild | ||||||
|         [[ $arch == 'any' ]] && CARCH=any |         [[ $arch == 'any' ]] && CARCH=any | ||||||
|         local ver=$(get_full_version "${PACKAGE}") |  | ||||||
|  |         local version=$(get_full_version) | ||||||
|  |  | ||||||
|         local commit_msg="" |         local commit_msg="" | ||||||
|  |  | ||||||
|         if ${remove};then |         if ${remove};then | ||||||
| @@ -36,14 +56,14 @@ commit_pkg(){ | |||||||
|                 local pkg=${PACKAGE} |                 local pkg=${PACKAGE} | ||||||
|                 git rm -r trunk |                 git rm -r trunk | ||||||
|             else |             else | ||||||
|                 local pkg="${PACKAGE}-$ver" |                 local pkg="${PACKAGE}-$version" | ||||||
|                 git rm -r repos/"${REPO_SRC}-$CARCH" |                 git rm -r repos/"${REPO_SRC}-$CARCH" | ||||||
|             fi |             fi | ||||||
|             commit_msg="[${REPO_SRC}] '$pkg' ${action}" |             commit_msg="[${REPO_SRC}] '$pkg' ${action}" | ||||||
|             msg "Action: %s" "$commit_msg" |             msg "Action: %s" "$commit_msg" | ||||||
|         else |         else | ||||||
|             local action='modify' |             local action='modify' | ||||||
|             commit_msg="[${REPO_SRC}] '${PACKAGE}-$ver' ${action}" |             commit_msg="[${REPO_SRC}] '${PACKAGE}-$version' ${action}" | ||||||
|             msg "Action: %s" "$commit_msg" |             msg "Action: %s" "$commit_msg" | ||||||
|             git add . |             git add . | ||||||
|  |  | ||||||
| @@ -76,17 +96,18 @@ symlink_commit_pkg(){ | |||||||
|  |  | ||||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} |         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||||
|  |  | ||||||
|         . trunk/PKGBUILD |         local pkgbuild=$(get_path "${REPO_SRC}") | ||||||
|  |  | ||||||
|  |         . $pkgbuild | ||||||
|         [[ $arch == 'any' ]] && CARCH=any |         [[ $arch == 'any' ]] && CARCH=any | ||||||
|         local ver=$(get_full_version "${PACKAGE}") |  | ||||||
|  |         local version=$(get_full_version) | ||||||
|  |  | ||||||
|         if [[ ${REPO_SRC} == 'trunk' ]];then |         if [[ ${REPO_SRC} == 'trunk' ]];then | ||||||
|             local action='add' |             local action='add' | ||||||
|             local dest="${REPO_DEST}-$CARCH" |             local dest="${REPO_DEST}-$CARCH" | ||||||
|  |  | ||||||
|             [[ -d repos/$dest ]] && git rm -r repos/$dest |             prepare_commit "$dest" | ||||||
|             [[ ! -d repos ]] && mkdir repos |  | ||||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest |  | ||||||
|  |  | ||||||
|             cp trunk/* repos/$dest/ |             cp trunk/* repos/$dest/ | ||||||
|         else |         else | ||||||
| @@ -94,14 +115,12 @@ symlink_commit_pkg(){ | |||||||
|             local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH" |             local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH" | ||||||
|  |  | ||||||
|             [[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD" |             [[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD" | ||||||
|             [[ -d repos/$dest ]] && git rm -r repos/$dest |             prepare_commit "$dest" | ||||||
|             [[ ! -d repos ]] && mkdir repos |  | ||||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest |  | ||||||
|  |  | ||||||
|             cp repos/$src/* repos/$dest/ |             cp repos/$src/* repos/$dest/ | ||||||
|             git rm -r repos/$src |             git rm -r repos/$src | ||||||
|         fi |         fi | ||||||
|         local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$ver' ${action}" |         local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$version' ${action}" | ||||||
|         msg "Action: %s" "$commit_msg" |         msg "Action: %s" "$commit_msg" | ||||||
|  |  | ||||||
|         git add . |         git add . | ||||||
|   | |||||||
| @@ -15,73 +15,162 @@ | |||||||
| . @libdir@/artools/util-base.sh | . @libdir@/artools/util-base.sh | ||||||
| . @libdir@/artools/util-pkg.sh | . @libdir@/artools/util-pkg.sh | ||||||
|  |  | ||||||
|  | compare(){ | ||||||
|  |     local pkgpath="$1" group="$2" | ||||||
|  |     local pkg=${pkgpath##*/} | ||||||
|  |     local artixrepo=$(find_repo "$package" "${staging}" "${unstable}") | ||||||
|  |     local artixshow=${artixrepo%-*} | ||||||
|  |     local pkgbuild=$pkgpath/repos/$artixrepo/PKGBUILD | ||||||
|  |  | ||||||
|  |     if [[ -f $pkgbuild ]];then | ||||||
|  |  | ||||||
|  |         . $pkgbuild 2>/dev/null | ||||||
|  |         local artixver=$(get_full_version $pkg) | ||||||
|  |  | ||||||
|  |         local archpath=$(get_import_path $pkg) | ||||||
|  |  | ||||||
|  |         local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}") | ||||||
|  |  | ||||||
|  |         local archshow=${archrepo%-*} | ||||||
|  |         pkgbuild=$archpath/repos/$archrepo/PKGBUILD | ||||||
|  |  | ||||||
|  |         if [[ -f $pkgbuild ]];then | ||||||
|  |             . $pkgbuild 2>/dev/null | ||||||
|  |             local archver=$(get_full_version $pkg) | ||||||
|  |         fi | ||||||
|  |  | ||||||
|  |         local result=$(vercmp "$artixver" "$archver") | ||||||
|  |  | ||||||
|  |         local repomatch=false | ||||||
|  |         [[ "$archrepo" == "$artixrepo" ]] && repomatch=true | ||||||
|  |  | ||||||
|  |         if ${move};then | ||||||
|  |  | ||||||
|  |             if [ $result -gt -1 ];then | ||||||
|  |                 case $artixrepo in | ||||||
|  |                     *testing*|*staging*) | ||||||
|  |                         if $repomatch;then | ||||||
|  |                             msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group" | ||||||
|  |                         else | ||||||
|  |                             msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group" | ||||||
|  |                         fi | ||||||
|  |                     ;; | ||||||
|  |                 esac | ||||||
|  |             fi | ||||||
|  |  | ||||||
|  |         elif ${upgrades};then | ||||||
|  |  | ||||||
|  |             if [ $result -eq -1 ];then | ||||||
|  |                 msg_row_upgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group" | ||||||
|  |             fi | ||||||
|  |  | ||||||
|  |         elif ${downgrades};then | ||||||
|  |  | ||||||
|  |             if [ $result -eq 1 ];then | ||||||
|  |                 if [[ -n $archver ]] && [[ -n $archrepo ]];then | ||||||
|  |                     msg_row_downgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group" | ||||||
|  |                 fi | ||||||
|  |             fi | ||||||
|  |  | ||||||
|  |         fi | ||||||
|  |         unset pkgver epoch pkgrel artixver archver pkgbuild archpath | ||||||
|  |  | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | is_db_entry() { | ||||||
|  |     local pkgname="$1" repo="$(arch2artix $2)" | ||||||
|  |     if [[ -d ${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then | ||||||
|  |         return 0 | ||||||
|  |     fi | ||||||
|  |     return 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | check_db(){ | ||||||
|  |     local pkgpath="$1" | ||||||
|  |     local pkg=${pkgpath##*/} | ||||||
|  |     local sarch=(any ${ARCH}) | ||||||
|  |     local arch_repos=$(arch_repos "${staging}" "${unstable}") | ||||||
|  |  | ||||||
|  |     for repo in ${arch_repos[@]};do | ||||||
|  |  | ||||||
|  |         for a in ${sarch[@]};do | ||||||
|  |  | ||||||
|  |             local pkgbuild=$pkgpath/repos/$repo-$a/PKGBUILD | ||||||
|  |  | ||||||
|  |             if [[ -f $pkgbuild ]];then | ||||||
|  |  | ||||||
|  |                 . $pkgbuild 2>/dev/null | ||||||
|  |                 local artixver=$(get_full_version $pkg) | ||||||
|  |                 local is_entry=false | ||||||
|  |  | ||||||
|  |                 for name in ${pkgname[@]};do | ||||||
|  |  | ||||||
|  |                     if is_db_entry "$name-$artixver" "$repo";then | ||||||
|  |                         is_entry=true | ||||||
|  |                     fi | ||||||
|  |                     if ! $is_entry; then | ||||||
|  |                         msg_row "${table2}" "$repo" "$name" "$artixver" "$is_entry" | ||||||
|  |                     fi | ||||||
|  |                 done | ||||||
|  |                 unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase | ||||||
|  |             fi | ||||||
|  |         done | ||||||
|  |     done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | update_db_cache(){ | ||||||
|  |     msg "Updating database cache" | ||||||
|  |     for repo in "${searchrepos[@]}"; do | ||||||
|  |         local cachedir=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo} | ||||||
|  |         rm -rf "$cachedir" | ||||||
|  |         mkdir -p "$cachedir" | ||||||
|  |         msg2 "%s" "$repo" | ||||||
|  |         curl -s "${REPOS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" \ | ||||||
|  |             | bsdtar -xf - -C "$cachedir" | ||||||
|  |     done | ||||||
|  |     msg "Done" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | query_db() { | ||||||
|  |     msg_table_header "${table3}" "Repo" "Package" "Library" | ||||||
|  |     for repo in "${searchrepos[@]}"; do | ||||||
|  |         local prefix= | ||||||
|  |         local db=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}/ | ||||||
|  |         if [[ -d ${db} ]]; then | ||||||
|  |             while read -rd '' pkg; do | ||||||
|  |                 read -r match | ||||||
|  |                 pkg=${pkg#${db}} | ||||||
|  |                 pkg="${pkg%/*}" | ||||||
|  |  | ||||||
|  |                 msg_row "${table3}" "${repo}" "${pkg}" "${match}" | ||||||
|  |             done < <(grep -rZ "${library}" "${db}") | sort -u | ||||||
|  |         fi | ||||||
|  |     done | ||||||
|  |     exit 0 | ||||||
|  | } | ||||||
|  |  | ||||||
| show_version_table(){ | show_version_table(){ | ||||||
|     msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" |  | ||||||
|  |     if ${check};then | ||||||
|  |         ${sync} && update_db_cache | ||||||
|  |         msg_table_header "${table2}" "Repo" "Package" "Version" "Database" | ||||||
|  |     elif ${query};then | ||||||
|  |         ${sync} && update_db_cache | ||||||
|  |         query_db | ||||||
|  |     else | ||||||
|  |         msg_table_header "${table}" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" "Group" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|     for tree in ${TREE_NAMES_ARTIX[@]};do |     for tree in ${TREE_NAMES_ARTIX[@]};do | ||||||
|  |  | ||||||
|         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) |         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) | ||||||
|  |  | ||||||
|         for package in ${git[@]}; do |         for package in ${git[@]}; do | ||||||
|  |             if ${check};then | ||||||
|             local pkg=${package##*/} |                 check_db "$package" | ||||||
|             local artixrepo=$(find_repo "$package" "${staging}" "${unstable}") |             else | ||||||
|             local artixshow=${artixrepo%-*} |                 compare "$package" "$tree" | ||||||
|             local pkgbuild=$package/repos/$artixrepo/PKGBUILD |  | ||||||
|  |  | ||||||
|             if [[ -f $pkgbuild ]];then |  | ||||||
|  |  | ||||||
|                 . $pkgbuild 2>/dev/null |  | ||||||
|                 local artixver=$(get_full_version $pkg) |  | ||||||
|  |  | ||||||
|                 local archpath=$(get_import_path $pkg) |  | ||||||
|  |  | ||||||
|                 local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}") |  | ||||||
|  |  | ||||||
|                 local archshow=${archrepo%-*} |  | ||||||
|                 pkgbuild=$archpath/repos/$archrepo/PKGBUILD |  | ||||||
|  |  | ||||||
|                 if [[ -f $pkgbuild ]];then |  | ||||||
|                     . $pkgbuild 2>/dev/null |  | ||||||
|                     local archver=$(get_full_version $pkg) |  | ||||||
|                 fi |  | ||||||
|  |  | ||||||
|                 local result=$(vercmp "$artixver" "$archver") |  | ||||||
|  |  | ||||||
|                 local repomatch=false |  | ||||||
|                 [[ "$archrepo" == "$artixrepo" ]] && repomatch=true |  | ||||||
|  |  | ||||||
|                 if ${move};then |  | ||||||
|  |  | ||||||
|                     if [ $result -gt -1 ];then |  | ||||||
|                         case $artixrepo in |  | ||||||
|                             *testing*|*staging*) |  | ||||||
|                                 if $repomatch;then |  | ||||||
|                                     msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" |  | ||||||
|                                 else |  | ||||||
|                                     msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" |  | ||||||
|                                 fi |  | ||||||
|                             ;; |  | ||||||
|                         esac |  | ||||||
|                     fi |  | ||||||
|  |  | ||||||
|                 elif ${upgrades};then |  | ||||||
|  |  | ||||||
|                     if [ $result -eq -1 ];then |  | ||||||
|                         msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" |  | ||||||
|                     fi |  | ||||||
|  |  | ||||||
|                 elif ${downgrades};then |  | ||||||
|  |  | ||||||
|                     if [ $result -eq 1 ];then |  | ||||||
|                         if [[ -n $archver ]] && [[ -n $archrepo ]];then |  | ||||||
|                             msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" |  | ||||||
|                         fi |  | ||||||
|                     fi |  | ||||||
|  |  | ||||||
|                 fi |  | ||||||
|                 unset pkgver epoch pkgrel artixver archver pkgbuild archpath |  | ||||||
|  |  | ||||||
|             fi |             fi | ||||||
|         done |         done | ||||||
|     done |     done | ||||||
| @@ -98,14 +187,35 @@ staging=true | |||||||
| upgrades=false | upgrades=false | ||||||
| downgrades=false | downgrades=false | ||||||
| move=false | move=false | ||||||
|  | check=false | ||||||
|  | sync=false | ||||||
|  | query=false | ||||||
|  |  | ||||||
|  | artix_repos=( | ||||||
|  |     'goblins' 'gremlins' 'system' 'world' | ||||||
|  |     'galaxy-goblins' 'galaxy-gremlins' 'galaxy' | ||||||
|  |     'lib32-goblins' 'lib32-gremlins' 'lib32' | ||||||
|  |     'gnome-wobble' 'kde-wobble' | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | readonly table="%-20s %-20s %-25s %-25s %-25s %-20s" | ||||||
|  | readonly table2="%-20s %-35s %-20s %-10s" | ||||||
|  | readonly table3="%-20s %-45s %s" | ||||||
|  |  | ||||||
|  | searchrepos=(${artix_repos[@]}) | ||||||
|  |  | ||||||
| usage() { | usage() { | ||||||
|     echo "Usage: ${0##*/} [options]" |     echo "Usage: ${0##*/} [options] (with -q [libname])" | ||||||
|     echo '    -u            Show upgrade packages' |     echo '    -u            Show upgrade packages' | ||||||
|     echo '    -d            Show downgrade packages' |     echo '    -d            Show downgrade packages' | ||||||
|     echo '    -m            Show packages to move' |     echo '    -m            Show packages to move' | ||||||
|     echo "    -x            Don't inlcude staging packages" |     echo "    -x            Don't inlcude staging packages" | ||||||
|     echo '    -y            Include unstable kde and gnome' |     echo '    -y            Include unstable kde and gnome' | ||||||
|  |     echo '    -c            Check repos' | ||||||
|  |     echo "    -s            Sync repo databases" | ||||||
|  |     echo "    -q            Query repo databases for so libs" | ||||||
|  |     echo '    -r <repo>     Repo name to query' | ||||||
|  |     echo '                  [default: all]' | ||||||
|     echo '    -h            This help' |     echo '    -h            This help' | ||||||
|     echo '' |     echo '' | ||||||
|     echo '' |     echo '' | ||||||
| @@ -114,7 +224,7 @@ usage() { | |||||||
|  |  | ||||||
| orig_argv=("$0" "$@") | orig_argv=("$0" "$@") | ||||||
|  |  | ||||||
| opts='udmxyh' | opts='r:qcsudmxyh' | ||||||
|  |  | ||||||
| while getopts "${opts}" arg; do | while getopts "${opts}" arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
| @@ -123,6 +233,10 @@ while getopts "${opts}" arg; do | |||||||
|         m) move=true ;; |         m) move=true ;; | ||||||
|         x) staging=false ;; |         x) staging=false ;; | ||||||
|         y) unstable=true ;; |         y) unstable=true ;; | ||||||
|  |         c) check=true ;; | ||||||
|  |         s) sync=true ;; | ||||||
|  |         q) query=true ;; | ||||||
|  |         r) searchrepos=("$OPTARG") ;; | ||||||
|         h|?) usage 0 ;; |         h|?) usage 0 ;; | ||||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; |         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||||
|     esac |     esac | ||||||
| @@ -130,4 +244,6 @@ done | |||||||
|  |  | ||||||
| shift $(($OPTIND - 1)) | shift $(($OPTIND - 1)) | ||||||
|  |  | ||||||
|  | library="$1"; shift | ||||||
|  |  | ||||||
| show_version_table | show_version_table | ||||||
|   | |||||||
| @@ -16,12 +16,18 @@ | |||||||
| . @libdir@/artools/util-pkg.sh | . @libdir@/artools/util-pkg.sh | ||||||
|  |  | ||||||
| update_repo(){ | update_repo(){ | ||||||
|     local repo="$1" pkgfile ver ext=db.tar.xz |     local repo="$1" pkgfile ver | ||||||
|     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() |     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() | ||||||
|  |  | ||||||
|     . PKGBUILD |     . PKGBUILD | ||||||
|  |  | ||||||
|     for name in ${pkgname[@]};do |     local pkgsearch=(${pkgname[@]}) | ||||||
|  |     if check_option "debug" "y"; then | ||||||
|  |         pkgbase=${pkgbase:-${pkgname[@]}} | ||||||
|  |         pkgsearch+=("${pkgbase}-debug") | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     for name in ${pkgsearch[@]}; do | ||||||
|         pkgarch=$(get_pkg_arch "$name") |         pkgarch=$(get_pkg_arch "$name") | ||||||
|         ver=$(get_full_version "$name") |         ver=$(get_full_version "$name") | ||||||
|         if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then |         if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then | ||||||
| @@ -45,7 +51,11 @@ update_repo(){ | |||||||
|         fi |         fi | ||||||
|     done |     done | ||||||
|     cd $repo_path |     cd $repo_path | ||||||
|     [[ -n $action ]] && repo-$action -R $repo.$ext ${packages[@]} |     if [[ -n $action ]]; then | ||||||
|  |         repo-$action -R $repo.${PKGDBEXT} ${packages[@]} | ||||||
|  |         ${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]} | ||||||
|  |     fi | ||||||
|  |  | ||||||
|     return 0 |     return 0 | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -58,6 +68,7 @@ load_vars /etc/makepkg.conf | |||||||
| add_pkg=false | add_pkg=false | ||||||
| del_pkg=false | del_pkg=false | ||||||
| sign_pkg=false | sign_pkg=false | ||||||
|  | linksdb=false | ||||||
|  |  | ||||||
| cmd=${0##*/} | cmd=${0##*/} | ||||||
| dest_repo=${cmd#*-} | dest_repo=${cmd#*-} | ||||||
| @@ -66,6 +77,7 @@ usage() { | |||||||
|     echo "Usage: ${cmd} [options]" |     echo "Usage: ${cmd} [options]" | ||||||
|     echo '    -a                 Add package(s) to repository' |     echo '    -a                 Add package(s) to repository' | ||||||
|     echo '    -r                 Remove package(s) from repository' |     echo '    -r                 Remove package(s) from repository' | ||||||
|  |     echo '    -l                 Use links db' | ||||||
|     echo '    -s                 Sign package(s)' |     echo '    -s                 Sign package(s)' | ||||||
|     echo '    -h                 This help' |     echo '    -h                 This help' | ||||||
|     echo '' |     echo '' | ||||||
| @@ -73,12 +85,13 @@ usage() { | |||||||
|     exit $1 |     exit $1 | ||||||
| } | } | ||||||
|  |  | ||||||
| opts='arsh' | opts='arlsh' | ||||||
|  |  | ||||||
| while getopts "${opts}" arg; do | while getopts "${opts}" arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
|         a) add_pkg=true; del_pkg=false ;; |         a) add_pkg=true; del_pkg=false ;; | ||||||
|         r) del_pkg=true; add_pkg=false ;; |         r) del_pkg=true; add_pkg=false ;; | ||||||
|  |         l) linksdb=true ;; | ||||||
|         s) sign_pkg=true ;; |         s) sign_pkg=true ;; | ||||||
|         h|?) usage 0 ;; |         h|?) usage 0 ;; | ||||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; |         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||||
|   | |||||||
| @@ -1,102 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # |  | ||||||
| # Copyright (C) 2018-19 artoo@artixlinux.org |  | ||||||
| # Copyright (C) 2018 Artix Linux Developers |  | ||||||
| # |  | ||||||
| # 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; version 2 of the License. |  | ||||||
| # |  | ||||||
| # 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. |  | ||||||
|  |  | ||||||
| . @libdir@/artools/util-base.sh |  | ||||||
| . @libdir@/artools/util-pkg.sh |  | ||||||
|  |  | ||||||
| # $1: sofile |  | ||||||
| # $2: soarch |  | ||||||
| process_sofile() { |  | ||||||
|     # extract the library name: libfoo.so |  | ||||||
|     local soname="${1%.so?(+(.+([0-9])))}".so |  | ||||||
|     # extract the major version: 1 |  | ||||||
|     soversion="${1##*\.so\.}" |  | ||||||
|     if [[ "$soversion" = "$1" ]] && (($IGNORE_INTERNAL)); then |  | ||||||
|         return |  | ||||||
|     fi |  | ||||||
|     if ! in_array "${soname}=${soversion}-$2" ${soobjects[@]}; then |  | ||||||
|     # libfoo.so=1-64 |  | ||||||
|         msg "${soname}=${soversion}-$2" |  | ||||||
|         soobjects+=("${soname}=${soversion}-$2") |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| set -e |  | ||||||
| shopt -s extglob |  | ||||||
|  |  | ||||||
| IGNORE_INTERNAL=0 |  | ||||||
|  |  | ||||||
| if [[ $1 = "--ignore-internal" ]]; then |  | ||||||
|     IGNORE_INTERNAL=1 |  | ||||||
|     shift |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| script_mode=${0##*/find-lib} |  | ||||||
|  |  | ||||||
| case $script_mode in |  | ||||||
|     deps|provides) true;; |  | ||||||
|     *) die "Unknown mode %s" "$script_mode" ;; |  | ||||||
| esac |  | ||||||
|  |  | ||||||
| if [[ -z $1 ]]; then |  | ||||||
|     echo "${0##*/} [options] <package file|extracted package dir>" |  | ||||||
|     echo "Options:" |  | ||||||
|     echo "    --ignore-internal      ignore internal libraries" |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [[ -d $1 ]]; then |  | ||||||
|     pushd $1 >/dev/null |  | ||||||
| else |  | ||||||
|     WORKDIR=$(mktemp -d --tmpdir "${0##*/}.XXXXXXXXXX") |  | ||||||
|  |  | ||||||
|     case ${script_mode} in |  | ||||||
|         deps) bsdtar -C "$WORKDIR" -xf "$1";; |  | ||||||
|         provides) bsdtar -C "$WORKDIR" -xf "$1" --include="*.so*";; |  | ||||||
|     esac |  | ||||||
|  |  | ||||||
|     pushd "$WORKDIR" >/dev/null |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| case $script_mode in |  | ||||||
|     deps) find_args=(-perm -u+x);; |  | ||||||
|     provides) find_args=(-name *.so*);; |  | ||||||
| esac |  | ||||||
|  |  | ||||||
| find $PWD -type f "${find_args[@]}" | while read filename; do |  | ||||||
|     if [[ $script_mode = "provides" ]]; then |  | ||||||
|         # ignore if we don't have a shared object |  | ||||||
|         if ! LC_ALL=C readelf -h "$filename" 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then |  | ||||||
|             continue |  | ||||||
|         fi |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     # get architecture of the file; if soarch is empty it's not an ELF binary |  | ||||||
|     soarch=$(LC_ALL=C readelf -h "$filename" 2>/dev/null | sed -n 's/.*Class.*ELF\(32\|64\)/\1/p') |  | ||||||
|     [[ -n $soarch ]] || continue |  | ||||||
|  |  | ||||||
|     if [[ $script_mode = "provides" ]]; then |  | ||||||
|         # get the string binaries link to: libfoo.so.1.2 -> libfoo.so.1 |  | ||||||
|         sofile=$(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -n 's/.*Library soname: \[\(.*\)\].*/\1/p') |  | ||||||
|         [[ -z $sofile ]] && sofile="${filename##*/}" |  | ||||||
|         process_sofile "${sofile}" "${soarch}" |  | ||||||
|     elif [[ $script_mode = "deps" ]]; then |  | ||||||
|         # process all libraries needed by the binary |  | ||||||
|         for sofile in $(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p'); do |  | ||||||
|             process_sofile "${sofile}" "${soarch}" |  | ||||||
|         done |  | ||||||
|     fi |  | ||||||
| done |  | ||||||
|  |  | ||||||
| popd >/dev/null |  | ||||||
| @@ -1,48 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # |  | ||||||
| # Copyright (C) 2018-19 artoo@artixlinux.org |  | ||||||
| # Copyright (C) 2018 Artix Linux Developers |  | ||||||
| # |  | ||||||
| # 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; version 2 of the License. |  | ||||||
| # |  | ||||||
| # 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. |  | ||||||
|  |  | ||||||
| . @libdir@/artools/util-base.sh |  | ||||||
|  |  | ||||||
| match=$1 |  | ||||||
|  |  | ||||||
| if [[ -z $match ]]; then |  | ||||||
|     echo 'Usage: finddeps <depname>' |  | ||||||
|     echo '' |  | ||||||
|     echo 'Find packages that depend on a given depname.' |  | ||||||
|     echo 'Run this script from the top-level directory of your ABS tree.' |  | ||||||
|     echo '' |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| find $PWD -type d | while read d; do |  | ||||||
|     if [[ -f "$d/PKGBUILD" ]]; then |  | ||||||
|         unset pkgname depends makedepends optdepends |  | ||||||
|         . "$d/PKGBUILD" |  | ||||||
|         for dep in "${depends[@]}"; do |  | ||||||
|             # lose the version comparator, if any |  | ||||||
|             depname=${dep%%[<>=]*} |  | ||||||
|             [[ $depname = $match ]] && msg "$d (depends)" |  | ||||||
|         done |  | ||||||
|         for dep in "${makedepends[@]}"; do |  | ||||||
|             # lose the version comparator, if any |  | ||||||
|             depname=${dep%%[<>=]*} |  | ||||||
|             [[ $depname = $match ]] && msg "$d (makedepends)" |  | ||||||
|         done |  | ||||||
|         for dep in "${optdepends[@]/:*}"; do |  | ||||||
|             # lose the version comaparator, if any |  | ||||||
|             depname=${dep%%[<>=]*} |  | ||||||
|             [[ $depname = $match ]] && msg "$d (optdepends)" |  | ||||||
|         done |  | ||||||
|     fi |  | ||||||
| done |  | ||||||
							
								
								
									
										518
									
								
								bin/pkg/links-add.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										518
									
								
								bin/pkg/links-add.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,518 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | #   links-add - add a package to a given repo database file | ||||||
|  | #   links-remove - remove a package entry from a given repo database file | ||||||
|  | # | ||||||
|  | #   Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org> | ||||||
|  | #   Copyright (c) 2019 artoo@artixlinux.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/>. | ||||||
|  |  | ||||||
|  | shopt -s extglob | ||||||
|  |  | ||||||
|  | declare -r REPO_DB_NAME="links" | ||||||
|  |  | ||||||
|  | QUIET=0 | ||||||
|  | ONLYADDNEW=0 | ||||||
|  | SIGN=0 | ||||||
|  | KEY=0 | ||||||
|  | VERIFY=0 | ||||||
|  | REPO_DB_FILE= | ||||||
|  | REPO_DB_PREFIX= | ||||||
|  | REPO_DB_SUFFIX= | ||||||
|  | LOCKFILE= | ||||||
|  | CLEAN_LOCK=0 | ||||||
|  |  | ||||||
|  | . @libdir@/artools/util-base.sh | ||||||
|  |  | ||||||
|  | # ensure we have a sane umask set | ||||||
|  | umask 0022 | ||||||
|  |  | ||||||
|  | # print usage instructions | ||||||
|  | usage() { | ||||||
|  |     cmd=${0##*/} | ||||||
|  |     printf -- "%s \n\n" "$cmd" | ||||||
|  |     if [[ $cmd == "links-add" ]] ; then | ||||||
|  |         printf -- "Usage: links-add [options] <path-to-db> <package> ...\n" | ||||||
|  |         printf -- "\n" | ||||||
|  |         printf -- "\ | ||||||
|  | links-add will update a package database by reading a package file.\n\ | ||||||
|  | Multiple packages to add can be specified on the command line.\n" | ||||||
|  |         printf -- "\n" | ||||||
|  |         printf -- "Options:\n" | ||||||
|  |         printf -- "  -n, --new         only add packages that are not already in the database\n" | ||||||
|  |     elif [[ $cmd == "links-remove" ]] ; then | ||||||
|  |         printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n" | ||||||
|  |         printf -- "\n" | ||||||
|  |         printf -- "\ | ||||||
|  | links-remove will update a package database by removing the package name\n\ | ||||||
|  | specified on the command line from the given repo database. Multiple\n\ | ||||||
|  | packages to remove can be specified on the command line.\n" | ||||||
|  |         printf -- "\n" | ||||||
|  |         printf -- "Options:\n" | ||||||
|  |     else | ||||||
|  |         printf -- "Please move along, there is nothing to see here.\n" | ||||||
|  |         return | ||||||
|  |     fi | ||||||
|  |     printf -- "  --nocolor         turn off color in output\n" | ||||||
|  |     printf -- "  -q, --quiet       minimize output\n" | ||||||
|  |     printf -- "  -s, --sign        sign database with GnuPG after update\n" | ||||||
|  |     printf -- "  -k, --key <key>   use the specified key to sign the database\n" | ||||||
|  |     printf -- "  -v, --verify      verify database's signature before update\n" | ||||||
|  |     printf -- "\n\ | ||||||
|  | See %s(8) for more details and descriptions of the available options.\n" $cmd | ||||||
|  |     printf "\n" | ||||||
|  |     if [[ $cmd == "links-add" ]] ; then | ||||||
|  |         printf -- "Example:  links-add /path/to/repo.${LINKSDBEXT} pacman-5.1.3-1-x86_64.pkg.tar.xz\n" | ||||||
|  |     elif [[ $cmd == "links-remove" ]] ; then | ||||||
|  |         printf -- "Example:  links-remove /path/to/repo.${LINKSDBEXT} kernel26\n" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | find_pkgentry() { | ||||||
|  |     local pkgname=$1 | ||||||
|  |     local pkgentry | ||||||
|  |  | ||||||
|  |     for pkgentry in "$tmpdir/${REPO_DB_NAME}/$pkgname"*; do | ||||||
|  |         name=${pkgentry##*/} | ||||||
|  |         if [[ ${name%-*-*} = $pkgname ]]; then | ||||||
|  |             echo $pkgentry | ||||||
|  |             return 0 | ||||||
|  |         fi | ||||||
|  |     done | ||||||
|  |     return 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | check_gpg() { | ||||||
|  |     if ! type -p gpg >/dev/null; then | ||||||
|  |         error "Cannot find the gpg binary! Is GnuPG installed?" | ||||||
|  |         exit 1 # $E_MISSING_PROGRAM | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     if (( ! VERIFY )); then | ||||||
|  |         if ! gpg --list-key ${GPGKEY} &>/dev/null; then | ||||||
|  |             if [[ ! -z $GPGKEY ]]; then | ||||||
|  |                 error "The key ${GPGKEY} does not exist in your keyring." | ||||||
|  |             elif (( ! KEY )); then | ||||||
|  |                 error "There is no key in your keyring." | ||||||
|  |             fi | ||||||
|  |             exit 1 | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # sign the package database once repackaged | ||||||
|  | create_signature() { | ||||||
|  |     (( ! SIGN )) && return | ||||||
|  |     local dbfile=$1 | ||||||
|  |     local ret=0 | ||||||
|  |     msg "Signing database '%s'..." "${dbfile##*/.tmp.}" | ||||||
|  |  | ||||||
|  |     local SIGNWITHKEY="" | ||||||
|  |     if [[ -n $GPGKEY ]]; then | ||||||
|  |         SIGNWITHKEY="-u ${GPGKEY}" | ||||||
|  |     fi | ||||||
|  |     gpg --detach-sign --use-agent --no-armor ${SIGNWITHKEY} "$dbfile" &>/dev/null || ret=$? | ||||||
|  |  | ||||||
|  |     if (( ! ret )); then | ||||||
|  |         msg2 "Created signature file '%s'" "${dbfile##*/.tmp.}.sig" | ||||||
|  |     else | ||||||
|  |         warning "Failed to sign package database file '%s'" "${dbfile##*/.tmp.}" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # verify the existing package database signature | ||||||
|  | verify_signature() { | ||||||
|  |     (( ! VERIFY )) && return | ||||||
|  |     local dbfile=$1 | ||||||
|  |     local ret=0 | ||||||
|  |     msg "Verifying database signature..." | ||||||
|  |  | ||||||
|  |     if [[ ! -f $dbfile.sig ]]; then | ||||||
|  |         warning "No existing signature found, skipping verification." | ||||||
|  |         return | ||||||
|  |     fi | ||||||
|  |     gpg --verify "$dbfile.sig" || ret=$? | ||||||
|  |     if (( ! ret )); then | ||||||
|  |         msg2 "Database signature file verified." | ||||||
|  |     else | ||||||
|  |         error "Database signature was NOT valid!" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | verify_repo_extension() { | ||||||
|  |     local repofile=$1 | ||||||
|  |  | ||||||
|  |     case $repofile in | ||||||
|  |         *.links.tar.gz)  TAR_OPT="z" ;; | ||||||
|  |         *.links.tar.bz2) TAR_OPT="j" ;; | ||||||
|  |         *.links.tar.xz)  TAR_OPT="J" ;; | ||||||
|  |         *.links.tar.zst) TAR_OPT="--zstd" ;; | ||||||
|  |         *.links.tar.Z)   TAR_OPT="Z" ;; | ||||||
|  |         *.links.tar)     TAR_OPT="" ;; | ||||||
|  |         *) error "'%s' does not have a valid database archive extension." \ | ||||||
|  |                 "$repofile" | ||||||
|  |             exit 1 ;; | ||||||
|  |     esac | ||||||
|  |  | ||||||
|  |     printf '%s' "$TAR_OPT" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # write an entry to the pacman database | ||||||
|  | #   arg1 - path to package | ||||||
|  | db_write_entry() { | ||||||
|  |     # blank out all variables | ||||||
|  |     local pkgfile=$1 | ||||||
|  |  | ||||||
|  |     local pkgname pkgver | ||||||
|  |  | ||||||
|  |     # read info from the zipped package | ||||||
|  |     local line var val | ||||||
|  |     while read -r line; do | ||||||
|  |         [[ ${line:0:1} = '#' ]] && continue | ||||||
|  |         IFS=' =' read -r var val < <(printf '%s\n' "$line") | ||||||
|  |         # normalize whitespace with an extglob | ||||||
|  |         declare "$var=${val//+([[:space:]])/ }" | ||||||
|  |  | ||||||
|  |     done< <(bsdtar -xOqf "$pkgfile" .PKGINFO) | ||||||
|  |  | ||||||
|  |     # ensure $pkgname and $pkgver variables were found | ||||||
|  |     if [[ -z $pkgname || -z $pkgver ]]; then | ||||||
|  |         error "Invalid package file '%s'." "$pkgfile" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     if [[ -d $tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver ]]; then | ||||||
|  |         warning "An entry for '%s' already existed" "$pkgname-$pkgver" | ||||||
|  |         if (( ONLYADDNEW )); then | ||||||
|  |             return 0 | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # remove an existing entry if it exists, ignore failures | ||||||
|  |     db_remove_entry "$pkgname" | ||||||
|  |  | ||||||
|  |     local tmppkg=$tmpdir/pkg/$pkgname-$pkgver | ||||||
|  |  | ||||||
|  |     mkdir "$tmppkg" | ||||||
|  |  | ||||||
|  |     bsdtar -xof $pkgfile -C $tmppkg --include={opt,{,usr/}{lib{,32},{s,}bin}}'/*' 2>/dev/null | ||||||
|  |  | ||||||
|  |     pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null | ||||||
|  |     mkdir "$pkgname-$pkgver" | ||||||
|  |     pushd "$pkgname-$pkgver" >/dev/null | ||||||
|  |  | ||||||
|  |     # create links entry | ||||||
|  |     msg2 "Creating '%s' db entry..." "${REPO_DB_NAME}" | ||||||
|  |  | ||||||
|  |     local linksentry=$tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver/${REPO_DB_NAME} | ||||||
|  |  | ||||||
|  |     for f in $(find $tmppkg -type f); do | ||||||
|  |         readelf -d "$f" 2> /dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p' | ||||||
|  |     done | sort -u > $linksentry | ||||||
|  |  | ||||||
|  |     popd >/dev/null | ||||||
|  |     popd >/dev/null | ||||||
|  |  | ||||||
|  |     return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # remove existing entries from the DB | ||||||
|  | #   arg1 - package name | ||||||
|  | db_remove_entry() { | ||||||
|  |     local pkgname=$1 | ||||||
|  |     local notfound=1 | ||||||
|  |     local pkgentry=$(find_pkgentry "$pkgname") | ||||||
|  |     while [[ -n $pkgentry ]]; do | ||||||
|  |         notfound=0 | ||||||
|  |  | ||||||
|  |         msg2 "Removing existing entry '%s'..." \ | ||||||
|  |         "${pkgentry##*/}" | ||||||
|  |         rm -rf "$pkgentry" | ||||||
|  |  | ||||||
|  |         # remove entries in "links" database | ||||||
|  |         local linksentry=$(echo "$pkgentry" | sed 's/\(.*\)\/db\//\1\/links\//') | ||||||
|  |         rm -rf "$linksentry" | ||||||
|  |  | ||||||
|  |         pkgentry=$(find_pkgentry "$pkgname") | ||||||
|  |     done | ||||||
|  |     return $notfound | ||||||
|  | } | ||||||
|  |  | ||||||
|  | prepare_repo_db() { | ||||||
|  |     local repodir dbfile | ||||||
|  |  | ||||||
|  |     # ensure the path to the DB exists; $LOCKFILE is always an absolute path | ||||||
|  |     repodir=${LOCKFILE%/*}/ | ||||||
|  |  | ||||||
|  |     if [[ ! -d $repodir ]]; then | ||||||
|  |         error "%s does not exist or is not a directory." "$repodir" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # check lock file | ||||||
|  |     if ( set -o noclobber; echo "$$" > "$LOCKFILE") 2> /dev/null; then | ||||||
|  |         CLEAN_LOCK=1 | ||||||
|  |     else | ||||||
|  |         error "Failed to acquire lockfile: %s." "$LOCKFILE" | ||||||
|  |         [[ -f $LOCKFILE ]] && error "Held by process %s" "$(cat "$LOCKFILE")" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX | ||||||
|  |  | ||||||
|  |     if [[ -f $dbfile ]]; then | ||||||
|  |         # there are two situations we can have here: | ||||||
|  |         # a DB with some entries, or a DB with no contents at all. | ||||||
|  |         if ! bsdtar -tqf "$dbfile" '*/links' >/dev/null 2>&1; then | ||||||
|  |             # check empty case | ||||||
|  |             if [[ -n $(bsdtar -tqf "$dbfile" '*' 2>/dev/null) ]]; then | ||||||
|  |                 error "Repository file '%s' is not a proper links database." "$dbfile" | ||||||
|  |                 exit 1 | ||||||
|  |             fi | ||||||
|  |         fi | ||||||
|  |         verify_signature "$dbfile" | ||||||
|  |         msg "Extracting %s to a temporary location..." "${dbfile##*/}" | ||||||
|  |         bsdtar -xf "$dbfile" -C "$tmpdir/${REPO_DB_NAME}" | ||||||
|  |     else | ||||||
|  |         case $cmd in | ||||||
|  |             links-remove) | ||||||
|  |                 # only a missing "db" database is currently an error | ||||||
|  |                 # TODO: remove if statement | ||||||
|  |                 if [[ ${REPO_DB_NAME} == "links" ]]; then | ||||||
|  |                     error "Repository file '%s' was not found." "$dbfile" | ||||||
|  |                     exit 1 | ||||||
|  |                 fi | ||||||
|  |                 ;; | ||||||
|  |             links-add) | ||||||
|  |                 # check if the file can be created (write permission, directory existence, etc) | ||||||
|  |                 if ! touch "$dbfile"; then | ||||||
|  |                     error "Repository file '%s' could not be created." "$dbfile" | ||||||
|  |                     exit 1 | ||||||
|  |                 fi | ||||||
|  |                 rm -f "$dbfile" | ||||||
|  |                 ;; | ||||||
|  |         esac | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | add() { | ||||||
|  |     if [[ ! -f $1 ]]; then | ||||||
|  |         error "File '%s' not found." "$1" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     pkgfile=$1 | ||||||
|  |     if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then | ||||||
|  |         error "'%s' is not a package file, skipping" "$pkgfile" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     msg "Adding package '%s'" "$pkgfile" | ||||||
|  |  | ||||||
|  |     db_write_entry "$pkgfile" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | remove() { | ||||||
|  |     pkgname=$1 | ||||||
|  |     msg "Searching for package '%s'..." "$pkgname" | ||||||
|  |  | ||||||
|  |     if ! db_remove_entry "$pkgname"; then | ||||||
|  |         error "Package matching '%s' not found." "$pkgname" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | rotate_db() { | ||||||
|  |     dirname=${LOCKFILE%/*} | ||||||
|  |  | ||||||
|  |     pushd "$dirname" >/dev/null | ||||||
|  |  | ||||||
|  |     filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX} | ||||||
|  |     tempname=$dirname/.tmp.$filename | ||||||
|  |  | ||||||
|  |     # hardlink or move the previous version of the database and signature to .old | ||||||
|  |     # extension as a backup measure | ||||||
|  |     if [[ -f $filename ]]; then | ||||||
|  |         ln -f "$filename" "$filename.old" 2>/dev/null || \ | ||||||
|  |             mv -f "$filename" "$filename.old" | ||||||
|  |  | ||||||
|  |         if [[ -f $filename.sig ]]; then | ||||||
|  |             ln -f "$filename.sig" "$filename.old.sig" 2>/dev/null || \ | ||||||
|  |                 mv -f "$filename.sig" "$filename.old.sig" | ||||||
|  |         else | ||||||
|  |             rm -f "$filename.old.sig" | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # rotate the newly-created database and signature into place | ||||||
|  |     mv "$tempname" "$filename" | ||||||
|  |     if [[ -f $tempname.sig ]]; then | ||||||
|  |         mv "$tempname.sig" "$filename.sig" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     dblink=${filename%.tar*} | ||||||
|  |     rm -f "$dblink" "$dblink.sig" | ||||||
|  |     ln -s "$filename" "$dblink" 2>/dev/null || \ | ||||||
|  |         ln "$filename" "$dblink" 2>/dev/null || \ | ||||||
|  |         cp "$filename" "$dblink" | ||||||
|  |     if [[ -f "$filename.sig" ]]; then | ||||||
|  |         ln -s "$filename.sig" "$dblink.sig" 2>/dev/null || \ | ||||||
|  |             ln "$filename.sig" "$dblink.sig" 2>/dev/null || \ | ||||||
|  |             cp "$filename.sig" "$dblink.sig" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     popd >/dev/null | ||||||
|  | } | ||||||
|  |  | ||||||
|  | create_db() { | ||||||
|  |     TAR_OPT=$(verify_repo_extension "$REPO_DB_FILE") | ||||||
|  |     # $LOCKFILE is already guaranteed to be absolute so this is safe | ||||||
|  |     dirname=${LOCKFILE%/*} | ||||||
|  |  | ||||||
|  |     filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX} | ||||||
|  |     # this ensures we create it on the same filesystem, making moves atomic | ||||||
|  |     tempname=$dirname/.tmp.$filename | ||||||
|  |  | ||||||
|  |     pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null | ||||||
|  |     if ( shopt -s nullglob; files=(*); (( ${#files[*]} )) ); then | ||||||
|  |         bsdtar -c${TAR_OPT}f "$tempname" * | ||||||
|  |     else | ||||||
|  |         # we have no packages remaining? zip up some emptyness | ||||||
|  |         warning "No packages remain, creating empty database." | ||||||
|  |         bsdtar -c${TAR_OPT}f "$tempname" -T /dev/null | ||||||
|  |     fi | ||||||
|  |     popd >/dev/null | ||||||
|  |  | ||||||
|  |     create_signature "$tempname" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | trap_exit() { | ||||||
|  |     # unhook all traps to avoid race conditions | ||||||
|  |     trap '' EXIT TERM HUP QUIT INT ERR | ||||||
|  |  | ||||||
|  |     echo | ||||||
|  |     error "$@" | ||||||
|  |     clean_up 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | clean_up() { | ||||||
|  |     local exit_code=${1:-$?} | ||||||
|  |  | ||||||
|  |     # unhook all traps to avoid race conditions | ||||||
|  |     trap '' EXIT TERM HUP QUIT INT ERR | ||||||
|  |  | ||||||
|  |     [[ -d $tmpdir ]] && rm -rf "$tmpdir" | ||||||
|  |     (( CLEAN_LOCK )) && [[ -f $LOCKFILE ]] && rm -f "$LOCKFILE" | ||||||
|  |  | ||||||
|  |     exit $exit_code | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # PROGRAM START | ||||||
|  | case $1 in | ||||||
|  |     -h|--help) usage; exit 0;; | ||||||
|  | esac | ||||||
|  |  | ||||||
|  | # figure out what program we are | ||||||
|  | cmd=${0##*/} | ||||||
|  |  | ||||||
|  | if [[ $cmd != "links-add" && $cmd != "links-remove" ]]; then | ||||||
|  |     error "Invalid command name '%s' specified." "$cmd" | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/repo-tools.XXXXXXXXXX") || (\ | ||||||
|  |     error "Cannot create temp directory for database building."; \ | ||||||
|  |     exit 1) | ||||||
|  |  | ||||||
|  | for repo in "pkg" "${REPO_DB_NAME}"; do | ||||||
|  |     mkdir "$tmpdir/$repo" | ||||||
|  | done | ||||||
|  |  | ||||||
|  | trap 'clean_up' EXIT | ||||||
|  | for signal in TERM HUP QUIT; do | ||||||
|  |     trap "trap_exit \"$(gettext "%s signal caught. Exiting...")\" \"$signal\"" "$signal" | ||||||
|  | done | ||||||
|  | trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT | ||||||
|  | trap 'trap_exit "$(gettext "An unknown error has occurred. Exiting...")"' ERR | ||||||
|  |  | ||||||
|  | declare -a args | ||||||
|  | # parse arguments | ||||||
|  | while (( $# )); do | ||||||
|  |     case $1 in | ||||||
|  |         -q|--quiet) QUIET=1 ;; | ||||||
|  |         -n|--new) ONLYADDNEW=1 ;; | ||||||
|  |         -s|--sign) SIGN=1 ;; | ||||||
|  |         -k|--key) KEY=1 ; shift; GPGKEY=$1 ;; | ||||||
|  |         -v|--verify) VERIFY=1 ;; | ||||||
|  |         *) args+=("$1") ;; | ||||||
|  |     esac | ||||||
|  |     shift | ||||||
|  | done | ||||||
|  |  | ||||||
|  | REPO_DB_FILE=${args[0]} | ||||||
|  | if [[ -z $REPO_DB_FILE ]]; then | ||||||
|  |     usage | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [[ $REPO_DB_FILE == /* ]]; then | ||||||
|  |     LOCKFILE=$REPO_DB_FILE.lck | ||||||
|  | else | ||||||
|  |     LOCKFILE=$PWD/$REPO_DB_FILE.lck | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | verify_repo_extension "$REPO_DB_FILE" >/dev/null | ||||||
|  |  | ||||||
|  | REPO_DB_PREFIX=${REPO_DB_FILE##*/} | ||||||
|  | REPO_DB_PREFIX=${REPO_DB_PREFIX%.links.*} | ||||||
|  | REPO_DB_SUFFIX=${REPO_DB_FILE##*.links.} | ||||||
|  |  | ||||||
|  | if (( SIGN || VERIFY )); then | ||||||
|  |     check_gpg | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if (( VERIFY && ${#args[@]} == 1 )); then | ||||||
|  |     dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX | ||||||
|  |  | ||||||
|  |     if [[ -f $dbfile ]]; then | ||||||
|  |         verify_signature "$dbfile" | ||||||
|  |     fi | ||||||
|  |     exit 0 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | prepare_repo_db | ||||||
|  |  | ||||||
|  | fail=0 | ||||||
|  | for arg in "${args[@]:1}"; do | ||||||
|  |     case $cmd in | ||||||
|  |         links-add) add "$arg" ;; | ||||||
|  |         links-remove) remove "$arg" ;; | ||||||
|  |     esac || fail=1 | ||||||
|  | done | ||||||
|  |  | ||||||
|  | # if the whole operation was a success, re-zip and rotate databases | ||||||
|  | if (( !fail )); then | ||||||
|  |     msg "Creating updated database file '%s'" "$REPO_DB_FILE" | ||||||
|  |     create_db | ||||||
|  |     rotate_db | ||||||
|  | else | ||||||
|  |     msg "No packages modified, nothing to do." | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | exit 0 | ||||||
| @@ -339,7 +339,7 @@ main() { | |||||||
|     [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' |     [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' | ||||||
|     makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} |     makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} | ||||||
|  |  | ||||||
|     check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME |     check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER | ||||||
|  |  | ||||||
|     # Canonicalize chrootdir, getting rid of trailing / |     # Canonicalize chrootdir, getting rid of trailing / | ||||||
|     chrootdir=$(readlink -e "$passeddir") |     chrootdir=$(readlink -e "$passeddir") | ||||||
| @@ -385,9 +385,11 @@ main() { | |||||||
|         sync_chroot "$chrootdir/root" "$copydir" "$copy" |         sync_chroot "$chrootdir/root" "$copydir" "$copy" | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|  |     bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") | ||||||
|  |  | ||||||
|     $update_first && chroot-run \ |     $update_first && chroot-run \ | ||||||
|             -r "${bindmounts_ro[@]}" \ |             -r "${bindmounts_ro[*]}" \ | ||||||
|             -w "${bindmounts_rw[@]}" \ |             -w "${bindmounts_rw[*]}" \ | ||||||
|             "$copydir" \ |             "$copydir" \ | ||||||
|             pacman -Syu --noconfirm |             pacman -Syu --noconfirm | ||||||
|  |  | ||||||
| @@ -407,8 +409,6 @@ main() { | |||||||
|  |  | ||||||
|     prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap" |     prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap" | ||||||
|  |  | ||||||
|     bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") |  | ||||||
|  |  | ||||||
|     if chroot-run \ |     if chroot-run \ | ||||||
|         -r "${bindmounts_ro[*]}" \ |         -r "${bindmounts_ro[*]}" \ | ||||||
|         -w "${bindmounts_rw[*]}" \ |         -w "${bindmounts_rw[*]}" \ | ||||||
|   | |||||||
| @@ -79,15 +79,21 @@ write_details() { | |||||||
| } | } | ||||||
|  |  | ||||||
| write_pkg_yaml(){ | write_pkg_yaml(){ | ||||||
|     local pkgfile=$(print_all_package_names) |  | ||||||
|  |  | ||||||
|     Yaml=$(write_yaml_header) |     Yaml=$(write_yaml_header) | ||||||
|  |  | ||||||
|     Yaml+=$(write_empty_line) |     Yaml+=$(write_empty_line) | ||||||
|  |  | ||||||
|  |     local full=$(get_full_version) | ||||||
|  |  | ||||||
|  |     local ver=${full:-0} | ||||||
|  |  | ||||||
|  |     pkgbase=${pkgbase:-${pkgname[0]}} | ||||||
|  |  | ||||||
|     Yaml+=$(write_yaml_map 0 "pkgbase") |     Yaml+=$(write_yaml_map 0 "pkgbase") | ||||||
|     Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase:-$pkgname}") |     Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase}") | ||||||
|     ${details} && write_details '' |     ${details} && write_details '' | ||||||
|  |     Yaml+=$(write_yaml_map 2 "fullver" "${ver}") | ||||||
|  |  | ||||||
|     Yaml+=$(write_empty_line) |     Yaml+=$(write_empty_line) | ||||||
|  |  | ||||||
| @@ -99,6 +105,8 @@ write_pkg_yaml(){ | |||||||
|  |  | ||||||
|     Yaml+=$(write_empty_line) |     Yaml+=$(write_empty_line) | ||||||
|  |  | ||||||
|  |     local pkgfile=$(print_all_package_names) | ||||||
|  |  | ||||||
|     Yaml+=$(write_yaml_map 0 "pkgfile") |     Yaml+=$(write_yaml_map 0 "pkgfile") | ||||||
|     for f in ${pkgfile[@]};do |     for f in ${pkgfile[@]};do | ||||||
|         Yaml+=$(write_yaml_seq 2 "${f##*/}") |         Yaml+=$(write_yaml_seq 2 "${f##*/}") | ||||||
| @@ -136,4 +144,6 @@ PACKAGE="$1"/PKGBUILD; shift | |||||||
|  |  | ||||||
| . "$PACKAGE" | . "$PACKAGE" | ||||||
|  |  | ||||||
|  | . /etc/makepkg.conf | ||||||
|  |  | ||||||
| write_pkg_yaml | write_pkg_yaml | ||||||
|   | |||||||
| @@ -25,11 +25,19 @@ | |||||||
| #         packages-kernel | #         packages-kernel | ||||||
| #         packages-openrc | #         packages-openrc | ||||||
| #         packages-runit | #         packages-runit | ||||||
|  | #         packages-media | ||||||
| #         packages-xorg | #         packages-xorg | ||||||
| #         packages-python | #         packages-python | ||||||
| #         packages-perl | #         packages-perl | ||||||
| #         packages-qt5 | #         packages-qt5 | ||||||
|  | #         packages-devel | ||||||
| #         packages-ruby | #         packages-ruby | ||||||
|  | #         packages-gtk | ||||||
|  | #         packages-gnome | ||||||
|  | #         packages-cinnamon | ||||||
|  | #         packages-lxqt | ||||||
|  | #         packages-mate | ||||||
|  | #         packages-kde | ||||||
| # ) | # ) | ||||||
|  |  | ||||||
| # HOST_TREE_ARCH=git://git.archlinux.org/svntogit | # HOST_TREE_ARCH=git://git.archlinux.org/svntogit | ||||||
| @@ -41,6 +49,9 @@ | |||||||
| # default repos root | # default repos root | ||||||
| # REPOS_ROOT=${WORKSPACE_DIR}/repos | # REPOS_ROOT=${WORKSPACE_DIR}/repos | ||||||
|  |  | ||||||
|  | # default mirror for sogrep | ||||||
|  | # REPOS_MIRROR="http://mirror1.artixlinux.org/repos" | ||||||
|  |  | ||||||
| ############################################# | ############################################# | ||||||
| ################ artools-iso ################ | ################ artools-iso ################ | ||||||
| ############################################# | ############################################# | ||||||
|   | |||||||
| @@ -1,4 +1,6 @@ | |||||||
| #!/hint/bash | #!/hint/bash | ||||||
|  | # shellcheck disable=2034 | ||||||
|  |  | ||||||
| # | # | ||||||
| # /etc/makepkg.conf | # /etc/makepkg.conf | ||||||
| # | # | ||||||
| @@ -37,8 +39,8 @@ CHOST="x86_64-pc-linux-gnu" | |||||||
|  |  | ||||||
| #-- Compiler and Linker Flags | #-- Compiler and Linker Flags | ||||||
| CPPFLAGS="-D_FORTIFY_SOURCE=2" | CPPFLAGS="-D_FORTIFY_SOURCE=2" | ||||||
| CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt" | CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt" | ||||||
| CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt" | CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt" | ||||||
| LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" | LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" | ||||||
| #-- Make Flags: change this for DistCC/SMP systems | #-- Make Flags: change this for DistCC/SMP systems | ||||||
| #MAKEFLAGS="-j2" | #MAKEFLAGS="-j2" | ||||||
| @@ -143,3 +145,5 @@ COMPRESSZ=(compress -c -f) | |||||||
| # | # | ||||||
| PKGEXT='.pkg.tar.xz' | PKGEXT='.pkg.tar.xz' | ||||||
| SRCEXT='.src.tar.gz' | SRCEXT='.src.tar.gz' | ||||||
|  |  | ||||||
|  | # vim: set ft=sh ts=2 sw=2 et: | ||||||
|   | |||||||
| @@ -1,63 +0,0 @@ | |||||||
| accountsservice |  | ||||||
| cairo |  | ||||||
| colord |  | ||||||
| cppunit |  | ||||||
| dbus |  | ||||||
| dbus-glib |  | ||||||
| dbus-python |  | ||||||
| desktop-file-utils |  | ||||||
| fontconfig |  | ||||||
| geoclue2 |  | ||||||
| glu |  | ||||||
| gst-plugins-bad |  | ||||||
| gst-plugins-base |  | ||||||
| gst-plugins-good |  | ||||||
| gst-plugins-ugly |  | ||||||
| gstreamer |  | ||||||
| harfbuzz |  | ||||||
| hicolor-icon-theme |  | ||||||
| libatasmart |  | ||||||
| libbsd |  | ||||||
| libdrm |  | ||||||
| libevdev |  | ||||||
| libinput |  | ||||||
| libmbim |  | ||||||
| libnice |  | ||||||
| libqmi |  | ||||||
| libvdpau |  | ||||||
| libxcb |  | ||||||
| libxft |  | ||||||
| libxi |  | ||||||
| media-player-info |  | ||||||
| mesa |  | ||||||
| modemmanager |  | ||||||
| networkmanager |  | ||||||
| orc |  | ||||||
| p11-kit |  | ||||||
| polkit |  | ||||||
| poppler |  | ||||||
| poppler-data |  | ||||||
| pulseaudio |  | ||||||
| pyxdg |  | ||||||
| r |  | ||||||
| sdl |  | ||||||
| shared-mime-info |  | ||||||
| sound-theme-freedesktop |  | ||||||
| startup-notification |  | ||||||
| systemdcompat |  | ||||||
| telepathy-glib |  | ||||||
| ttf-dejavu |  | ||||||
| udisks2 |  | ||||||
| upower |  | ||||||
| wayland |  | ||||||
| wayland-protocols |  | ||||||
| webrtc-audio-processing |  | ||||||
| xcb-proto |  | ||||||
| xcb-util |  | ||||||
| xcb-util-cursor |  | ||||||
| xcb-util-image |  | ||||||
| xcb-util-keysyms |  | ||||||
| xcb-util-renderutil |  | ||||||
| xcb-util-wm |  | ||||||
| xdg-user-dirs |  | ||||||
| xdg-utils |  | ||||||
| @@ -1,63 +0,0 @@ | |||||||
| adwaita-icon-theme |  | ||||||
| atk |  | ||||||
| at-spi2-atk |  | ||||||
| at-spi2-core |  | ||||||
| babl |  | ||||||
| cantarell-fonts |  | ||||||
| cogl |  | ||||||
| dconf |  | ||||||
| flatpak |  | ||||||
| gamin |  | ||||||
| gcab |  | ||||||
| gconf |  | ||||||
| gcr |  | ||||||
| gdk-pixbuf2 |  | ||||||
| gegl02 |  | ||||||
| git |  | ||||||
| glade |  | ||||||
| glib2 |  | ||||||
| glib-networking |  | ||||||
| gnome-common |  | ||||||
| gnome-keyring |  | ||||||
| gobject-introspection |  | ||||||
| gsettings-desktop-schemas |  | ||||||
| gssdp |  | ||||||
| gtk2 |  | ||||||
| gtk3 |  | ||||||
| gtk-doc |  | ||||||
| gtksourceview3 |  | ||||||
| gupnp |  | ||||||
| gupnp-igd |  | ||||||
| gvfs |  | ||||||
| json-glib |  | ||||||
| libcloudproviders |  | ||||||
| libcroco |  | ||||||
| libgee |  | ||||||
| libglade |  | ||||||
| libgnome-keyring |  | ||||||
| libgudev |  | ||||||
| libnotify |  | ||||||
| librsvg |  | ||||||
| libsecret |  | ||||||
| libsoup |  | ||||||
| libxml2 |  | ||||||
| libxslt |  | ||||||
| meld |  | ||||||
| mobile-broadband-provider-info |  | ||||||
| modemmanager |  | ||||||
| networkmanager |  | ||||||
| network-manager-applet |  | ||||||
| orca |  | ||||||
| ostree |  | ||||||
| pango |  | ||||||
| pyatspi |  | ||||||
| pygobject |  | ||||||
| pygobject2 |  | ||||||
| pygtk |  | ||||||
| rest |  | ||||||
| ttf-bitstream-vera |  | ||||||
| vala |  | ||||||
| vte |  | ||||||
| vte3 |  | ||||||
| yelp-tools |  | ||||||
| yelp-xsl |  | ||||||
| @@ -1,4 +0,0 @@ | |||||||
| phonon-gstreamer |  | ||||||
| polkit-qt |  | ||||||
| extra-cmake-modules |  | ||||||
| phonon |  | ||||||
| @@ -1,16 +0,0 @@ | |||||||
| linux |  | ||||||
| nvidia |  | ||||||
| acpi_call |  | ||||||
| bbswitch |  | ||||||
| broadcom-wl |  | ||||||
| tp_smapi |  | ||||||
| r8168 |  | ||||||
| virtualbox-modules-artix |  | ||||||
| linux-lts |  | ||||||
| nvidia-lts |  | ||||||
| acpi_call-lts |  | ||||||
| bbswitch-lts |  | ||||||
| broadcom-wl-lts |  | ||||||
| tp_smapi-lts |  | ||||||
| r8168-lts |  | ||||||
| linux-firmware |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| lxqt-about |  | ||||||
| lxqt-admin |  | ||||||
| lxqt-config |  | ||||||
| lxqt-globalkeys |  | ||||||
| lxqt-notificationd |  | ||||||
| lxqt-openssh-askpass |  | ||||||
| lxqt-panel |  | ||||||
| lxqt-policykit |  | ||||||
| lxqt-powermanagement |  | ||||||
| lxqt-qtplugin |  | ||||||
| lxqt-runner |  | ||||||
| lxqt-session |  | ||||||
| lxqt-sudo |  | ||||||
| lxqt-themes |  | ||||||
| lxqt-build-tools |  | ||||||
|  |  | ||||||
| compton-conf |  | ||||||
| lximage-qt |  | ||||||
| obconf-qt |  | ||||||
| openbox |  | ||||||
| pcmanfm-qt |  | ||||||
| qterminal |  | ||||||
| liblxqt |  | ||||||
| libqtxdg |  | ||||||
| lxmenu-data |  | ||||||
| libfm-qt |  | ||||||
| libfm |  | ||||||
| qtermwidget |  | ||||||
| libsysstat |  | ||||||
| libstatgrab |  | ||||||
| qps |  | ||||||
| @@ -1,37 +0,0 @@ | |||||||
| libdmx |  | ||||||
| libfontenc |  | ||||||
| libice |  | ||||||
| libpciaccess |  | ||||||
| libsm |  | ||||||
| libx11 |  | ||||||
| libxau |  | ||||||
| libxaw |  | ||||||
| libxcomposite |  | ||||||
| libxcursor |  | ||||||
| libxdamage |  | ||||||
| libxdmcp |  | ||||||
| libxext |  | ||||||
| libxfixes |  | ||||||
| libxfont2 |  | ||||||
| libxi|libxft |  | ||||||
| libxinerama |  | ||||||
| libxkbfile |  | ||||||
| libxkbui |  | ||||||
| libxmu |  | ||||||
| libxpm |  | ||||||
| libxrandr |  | ||||||
| libxrender |  | ||||||
| libxres |  | ||||||
| libxshmfence |  | ||||||
| libxss |  | ||||||
| libxt |  | ||||||
| libxtst |  | ||||||
| libxv |  | ||||||
| libxvmc |  | ||||||
| libxxf86vm |  | ||||||
| pixman |  | ||||||
| xbitmaps |  | ||||||
| xkeyboard-config |  | ||||||
| xorgproto |  | ||||||
| xterm |  | ||||||
| xtrans |  | ||||||
| @@ -21,7 +21,7 @@ is_subvolume() { | |||||||
| } | } | ||||||
|  |  | ||||||
| is_same_fs() { | is_same_fs() { | ||||||
|     [[ "$(stat -c %d "$1")" == "$(stat -c %d "$1")" ]] |     [[ "$(stat -c %d "$1")" == "$(stat -c %d "$2")" ]] | ||||||
| } | } | ||||||
|  |  | ||||||
| subvolume_delete_recursive() { | subvolume_delete_recursive() { | ||||||
|   | |||||||
| @@ -76,19 +76,23 @@ init_artools_pkg(){ | |||||||
|  |  | ||||||
|     [[ -z ${TREE_NAMES_ARTIX[@]} ]] && \ |     [[ -z ${TREE_NAMES_ARTIX[@]} ]] && \ | ||||||
|     TREE_NAMES_ARTIX=( |     TREE_NAMES_ARTIX=( | ||||||
|         packages |             packages | ||||||
|         community |             community | ||||||
|         packages-kernel |             packages-kernel | ||||||
|         packages-openrc |             packages-openrc | ||||||
|         packages-runit |             packages-runit | ||||||
|         packages-xorg |             packages-xorg | ||||||
|         packages-python |             packages-python | ||||||
|         packages-perl |             packages-perl | ||||||
|         packages-qt5 |             packages-qt5 | ||||||
|         packages-ruby |             packages-devel | ||||||
| #         packages-desktop |             packages-ruby | ||||||
| #         packages-kde |             packages-gtk | ||||||
| #         packages-gnome |             packages-gnome | ||||||
|  |             packages-cinnamon | ||||||
|  |             packages-lxqt | ||||||
|  |             packages-mate | ||||||
|  |             packages-kde | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"} |     HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"} | ||||||
| @@ -102,6 +106,14 @@ init_artools_pkg(){ | |||||||
|     CHROOTS_PKG="${CHROOTS_DIR}/buildpkg" |     CHROOTS_PKG="${CHROOTS_DIR}/buildpkg" | ||||||
|  |  | ||||||
|     REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"} |     REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"} | ||||||
|  |  | ||||||
|  |     REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'} | ||||||
|  |  | ||||||
|  |     DBEXT=${DBEXT:-'xz'} | ||||||
|  |  | ||||||
|  |     LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"} | ||||||
|  |  | ||||||
|  |     PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"} | ||||||
| } | } | ||||||
|  |  | ||||||
| init_artools_iso(){ | init_artools_iso(){ | ||||||
| @@ -167,6 +179,8 @@ load_user_info(){ | |||||||
|  |  | ||||||
|     USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}" |     USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}" | ||||||
|     prepare_dir "${USERCONFDIR}" |     prepare_dir "${USERCONFDIR}" | ||||||
|  |  | ||||||
|  |     USERCACHEDIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools" | ||||||
| } | } | ||||||
|  |  | ||||||
| # orig_argv=("$0" "$@") | # orig_argv=("$0" "$@") | ||||||
|   | |||||||
| @@ -136,12 +136,24 @@ write_servicescfg_conf(){ | |||||||
|     printf '%s' "${yaml}" |     printf '%s' "${yaml}" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | write_unpackfs_conf(){ | ||||||
|  |     local yaml=$(write_yaml_header) | ||||||
|  |     yaml+=$(write_empty_line) | ||||||
|  |     yaml+=$(write_yaml_map 0 'unpack') | ||||||
|  |     yaml+=$(write_yaml_seq_map 2 'source' "/run/artix/bootmnt/artix/x86_64/rootfs.sfs") | ||||||
|  |     yaml+=$(write_yaml_map 4 'sourcefs' 'squashfs') | ||||||
|  |     yaml+=$(write_yaml_map 4 'destination' '') | ||||||
|  |     yaml+=$(write_empty_line) | ||||||
|  |     printf '%s' "${yaml}" | ||||||
|  | } | ||||||
|  |  | ||||||
| configure_calamares(){ | configure_calamares(){ | ||||||
|     local mods="$1/etc/calamares/modules" |     local mods="$1/etc/calamares/modules" | ||||||
|     if [[ -d "$mods" ]];then |     if [[ -d "$mods" ]];then | ||||||
|         msg2 "Configuring Calamares" |         msg2 "Configuring Calamares" | ||||||
|         write_users_conf > "$mods"/users.conf |         write_users_conf > "$mods"/users.conf | ||||||
|         write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf |         write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf | ||||||
|  |         [[ -z ${DESKTOP_LIST} ]] && write_unpackfs_conf > "$mods"/unpackfs.conf | ||||||
|         sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf |         sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf | ||||||
|         sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf |         sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf | ||||||
|     fi |     fi | ||||||
|   | |||||||
| @@ -63,7 +63,7 @@ load_profile(){ | |||||||
|  |  | ||||||
|     PASSWORD=${PASSWORD:-'artix'} |     PASSWORD=${PASSWORD:-'artix'} | ||||||
|  |  | ||||||
|     ADDGROUPS=${ADDGROUPS:-"video,power,cdrom,network,lp,scanner,wheel,users,log"} |     ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"} | ||||||
|  |  | ||||||
|     if [[ -z ${SERVICES[@]} ]];then |     if [[ -z ${SERVICES[@]} ]];then | ||||||
|         SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager') |         SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager') | ||||||
|   | |||||||
| @@ -23,14 +23,12 @@ get_remote_head(){ | |||||||
| get_pkg_org(){ | get_pkg_org(){ | ||||||
|     local pkg="$1" org= sub= |     local pkg="$1" org= sub= | ||||||
|     case ${pkg} in |     case ${pkg} in | ||||||
|         ruby-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesRuby" ;; |         ruby-*) org="packagesRuby" ;; | ||||||
|         perl-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesPerl" ;; |         perl-*) org="packagesPerl" ;; | ||||||
|         python-*) org=${pkg:0:8}; sub="${org:7}"; echo "packagesPython" ;; |         python-*|python2-*) org="packagesPython" ;; | ||||||
|         python2-*) org=${pkg:0:9}; sub="${org:8}"; echo "packagesPython" ;; |         *) sub=${pkg:0:1}; org="packages${sub^^}" ;; | ||||||
|         lib32*) org=${pkg:0:7}; sub="${org:6}"; echo "packagesL" ;; #"packages${sub^^}" ;; |  | ||||||
| #         lib*) org=${pkg:0:4}; sub="${org:3}"; echo "packagesLib${sub^^}" ;; |  | ||||||
|         *) org=${pkg:0:1}; echo "packages${org^^}" ;; |  | ||||||
|     esac |     esac | ||||||
|  |     echo $org | ||||||
| } | } | ||||||
|  |  | ||||||
| subrepo_push(){ | subrepo_push(){ | ||||||
| @@ -61,7 +59,7 @@ subrepo_clone(){ | |||||||
| clone_tree(){ | clone_tree(){ | ||||||
|     local timer=$(get_timer) url="$1" tree="$2" os="${3:-$(get_osname)}" |     local timer=$(get_timer) url="$1" tree="$2" os="${3:-$(get_osname)}" | ||||||
|  |  | ||||||
|     msg "Cloning (%s) ..." "$tree" "$os" |     msg "Cloning %s (%s) ..." "$tree" "$os" | ||||||
|  |  | ||||||
|     git clone $url/$tree.git |     git clone $url/$tree.git | ||||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" |     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||||
|   | |||||||
| @@ -69,6 +69,25 @@ patch_pkg(){ | |||||||
|     esac |     esac | ||||||
| } | } | ||||||
|  |  | ||||||
|  | arch2artix(){ | ||||||
|  |     local repo="$1" artix=none | ||||||
|  |     case "$repo" in | ||||||
|  |         core) artix=system ;; | ||||||
|  |         extra) artix=world ;; | ||||||
|  |         community) artix=galaxy ;; | ||||||
|  |         multilib) artix=lib32 ;; | ||||||
|  |         staging) artix=goblins ;; | ||||||
|  |         testing) artix=gremlins ;; | ||||||
|  |         community-staging) artix=galaxy-goblins ;; | ||||||
|  |         community-testing) artix=galaxy-gremlins ;; | ||||||
|  |         multilib-staging) artix=lib32-goblins ;; | ||||||
|  |         multilib-testing) artix=lib32-gremlins ;; | ||||||
|  |         kde-unstable) artix=kde-wobble ;; | ||||||
|  |         gnome-unstable) artix=gnome-wobble ;; | ||||||
|  |     esac | ||||||
|  |     echo $artix | ||||||
|  | } | ||||||
|  |  | ||||||
| find_tree(){ | find_tree(){ | ||||||
|     local tree="$1" pkg="$2" |     local tree="$1" pkg="$2" | ||||||
|     local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg") |     local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg") | ||||||
| @@ -76,57 +95,79 @@ find_tree(){ | |||||||
|     echo ${result##*/} |     echo ${result##*/} | ||||||
| } | } | ||||||
|  |  | ||||||
| find_repo(){ | arch_repos(){ | ||||||
|     local pkg="$1" stag="$2" unst="$3" repo= |     local stag="$1" unst="$2" | ||||||
|     local repos=(core extra testing community community-testing multilib multilib-testing) |     local repos=(core extra testing community community-testing multilib multilib-testing) | ||||||
|  |  | ||||||
|     $stag && repos+=(staging community-staging multilib-staging) |     $stag && repos+=(staging community-staging multilib-staging) | ||||||
|     $unst && repos+=(gnome-unstable kde-unstable) |     $unst && repos+=(gnome-unstable kde-unstable) | ||||||
|  |  | ||||||
|     for r in ${repos[@]};do |     echo ${repos[@]} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | find_repo(){ | ||||||
|  |     local pkg="$1" stag="$2" unst="$3" repo= | ||||||
|  |  | ||||||
|  |     for r in $(arch_repos "$stag" "$unst");do | ||||||
|         [[ -f $pkg/repos/$r-x86_64/PKGBUILD ]] && repo=$r-x86_64 |         [[ -f $pkg/repos/$r-x86_64/PKGBUILD ]] && repo=$r-x86_64 | ||||||
|         [[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any |         [[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any | ||||||
|     done |     done | ||||||
|     echo $repo |     echo $repo | ||||||
| } | } | ||||||
|  |  | ||||||
|  | is_valid_repo(){ | ||||||
|  |     local src="$1" cases= | ||||||
|  |     for r in $(arch_repos true true);do | ||||||
|  |         cases=${cases:-}${cases:+|}${r} | ||||||
|  |     done | ||||||
|  |     eval "case $src in | ||||||
|  |         ${cases}|trunk) return 0 ;; | ||||||
|  |         *) return 1 ;; | ||||||
|  |     esac" | ||||||
|  | } | ||||||
|  |  | ||||||
| get_cases(){ | get_cases(){ | ||||||
|     local pkglist="${DATADIR}/pkglists/$1.list" |     local pkglist="${SYSCONFDIR}/pkglist.d/$1.list" | ||||||
|  |  | ||||||
|     local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g" |     local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g" | ||||||
|  |  | ||||||
|     local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean")) |     local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean")) | ||||||
|  |  | ||||||
|     local cases= |     local cases= | ||||||
|     for p in ${pkgs[@]};do |     for p in ${pkgs[@]};do | ||||||
|         cases=${p:+}${p:-|}${p} |         cases=${cases:-}${cases:+|}${p} | ||||||
|     done |     done | ||||||
|     echo $cases |     echo $cases | ||||||
| } | } | ||||||
|  |  | ||||||
| get_artix_tree(){ | get_artix_tree(){ | ||||||
|     local pkg="$1" artix_tree="${2:-$3}" tree |     local pkg="$1" artix_tree="${2:-$3}" tree | ||||||
|     case $pkg in |     eval "case $pkg in | ||||||
|         $(get_cases kernel)) tree=packages-kernel ;; |         $(get_cases kernel)) tree=packages-kernel ;; | ||||||
|         python-*|python2-*) tree=packages-python ;; |         $(get_cases python)) tree=packages-python ;; | ||||||
|         perl-*) tree=packages-perl ;; |         $(get_cases perl)) tree=packages-perl ;; | ||||||
|         ruby-*) tree=packages-ruby ;; |         $(get_cases ruby)) tree=packages-ruby ;; | ||||||
|         xorg*|xf86*|$(get_cases xorg)) tree=packages-xorg ;; |         $(get_cases openrc)) tree=packages-openrc ;; | ||||||
|         *-openrc) tree=packages-openrc ;; |         $(get_cases runit)) tree=packages-runit ;; | ||||||
|         *-runit) tree=packages-runit ;; |         $(get_cases media)) tree=packages-media ;; | ||||||
|         qt5-*) tree=packages-qt5 ;; |         $(get_cases xorg)) tree=packages-xorg ;; | ||||||
|         lxqt*|$(get_cases lxqt)) tree=packages-lxqt ;; |         $(get_cases qt5)) tree=packages-qt5 ;; | ||||||
| #         $(get_cases freedesktop)) tree=packages-desktop ;; |         $(get_cases gtk)) tree=packages-gtk ;; | ||||||
| #         $(get_cases kde)) tree=packages-kde ;; |         $(get_cases devel)) tree=packages-devel ;; | ||||||
| #         $(get_cases gnome)) tree=packages-gnome ;; |         $(get_cases lxqt)) tree=packages-lxqt ;; | ||||||
|  |         $(get_cases cinnamon)) tree=packages-cinnamon ;; | ||||||
|  |         $(get_cases kde)) tree=packages-kde ;; | ||||||
|  |         $(get_cases gnome)) tree=packages-gnome ;; | ||||||
|  |         $(get_cases mate)) tree=packages-mate ;; | ||||||
|         *) tree=$artix_tree |         *) tree=$artix_tree | ||||||
|     esac |     esac" | ||||||
|     echo $tree |     echo $tree | ||||||
| } | } | ||||||
|  |  | ||||||
| get_import_path(){ | get_import_path(){ | ||||||
|     local pkg="$1" import_path= |     local pkg="$1" import_path= | ||||||
|     for tree in ${TREE_NAMES_ARCH[@]};do |     for tree in ${TREE_NAMES_ARCH[@]};do | ||||||
|         [[ -d ${TREE_DIR_ARCH}/$tree/$pkg ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg |         [[ -d ${TREE_DIR_ARCH}/$tree/$pkg/repos ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg | ||||||
|     done |     done | ||||||
|     echo $import_path |     echo $import_path | ||||||
| } | } | ||||||
| @@ -141,14 +182,6 @@ pkgver_equal() { | |||||||
|     fi |     fi | ||||||
| } | } | ||||||
|  |  | ||||||
| is_valid_repo(){ |  | ||||||
|     local src="$1" |  | ||||||
|     case $src in |  | ||||||
|         core|extra|community|multilib|testing|staging|community-testing|community-staging|multilib-testing|multilib-staging|trunk) return 0 ;; |  | ||||||
|         *) return 1 ;; |  | ||||||
|     esac |  | ||||||
| } |  | ||||||
|  |  | ||||||
| find_cached_package() { | find_cached_package() { | ||||||
|     local searchdirs=("$PKGDEST" "$PWD") results=() |     local searchdirs=("$PKGDEST" "$PWD") results=() | ||||||
|     local targetname=$1 targetver=$2 targetarch=$3 |     local targetname=$1 targetver=$2 targetarch=$3 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user