Skip to content

Env variables with different cases #3752

@xq114

Description

@xq114

Xmake 版本

2.7.9

操作系统版本和架构

Windows 11

描述问题

image

如图所示,xmake中os.getenvs()返回的环境变量全为大写,而实际存在的一些环境变量是有小写的。如果不合并,在使用os.exec()的时候就会存在问题,见 https://stackoverflow.com/questions/75445876/cannot-set-path-in-windows-from-boostprocess/75446143#75446143 。这是因为win32 api的CreateProcessW中lpEnvironment是区分大小写的。

已经导致的问题:例如 #3124 package.tools.cmake.buildenvs(package)生成了不合法的环境变量。

期待的结果

最好的办法是getenv()能获取到正确大小写的环境变量。win32 GetEnvironmentStrings返回的环境变量是区分大小写的,但不知道为什么xmake里就变成全大写了。

如果不修改getenv(),xmake内部可以修改os.joinenv()来处理一部分情况,但xmake中用到os.getenvs和os.setenv的地方不止这一处,很有可能在别的地方仍有隐患。可以在os.execv加一个检查,如果存在字符相同但大小写不同的环境变量就报错。

工程配置

No response

附加信息和错误日志

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions