mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	later sets from output. * Makerules (check-abi): Pass option to set that with value of LIB-abi-frozen variable if one is set. * abilist/libcidn.abilist: New file (empty).
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Awk
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Awk
		
	
	
	
	
	
# awk script to extract a config-specific .symlist file from a merged file.
 | 
						|
# This must be passed run with awk -v config=TUPLE to specify the configuration
 | 
						|
# tuple we will match.  The merged file contains stanzas in the form:
 | 
						|
#	GLIBC_x.y regexp...
 | 
						|
#	| GLIBC_x.y.z regexp...
 | 
						|
#	| GLIBC_m.n regexp...
 | 
						|
#	 function F
 | 
						|
#	 variable D 0x4
 | 
						|
# Each regexp is matched against TUPLE, and only matching stanzas go
 | 
						|
# into the output, with the regexp list removed.  Multiple version lines
 | 
						|
# can match with the same regexp, meaning the stanza is duplicated in
 | 
						|
# multiple version sets.  The result matches the original .symlist file
 | 
						|
# from abilist.awk that was fed into merge-abilist.awk.
 | 
						|
 | 
						|
BEGIN {
 | 
						|
  inside = 0;
 | 
						|
}
 | 
						|
 | 
						|
/^ / {
 | 
						|
  inside = 1;
 | 
						|
  if (!ignore) {
 | 
						|
    for (version in current) {
 | 
						|
      if (version in versions)
 | 
						|
	versions[version] = versions[version] "\n" $0;
 | 
						|
      else
 | 
						|
	versions[version] = $0;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  next;
 | 
						|
}
 | 
						|
 | 
						|
{
 | 
						|
  second = ($1 == "|");
 | 
						|
  if (second && inside) {
 | 
						|
    printf "%s:%d: bad input line inside stanza: %s\n", FILENAME, FNR, $0;
 | 
						|
    exit 1;
 | 
						|
  }
 | 
						|
  inside = 0;
 | 
						|
 | 
						|
  for (i = second ? 3 : 2; i <= NF; ++i) {
 | 
						|
    regex = "^" $i "$";
 | 
						|
    if (match(config, regex) != 0) {
 | 
						|
      if (!second || ignore)
 | 
						|
        # Clear old array.
 | 
						|
        split("", current);
 | 
						|
      current[second ? $2 : $1] = 1;
 | 
						|
      ignore = 0;
 | 
						|
      next;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (!second)
 | 
						|
    ignore = 1;
 | 
						|
  next;
 | 
						|
}
 | 
						|
 | 
						|
END {
 | 
						|
  nverlist = 0;
 | 
						|
  for (version in versions) {
 | 
						|
    if (nverslist == 0) {
 | 
						|
      verslist = version;
 | 
						|
      nverslist = 1;
 | 
						|
      continue;
 | 
						|
    }
 | 
						|
    split(verslist, s, "\n");
 | 
						|
    if (version < s[1]) {
 | 
						|
      verslist = version;
 | 
						|
      for (i = 1; i <= nverslist; ++i) {
 | 
						|
	verslist = verslist "\n" s[i];
 | 
						|
      }
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      verslist = s[1];
 | 
						|
      for (i = 2; i <= nverslist; ++i) {
 | 
						|
	if (version < s[i]) break;
 | 
						|
	verslist = verslist "\n" s[i];
 | 
						|
      }
 | 
						|
      verslist = verslist "\n" version;
 | 
						|
      for (; i <= nverslist; ++i) {
 | 
						|
	verslist = verslist "\n" s[i];
 | 
						|
      }
 | 
						|
    }
 | 
						|
    ++nverslist;
 | 
						|
  }
 | 
						|
 | 
						|
  split(verslist, order, "\n");
 | 
						|
  for (i = 1; i <= nverslist; ++i) {
 | 
						|
    version = order[i];
 | 
						|
 | 
						|
    print version;
 | 
						|
    outpipe = "sort";
 | 
						|
    print versions[version] | outpipe;
 | 
						|
    close(outpipe);
 | 
						|
 | 
						|
    if (version == lastversion)
 | 
						|
      break;
 | 
						|
  }
 | 
						|
}
 |