如何通过将参数传递给Autoconf来取消定义HAVE[function]宏?
问题:在Ruby解释器C代码中,有几个部分调用macOS和BSD上的u syscall函数。这在macOS领域是非常糟糕的行为,因为它是一个私有(且不稳定)API _uusyscall用法仅根据HAVE_u定义有条件地包括在内,因此我想知道我是否可以在没有它的情况下编译Ruby。以下是一个例子: 目光敏锐的读者也会注意到,即使是Ruby开发人员也不喜欢使用_syscall——他们希望用DL(Fiddle)库代替它 约束:我不想让Ruby解释器源代码进行fork操作,因为这将导致fork的持续繁琐维护。相反,我想在编译Ruby时将一个参数传递给构建工具如何通过将参数传递给Autoconf来取消定义HAVE[function]宏?,c,ruby,macros,autoconf,C,Ruby,Macros,Autoconf,问题:在Ruby解释器C代码中,有几个部分调用macOS和BSD上的u syscall函数。这在macOS领域是非常糟糕的行为,因为它是一个私有(且不稳定)API _uusyscall用法仅根据HAVE_u定义有条件地包括在内,因此我想知道我是否可以在没有它的情况下编译Ruby。以下是一个例子: 目光敏锐的读者也会注意到,即使是Ruby开发人员也不喜欢使用_syscall——他们希望用DL(Fiddle)库代替它 约束:我不想让Ruby解释器源代码进行fork操作,因为这将导致fork的持续繁琐
问题:我可以强制其中一个相关的HAVE\uuuuu宏未定义,或者禁用configure.in中的AC\u CHECK\u头,从而防止在此处使用uu syscall吗,通过将参数传递给构建工具?您应该能够在
/configure
时间调整ac\u cv.*
变量之一
特别是对于ruby-2.1.9,这应该可以:
./configure ac_cv_func___syscall=no
(作为参考,您可以查看
config.log
中设置的ac\u cv.*
变量)您准备好重新生成配置脚本了吗?如果是这样,您只需创建一个包含所需代码的合适文件(例如acmacsyscall.m4
),然后调整构建过程,以便拾取该文件(可以使用aclocal-I.
作为一个步骤,或者如果将.m4
文件保留在其他位置,则使用另一个目录)。当然,您还必须安排调用宏;这可能意味着在configure.ac
或用于configure
脚本顶层构建的任何输入文件中添加一行。
./configure ac_cv_func___syscall=no