void programs(int docs)
{
    if ("VERSION" newer "yo/version.yo")
    {
        printf("updating yo/version.yo to version " VERSION " and years " 
                                                                YEARS "\n");
        system(P_NOCHECK, "rm -f yo/version.yo");
        fprintf("yo/version.yo", 
            "SUBST(DOCVERSION)(", VERSION, ")\n"
            "SUBST(YEARS)(", YEARS, ")\n");
    }

    md("tmp/bin");
    
    if (docs)
    {
        if (!exists("tmp/bin/htmlindex"))
        {
            chdir("src/htmlindex");
            run("./build");
            chdir("../../");
        }

        if (!exists("tmp/bin/rmindexlines"))
            run(GPP " " CPPOPT  
            " -o tmp/bin/rmindexlines src/rmindexlines/rmindexlines.cc -s");

        //     // only used in 2024
        // if (!exists("tmp/bin/celeb"))
        //     run(GPP " " CPPOPT  " -o tmp/bin/celeb src/celeb.cc -s");

        return;
    }

    if (!exists("tmp/bin/paren"))
        run(GPP " " CPPOPT " -o tmp/bin/paren src/paren/paren.cc -L" LPATH
                                            " -l" BOBCAT " -s");
    if (!exists("tmp/bin/trim"))
        run(GPP " " CPPOPT  " -o tmp/bin/trim src/trim/trim.cc -s");

    if (!exists("tmp/bin/verbnrs"))
        run(GPP " " CPPOPT  " -o tmp/bin/verbnrs src/verbnrs.cc -s");

    if (!exists("tmp/bin/tab"))
    {
        chdir("src/tab");
        run(GCC " " COPT  " -o ../../tmp/bin/tab *.c -lfl -s");
        chdir("../../");
    }
}
