[pacman-dev] My makepkg changes/updates

Dan McGee dpmcgee at gmail.com
Wed Dec 20 23:31:40 EST 2006


Last email of the day, hopefully. Here is my current diff on makepkg,
not really meant to be applied in its current state but at least
letting you know what I am working on and hopefully I can get some
feedback out of it. I'll make a cleaner diff in a few days and
hopefully this script will start to look a little better.

1. Adds --repackage option and $REPKG variable, should be noted by a
comment in the code. The diff does some weird things where I had to
indent a whole big block of code, so I'd recommend just trying to look
at it as a whole at that part (basically the whole 'build' section).
2. Adds and removes blank lines to be more consistent, or maybe just
more for my own readability. Also adds a description of makepkg.
3. Removes keepdocs and nostrip options (on the command line).
4. Removes hardcoded references to /var/cache/pacman/src.
5. Fixes a syntax warning in the architecture detection.
6. Adds a missing / in the cp statement for source file copying.
7. Lets you see my scattered/random TODOs throughout the code.

-Dan

--- pacman-lib.orig/scripts/makepkg	2006-12-20 21:30:06.000000000 -0500
+++ pacman-lib/scripts/makepkg	2006-12-20 22:19:46.000000000 -0500
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-#   makepkg
+#   makepkg - make packages compatable for use with pacman
 #
 #   Copyright (c) 2002-2006 by Judd Vinet <jvinet at zeroflux.org>
 #   Copyright (c) 2005 by Aurelien Foret <orelien at chez.com>
@@ -44,19 +44,21 @@
 FORCE=0
 GENINTEG=0
 INSTALL=0
-DOWNLOAD=""
 NOBUILD=0
 NODEPS=0
 NOEXTRACT=0
 RMDEPS=0
+REPKG=0
 LOGGING=0

 PACMAN_OPTS=

-INFAKEROOT=
+# determine if we are running with fakeroot
 if [ "$1" = "-F" ]; then
 	INFAKEROOT=1
 	shift
+else
+	INFAKEROOT=0
 fi

 ### SUBROUTINES ###
@@ -68,6 +70,7 @@
 		echo "    $1" >&2
 	fi
 }
+
 msg() {
 	if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then
 		echo -e "\033[1;32m==>\033[1;0m \033[1;1m$1\033[1;0m" >&2
@@ -91,6 +94,7 @@
 		echo "==> WARNING: $1" >&2
 	fi
 }
+
 error() {
 	if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then
 		echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2
@@ -239,6 +243,7 @@
 		fi
 		missingdeps=1
 	fi
+
 	# rerun any additional sh scripts found in /etc/profile.d/
 	for i in /etc/profile.d/*.sh
 	do
@@ -246,8 +251,6 @@
 			. $i &>/dev/null
 		fi
 	done
-	# some applications (eg, blackbox) will not build with some languages
-	unset LC_ALL LANG

 	return $missingdeps
 }
@@ -269,18 +272,15 @@
 	echo "  -h, --help       This help"
 	echo "  -i, --install    Install package after successful build"
 	echo "  -j <jobs>        Set MAKEFLAGS to \"-j<jobs>\" before building"
-	echo "  -k, --keepdocs   Keep doc and info directories"
 	echo "  -L, --log        Log package build process"
 	echo "  -m, --nocolor    Disable colorized output messages"
-	echo "  -n, --nostrip    Do not strip symbols from binaries/libraries"
 	echo "  -o, --nobuild    Download and extract files only"
 	echo "  -p <buildscript> Use an alternate build script (instead of
'$BUILDSCRIPT')"
 	echo "  -r, --rmdeps     Remove installed dependencies after a
successful build"
+	# fix flyspray feature request #2978
+	echo "  -R, --repackage  Repackage contents of $startdir/pkg without building"
 	echo "  -s, --syncdeps   Install missing dependencies with pacman"
 	echo "  -S, --sudosync   Install missing dependencies with pacman and sudo"
-	# fix flyspray feature request #5223 - Dan McGee <dpmcgee at gmail.com>
-	echo "  -t <sourcedir>   Cache source files in <sourcedir>"
-	echo "  -w <destdir>     Write package to <destdir> instead of the
working dir"
 	echo
 	echo "These options can be passed to pacman:"
 	echo
@@ -294,15 +294,12 @@
 ARGLIST=$@

 if [ -f /etc/makepkg.conf ]; then
-	source /etc/makepkg.conf
+	source /etc/makepkg3.conf
 else
-	error "/etc/makepkg.conf not found. cannot continue"
+	error "/etc/makepkg3.conf not found. Cannot continue."
 	exit 1
 fi

-#Let's be courteous and support frugalware's extensions
-[ -e /usr/lib/frugalware/fwmakepkg ] && . /usr/lib/frugalware/fwmakepkg
-
 while [ "$#" -ne "0" ]; do
 	case $1 in
 		# pacman
@@ -319,12 +316,11 @@
 		--noextract)  NOEXTRACT=1 ;;
 		--install)    INSTALL=1 ;;
 		--force)      FORCE=1 ;;
-		--keepdocs)   KEEPDOCS=1 ;;
-		--nostrip)    NOSTRIP=1 ;;
 		--nobuild)    NOBUILD=1 ;;
 		--nocolor)    USE_COLOR="n" ;;
 		--geninteg)   GENINTEG=1 ;;
 		--rmdeps)     RMDEPS=1 ;;
+		--repackage)  REPKG=1 ;;
 		--log)        LOGGING=1 ;;
 		--help)
 		usage
@@ -335,7 +331,7 @@
 		exit 1
 		;;
 		-*)
-		while getopts "bBcCdefghij:kLmnop:rsSt:w:-" opt; do
+		while getopts "bBcCdefghij:Lmop:rRsS-" opt; do
 			case $opt in
 				b) DEP_SRC=1 ;;
 				B) USE_CCACHE=0 ;;
@@ -346,30 +342,27 @@
 				f) FORCE=1 ;;
 				g) GENINTEG=1 ;;
 				h)
-				usage
-				exit 0
-				;;
+					usage
+					exit 0
+					;;
 				i) INSTALL=1 ;;
 				j) export MAKEFLAGS="-j$OPTARG" ;;
-				k) KEEPDOCS=1 ;;
 				L) LOGGING=1 ;;
 				m) USE_COLOR="n" ;;
-				n) NOSTRIP=1 ;;
 				o) NOBUILD=1 ;;
 				p) BUILDSCRIPT=$OPTARG ;;
 				r) RMDEPS=1 ;;
+				R) REPKG=1 ;;
 				s) DEP_BIN=1 ;;
 				S) DEP_SUDO=1 ;;
-				t) SRCDEST=$OPTARG ;;
-				w) PKGDEST=$OPTARG ;;
 				-)
-				OPTIND=0
-				break
-				;;
+					OPTIND=0
+					break
+					;;
 				*)
-				usage
-				exit 1
-				;;
+					usage
+					exit 1
+					;;
 			esac
 		done
 		;;
@@ -386,6 +379,7 @@
 	exit 1
 fi

+#TODO: is this necessary?
 # convert a (possibly) relative path to absolute
 cd $PKGDEST 2>/dev/null
 if [ $? -ne 0 ]; then
@@ -396,20 +390,18 @@
 cd $OLDPWD

 if [ "$CLEANCACHE" = "1" ]; then
+	# fix flyspray feature request #5223
 	if [ -n "$SRCDEST" ]; then
 		msg "Cleaning up source files from the cache."
-		rm -rf /var/cache/pacman/src/*
-		rm -rf "${SRCDEST}"/*
-		exit 0
-	else
-		if [ "$EUID" = "0" -a "$INFAKEROOT" != "1" ]; then
-			msg "Cleaning up source files from the cache."
-			rm -rf /var/cache/pacman/src/*
-			exit 0
-		else
-			error "You must be root to clean the cache."
+		rm -rf "$SRCDEST"/*
+		if [ $? -ne 0 ]; then
+			error "Problem removing files; you may not have correct
permissions in $SRCDEST"
 			exit 1
+		else
+			exit 0
 		fi
+	else
+		error "Source destination must be defined in makepkg.conf."
 	fi
 fi

@@ -452,7 +444,7 @@
 	error "pkgrel is not allowed to contain hyphens."
 	exit 1
 fi
-if ! in_array $CARCH ${arch[@]}; then
+if [ ! "in_array $CARCH ${arch[@]}" ]; then
 	error "$pkgname is not available for the '$CARCH' architecture."
 	plain "Note that many packages may need a line added to their $BUILDSCRIPT"
 	plain "such as arch=('$CARCH')."
@@ -504,7 +496,7 @@
 msg "Making package: $pkgname $pkgver-$pkgrel ($(date))"

 unset deplist makedeplist
-# fix flyspray bug #5973 - Dan McGee <dpmcgee at gmail.com>
+# fix flyspray bug #5973
 if [ $(type -p pacman) -a "$NODEPS" = "0" -a "$GENINTEG" = "0" -a
"$NOBUILD" = "0" ]; then
 	msg "Checking Runtime Dependencies..."
 	deplist=$(checkdeps ${depends[@]})
@@ -524,7 +516,9 @@
 	if [ $? -gt 0 ]; then
 		exit 1
 	fi
-elif [ "$NODEPS" = "1" -o "$GENINTEG" = "1" -o "$NOBUILD" = "1" ]; then
+elif [ "$GENINTEG" = "1" -o "$NOBUILD" = "1" ]; then
+	msg "skipping dependency checks."
+elif [ "$NODEPS" = "1" ]; then
 	warning "skipping dependency checks."
 else
 	warning "pacman was not found in PATH. skipping dependency checks."
@@ -537,16 +531,13 @@
 mkdir -p src
 cd $startdir/src
 for netfile in ${source[@]}; do
-	file=$(strip_url $netfile)
+	file=$(strip_url "$netfile")
 	if [ -f "../$file" ]; then
-		msg "    Found $file in build dir"
+		msg2 "Found $file in build dir"
 		cp "../$file" .
 	elif [ -f "$SRCDEST/$file" ]; then
-		msg "    Using cached copy of $file"
-		cp "$SRCDEST$file" .
-	elif [ -f "/var/cache/pacman/src/$file" ]; then
-		msg "    Using cached copy of $file"
-		cp "/var/cache/pacman/src/$file" .
+		msg2 "Using cached copy of $file"
+		cp "$SRCDEST/$file" .
 	else
 		# check for a download utility
 		if [ -z "$FTPAGENT" ]; then
@@ -566,33 +557,28 @@
 			msg "Aborting..."
 			exit 1
 		fi
-		msg "    Downloading $file"
+		msg2 "Downloading $file"
 		$FTPAGENT "$netfile" 2>&1
 		# fix flyspray bug #3289
 		ftpret=$?
 		if [ $ftpret -gt 0 ]; then
 			error "Failure while downloading $file"
 			msg "Aborting..."
-			rm "$file"
-			exit 1
+			#rm "$file"
 			exit 1
 		fi
-		if [ "$EUID" = "0" -a "$INFAKEROOT" != "1" ]; then
-			mkdir -p /var/cache/pacman/src && cp $file /var/cache/pacman/src
-			if [ -n "$SRCDEST" ]; then
-				mkdir -p $SRCDEST && cp "$file" $SRCDEST
-			elif [ "$EUID" = "0" -a "$INFAKEROOT" != "1" ]; then
-				mkdir -p /var/cache/pacman/src && cp "$file" /var/cache/pacman/src
-			else
+		if [ -n "$SRCDEST" ]; then
+			mkdir -p $SRCDEST && cp "$file" $SRCDEST
+			if [ $? -ne 0 ]; then
+				warning "You do not have correct permissions to cache source in $SRCDEST"
 				cp "$file" ..
-			fi
+		else
+			cp "$file" ..
 		fi
 	fi
 done

-
-
-if [ "$NOEXTRACT" = "1" ]; then
+if [ "$NOEXTRACT" = "1" -o "$REPKG" = "1" ]; then
 	warning "Skipping source integrity checks -- using existing src/ tree"
 else
 	for integ in ${INTEGRITY_CHECK[@]}; do
@@ -635,7 +621,7 @@
 				fi
 			done
 			plain ""
-			#Validate integrity checks
+		#Validate integrity checks
 		else
 			integrity_sums=($(eval echo \${${integrity_name}s[@]}))

@@ -645,6 +631,7 @@
 				idx=0
 				for netfile in "${source[@]}"; do
 					file=$(strip_url "$netfile")
+					#TODO is there a reason this is echo and not msg/msg2?
 					echo -n "    $file ... " >&2
 					echo "${integrity_sums[$idx]}  $file" | $integrity_name -c -
>/dev/null 2>&1
 					if [ $? -ne 0 ]; then
@@ -671,8 +658,8 @@
 fi

 #Extract sources
-if [ "$NOEXTRACT" = "1" ]; then
-    warning "Skipping source extraction       -- using existing src/ tree"
+if [ "$NOEXTRACT" = "1" -o "$REPKG" = "1" ]; then
+	warning "Skipping source extraction       -- using existing src/ tree"
 else
 	msg "Extracting Sources..."
 	for netfile in "${source[@]}"; do
@@ -699,7 +686,7 @@
 			cmd="bunzip2 -f $file" ;;
 		esac
 		if [ "$cmd" != "" ]; then
-			msg "    $cmd"
+			msg2 "$cmd"
 			$cmd
 			if [ $? -ne 0 ]; then
 				# unzip will return a 1 as a warning, it is not an error
@@ -713,71 +700,73 @@
 	done
 fi

-if [ "$EUID" = "0" ]; then
-	# chown all source files to root.root
-	chown -R root.root $startdir/src
-fi
-
-# check for existing pkg directory
-if [ -d $startdir/pkg ]; then
-	msg "Removing existing pkg/ directory..."
-	rm -rf $startdir/pkg
-fi
-mkdir -p $startdir/pkg
-
-if [ "$NOBUILD" = "1" ]; then
-	msg "Sources are ready."
-	exit 0
-fi
-
-# use distcc if requested
-if [ "$USE_DISTCC" = "y" ]; then
-	[ -d /usr/lib/distcc/bin ] && export PATH=/usr/lib/distcc/bin:$PATH
-fi
-
-# use ccache if it's available
-if [ "$USE_CCACHE" = "1" ]; then
-	[ -d /usr/lib/ccache/bin ] && export PATH=/usr/lib/ccache/bin:$PATH
-fi
-
-# build
-msg "Starting build()..."
+if [ "$REPKG" = "0" ]; then
+	if [ "$EUID" = "0" ]; then
+		# chown all source files to root.root
+		chown -R root.root $startdir/src
+	fi

-#check for "exit on syntax error" shell option
-echo $SHELLOPTS | grep errexit 2>&1 >/dev/null
-set_e=$?
+	# check for existing pkg directory
+	if [ -d $startdir/pkg ]; then
+		msg "Removing existing pkg/ directory..."
+		rm -rf $startdir/pkg
+	fi
+	mkdir -p $startdir/pkg

-if [ "$LOGGING" = "1" ]; then
-	BUILDLOG="${startdir}/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log"
-	if [ -f "$BUILDLOG" ]; then
-		i=1
-		while true; do
-			if [ -f "$BUILDLOG.$i" ]; then
-				i=$(($i +1))
-			else
-				break
-			fi
-		done
-		mv "$BUILDLOG" "$BUILDLOG.$i"
+	if [ "$NOBUILD" = "1" ]; then
+		msg "Sources are ready."
+		exit 0
 	fi

-	#use 'errexit' to bail on syntax error
-	[ $set_e -eq 1 ] && set -e
-	build 2>&1 | tee "$BUILDLOG"
-	[ $set_e -eq 1 ] && set +e
+	# use distcc if requested
+	if [ "$USE_DISTCC" = "y" ]; then
+		[ -d /usr/lib/distcc/bin ] && export PATH=/usr/lib/distcc/bin:$PATH
+	fi
+
+	# use ccache if it's available
+	if [ "x$USE_CCACHE" = "1" ]; then
+		[ -d /usr/lib/ccache/bin ] && export PATH=/usr/lib/ccache/bin:$PATH
+	fi
+
+	# build
+	msg "Starting build()..."
+
+	#check for "exit on syntax error" shell option
+	echo $SHELLOPTS | grep errexit 2>&1 >/dev/null
+	set_e=$?
+
+	if [ "x$LOGGING" = "1" ]; then
+		BUILDLOG="${startdir}/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log"
+		if [ -f "$BUILDLOG" ]; then
+			i=1
+			while true; do
+				if [ -f "$BUILDLOG.$i" ]; then
+					i=$( ($i +1))
+				else
+					break
+				fi
+			done
+			mv "$BUILDLOG" "$BUILDLOG.$i"
+		fi

-	if [ ${PIPESTATUS[0]} -gt 0 ]; then
-		error "Build Failed.  Aborting..."
-		exit 2
-	fi
-else
-	#use 'errexit' to bail on syntax error
-	[ $set_e -eq 1 ] && set -e
-	build 2>&1
-	[ $set_e -eq 1 ] && set +e
-	if [ $? -gt 0 ]; then
-		error "Build Failed.  Aborting..."
-		exit 2
+		#use 'errexit' to bail on syntax error
+		[ $set_e -eq 1 ] && set -e
+		build 2>&1 | tee "$BUILDLOG"
+		[ $set_e -eq 1 ] && set +e
+
+		if [ ${PIPESTATUS[0]} -gt 0 ]; then
+			error "Build Failed.  Aborting..."
+			exit 2
+		fi
+	else
+		#use 'errexit' to bail on syntax error
+		[ $set_e -eq 1 ] && set -e
+		build 2>&1
+		[ $set_e -eq 1 ] && set +e
+		if [ $? -gt 0 ]; then
+			error "Build Failed.  Aborting..."
+			exit 2
+		fi
 	fi
 fi

@@ -788,6 +777,8 @@
 	rm -rf pkg/usr/info pkg/usr/share/info
 	rm -rf pkg/usr/doc pkg/usr/share/doc
 	rm -rf pkg/{usr,opt/gnome}/share/gtk-doc
+	# fix flyspray bug #5021
+	#rm -rf ${DOC_DIRS[@]}
 fi

 # move /usr/share/man files to /usr/man




More information about the pacman-dev mailing list