#! /usr/bin/env python





def var_to_option(caps_name):
    return "--" + caps_name.lower().replace("_", "-")




def var_kind(caps_name):
    last_underscore = caps_name.rfind("_")
    return caps_name[last_underscore+1:]




if __name__ == "__main__":
    from optparse import OptionParser

    execfile("configvars.py")

    description = "generate a siteconf.py file for this software package"
    parser = OptionParser(description=description)
    parser.add_option(
	    "--python-exe", dest="python_exe", default="python",
	    help="Which Python interpreter to use", metavar="PATH")

    for var, default, help in vars:
        option = var_to_option

        if default:
          help += " (default: %s)" % default
        parser.add_option(
            var_to_option(var), dest=var.lower(), default=default,
            metavar=var_kind(var), help=help)

    parser.add_option("--prefix", default=None,
	    help="Ignored")
    parser.add_option("--enable-shared", help="Ignored", action="store_false")
    parser.add_option("--disable-static", help="Ignored", action="store_false")

    options, args = parser.parse_args()

    substitutions = {
        "PYTHON_EXE": options.python_exe
        }

    for var, default, help in vars:
        substitutions[var] = getattr(options, var.lower())

    import re
    var_re = re.compile(r"\$\{([A-Za-z_0-9]+)\}")
    string_var_re = re.compile(r"\$str\{([A-Za-z_0-9]+)\}")
    for fname in subst_files:
        lines = open(fname+".in", "r").readlines()
        new_lines = []
        for l in lines:
            made_change = True
            while made_change:
                made_change = False
                match = var_re.search(l)
                if match:
                    varname = match.group(1)
                    l = l[:match.start()] + substitutions[varname] + l[match.end():]
                    made_change = True

                match = string_var_re.search(l)
                if match:
                    varname = match.group(1)
                    subst = substitutions[varname]
                    if subst is None:
                        subst = ""
                    else:
                        subst = '"%s"' % subst

                    l = l[:match.start()] + subst  + l[match.end():]
                    made_change = True
            new_lines.append(l)

        file(fname, "w").write("".join(new_lines))
