add m4 shipped with this project
don't delete the data after write. The data might be needed in the caller afterwards, so it's the responsibility of the caller.