allow empty source dir
use argparse for argument parsing