use unique_ptr instead of raw pointer
Merge pull request #380 from ga2arch/unique_ptr

use unique_ptr instead of raw pointer
Rethinking some build improvements
Refector shell flags/versioning
Remove Threads requirement