[pacman-dev] makepkg with gettext support
Hi guys, I send my initial work on makepkg with gettext support. I guess that it's not still perfect, but I would appreciate a lot the contribution of all the translators and the pacman developers. All the suggestions are appreciated. -- Giovanni Scafora Arch Linux Trusted User (voidnull) http://www.archlinux.org linuxmania@gmail.com
On 3/27/07, Giovanni Scafora <linuxmania@gmail.com> wrote:
Hi guys,
I send my initial work on makepkg with gettext support. I guess that it's not still perfect, but I would appreciate a lot the contribution of all the translators and the pacman developers. All the suggestions are appreciated.
I've inlined it so I can comment on it. Comments are near whatever I have a comment on. :) +. gettext.sh + +TEXTDOMAIN=makepkg ... Can you smash this stuff into one block with a nice comment like "# gettext initialization"? And it might be more clear to use 'source' instead of '.' for consistency with the rest of makepkg. @@ -98,6 +105,7 @@ error() { if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2 else + error=$1 echo "==> ERROR: $1" >&2 What is this for? It is the only function that got changed, is it debug code? @@ -177,6 +185,9 @@ in_array() { } checkdeps() { + local missdep="" + local deplist="" + I think this is old code, along with a few of the things below. Try to sync with the latest in CVS or GIT. @@ -193,31 +204,24 @@ checkdeps() { handledeps() { local missingdeps=0 local deplist="$*" - local depstrip="" - local striplist="" local haveperm=0 if [ \( "$EUID" = "0" -a "$INFAKEROOT" != "1" \) -o "$SUDO" = 1 ]; then haveperm=1 fi - for dep in $deplist; do - depstrip=$(echo $dep | sed 's|=.*$||' | sed 's|>.*$||' | sed 's|<.*$||') - striplist="$striplist $depstrip" - done - if [ "$deplist" != "" -a $haveperm -eq 1 ]; then if [ "$DEP_BIN" = "1" -a "$SUDO" = "1" ]; then # install missing deps from binary packages (using pacman -S and sudo) - msg "Installing missing dependencies..." + msg "$(gettext "Installing missing dependencies...")" if [ "$INFAKEROOT" = "1" ]; then # kinda hacky, but we need to make pacman think that we're NOT # in fakeroot so it will go ahead and install the dependencies. FAKEROOTKEY2=$FAKEROOTKEY unset FAKEROOTKEY fi - sudo pacman $PACMAN_OPTS -S $striplist + sudo pacman $PACMAN_OPTS -S $deplist if [ $? -eq 1 ]; then - error "Pacman failed to install missing dependencies." + error "$(gettext "Failed to install missing dependencies.")" exit 1 fi if [ "$INFAKEROOT" = "1" ]; then @@ -226,25 +230,25 @@ handledeps() { fi elif [ "$DEP_BIN" = "1" ]; then # install missing deps from binary packages (using pacman -S) - msg "Installing missing dependencies..." - pacman $PACMAN_OPTS -S $striplist + msg "$(gettext "Installing missing dependencies...")" + pacman $PACMAN_OPTS -S $deplist if [ $? -eq 1 ]; then - error "Pacman failed to install missing dependencies." + error "$(gettext "Failed to install missing dependencies.")" exit 1 fi elif [ "$DEP_SRC" = "1" ]; then # install missing deps by building them from source. # we look for each package name in $SRCROOT and build it. if [ "$SRCROOT" = "" ]; then - error "Source root cannot be found - please make sure it is specified in /etc/makepkg.conf" + error "$(gettext "Source root cannot be found - please make sure it is specified in /etc/makepkg.conf")" exit 1 fi # TODO: handle version comparators (eg, glibc>=2.2.5) - msg "Building missing dependencies..." - for dep in $striplist; do + msg "$(gettext "Building missing dependencies...")" + for dep in $deplist; do candidates=$(find $SRCROOT -type d -name "$dep") if [ "$candidates" = "" ]; then - error "Could not find \"$dep\" under $SRCROOT" + error "$(eval_gettext "Could not find \"\$dep\" under \$SRCROOT")" exit 1 fi success=0 @@ -252,9 +256,9 @@ handledeps() { if [ -f "$pkgdir/$BUILDSCRIPT" ]; then cd "$pkgdir" if [ "$RMDEPS" = "1" ]; then - PKGDEST="$PKGDEST" makepkg -i -c -b -r + makepkg -i -c -b -r -w $PKGDEST else - PKGDEST="$PKGDEST" makepkg -i -c -b + makepkg -i -c -b -w $PKGDEST fi if [ $? -eq 0 ]; then success=1 @@ -263,7 +267,7 @@ handledeps() { fi done if [ "$success" = "0" ]; then - error "Failed to build \"$dep\"" + error "$(eval_gettext "Failed to build \"\$dep\"")" exit 1 fi done @@ -290,27 +294,21 @@ handledeps() { } resolvedeps() { - deplist="" - newdeplist="" - deplist=$(checkdeps $*) if [ -n "${deplist}" ]; then handledeps $deplist if [ $? -eq 0 ]; then # check deps again to make sure they were resolved - newdeplist=$(checkdeps $*) - if [ -n "${newdeplist}" ]; then - error "Failed to install all missing dependencies." + deplist=$(checkdeps ${depends[@]}) + if [ -n "${deplist}" ]; then + error "$(gettext "Failed to install missing dependencies.")" fi - else - newdeplist="$deplist" fi fi - # if new dep list is not empty, print the list - if [ -n "${newdeplist}" ]; then - msg "Missing Dependencies:" - for dep in ${newdeplist}; do + if [ -n "${deplist}" ]; then + msg "$(gettext "Missing Dependencies:")" + for dep in ${deplist}; do msg2 "${dep}" done return 1 @@ -321,36 +319,26 @@ resolvedeps() { # fix flyspray bug #5923 removedeps() { - # runtimedeps and buildtimedeps are set when resolving deps - local deplist="$runtimedeps $buildtimedeps" - local depstrip="" - local striplist="" - - for dep in $deplist; do - depstrip=$(echo $dep | sed 's|=.*$||' | sed 's|>.*$||' | sed 's|<.*$||') - striplist="$striplist $depstrip" - done - - if [ "$RMDEPS" = "1" -a "$SUDO" = "1" -a -n "$deplist" ]; then - msg "Removing installed dependencies..." + if [ "$RMDEPS" = "1" -a "$SUDO" = "1" -a \( ! -z "$deplist" -o ! -z "$makedeplist" \) ]; then + msg "$(gettext "Removing installed dependencies...")" if [ "$INFAKEROOT" = "1" ]; then export FAKEROOTKEY2=$FAKEROOTKEY unset FAKEROOTKEY fi - sudo pacman $PACMAN_OPTS -Rs $striplist + sudo pacman $PACMAN_OPTS -Rs $makedeplist $deplist if [ "$INFAKEROOT" = "1" ]; then export FAKEROOTKEY=$FAKEROOTKEY2 unset FAKEROOTKEY2 fi - elif [ "$RMDEPS" = "1" -a "$EUID" = "0" -a "$INFAKEROOT" != "1" -a -n "$deplist" ]; then - msg "Removing installed dependencies..." - pacman $PACMAN_OPTS -Rs $striplist + elif [ "$RMDEPS" = "1" -a "$EUID" = "0" -a "$INFAKEROOT" != "1" -a \( ! -z "$deplist" -o ! -z "$makedeplist" \) ]; then + msg "$(gettext "Removing installed dependencies...")" + pacman $PACMAN_OPTS -Rs $makedeplist $deplist fi } @@ -500,36 +489,36 @@ done # check for sudo if [ "$SUDO" = "1" -a ! "$(type -p sudo)" ]; then - error "Cannot find the sudo binary! Is sudo installed?" + error "$(gettext "Cannot find the sudo binary! Is sudo installed?")" exit 1 fi if [ "$CLEANCACHE" = "1" ]; then #fix flyspray feature request #5223 if [ -n "$SRCDEST" -a "$SRCDEST" != "$startdir" ]; then - msg "Cleaning up ALL files from $SRCDEST." - echo -n " Are you sure you wish to do this? [Y/n] " + msg "$(eval_gettext "Cleaning up ALL files from \$SRCDEST.")" + echo -n "$(gettext " Are you sure you wish to do this? [Y/n] ")" read answer answer=$(echo $answer | tr [:upper:] [:lower:]) if [ "$answer" = "yes" -o "$answer" = "y" ]; then If you translate the question, you have to translate the "yes" and "y" strings as well. @@ -599,111 +588,106 @@ fi if [ "$EUID" != "0" ]; then if [ "$(check_buildenv fakeroot)" = "y" ]; then if [ $(type -p fakeroot) ]; then - msg "Entering fakeroot environment" + msg "$(gettext "Entering fakeroot environment")" fakeroot -- $0 -F $ARGLIST exit $? else - warning "Fakeroot is not installed. Building as an unprivileged user" - plain "will result in non-root ownership of the packaged files. Install" - plain "the fakeroot package to correctly build as a non-root user." + warning "$(gettext "Fakeroot is not installed. Building as an unprivileged user")" + plain "$(gettext "will result in non-root ownership of the packaged files. Install")" + plain "$(gettext "the fakeroot package to correctly build as a non-root user.")" Note- we should figure out a better way of doing this and getting it all in one string, but that may have to wait until we get different message functions that can handle it. +unset deplist makedeplist More holdover code. It comes up below in a - part of the patch. # fix flyspray bug #5973 if [ "$NODEPS" = "1" -o "$GENINTEG" = "1" -o "$NOBUILD" = "1" -o "$REPKG" = "1" ]; then if [ "$NODEPS" = "1" ]; then - warning "skipping dependency checks" + warning "$(gettext "skipping dependency checks")" fi # skip printing a warning message for the others: geninteg, nobuild, repkg elif [ $(type -p pacman) ]; then deperr=0 - # these two variables are needed later by removedeps - unset runtimedeps buildtimedeps - msg "Checking Runtime Dependencies..." + msg "$(gettext "Checking Runtime Dependencies...")" resolvedeps ${depends[@]} - ret=$? - # deplist is a global variable set by resolvedeps - runtimedeps="$deplist" - if [ "$ret" != "0" ]; then + if [ $? -ne 0 ]; then deperr=1 fi - msg "Checking Buildtime Dependencies..." + msg "$(gettext "Checking Buildtime Dependencies...")" resolvedeps ${makedepends[@]} - ret=$? - # deplist is a global variable set by resolvedeps - buildtimedeps="$deplist" - if [ "$ret" != "0" ]; then + if [ $? -ne 0 ]; then deperr=1 fi if [ $deperr -eq 1 ]; then - error "could not resolve all dependencies." + error "$(gettext "could not resolve all dependencies.")" exit 1 fi else - warning "pacman was not found in PATH. skipping dependency checks." + warning "$(gettext "pacman was not found in PATH. skipping dependency checks.")" fi cd "$startdir" @@ -883,7 +867,6 @@ else echo $SHELLOPTS | grep errexit 2>&1 >/dev/null set_e=$? - ret=0 if [ "$LOGGING" = "1" ]; then BUILDLOG="${startdir}/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log" if [ -f "$BUILDLOG" ]; then @@ -900,24 +883,30 @@ else #use 'errexit' to bail on syntax error [ $set_e -eq 1 ] && set -e - build 2>&1 | tee "$BUILDLOG"; ret=${PIPESTATUS[0]} + build 2>&1 | tee "$BUILDLOG" [ $set_e -eq 1 ] && set +e + + if [ ${PIPESTATUS[0]} -gt 0 ]; then + error "$(gettext "Build Failed. Aborting...")" + removedeps + exit 2 + fi else #use 'errexit' to bail on syntax error [ $set_e -eq 1 ] && set -e - build 2>&1 || ret=$? + build 2>&1 [ $set_e -eq 1 ] && set +e - fi - if [ $ret -gt 0 ]; then - error "Build Failed. Aborting..." - removedeps - exit 2 + if [ $? -gt 0 ]; then + error "$(gettext "Build Failed. Aborting...")" + removedeps + exit 2 + fi fi fi Old code. # write the .PKGINFO file -msg "Generating .PKGINFO file..." +msg "$(gettext "Generating .PKGINFO file...")" cd "$startdir/pkg" -echo "# Generated by makepkg $myver" >.PKGINFO +echo "$(eval_gettext "# Generated by makepkg \$myver")" >.PKGINFO Leave this one out of gettext- its a debug message and goes into the package itself. -Dan
2007/3/28, Dan McGee <dpmcgee@gmail.com>:
I've inlined it so I can comment on it. Comments are near whatever I have a comment on. :)
+. gettext.sh + +TEXTDOMAIN=makepkg ...
Can you smash this stuff into one block with a nice comment like "# gettext initialization"? And it might be more clear to use 'source' instead of '.' for consistency with the rest of makepkg.
Done.
@@ -98,6 +105,7 @@ error() { if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2 else + error=$1 echo "==> ERROR: $1" >&2
What is this for? It is the only function that got changed, is it debug code?
My mistake, I deleted it.
@@ -177,6 +185,9 @@ in_array() { }
checkdeps() { + local missdep="" + local deplist="" +
I think this is old code, along with a few of the things below. Try to sync with the latest in CVS or GIT.
Done.
+echo "$(eval_gettext "# Generated by makepkg \$myver")" >.PKGINFO
Leave this one out of gettext- its a debug message and goes into the package itself.
Done. In attachment new makepkg with the latest code in CVS. Let'me know if it's OK now. Also I generated now an initial makepkg.pot file (116 messages). If you want, you can generate the makepkg.pot with this command: xgettext --language=Shell makepkg -o makepkg.pot -- Giovanni Scafora Arch Linux Trusted User (voidnull) http://www.archlinux.org linuxmania@gmail.com
2007/3/28, Dan McGee <dpmcgee@gmail.com>:
I've inlined it so I can comment on it. Comments are near whatever I have a comment on. :)
+. gettext.sh + +TEXTDOMAIN=makepkg ...
Can you smash this stuff into one block with a nice comment like "# gettext initialization"? And it might be more clear to use 'source' instead of '.' for consistency with the rest of makepkg.
Done.
@@ -98,6 +105,7 @@ error() { if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2 else + error=$1 echo "==> ERROR: $1" >&2
What is this for? It is the only function that got changed, is it debug code?
My mistake, sorry. I deleted it.
@@ -177,6 +185,9 @@ in_array() { }
checkdeps() { + local missdep="" + local deplist="" +
I think this is old code, along with a few of the things below. Try to sync with the latest in CVS or GIT.
Done.
+echo "$(eval_gettext "# Generated by makepkg \$myver")" >.PKGINFO
Leave this one out of gettext- its a debug message and goes into the package itself.
Done. In attachment new makepkg with the latest code in CVS. Let'me know if it's OK now. Also I generated now an initial makepkg.pot file (116 messages). If you want, you can generate the makepkg.pot with this command: xgettext --language=Shell makepkg -o makepkg.pot -- Giovanni Scafora Arch Linux Trusted User (voidnull) http://www.archlinux.org linuxmania@gmail.com
On 3/28/07, Giovanni Scafora <linuxmania@gmail.com> wrote: # gettext initialization" You may want to drop the " at the end of the comment on that. :)
2007/3/28, Dan McGee <dpmcgee@gmail.com>:
I've inlined it so I can comment on it. Comments are near whatever I have a comment on. :) @@ -177,6 +185,9 @@ in_array() { }
checkdeps() { + local missdep="" + local deplist="" +
I think this is old code, along with a few of the things below. Try to sync with the latest in CVS or GIT.
Done.
I'm still seeing it in the copy you sent to the ML. Are you sure this is the most recent version? A lot of changes happened in the depends functions in makepkg between RC2 and the final 3.0.0 release. Diff against this to see what I mean: <http://code.toofishes.net/gitweb.cgi?p=pacman.git;a=blob_plain;f=scripts/makepkg;h=5afb285c39ac06e13359dc0e7f9073c7e4796542>
Also I generated now an initial makepkg.pot file (116 messages). If you want, you can generate the makepkg.pot with this command: xgettext --language=Shell makepkg -o makepkg.pot
Cool. Once we get the main stuff checked in, we'll get some po file generation done by autoconf. I'm not sure how I want to do this yet, but I think it would be better to have all of the po files be a single translation under the guise of pacman. /me thinks. -Dan
2007/3/28, Dan McGee <dpmcgee@gmail.com>:
I'm still seeing it in the copy you sent to the ML. Are you sure this is the most recent version? A lot of changes happened in the depends functions in makepkg between RC2 and the final 3.0.0 release. Diff against this to see what I mean: <http://code.toofishes.net/gitweb.cgi?p=pacman.git;a=blob_plain;f=scripts/makepkg;h=5afb285c39ac06e13359dc0e7f9073c7e4796542>
I'm a bit confused... I was using CVS version from: :pserver:anonymous@cvs.archlinux.org:/home/cvs-pacman Do I have to use the git version? -- Giovanni Scafora Arch Linux Trusted User (voidnull) http://www.archlinux.org linuxmania@gmail.com
participants (2)
-
Dan McGee
-
Giovanni Scafora