如何告诉autoconf有关断开的交叉HOST功能?

时间:2014-11-04 20:15:06

标签: android autoconf

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

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

对于此程序包configure构建一个带有C宏config.h的{​​{1}}文件,如果HAS_WCSFTIME认为主机具有正常工作configure,则会定义该文件。否则就是不合适的。并且包的源代码是正确的ifdefed,以便如果缺少wcsftime(),则使用wcsftime()代替,在7位ascii和UCS-4之间来回进行适当的转换。

我无法使用:

运行strftime()
configure

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

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

  1. CPPFLAGS=-UHAS_WCSFTIME configure --build=... --host=... ... 变量添加到configure.ac文件
  2. ac_cv_broken_host_wcsftime宏添加ifdef个来源
  3. 修复主机的libc
  4. 为config.h创建一个补丁,将HAS_WCSFTIME从已定义转换为未定义,并且每次运行HAS_BROKEN_WCSFTIME后都记得运行patch
  5. 我已经实施了选项(4)并且......不满意。我可以做(1)或(2)并将其贡献给软件包开发人员,但是在变更合并之前几个月。我正在研究选项(3),但这需要数年才能部署到我的大多数用户的手机和平板电脑上。

    解决这个问题的正确方法是什么? (我希望它会出现很多,因为我有很多不同的软件包需要工作,而且libc中有很多破损的函数。)

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

1 个答案:

答案 0 :(得分:2)

  

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

没有

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

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

如果在3)你的意思是Bionic作为libc,我认为“never”可能是一个比“花费数年”更广泛的字符函数更准确的时间表。

  

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

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