Software for compound database creation\enumeration
This is typically called library (or scaffold) enumeration. Doing it in SMILES is usually pretty easy by script, but there are a few other options:


KNIME
SMILIB


But it's very easy to write a script like this, e.g. (in python)


r1 = [ "", "C", "N" ]
r2 = [ "H", "C", "c3ccccc3", "C(=O)O" ]
r3 = [ "", "C", "C#N", "O" ]
scaffold = "Xc(cc1c2)ccc1c(Y)cc2-C(C=C1)C=C1Z"

for x in r1:
    for y in r2:
        for z in r3:
            print scaffold.replace('X', x).replace('Y', y).replace('Z', z)


You can then process the resulting SMILES strings with your program of choice (e.g., Open Babel).