如何告诉自动会议关于损坏的交叉主机函数



我正在尝试为一个非常不完整的libc的不寻常的嵌入式系统交叉构建一个支持autotools的软件包。 (如果相关:该软件包是CPython 3.4.2,"嵌入式系统"是Android 4.4上的命令行shell。

AFAIK 在我的构建计算机上运行的configure无法确定主机上的哪些功能已损坏。 (configure可以并且确实在构建计算机上编译和链接测试程序,但它无权在主机上运行该程序。 因此,例如,wcsftime() 函数在主机的 <wchar.h> 标头中声明并在主机的 libc 中定义,但实现不正确。

对于这个包,configure构建了一个带有 C 宏HAS_WCSFTIMEconfig.h文件,如果configure认为主机有一个工作wcsftime()并且没有定义,则定义该文件。 并且软件包的源代码是正确的,因此如果缺少wcsftime(),则改用strftime(),并在 7 位 ascii 和 UCS-4 之间来回进行适当的转换。

我不能只用以下方法运行configure

CPPFLAGS=-UHAS_WCSFTIME configure --build=... --host=... ...

因为无论如何,config.h 文件只是重新定义了它。

到目前为止,我想出的选项是:

  1. ac_cv_broken_host_wcsftime变量添加到 configure.ac 文件
  2. HAS_BROKEN_WCSFTIME宏的ifdef s 添加到源
  3. 修复主机的 libc
  4. config.h 创建一个补丁,将HAS_WCSFTIME从已定义翻转为未定义,并记住每次运行patch后都要运行configure

我已经实现了选项 (4(,它是...不满意。 我可以做 (1( 或 (2( 并将其贡献给包开发人员,但随后需要几个月的时间才能合并更改。 我正在研究选项 (3(,但这需要数年时间才能部署到我用户的大多数手机和平板电脑上。

处理这个问题的正确方法是什么? (我希望它会出现很多,因为我有很多不同的包想要工作,而且libc中有几十个损坏的函数。

是否有一些命令行选项可以configure,让我控制哪些 CPP 宏被定义和不被定义?

是否有一些命令行选项可以配置,让我控制哪些 CPP 宏被定义和不被定义?

不。

最好的办法是与软件包维护者交谈。 他们可以帮助您为他们的软件包放置一个可接受的补丁。 然后,您可以应用此修补程序,直到使用以下方法推送它。

作为 4( 的替代方法,您还可以修补configure本身,特别是如果调用引导脚本来创建configure。 在引导脚本中执行操作以修复configurelibtool等是我过去解决此问题的方法之一。

如果在 3( 中你的意思是仿生是 libc,我认为"从不"可能比"需要数年"才能获得广泛的字符功能更准确的时间表。

AFAIK 在我的构建计算机上运行的配置无法确定主机上的哪些功能已损坏。(配置可以并且确实在生成计算机上编译和链接测试程序,但它无权在主机上运行该程序。

大部分是真的。 Scratchbox2将允许您在主机上进行运行时configure测试,但不幸的是,它不支持Android。

最新更新