diff --git a/helper-templates/chroot.sh b/helper-templates/chroot.sh index 4204379fa52..acb9e86805b 100644 --- a/helper-templates/chroot.sh +++ b/helper-templates/chroot.sh @@ -10,16 +10,16 @@ trap umount_chroot_fs INT QUIT check_installed_pkg xbps-base-chroot 0.1 if [ $? -ne 0 ]; then - echo "*** ERROR: xbps-base-chroot pkg not installed ***" + msg_error "xbps-base-chroot pkg not installed." exit 1 fi if [ "$(id -u)" -ne 0 ]; then if [ -z "$base_chroot" ]; then - echo "*** ERROR: this package must be built inside of the chroot ***" + msg_error "this package must be built inside of the chroot." exit 1 fi - echo "*** ERROR: you must be root to use this target ***" + msg_error "you must be root to use this target." exit 1 fi @@ -29,9 +29,11 @@ if [ ! -f $XBPS_MASTERDIR/.xbps_perms_done ]; then chmod +s $XBPS_MASTERDIR/usr/libexec/pt_chown cp -af /etc/passwd /etc/shadow /etc/group /etc/hosts /etc/resolv.conf $XBPS_MASTERDIR/etc touch $XBPS_MASTERDIR/.xbps_perms_done + set_color bold echo "done." + restore_color else - echo "==> Entering into the chroot on $XBPS_MASTERDIR." + msg_normal "Entering into the chroot on $XBPS_MASTERDIR." fi REQDIRS="bin sbin tmp var sys proc dev xbps xbps_builddir \ @@ -56,9 +58,14 @@ for f in ${REQFS}; do mount --bind $blah $XBPS_MASTERDIR/$f if [ $? -eq 0 ]; then touch $XBPS_MASTERDIR/.${f}_mount_bind_done + set_color bold echo "done." + restore_color else + set_color red + set_color bold echo "failed." + restore_color fi fi done @@ -80,7 +87,9 @@ rebuild_ldso_cache() echo -n "==> Rebuilding chroot's dynamic linker cache..." chroot $XBPS_MASTERDIR /sbin/ldconfig -c /etc/ld.so.conf chroot $XBPS_MASTERDIR /sbin/ldconfig -C /etc/ld.so.cache + set_color bold echo " done." + restore_color } chroot_pkg_handler() @@ -100,7 +109,7 @@ chroot_pkg_handler() env in_chroot=yes chroot $XBPS_MASTERDIR /xbps/xbps.sh \ $action $pkg fi - echo "==> Exiting from the chroot on $XBPS_MASTERDIR." + msg_normal "Exiting from the chroot on $XBPS_MASTERDIR." umount_chroot_fs } @@ -115,9 +124,14 @@ umount_chroot_fs() umount -f $XBPS_MASTERDIR/$fs if [ $? -eq 0 ]; then rm -f $XBPS_MASTERDIR/.${fs}_mount_bind_done + set_color bold echo "done." + restore_color else + set_color red + set_color bold echo "failed." + restore_color fi unset fs done diff --git a/helper-templates/replace-interpreter.sh b/helper-templates/replace-interpreter.sh index 4126817d5fe..352efef9805 100644 --- a/helper-templates/replace-interpreter.sh +++ b/helper-templates/replace-interpreter.sh @@ -39,8 +39,8 @@ replace_interpreter() if [ -f $wrksrc/$file ]; then sed -i -e "1s|^#![[:space:]]*${orsb}|#!${trpath}|" $file && \ - echo "=> Transformed $lang script: ${file##$wrksrc}." + msg_normal "Transformed $lang script: ${file##$wrksrc}." else - echo "=> Ignoring unexistent $lang script: ${file##$wrksrc}." + msg_warn "Ignoring unexistent $lang script: ${file##$wrksrc}." fi } diff --git a/utils/xbps-pkgdb.c b/utils/xbps-pkgdb.c index 478d9293c42..0105873ba2f 100644 --- a/utils/xbps-pkgdb.c +++ b/utils/xbps-pkgdb.c @@ -110,14 +110,17 @@ main(int argc, char **argv) perror("ERROR: couldn't write database file"); exit(1); } - printf("==> Package database file not found, " - "creating it.\n"); + printf("%s\e[0m==> \e[37m\e[1mPackage database file " + "not found, creating it.\n", + in_chroot ? "[chroot] " : ""); prop_object_release(dbdict); } else { /* register pkg if it's not registered already */ pkg = prop_dictionary_get(dbdict, argv[2]); if (pkg && prop_object_type(pkg) == PROP_TYPE_STRING) { - printf("==> Package `%s' already registered.\n", argv[2]); + printf("%s\e[0m=> \e[37m\e[1mPackage `%s' " + "already registered.\n", + in_chroot ? "[chroot] " : "", argv[2]); exit(0); } prop_dictionary_set_cstring_nocopy(dbdict, argv[2], argv[3]); @@ -127,8 +130,8 @@ main(int argc, char **argv) } } - printf("%s%s-%s registered successfully.\n", - in_chroot ? "[chroot] " : "==> ", argv[2], argv[3]); + printf("%s\e[0m=> \e[37m\e[1m%s-%s registered successfully.\n", + in_chroot ? "[chroot] " : "", argv[2], argv[3]); } else if (strcmp(argv[1], "unregister") == 0) { /* Unregisters a package from the database */ @@ -152,8 +155,8 @@ main(int argc, char **argv) exit(1); } - printf("%s%s-%s unregistered successfully.\n", - in_chroot ? "[chroot] " : "==> ", argv[2], argv[3]); + printf("%s\e[0m==> \e[37m\e[1m%s-%s unregistered successfully.\n", + in_chroot ? "[chroot] " : "", argv[2], argv[3]); } else if (strcmp(argv[1], "list") == 0) { /* Lists packages currently registered in database */ diff --git a/xbps.sh b/xbps.sh index 4705969d6fa..95624e8dc25 100755 --- a/xbps.sh +++ b/xbps.sh @@ -30,6 +30,8 @@ # Default path to configuration file, can be overriden # via the environment or command line. # +trap restore_color INT QUIT + : ${XBPS_CONFIG_FILE:=/etc/xbps.conf} : ${progname:=$(basename $0)} @@ -40,7 +42,7 @@ usage() { cat << _EOF -$progname: [-C] [-c ] [package_name] +$progname: [-Ce] [-c ] [package_name] Targets: build Builds a package, only build phase is done. @@ -61,6 +63,7 @@ Options: -C Do not remove build directory after successful installation. -c Path to global configuration file: if not specified /etc/xbps.conf is used. + -e Disable ANSI colors in messages. _EOF exit 1 } @@ -107,6 +110,37 @@ check_path() path_fixed="$orig" } +set_color() +{ + [ -n "$disable_colors" ] && return 0 + + case "$1" in + black) echo -n -e "\[e30m";; + red) echo -n -e "\e[31m";; + green) echo -n -e "\e[32m";; + brown) echo -n -e "\e[33m";; + blue) echo -n -e "\e[34m";; + magenta) echo -n -e "\e[35m";; + cyan) echo -n -e "\e[36m";; + white) echo -n -e "\e[37m";; + bold) echo -n -e "\e[1m";; + *) return 1 ;; + esac +} + +bye() +{ + restore_color + exit "$1" +} + +restore_color() +{ + [ -n "$disable_colors" ] && return 0 + + echo -n -e "\e[0m" +} + run_file() { local file="$1" @@ -129,33 +163,47 @@ msg_error() { [ -z "$1" ] && return 1 + set_color red + set_color bold if [ -n "$in_chroot" ]; then - echo "[chroot] ERROR: $1" + echo -n "[chroot] ERROR: " else - echo "ERROR: $1" + echo -n "ERROR: " fi + restore_color + set_color bold + echo "$1" + restore_color } msg_warn() { [ -z "$1" ] && return 1 + set_color cyan + set_color bold if [ -n "$in_chroot" ]; then - echo "[chroot] WARNING: $1" + echo -n "[chroot] WARNING: " else - echo "WARNING: $1" + echo -n "WARNING: " fi + restore_color + set_color bold + echo "$1" + restore_color } msg_normal() { [ -z "$1" ] && return 1 - if [ -n "$in_chroot" ]; then - echo "[chroot] $1" - else - echo "=> $1" - fi + set_color green + [ -n "$in_chroot" ] && echo -n "[chroot] " + restore_color + echo -n "=> " + set_color bold + echo "$1" + restore_color } # @@ -165,6 +213,7 @@ info_tmpl() { local i= + set_color bold echo "pkgname: $pkgname" echo "version: $version" for i in "${distfiles}"; do @@ -183,6 +232,7 @@ info_tmpl() echo " $i" done fi + restore_color } # @@ -202,7 +252,7 @@ check_config_vars() done if [ -z "$cffound" ]; then msg_error "cannot find a config file" - exit 1 + bye 1 fi fi @@ -211,7 +261,7 @@ check_config_vars() if [ ! -f "$XBPS_CONFIG_FILE" ]; then msg_error "cannot find configuration file: $XBPS_CONFIG_FILE" - exit 1 + bye 1 fi local XBPS_VARS="XBPS_MASTERDIR XBPS_DESTDIR XBPS_BUILDDIR \ @@ -221,14 +271,14 @@ check_config_vars() eval val="\$$f" if [ -z "$val" ]; then msg_error "'$f' not set in configuration file" - exit 1 + bye 1 fi if [ ! -d "$val" ]; then mkdir "$val" if [ "$?" -ne 0 ]; then msg_error "couldn't create '$f' directory" - exit 1 + bye 1 fi fi done @@ -267,6 +317,8 @@ setup_tmpl() { local pkg="$1" + [ -z "$pkg" ] && msg_error "missing package name." && usage + if [ -f "$XBPS_TEMPLATESDIR/$pkg.tmpl" ]; then if [ "$pkgname" != "$pkg" ]; then run_file $XBPS_TEMPLATESDIR/$pkg.tmpl @@ -274,7 +326,7 @@ setup_tmpl() prepare_tmpl else msg_error "cannot find '$pkg' template build file." - exit 1 + bye 1 fi } @@ -297,7 +349,7 @@ prepare_tmpl() eval val="\$$i" if [ -z "$val" -o -z "$i" ]; then msg_error "\"$i\" not set on $pkgname template." - exit 1 + bye 1 fi done @@ -353,7 +405,7 @@ extract_distfiles() if [ $count -gt 1 ]; then if [ -z "$wrksrc" ]; then msg_error "\$wrksrc must be defined with multiple distfiles." - exit 1 + bye 1 fi mkdir $wrksrc fi @@ -396,21 +448,21 @@ extract_distfiles() $ltar_cmd xfj $XBPS_SRCDISTDIR/$curfile -C $lwrksrc if [ $? -ne 0 ]; then msg_error "extracting $curfile into $lwrksrc." - exit 1 + bye 1 fi ;; .tar.gz|.tgz) $ltar_cmd xfz $XBPS_SRCDISTDIR/$curfile -C $lwrksrc if [ $? -ne 0 ]; then msg_error "extracting $curfile into $lwrksrc." - exit 1 + bye 1 fi ;; .tar) $ltar_cmd xf $XBPS_SRCDISTDIR/$curfile -C $lwrksrc if [ $? -ne 0 ]; then msg_error "extracting $curfile into $lwrksrc." - exit 1 + bye 1 fi ;; .zip) @@ -427,18 +479,18 @@ extract_distfiles() unset tmpf tmpsufx tmpwrksrc else msg_error "cannot find unzip helper." - exit 1 + bye 1 fi extract_unzip $XBPS_SRCDISTDIR/$curfile $lwrksrc if [ $? -ne 0 ]; then msg_error "extracting $curfile into $lwrksrc." - exit 1 + bye 1 fi ;; *) msg_error "cannot guess $curfile extract suffix. ($cursufx)" - exit 1 + bye 1 ;; esac done @@ -460,7 +512,7 @@ verify_sha256_cksum() filesum=$($XBPS_DIGEST_CMD $XBPS_SRCDISTDIR/$file) if [ "$origsum" != "$filesum" ]; then msg_error "SHA256 checksum doesn't match for $file." - exit 1 + bye 1 fi msg_normal "SHA256 checksum OK for $file." @@ -478,7 +530,7 @@ fetch_distfiles() local ckcount=0 local f= - [ -z $pkgname ] && exit 1 + [ -z $pkgname ] && bye 1 # # There's nothing of interest if we are a meta template. @@ -502,7 +554,7 @@ fetch_distfiles() if [ -z $found ]; then msg_error "cannot find checksum for $curfile." - exit 1 + bye 1 fi verify_sha256_cksum $curfile $cksum @@ -531,7 +583,7 @@ fetch_distfiles() else msg_error "there was an error fetching $curfile." fi - exit 1 + bye 1 else unset localurl # @@ -549,7 +601,7 @@ fetch_distfiles() if [ -z $found ]; then msg_error "cannot find checksum for $curfile." - exit 1 + bye 1 fi verify_sha256_cksum $curfile $cksum @@ -672,25 +724,25 @@ apply_tmpl_patches() cp -f $patch $wrksrc # Try to guess if its a compressed patch. - if $(echo $patch|$grep_cmd -q .gz); then + if [[ "$patch" == *.diff.gz ]]; then gunzip $wrksrc/$i patch=${i%%.gz} - elif $(echo $patch|$grep_cmd -q .bz2); then + elif [[ "$patch" == *.diff.bz2 ]]; then bunzip2 $wrksrc/$i patch=${i%%.bz2} - elif $(echo $patch|$grep_cmd -q .diff); then + elif [[ "$patch" == *.diff ]]; then patch=$i else msg_warn "unknown patch type: $i." continue fi - cd $wrksrc && patch -p0 < $patch 2>/dev/null + cd $wrksrc && patch -s -p0 < $patch 2>/dev/null if [ "$?" -eq 0 ]; then msg_normal "Patch applied: $i." else msg_error "couldn't apply patch: $i." - exit 1 + bye 1 fi done fi @@ -719,7 +771,7 @@ configure_src_phase() if [ ! -d $wrksrc ]; then msg_error "unexistent build directory [$wrksrc]." - exit 1 + bye 1 fi # Apply patches if requested by template file @@ -735,8 +787,6 @@ configure_src_phase() msg_normal "Running configure phase for $pkgname-$version." - set_build_vars - [ -z "$configure_script" ] && configure_script="./configure" local _prefix= @@ -746,7 +796,7 @@ configure_src_phase() _prefix= fi - cd $wrksrc || exit 1 + cd $wrksrc || bye 1 # # Packages using GNU autoconf @@ -784,12 +834,12 @@ configure_src_phase() # else msg_error "unknown build_style [$build_style]" - exit 1 + bye 1 fi if [ "$build_style" != "perl_module" -a "$?" -ne 0 ]; then msg_error "building $pkg (configure phase)." - exit 1 + bye 1 fi # unset configure_env vars. @@ -824,10 +874,10 @@ build_src_phase() if [ ! -d $wrksrc ]; then msg_error "unexistent build directory [$wrksrc]" - exit 1 + bye 1 fi - cd $wrksrc || exit 1 + cd $wrksrc || bye 1 # # Assume BSD make if make_cmd not set in template. @@ -852,7 +902,6 @@ build_src_phase() libtool_fixup_file set_build_vars - msg_normal "Running build phase for $pkg." # @@ -861,7 +910,7 @@ build_src_phase() ${make_cmd} ${makejobs} ${make_build_args} ${make_build_target} if [ "$?" -ne 0 ]; then msg_error "building $pkg (build phase)." - exit 1 + bye 1 fi unset makejobs @@ -898,10 +947,10 @@ install_src_phase() if [ ! -d $wrksrc ]; then msg_error "unexistent build directory [$wrksrc]" - exit 1 + bye 1 fi - cd $wrksrc || exit 1 + cd $wrksrc || bye 1 msg_normal "Running install phase for: $pkgname-$version." @@ -949,7 +998,7 @@ make_install() ${make_cmd} ${make_install_target} ${make_install_args} if [ "$?" -ne 0 ]; then msg_error "installing $pkgname-$version." - exit 1 + bye 1 fi # Replace libtool archives if requested. @@ -976,13 +1025,15 @@ register_pkg_handler() [ -z "$action" -o -z "$pkg" -o -z "$version" ] && return 1 + set_color green if [ "$action" = "register" ]; then $XBPS_PKGDB_CMD register $pkg $version - [ $? -ne 0 ] && exit 1 + [ $? -ne 0 ] && bye 1 elif [ "$action" = "unregister" ]; then $XBPS_PKGDB_CMD unregister $pkg $version - [ $? -ne 0 ] && exit 1 + [ $? -ne 0 ] && bye 1 else + restore_color return 1 fi } @@ -1100,18 +1151,28 @@ install_dependencies_pkg() add_dependency_tolist $pkg find_dupdeps_inlist installed find_dupdeps_inlist notinstalled + set_color bold echo "done." + restore_color [ -z "$deps_list" -a -z "$installed_deps_list" ] && return 0 msg_normal "Required dependencies for $(basename $pkg):" for i in ${installed_deps_list}; do fpkg="$($XBPS_PKGDB_CMD list|$grep_cmd -w ${i%-[0-9]*.*})" - echo " $i: found $fpkg." + echo -n " $i: " + set_color green + set_color bold + echo "found $fpkg." + restore_color done for i in ${deps_list}; do - echo " $i: not installed." + echo -n " $i: " + set_color red + set_color bold + echo "not installed." + restore_color done for i in ${deps_list}; do @@ -1223,7 +1284,7 @@ install_pkg() local cur_tmpl="$XBPS_TEMPLATESDIR/$curpkgn.tmpl" if [ -z $cur_tmpl -o ! -f $cur_tmpl ]; then msg_error "cannot find $cur_tmpl template build file." - exit 1 + bye 1 fi # @@ -1314,14 +1375,17 @@ list_pkgs() local i= if [ ! -r "$XBPS_PKGDB_FPATH" ]; then - echo "=> No packages registered or missing register db file." - exit 0 + msg_warn "No packages registered or missing register db file." + bye 0 fi for i in $($XBPS_PKGDB_CMD list); do # Run file to get short_desc and print something useful run_file $XBPS_TEMPLATESDIR/${i%-[0-9]*.*}.tmpl - echo "$i $short_desc" + set_color bold + echo -n "$i" + restore_color + echo " $short_desc" reset_tmpl_vars done } @@ -1335,16 +1399,18 @@ list_pkg_files() local f="$XBPS_DESTDIR/$pkg/.xbps-filelist" if [ -z $pkg ]; then - echo "ERROR: unexistent package, aborting." - exit 1 + msg_error "unexistent package, aborting." + bye 1 fi if [ ! -d "$XBPS_DESTDIR/$pkg" ]; then - echo "ERROR: cannot find $pkg in $XBPS_DESTDIR." - exit 1 + msg_error "cannot find $pkg in $XBPS_DESTDIR." + bye 1 fi + set_color bold cat $f|sort -u + restore_color } # @@ -1355,13 +1421,13 @@ remove_pkg() local pkg="$1" if [ -z "$pkg" ]; then - echo "ERROR: unexistent package, aborting." - exit 1 + msg_error "unexistent package, aborting." + bye 1 fi if [ ! -f "$XBPS_TEMPLATESDIR/$pkg.tmpl" ]; then - echo "ERROR: cannot find template build file." - exit 1 + msg_error "cannot find template build file." + bye 1 fi run_file $XBPS_TEMPLATESDIR/$pkg.tmpl @@ -1371,14 +1437,15 @@ remove_pkg() # if [ "$build_style" = "meta-template" ]; then register_pkg_handler unregister $pkgname $version - [ $? -eq 0 ] && \ - echo "=> Removed meta-template: $pkg." + [ $? -eq 0 ] && set_color green && \ + echo "=> Removed meta-template: $pkg." && \ + restore_color return $? fi if [ ! -d "$XBPS_DESTDIR/$pkg-$version" ]; then - echo "ERROR: cannot find package on $XBPS_DESTDIR." - exit 1 + msg_error "cannot find package on $XBPS_DESTDIR." + bye 1 fi unstow_pkg $pkg @@ -1409,9 +1476,9 @@ stow_pkg() [ "$build_style" = "meta-template" ] && return 0 fi - cd $XBPS_DESTDIR/$pkgname-$version || exit 1 + cd $XBPS_DESTDIR/$pkgname-$version || bye 1 find . > $flist - sed -i -e "s|^.$||g;s|^./||g;s|.xbps-filelist||g" $flist + sed -i -e "s|^.$||g;s|^./||g;s|.xbps-filelist||g;/^$/d" $flist cp -ar . $XBPS_MASTERDIR mv -f $flist $XBPS_DESTDIR/$pkgname-$version/.xbps-filelist @@ -1439,8 +1506,8 @@ unstow_pkg() local f= if [ -z "$pkg" ]; then - echo "ERROR: template wasn't specified?" - exit 1 + msg_error "template wasn't specified?" + bye 1 fi if [ "$pkgname" != "$pkg" ]; then @@ -1452,22 +1519,33 @@ unstow_pkg() # [ "$build_style" = "meta-template" ] && return 0 - cd $XBPS_DESTDIR/$pkgname-$version || exit 1 - [ ! -f .xbps-filelist ] && exit 1 + cd $XBPS_DESTDIR/$pkgname-$version || bye 1 + [ ! -f .xbps-filelist ] && bye 1 for f in $(cat .xbps-filelist|sort -ur); do if [ -f $XBPS_MASTERDIR/$f -o -h $XBPS_MASTERDIR/$f ]; then rm $XBPS_MASTERDIR/$f >/dev/null 2>&1 - [ $? -eq 0 ] && echo "Removing file: $f" + if [ $? -eq 0 ]; then + echo -n "Removing file: " + set_color bold + echo "$f" + restore_color + fi fi done for f in $(cat .xbps-filelist|sort -ur); do if [ -d $XBPS_MASTERDIR/$f ]; then rmdir $XBPS_MASTERDIR/$f >/dev/null 2>&1 - [ $? -eq 0 ] && echo "Removing directory: $f" + if [ $? -eq 0 ]; then + echo -n "Removing directory: " + set_color bold + echo "$f" + restore_color + fi fi done + restore_color register_pkg_handler unregister $pkgname $version } @@ -1475,7 +1553,7 @@ unstow_pkg() # # main() # -while getopts "Cc:" opt; do +while getopts "Cc:e" opt; do case $opt in C) dontrm_builddir=yes @@ -1485,6 +1563,9 @@ while getopts "Cc:" opt; do XBPS_CONFIG_FILE="$OPTARG" shift ;; + e) + disable_colors=yes + ;; --) shift break @@ -1497,7 +1578,7 @@ shift $(($OPTIND - 1)) target="$1" if [ -z "$target" ]; then - echo "ERROR: missing target." + msg_error "missing target." usage fi @@ -1556,19 +1637,23 @@ info) info_tmpl $2 ;; install-destdir) + [ -z "$2" ] && msg_error "missing package name." && usage install_destdir_target=yes install_pkg $2 ;; install) + [ -z "$2" ] && msg_error "missing package name." && usage install_pkg $2 ;; list) list_pkgs ;; listfiles) + [ -z "$2" ] && msg_error "missing package." && usage list_pkg_files $2 ;; remove) + [ -z "$2" ] && msg_error "missing package name." && usage remove_pkg $2 ;; stow) @@ -1581,9 +1666,9 @@ unstow) unstow_pkg $2 ;; *) - echo "ERROR: invalid target: $target." + msg_error "invalid target: $target." usage esac # Agur -exit 0 +bye 0