#! /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(var)

        if default:
          help += " (default: %s)" % default
        extra_kwargs = {}

        if isinstance(default, bool):
            if default:
                extra_kwargs["action"] = "store_false"
                option = "no-"+option
            else:
                extra_kwargs["action"] = "store_true"
            
        parser.add_option(
            "--" + option, dest=var.lower(), default=default,
            metavar=var_kind(var), help=help, **extra_kwargs)

    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()] + str(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))
