spk diff spk-convert @ 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
line diff
     1.1 --- a/spk-convert	Sat Jun 09 09:34:42 2012 -0500
     1.2 +++ b/spk-convert	Sat Jun 09 10:22:38 2012 -0500
     1.3 @@ -33,7 +33,6 @@
     1.4  	exit 0
     1.5  }
     1.6  
     1.7 -# TODO find_depends show_unresolved_lib
     1.8  # Move tazpkg pack to shared lib?
     1.9  
    1.10  # generate a receipt based on standard receipt vars
    1.11 @@ -50,21 +49,80 @@
    1.12  SHORT_DESC="$SHORT_DESC"
    1.13  WEB_SITE="$WEB_SITE"
    1.14  MAINTAINER="$MAINTAINER"
    1.15 -DEPENDS="$(find_depends)"
    1.16 +DEPENDS="$DEPENDS"
    1.17  CONFIG_FILES="$CONFIG_FILES"
    1.18  EOT
    1.19  		
    1.20  }
    1.21  
    1.22 +# search dependencies for files
    1.23 +# Usage: find_depends $fs
    1.24 +find_depends() {
    1.25 +	local fs=$1
    1.26 +	
    1.27 +	local DEFAULT_DEPENDS="glibc-base gcc-lib-base"
    1.28 +
    1.29 +	for chkfile in $(find $fs -type f); do
    1.30 +		is_elf $chkfile || continue
    1.31 +		case "$chkfile" in
    1.32 +		*.o|*.ko|*.ko.gz) continue;;
    1.33 +		esac
    1.34 +		
    1.35 +		ldd $chkfile | \
    1.36 +		while read lib rem; do
    1.37 +			case "$lib" in
    1.38 +				statically|linux-gate.so*|ld-*.so|*/ld-*.so)
    1.39 +					continue;;
    1.40 +			esac
    1.41 +			
    1.42 +			find $fs | grep -q /$lib$ && continue
    1.43 +			
    1.44 +			for dep in $(fgrep $lib files.list | cut -d: -f1); do
    1.45 +				case " $DEFAULT_DEPENDS " in
    1.46 +					*\ $dep\ *) continue 2;;
    1.47 +				esac
    1.48 +				grep -qs "^$dep$" $tmpdir/depends && continue 2
    1.49 +			done
    1.50 +			
    1.51 +			if [ -n "$dep" ]; then
    1.52 +				echo "$dep" >> $tmpdir/depends
    1.53 +			else
    1.54 +				grep -qs ^$lib$ $tmpdir/unresolved ||
    1.55 +				echo "$lib" >> $tmpdir/unresolved
    1.56 +			fi
    1.57 +		done
    1.58 +	done
    1.59 +	unset spc
    1.60 +	local spc
    1.61 +	for file in $(cat $tmpdir/depends 2> /dev/null | sort | uniq); do
    1.62 +		echo -n "$spc$file"
    1.63 +		spc=" "
    1.64 +	done
    1.65 +}
    1.66 +
    1.67 +show_unresolved_lib() {
    1.68 +	local receipt=$1
    1.69 +	if [ -s $tmpdir/unresolved ]; then
    1.70 +		echo -e "BUGS=\"$(gettext 'No dependency for')" >> $receipt
    1.71 +		for lib in $(cat $tmpdir/unresolved | sort | uniq); do
    1.72 +			eval_gettext "WARNING: unknown dependency for \$lib"; newline
    1.73 +			echo -n " $lib" >> $receipt
    1.74 +		done
    1.75 +		echo "\"" >> $receipt
    1.76 +	fi
    1.77 +}
    1.78 +
    1.79 +
    1.80 +
    1.81  # convert a .ipk package to .tazpkg
    1.82  # Usage: convert_ipk $package_file
    1.83  convert_ipk() {
    1.84  	local package_file=$1
    1.85  	
    1.86 -	mkdir -p $tmp
    1.87 -	tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmp
    1.88 +	mkdir -p $tmpdir
    1.89 +	tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmpdir
    1.90  
    1.91 -	local control="$tmp/control"
    1.92 +	local control="$tmpdir/control"
    1.93  	
    1.94  	# filter ipk control file for variable
    1.95  	# Usage: filter_vars $search_var
    1.96 @@ -84,15 +142,18 @@
    1.97  	case "$target" in
    1.98  		i386|all)
    1.99  			local file="$PACKAGE-$VERSION"
   1.100 -			local receipt="$tmp/$file/receipt"
   1.101 -			local fs="$tmp/$file/fs"
   1.102 +			local receipt="$tmpdir/$file/receipt"
   1.103 +			local fs="$tmpdir/$file/fs"
   1.104  			
   1.105  			mkdir -p $fs
   1.106  			tar xOzf $package_file ./data.tar.gz | tar xzf - -C $fs
   1.107  			
   1.108  			unset CONFIG_FILES
   1.109 -			[ -s $tmp/conffiles ] && $CONFIG_FILE=$(cat $tmp/conffiles)
   1.110 +			[ -s $tmpdir/conffiles ] && $CONFIG_FILE=$(cat $tmpdir/conffiles)
   1.111  
   1.112 +
   1.113 +
   1.114 +			DEPENDS=$(find_depends $fs)
   1.115  			generate_receipt $receipt $package_file
   1.116  			
   1.117  			show_unresolved_lib $receipt
   1.118 @@ -109,28 +170,29 @@
   1.119  $(cat $script)
   1.120  }
   1.121  EOT
   1.122 +				fi
   1.123  			}
   1.124  			
   1.125  			# read functions into receipt
   1.126 -			transpose_func pre_install $tmp/preinst
   1.127 -			transpose_func post_install $tmp/postinst
   1.128 -			transpose_func pre_remove $tmp/prerm
   1.129 -			transpose_func post_remove $tmp/postrm
   1.130 +			transpose_func pre_install $tmpdir/preinst
   1.131 +			transpose_func post_install $tmpdir/postinst
   1.132 +			transpose_func pre_remove $tmpdir/prerm
   1.133 +			transpose_func post_remove $tmpdir/postrm
   1.134  			
   1.135  			[ -z "$SHORT_DESC" ] || echo $SHORT_DESC > $file/description.txt
   1.136  
   1.137 -			cd $tmp
   1.138 +			cd $tmpdir
   1.139  			tazpkg pack $file			
   1.140  			cd - > /dev/null
   1.141  			
   1.142 -			mv $tmp/$file.tazpkg .
   1.143 +			mv $tmpdir/$file.tazpkg .
   1.144  			;;
   1.145  		*)
   1.146  			gettext "Invalid target: $target (expected i386)"; newline
   1.147  		;;
   1.148  	esac
   1.149  	unset_receipt
   1.150 -	rm -rf $tmp
   1.151 +	rm -rf $tmpdir
   1.152  }
   1.153  
   1.154  # convert a .pkg.tar.gz/.apk package to .tazpkg
   1.155 @@ -139,7 +201,7 @@
   1.156  	local package_file=$1
   1.157  	
   1.158  	# Extract
   1.159 -	local fs="$tmp/fs"
   1.160 +	local fs="$tmpdir/fs"
   1.161  	mkdir -p $fs
   1.162  	tar xzf $package_file -C $fs
   1.163  	
   1.164 @@ -159,18 +221,19 @@
   1.165  		WEB_SITE=$(filter_vars "url")
   1.166  		MAINTAINER=$(filter_vars "packager")
   1.167  		
   1.168 -		local file="$tmp/$package-$version"
   1.169 +		local file="$tmpdir/$package-$version"
   1.170  		local receipt="$file/receipt"
   1.171  		
   1.172 +		DEPENDS=$(find_depends $fs)
   1.173  		generate_receipt $receipt $package_file
   1.174  		
   1.175  		mkdir $file
   1.176  		mv $fs $file
   1.177  		
   1.178 -		show_unresolved_lib $tmp/$file/receipt
   1.179 +		show_unresolved_lib $tmpdir/$file/receipt
   1.180  		rm -f $file/fs/.[A-Z]*
   1.181  		
   1.182 -		cd $tmp
   1.183 +		cd $tmpdir
   1.184  		tazpkg pack $file
   1.185  		cd - > /dev/null
   1.186  		
   1.187 @@ -179,7 +242,7 @@
   1.188  		eval_gettext "\$package_file does not look like an Archlinux/Alpine package !"; newline
   1.189  	fi
   1.190  	unset_receipt
   1.191 -	rm -rf $tmp
   1.192 +	rm -rf $tmpdir
   1.193  }
   1.194  
   1.195  # convert a .tgz package to .tazpkg
   1.196 @@ -195,7 +258,7 @@
   1.197  	
   1.198  	local PACKAGE=$1
   1.199  	local VERSION=$2
   1.200 -	local file="$tmp/$PACKAGE-$VERSION"
   1.201 +	local file="$tmpdir/$PACKAGE-$VERSION"
   1.202  	local receipt="$file/receipt"
   1.203  	local fs="$file/fs"
   1.204  	
   1.205 @@ -210,6 +273,7 @@
   1.206  		WEB_SITE="http://www.slackware.com/packages/"
   1.207  		MAINTAINER="nobody@slitaz.org"
   1.208  		
   1.209 +		DEPENDS=$(find_depends $fs)
   1.210  		generate_receipt $receipt $package_file
   1.211  	  	
   1.212  		show_unresolved_lib $receipt
   1.213 @@ -226,6 +290,8 @@
   1.214  EOT
   1.215  }
   1.216  EOM
   1.217 +		fi
   1.218 +		
   1.219  		# Get full description
   1.220  		if [ ! -z "$SHORT_DESC" ]; then
   1.221  			grep ^$PACKAGE $fs/install/slack-desc | \
   1.222 @@ -234,7 +300,7 @@
   1.223  		
   1.224  		rm -rf $fs/install
   1.225  		
   1.226 -		cd $tmp
   1.227 +		cd $tmpdir
   1.228  		tazpkg pack $file
   1.229  		cd - /dev/null
   1.230  		
   1.231 @@ -242,24 +308,24 @@
   1.232  	else
   1.233  		eval_gettext "\$package_file does not look like a Slackware package !"; newline
   1.234  	fi
   1.235 -	rm -rf $tmp
   1.236 +	rm -rf $tmpdir
   1.237  }
   1.238  
   1.239  # convert a .deb package to .tazpkg
   1.240  # Usage: convert_deb $package_file
   1.241  convert_deb() {
   1.242 -	local $package_file=$1
   1.243 +	local $package_file="$1"
   1.244  	
   1.245  	# Extract deb control
   1.246 -	mkdir -p $tmp
   1.247 -	dpkg-deb -e $package_file $tmp
   1.248 +	mkdir -p $tmpdir
   1.249 +	dpkg-deb -e $package_file $tmpdir
   1.250  	
   1.251  	
   1.252  	# filter control file for variable
   1.253  	# Usage: filter_vars $search_var
   1.254  	filter_vars() {
   1.255  		local var=$1
   1.256 -		local result=$(grep '^ *$var:' $tmp/control)
   1.257 +		local result=$(grep '^ *$var:' $tmpdir/control)
   1.258  		echo ${result##*:}
   1.259  	}
   1.260  	
   1.261 @@ -268,11 +334,11 @@
   1.262  	SHORT_DESC=$(filter_vars "Description")
   1.263  	WEB_SITE="http://packages.debian.org/search?keywords=$PACKAGE"
   1.264  	MAINTAINER="nobody@slitaz.org"
   1.265 -	target="$(grep ^Architecture $tmp/control | sed 's/.*: //')"
   1.266 +	target="$(grep ^Architecture $tmpdir/control | sed 's/.*: //')"
   1.267  	
   1.268  	case "$target" in
   1.269  	i386|all)
   1.270 -		local file="$tmp/$PACKAGE-$VERSION"
   1.271 +		local file="$tmpdir/$PACKAGE-$VERSION"
   1.272  		local receipt="$file/receipt"
   1.273  		local fs="$file/fs"
   1.274  		
   1.275 @@ -280,13 +346,12 @@
   1.276  		mkdir -p $fs
   1.277  		dpkg-deb -x $package_file $fs
   1.278  		
   1.279 +		DEPENDS=$(find_depends $fs)
   1.280  		generate_receipt $receipt $package_file
   1.281 -		
   1.282 -		cd $TMP_DIR
   1.283 -		
   1.284 -		if [ -s $tmp/conffiles ]; then
   1.285 +				
   1.286 +		if [ -s $tmpdir/conffiles ]; then
   1.287  		 	cat >> $receipt <<EOT
   1.288 -CONFIG_FILES="$(cat $tmp/conffiles)"
   1.289 +CONFIG_FILES="$(cat $tmpdir/conffiles)"
   1.290  EOT
   1.291  		fi
   1.292  		
   1.293 @@ -295,7 +360,7 @@
   1.294  		# Description.txt
   1.295  		[ -z "$SHORT_DESC" ] || echo "$SHORT_DESC" > $file/Description.txt
   1.296  		
   1.297 -		cd $tmp
   1.298 +		cd $tmpdir
   1.299  		tazpkg pack $file
   1.300  		cd - > /dev/null
   1.301  		
   1.302 @@ -305,7 +370,7 @@
   1.303  		gettext "Invalid target: $target (expected i386 or all)"; newline
   1.304  		;;
   1.305  	esac
   1.306 -	rm -rf $tmp
   1.307 +	rm -rf $tmpdir
   1.308  }
   1.309  
   1.310  # convert a .rpm package to .tazpkg
   1.311 @@ -314,9 +379,9 @@
   1.312  	local package_file=$1
   1.313  	
   1.314  	# Move package_file to tmp
   1.315 -	mkdir -p $tmp
   1.316 -	cp $package_file $tmp
   1.317 -	package_file=$TMP_DIR/$(basename $package_file)
   1.318 +	mkdir -p $tmpdir
   1.319 +	cp $package_file $tmpdir
   1.320 +	package_file=$tmpdir/$(basename $package_file)
   1.321  	
   1.322  	# filter package_file for variable
   1.323  	# Usage: filter_vars $search_var
   1.324 @@ -329,40 +394,42 @@
   1.325  	VERSION=$(filter_vars "Version")
   1.326  	SHORT_DESC=$(filter_vars "Summary")
   1.327  	WEB_SITE=$(filter_vars "URL")
   1.328 -	if [ -z "$URL" ]; then
   1.329 +	if [ -z "$WEB_SITE" ]; then
   1.330  		WEB_SITE="http://rpmfind.net/linux/rpm2html/search.php?query=$PACKAGE"
   1.331  	fi
   1.332  	CATEGORY="misc";
   1.333  	MAINTAINER="nobody@slitaz.org";
   1.334  	
   1.335  	
   1.336 -	local file="$tmp/$PACKAGE-$VERSION"
   1.337 +	local file="$tmpdir/$PACKAGE-$VERSION"
   1.338  	local receipt="$file/receipt"
   1.339  	local fs="$file/fs"
   1.340  	
   1.341  	mkdir -p $fs
   1.342  	
   1.343 -	generate_receipt $receipt $package_file
   1.344 -	
   1.345 -	rpm -qip $PACKAGE_FILE | \
   1.346 +	rpm -qip $package_file | \
   1.347  		grep "^Description*" -A 100 | \
   1.348  		grep -v "^Description*" > \
   1.349  		$file/description.txt
   1.350  	
   1.351  	cd $fs
   1.352 -	rpm2cpio $PACKAGE_FILE | cpio -idm --quiet
   1.353 +	rpm2cpio $package_file | cpio -idm --quiet
   1.354  	cd - > /dev/null
   1.355  	
   1.356 +	
   1.357 +	DEPENDS=$(find_depends $fs)
   1.358 +	generate_receipt $receipt $package_file
   1.359 +	
   1.360  	show_unresolved_lib $receipt
   1.361  	
   1.362 -	cd $tmp
   1.363 +	cd $tmpdir
   1.364  	tazpkg pack $file
   1.365  	cd -
   1.366  	
   1.367  	mv $file.tazpkg .
   1.368  		
   1.369  	unset_receipt
   1.370 -	rm -rf $TMP_DIR
   1.371 +	rm -rf $tmpdir
   1.372  }
   1.373  
   1.374