132 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| . ./.config || exit 1
 | |
| 
 | |
| target="$1"
 | |
| custom_loc="$2"
 | |
| applet_loc="$3"
 | |
| 
 | |
| test "$target" || exit 1
 | |
| test "$SED" || SED=sed
 | |
| test "$DD" || DD=dd
 | |
| 
 | |
| if [ x"$CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS" != x"y" ]
 | |
| then
 | |
| 	printf '#define NUM_SCRIPTS 0\n' >"$target"
 | |
| 	exit 0
 | |
| fi
 | |
| 
 | |
| # Some people were bitten by their system lacking a (proper) od
 | |
| od -v -b </dev/null >/dev/null
 | |
| if test $? != 0; then
 | |
| 	echo 'od tool is not installed or cannot accept "-v -b" options'
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| bzip2 </dev/null >/dev/null
 | |
| if test $? != 0; then
 | |
| 	echo 'bzip2 is not installed'
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| custom_scripts=""
 | |
| if [ -d "$custom_loc" ]
 | |
| then
 | |
| 	custom_scripts=$(cd $custom_loc; ls * 2>/dev/null)
 | |
| fi
 | |
| all_scripts=$($srctree/applets/busybox.mkscripts)
 | |
| 
 | |
| # all_scripts includes applet scripts and custom scripts, sort them out
 | |
| applet_scripts=""
 | |
| for i in $all_scripts
 | |
| do
 | |
|     found=0
 | |
| 	for j in $custom_scripts
 | |
| 	do
 | |
| 		if [ "$i" = "$j" ]
 | |
| 		then
 | |
| 			found=1
 | |
| 			break;
 | |
| 		fi
 | |
| 	done
 | |
| 	if [ $found -eq 0 ]
 | |
| 	then
 | |
| 		# anything that isn't a custom script is an applet script
 | |
| 		applet_scripts="$applet_scripts $i"
 | |
| 	fi
 | |
| done
 | |
| 
 | |
| # we know the custom scripts are present but applet scripts might have
 | |
| # become detached from their configuration
 | |
| for i in $applet_scripts
 | |
| do
 | |
| 	#if [ ! -f "$applet_loc/$i" -a ! -f "$custom_loc/$i" ]
 | |
| 	if [ ! -f "$applet_loc/$i" ]
 | |
| 	then
 | |
| 		echo "missing applet script $i"
 | |
| 		exit 1
 | |
| 	fi
 | |
| done
 | |
| 
 | |
| n=$(echo $custom_scripts $applet_scripts | wc -w)
 | |
| nall=$(echo $all_scripts | wc -w)
 | |
| 
 | |
| if [ $n -ne $nall ]
 | |
| then
 | |
| 	echo "script mismatch $n != $nall"
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| concatenate_scripts() {
 | |
| 	for i in $custom_scripts
 | |
| 	do
 | |
| 		cat $custom_loc/$i
 | |
| 		printf '\000'
 | |
| 	done
 | |
| 	for i in $applet_scripts
 | |
| 	do
 | |
| 		cat $applet_loc/$i
 | |
| 		printf '\000'
 | |
| 	done
 | |
| }
 | |
| 
 | |
| exec >"$target.$$"
 | |
| 
 | |
| if [ $n -ne 0 ]
 | |
| then
 | |
| 	printf '#ifdef DEFINE_SCRIPT_DATA\n'
 | |
| 	printf 'const uint16_t applet_numbers[] = {\n'
 | |
| 	for i in $custom_scripts $applet_scripts
 | |
| 	do
 | |
| 		# TODO support applets with names including invalid characters
 | |
| 		printf '\tAPPLET_NO_%s,\n' $i
 | |
| 	done
 | |
| 	printf '};\n'
 | |
| 	printf '#else\n'
 | |
| 	printf 'extern const uint16_t applet_numbers[];\n'
 | |
| 	printf '#endif\n'
 | |
| fi
 | |
| 
 | |
| printf "\n"
 | |
| printf '#define NUM_SCRIPTS %d\n' $n
 | |
| printf "\n"
 | |
| 
 | |
| if [ $n -ne 0 ]
 | |
| then
 | |
| 	printf '#define UNPACKED_SCRIPTS_LENGTH '
 | |
| 	concatenate_scripts | wc -c
 | |
| 
 | |
| 	printf '#define PACKED_SCRIPTS \\\n'
 | |
| 	concatenate_scripts | bzip2 -1 | $DD bs=2 skip=1 2>/dev/null | \
 | |
| 	od -v -b \
 | |
| 	| grep -v '^ ' \
 | |
| 	| $SED -e 's/^[^ ]*//' \
 | |
| 		-e 's/ //g' \
 | |
| 		-e '/^$/d' \
 | |
| 		-e 's/\(...\)/0\1,/g' \
 | |
| 		-e 's/$/ \\/'
 | |
| 	printf '\n'
 | |
| fi
 | |
| 
 | |
| mv -- "$target.$$" "$target"
 |