cross platform install function