spk rev 111

Convert: Added missing funcitons, fixed a few bugs
author Christian Mesh <meshca@clarkson.edu>
date Sat Jun 09 10:22:38 2012 -0500 (2012-06-09)
parents e1c080f70e0a
children 73f0d4dec380
files Makefile spk-convert
line diff
     1.1 --- a/Makefile	Sat Jun 09 09:34:42 2012 -0500
     1.2 +++ b/Makefile	Sat Jun 09 10:22:38 2012 -0500
     1.3 @@ -46,6 +46,7 @@
     1.4  	install -m 0755 spk-add $(DESTDIR)$(PREFIX)/sbin
     1.5  	install -m 0755 spk-mirror $(DESTDIR)$(PREFIX)/sbin
     1.6  	install -m 0755 spk-up $(DESTDIR)$(PREFIX)/sbin
     1.7 +	install -m 0755 spk-convert $(DESTDIR)$(PREFIX)/sbin
     1.8  
     1.9  # Clean source
    1.10  
     2.1 --- a/spk-convert	Sat Jun 09 09:34:42 2012 -0500
     2.2 +++ b/spk-convert	Sat Jun 09 10:22:38 2012 -0500
     2.3 @@ -33,7 +33,6 @@
     2.4  	exit 0
     2.5  }
     2.6  
     2.7 -# TODO find_depends show_unresolved_lib
     2.8  # Move tazpkg pack to shared lib?
     2.9  
    2.10  # generate a receipt based on standard receipt vars
    2.11 @@ -50,21 +49,80 @@
    2.12  SHORT_DESC="$SHORT_DESC"
    2.13  WEB_SITE="$WEB_SITE"
    2.14  MAINTAINER="$MAINTAINER"
    2.15 -DEPENDS="$(find_depends)"
    2.16 +DEPENDS="$DEPENDS"
    2.17  CONFIG_FILES="$CONFIG_FILES"
    2.18  EOT
    2.19  		
    2.20  }
    2.21  
    2.22 +# search dependencies for files
    2.23 +# Usage: find_depends $fs
    2.24 +find_depends() {
    2.25 +	local fs=$1
    2.26 +	
    2.27 +	local DEFAULT_DEPENDS="glibc-base gcc-lib-base"
    2.28 +
    2.29 +	for chkfile in $(find $fs -type f); do
    2.30 +		is_elf $chkfile || continue
    2.31 +		case "$chkfile" in
    2.32 +		*.o|*.ko|*.ko.gz) continue;;
    2.33 +		esac
    2.34 +		
    2.35 +		ldd $chkfile | \
    2.36 +		while read lib rem; do
    2.37 +			case "$lib" in
    2.38 +				statically|linux-gate.so*|ld-*.so|*/ld-*.so)
    2.39 +					continue;;
    2.40 +			esac
    2.41 +			
    2.42 +			find $fs | grep -q /$lib$ && continue
    2.43 +			
    2.44 +			for dep in $(fgrep $lib files.list | cut -d: -f1); do
    2.45 +				case " $DEFAULT_DEPENDS " in
    2.46 +					*\ $dep\ *) continue 2;;
    2.47 +				esac
    2.48 +				grep -qs "^$dep$" $tmpdir/depends && continue 2
    2.49 +			done
    2.50 +			
    2.51 +			if [ -n "$dep" ]; then
    2.52 +				echo "$dep" >> $tmpdir/depends
    2.53 +			else
    2.54 +				grep -qs ^$lib$ $tmpdir/unresolved ||
    2.55 +				echo "$lib" >> $tmpdir/unresolved
    2.56 +			fi
    2.57 +		done
    2.58 +	done
    2.59 +	unset spc
    2.60 +	local spc
    2.61 +	for file in $(cat $tmpdir/depends 2> /dev/null | sort | uniq); do
    2.62 +		echo -n "$spc$file"
    2.63 +		spc=" "
    2.64 +	done
    2.65 +}
    2.66 +
    2.67 +show_unresolved_lib() {
    2.68 +	local receipt=$1
    2.69 +	if [ -s $tmpdir/unresolved ]; then
    2.70 +		echo -e "BUGS=\"$(gettext 'No dependency for')" >> $receipt
    2.71 +		for lib in $(cat $tmpdir/unresolved | sort | uniq); do
    2.72 +			eval_gettext "WARNING: unknown dependency for \$lib"; newline
    2.73 +			echo -n " $lib" >> $receipt
    2.74 +		done
    2.75 +		echo "\"" >> $receipt
    2.76 +	fi
    2.77 +}
    2.78 +
    2.79 +
    2.80 +
    2.81  # convert a .ipk package to .tazpkg
    2.82  # Usage: convert_ipk $package_file
    2.83  convert_ipk() {
    2.84  	local package_file=$1
    2.85  	
    2.86 -	mkdir -p $tmp
    2.87 -	tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmp
    2.88 +	mkdir -p $tmpdir
    2.89 +	tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmpdir
    2.90  
    2.91 -	local control="$tmp/control"
    2.92 +	local control="$tmpdir/control"
    2.93  	
    2.94  	# filter ipk control file for variable
    2.95  	# Usage: filter_vars $search_var
    2.96 @@ -84,15 +142,18 @@
    2.97  	case "$target" in
    2.98  		i386|all)
    2.99  			local file="$PACKAGE-$VERSION"
   2.100 -			local receipt="$tmp/$file/receipt"
   2.101 -			local fs="$tmp/$file/fs"
   2.102 +			local receipt="$tmpdir/$file/receipt"
   2.103 +			local fs="$tmpdir/$file/fs"
   2.104  			
   2.105  			mkdir -p $fs
   2.106  			tar xOzf $package_file ./data.tar.gz | tar xzf - -C $fs
   2.107  			
   2.108  			unset CONFIG_FILES
   2.109 -			[ -s $tmp/conffiles ] && $CONFIG_FILE=$(cat $tmp/conffiles)
   2.110 +			[ -s $tmpdir/conffiles ] && $CONFIG_FILE=$(cat $tmpdir/conffiles)
   2.111  
   2.112 +
   2.113 +
   2.114 +			DEPENDS=$(find_depends $fs)
   2.115  			generate_receipt $receipt $package_file
   2.116  			
   2.117  			show_unresolved_lib $receipt
   2.118 @@ -109,28 +170,29 @@
   2.119  $(cat $script)
   2.120  }
   2.121  EOT
   2.122 +				fi
   2.123  			}
   2.124  			
   2.125  			# read functions into receipt
   2.126 -			transpose_func pre_install $tmp/preinst
   2.127 -			transpose_func post_install $tmp/postinst
   2.128 -			transpose_func pre_remove $tmp/prerm
   2.129 -			transpose_func post_remove $tmp/postrm
   2.130 +			transpose_func pre_install $tmpdir/preinst
   2.131 +			transpose_func post_install $tmpdir/postinst
   2.132 +			transpose_func pre_remove $tmpdir/prerm
   2.133 +			transpose_func post_remove $tmpdir/postrm
   2.134  			
   2.135  			[ -z "$SHORT_DESC" ] || echo $SHORT_DESC > $file/description.txt
   2.136  
   2.137 -			cd $tmp
   2.138 +			cd $tmpdir
   2.139  			tazpkg pack $file			
   2.140  			cd - > /dev/null
   2.141  			
   2.142 -			mv $tmp/$file.tazpkg .
   2.143 +			mv $tmpdir/$file.tazpkg .
   2.144  			;;
   2.145  		*)
   2.146  			gettext "Invalid target: $target (expected i386)"; newline
   2.147  		;;
   2.148  	esac
   2.149  	unset_receipt
   2.150 -	rm -rf $tmp
   2.151 +	rm -rf $tmpdir
   2.152  }
   2.153  
   2.154  # convert a .pkg.tar.gz/.apk package to .tazpkg
   2.155 @@ -139,7 +201,7 @@
   2.156  	local package_file=$1
   2.157  	
   2.158  	# Extract
   2.159 -	local fs="$tmp/fs"
   2.160 +	local fs="$tmpdir/fs"
   2.161  	mkdir -p $fs
   2.162  	tar xzf $package_file -C $fs
   2.163  	
   2.164 @@ -159,18 +221,19 @@
   2.165  		WEB_SITE=$(filter_vars "url")
   2.166  		MAINTAINER=$(filter_vars "packager")
   2.167  		
   2.168 -		local file="$tmp/$package-$version"
   2.169 +		local file="$tmpdir/$package-$version"
   2.170  		local receipt="$file/receipt"
   2.171  		
   2.172 +		DEPENDS=$(find_depends $fs)
   2.173  		generate_receipt $receipt $package_file
   2.174  		
   2.175  		mkdir $file
   2.176  		mv $fs $file
   2.177  		
   2.178 -		show_unresolved_lib $tmp/$file/receipt
   2.179 +		show_unresolved_lib $tmpdir/$file/receipt
   2.180  		rm -f $file/fs/.[A-Z]*
   2.181  		
   2.182 -		cd $tmp
   2.183 +		cd $tmpdir
   2.184  		tazpkg pack $file
   2.185  		cd - > /dev/null
   2.186  		
   2.187 @@ -179,7 +242,7 @@
   2.188  		eval_gettext "\$package_file does not look like an Archlinux/Alpine package !"; newline
   2.189  	fi
   2.190  	unset_receipt
   2.191 -	rm -rf $tmp
   2.192 +	rm -rf $tmpdir
   2.193  }
   2.194  
   2.195  # convert a .tgz package to .tazpkg
   2.196 @@ -195,7 +258,7 @@
   2.197  	
   2.198  	local PACKAGE=$1
   2.199  	local VERSION=$2
   2.200 -	local file="$tmp/$PACKAGE-$VERSION"
   2.201 +	local file="$tmpdir/$PACKAGE-$VERSION"
   2.202  	local receipt="$file/receipt"
   2.203  	local fs="$file/fs"
   2.204  	
   2.205 @@ -210,6 +273,7 @@
   2.206  		WEB_SITE="http://www.slackware.com/packages/"
   2.207  		MAINTAINER="nobody@slitaz.org"
   2.208  		
   2.209 +		DEPENDS=$(find_depends $fs)
   2.210  		generate_receipt $receipt $package_file
   2.211  	  	
   2.212  		show_unresolved_lib $receipt
   2.213 @@ -226,6 +290,8 @@
   2.214  EOT
   2.215  }
   2.216  EOM
   2.217 +		fi
   2.218 +		
   2.219  		# Get full description
   2.220  		if [ ! -z "$SHORT_DESC" ]; then
   2.221  			grep ^$PACKAGE $fs/install/slack-desc | \
   2.222 @@ -234,7 +300,7 @@
   2.223  		
   2.224  		rm -rf $fs/install
   2.225  		
   2.226 -		cd $tmp
   2.227 +		cd $tmpdir
   2.228  		tazpkg pack $file
   2.229  		cd - /dev/null
   2.230  		
   2.231 @@ -242,24 +308,24 @@
   2.232  	else
   2.233  		eval_gettext "\$package_file does not look like a Slackware package !"; newline
   2.234  	fi
   2.235 -	rm -rf $tmp
   2.236 +	rm -rf $tmpdir
   2.237  }
   2.238  
   2.239  # convert a .deb package to .tazpkg
   2.240  # Usage: convert_deb $package_file
   2.241  convert_deb() {
   2.242 -	local $package_file=$1
   2.243 +	local $package_file="$1"
   2.244  	
   2.245  	# Extract deb control
   2.246 -	mkdir -p $tmp
   2.247 -	dpkg-deb -e $package_file $tmp
   2.248 +	mkdir -p $tmpdir
   2.249 +	dpkg-deb -e $package_file $tmpdir
   2.250  	
   2.251  	
   2.252  	# filter control file for variable
   2.253  	# Usage: filter_vars $search_var
   2.254  	filter_vars() {
   2.255  		local var=$1
   2.256 -		local result=$(grep '^ *$var:' $tmp/control)
   2.257 +		local result=$(grep '^ *$var:' $tmpdir/control)
   2.258  		echo ${result##*:}
   2.259  	}
   2.260  	
   2.261 @@ -268,11 +334,11 @@
   2.262  	SHORT_DESC=$(filter_vars "Description")
   2.263  	WEB_SITE="http://packages.debian.org/search?keywords=$PACKAGE"
   2.264  	MAINTAINER="nobody@slitaz.org"
   2.265 -	target="$(grep ^Architecture $tmp/control | sed 's/.*: //')"
   2.266 +	target="$(grep ^Architecture $tmpdir/control | sed 's/.*: //')"
   2.267  	
   2.268  	case "$target" in
   2.269  	i386|all)
   2.270 -		local file="$tmp/$PACKAGE-$VERSION"
   2.271 +		local file="$tmpdir/$PACKAGE-$VERSION"
   2.272  		local receipt="$file/receipt"
   2.273  		local fs="$file/fs"
   2.274  		
   2.275 @@ -280,13 +346,12 @@
   2.276  		mkdir -p $fs
   2.277  		dpkg-deb -x $package_file $fs
   2.278  		
   2.279 +		DEPENDS=$(find_depends $fs)
   2.280  		generate_receipt $receipt $package_file
   2.281 -		
   2.282 -		cd $TMP_DIR
   2.283 -		
   2.284 -		if [ -s $tmp/conffiles ]; then
   2.285 +				
   2.286 +		if [ -s $tmpdir/conffiles ]; then
   2.287  		 	cat >> $receipt <<EOT
   2.288 -CONFIG_FILES="$(cat $tmp/conffiles)"
   2.289 +CONFIG_FILES="$(cat $tmpdir/conffiles)"
   2.290  EOT
   2.291  		fi
   2.292  		
   2.293 @@ -295,7 +360,7 @@
   2.294  		# Description.txt
   2.295  		[ -z "$SHORT_DESC" ] || echo "$SHORT_DESC" > $file/Description.txt
   2.296  		
   2.297 -		cd $tmp
   2.298 +		cd $tmpdir
   2.299  		tazpkg pack $file
   2.300  		cd - > /dev/null
   2.301  		
   2.302 @@ -305,7 +370,7 @@
   2.303  		gettext "Invalid target: $target (expected i386 or all)"; newline
   2.304  		;;
   2.305  	esac
   2.306 -	rm -rf $tmp
   2.307 +	rm -rf $tmpdir
   2.308  }
   2.309  
   2.310  # convert a .rpm package to .tazpkg
   2.311 @@ -314,9 +379,9 @@
   2.312  	local package_file=$1
   2.313  	
   2.314  	# Move package_file to tmp
   2.315 -	mkdir -p $tmp
   2.316 -	cp $package_file $tmp
   2.317 -	package_file=$TMP_DIR/$(basename $package_file)
   2.318 +	mkdir -p $tmpdir
   2.319 +	cp $package_file $tmpdir
   2.320 +	package_file=$tmpdir/$(basename $package_file)
   2.321  	
   2.322  	# filter package_file for variable
   2.323  	# Usage: filter_vars $search_var
   2.324 @@ -329,40 +394,42 @@
   2.325  	VERSION=$(filter_vars "Version")
   2.326  	SHORT_DESC=$(filter_vars "Summary")
   2.327  	WEB_SITE=$(filter_vars "URL")
   2.328 -	if [ -z "$URL" ]; then
   2.329 +	if [ -z "$WEB_SITE" ]; then
   2.330  		WEB_SITE="http://rpmfind.net/linux/rpm2html/search.php?query=$PACKAGE"
   2.331  	fi
   2.332  	CATEGORY="misc";
   2.333  	MAINTAINER="nobody@slitaz.org";
   2.334  	
   2.335  	
   2.336 -	local file="$tmp/$PACKAGE-$VERSION"
   2.337 +	local file="$tmpdir/$PACKAGE-$VERSION"
   2.338  	local receipt="$file/receipt"
   2.339  	local fs="$file/fs"
   2.340  	
   2.341  	mkdir -p $fs
   2.342  	
   2.343 -	generate_receipt $receipt $package_file
   2.344 -	
   2.345 -	rpm -qip $PACKAGE_FILE | \
   2.346 +	rpm -qip $package_file | \
   2.347  		grep "^Description*" -A 100 | \
   2.348  		grep -v "^Description*" > \
   2.349  		$file/description.txt
   2.350  	
   2.351  	cd $fs
   2.352 -	rpm2cpio $PACKAGE_FILE | cpio -idm --quiet
   2.353 +	rpm2cpio $package_file | cpio -idm --quiet
   2.354  	cd - > /dev/null
   2.355  	
   2.356 +	
   2.357 +	DEPENDS=$(find_depends $fs)
   2.358 +	generate_receipt $receipt $package_file
   2.359 +	
   2.360  	show_unresolved_lib $receipt
   2.361  	
   2.362 -	cd $tmp
   2.363 +	cd $tmpdir
   2.364  	tazpkg pack $file
   2.365  	cd -
   2.366  	
   2.367  	mv $file.tazpkg .
   2.368  		
   2.369  	unset_receipt
   2.370 -	rm -rf $TMP_DIR
   2.371 +	rm -rf $tmpdir
   2.372  }
   2.373  
   2.374