adapative ifdef