# $Id: cnf-to-paths.awk 23442 2011-08-07 22:50:24Z karl $ # cnf-to-paths.awk - convert texmf.cnf assignments to paths.h #define's. # Public domain. Originally written 2011, Karl Berry. # We assume comments have been stripped. # # we only care about definitions with a valid C identifier (e.g., # TEXINPUTS, not TEXINPUTS.latex), that is, lines that look like this: # = # (whitespace around the = is optional) # /^[ \t]*[A-Z0-9_]+[ \t]*=/ { # On these lines, we distinguish three cases: # # 1) definitions referring to SELFAUTO*, which we want to keep. In # particular, this is how the compile-time TEXMFCNF gets defined and # thus how texmf.cnf gets found. # # 2) definitions starting with a /, which we also want to keep. Here # we assume a distro maintainer has changed a variable, e.g., # TEXMFMAIN=/usr/share/texmf, so keep it. (This also preserves the # default values for OSFONTDIR and TRFONTS, but that's ok.) # # 3) anything else, which we want to convert to a constant /nonesuch. # That way, the binaries don't get changed just because we change # definitions in texmf.cnf. # # The definition of DEFAULT_TEXMF (and other variables) # that winds up in the final paths.h will not be used. # Extract the identifier and the value from the line. Since # gawk's subexpression matching is an extension, do it with copies. ident = $0; sub(/^[ \t]*/, "", ident); sub(/[ \t]*=.*/, "", ident); val = $0; sub(/^.*=[ \t]*/, "", val); sub(/[ \t]*$/, "", val); #print "got ident", ident, "and val", val >"/dev/stderr"; if (val ~ /\$SELFAUTO/) { # Replace all semicolons with colons in the SELFAUTO paths we're keeping. # (The path-splitting code should be changed to understand both.) gsub(/;/, ":", val); } else if (val ~ /^\//) { # If the value starts with /, presume we're compiling with changes # made for a distro, and keep it. Likewise switch to :. gsub(/;/, ":", val); } else { val = "/nonesuch"; } print "#ifndef DEFAULT_" ident; print "#define DEFAULT_" ident " \"" val "\""; print "#endif"; print ""; }