source dir must be at top level