SOURCES: kernel-config.awk - handle string options with white spaces inside...

sparky sparky at pld-linux.org
Thu Sep 18 16:45:31 CEST 2008


Author: sparky                       Date: Thu Sep 18 14:45:31 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- handle string options with white spaces inside, \" not supported yet
- allow tabs instead of spaces
- few minor changes

---- Files affected:
SOURCES:
   kernel-config.awk (1.3 -> 1.4) 

---- Diffs:

================================================================
Index: SOURCES/kernel-config.awk
diff -u SOURCES/kernel-config.awk:1.3 SOURCES/kernel-config.awk:1.4
--- SOURCES/kernel-config.awk:1.3	Thu Sep 18 15:23:15 2008
+++ SOURCES/kernel-config.awk	Thu Sep 18 16:45:26 2008
@@ -10,6 +10,9 @@
 #
 # Authors:
 # - Przemysław Iskra <sparky at pld-linux.org>
+# parts based on kernel-config.py, by:
+# - arekm at pld-linux.org
+# - glen at pld-linux.org
 # 
 # TODO:
 #  - smarter arch split, there could be strings with spaces
@@ -17,23 +20,23 @@
 #  - use as many warnings as possible, we want our configs to be clean
 
 # no:
-# CONFIG_SOMETHING=n		-- should warn
-# SOMETHING=n			-- should warn
-# CONFIG_SOMETHING all=n	-- should warn
+# CONFIG_SOMETHING=n
+# SOMETHING=n
+# CONFIG_SOMETHING all=n
 # SOMETHING all=n
-# # CONFIG_SOMETHING is not set	-- special case
+# # CONFIG_SOMETHING is not set -- special case
 
 # yes/module/other
 # CONFIG_SOMETHING=y
-# SOMETHING=y			-- should warn
-# CONFIG_SOMETHING all=y	-- should warn
+# SOMETHING=y
+# CONFIG_SOMETHING all=y
 # SOMETHING all=y
 
 
 # return actual file name (without path) and line number
 function fileLine() {
 	f = FILENAME
-	gsub( /^.*\//, "", f ) # strip path
+	sub( /^.*\//, "", f ) # strip path
 
 	return f " (" FNR ")"
 }
@@ -59,13 +62,13 @@
 # # CONFIG_SOMETHING it not set
 # to:
 # SOMETHING all=n
-/^# CONFIG_[A-Za-z0-9_-]+ is not set$/ {
-	match( $0, /CONFIG_[A-Za-z0-9_-]+/ )
+/^# CONFIG_[A-Za-z0-9_]+ is not set$/ {
+	match( $0, /CONFIG_[A-Za-z0-9_]+/ )
 	option = substr( $0, RSTART, RLENGTH)
 	$0 = option " all=n"
 }
 
-# ignore all the comments
+# ignore all the comments and empty lines
 /^#/ || /^\s*$/ {
 	next
 }
@@ -79,12 +82,24 @@
 	line = $0
 	value = ""
 	if ( option ~ /=/ ) {
-		gsub( /=.*$/, "", option )
-		gsub( /^[^=]*=/, "", line )
+		sub( /=.*$/, "", option )
+		sub( /^[^=]*=/, "", line )
 		value = line
 	} else {
-		gsub( "^" option IFS, "", line )
-		split( line, archs )
+		sub( "^" option, "", line )
+		sub( /^[ \t]*/, "", line )
+
+		if ( line ~ /"/ ) {
+			# there can be white spaces
+			i = 0
+			while ( match( line, /^[^=]+="[^"]*"/ ) ) {
+				archs[ (++i) ] = substr( line, RSTART, RLENGTH )
+				line = substr( line, RSTART + RLENGTH )
+				sub( /^[ \t]*/, "", line )
+			}
+		} else {
+			split( line, archs )
+		}
 		for ( i in archs ) {
 			split( archs[i], opt, "=" );
 			if ( opt[1] == "all" )
@@ -110,11 +125,11 @@
 			out = option "=" value
 
 			if ( value == "y" || value == "m" )
-				;
+				; # OK
 			else if ( value ~ /^"[^"]*"$/ )
-				;
+				; # OK
 			else if ( value ~ /^-?[0-9]+$/ || value ~ /^0x[0-9A-Fa-f]+$/ )
-				;
+				; # OK
 			else {
 				warn( "ERROR: Incorrect value: " $0 )
 				dieLater( 1 )
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/kernel-config.awk?r1=1.3&r2=1.4&f=u



More information about the pld-cvs-commit mailing list