开发者

aclocal/autoconf reports missing m4sugar.m4 on Mac OS X?

开发者 https://www.devze.com 2023-03-06 18:44 出处:网络
I have Xcode 3.2 installed into /Xcode3.2, and did not install anything into /Developer. When I wish to do development, I start up a shell as follows

I have Xcode 3.2 installed into /Xcode3.2, and did not install anything into /Developer. When I wish to do development, I start up a shell as follows

alias sysroot='PATH=${PATH}:${XCODE}/usr/bin CFLAGS=--sysroot\ ${SDK_ROOT} CXXFLAGS=--sysroot\ ${SDK_ROOT} LDFLAGS=--sysroot\ ${SDK_ROOT} CPPFLAGS=--sysroot\ ${SDK_ROOT}'

where XCODE is /Xcode3.2 and SDK_ROOT is ${XCODE}/SDKs/MacOSX10.6.sdk. This handles most of the oddities of trying to build projects. However, I recently ran into a case where I wanted to re-run aclocal and got the following error:

autom4te: m4sugar/m4sugar.m4: no such file or directory
aclocal: /Xcode3.2/usr/bin/autom4te failed with exit status: 1

Specifying -I flags to aclocal to point at the alternative /Xcode3.2/usr/share/aclocal-1.10 and /Xcode3.2/usr/share/aclocal doesn't seem to help. If I use --verbose, and then re-run the m4 command it lists m开发者_开发百科anually with an added -I flag to point to /Xcode3.2/usr/share/autoconf, then that works, but I cannot seem to pipe it through from aclocal. In addition the M4PATH environment variable that the man pages for m4 suggest will let me add paths does not seem to make a difference. (And setting an environment variable would be my preferred setting, just so I could add it to the alias above.)

So far, I've not come up with a solution other than the "dirtying" procedure of creating a symlink from /usr/share/autoconf to /Xcode3.2/usr/share/autoconf. Is there another better way?

NOTE: The reason I keep such distinct lines between installs of the developer tools and the OS is to provide reliable cross-OS compilations (e.g., so that one Xcode version's tools don't perturb another Xcode version's build behavior.)


I got around this by creating a new symlink

sudo ln -s  /Developer/usr/share/autoconf /usr/share


To clarify the fix as identified in adl's answer and Nathan's comment on it:

If you have autoconf installed in the default location (under /Developer) as part of XCode 4.3, you'll need to edit /Developer/usr/share/autoconf/autom4te.cfg as it has various wrong paths set it in that don't include the /Developer directory:

(The edits are illustrated as some kind of diff that I found in the Google cache of this post)

*** /Developer/usr/share/autoconf/autom4te.cfg 2011-10-28 00:15:15.000000000 -0700
--- /Developer/usr/share/autoconf/autom4te.cfg 2011-10-28 00:14:33.000000000 -0700
***************
*** 99,101 ****
begin-language: "Autoconf-without-aclocal-m4"
! args: --prepend-include /usr/share/autoconf
args: --cache=autom4te.cache
--- 99,101 ----
begin-language: "Autoconf-without-aclocal-m4"
! args: --prepend-include /Developer/usr/share/autoconf
args: --cache=autom4te.cache
***************
*** 126,128 ****
begin-language: "Autotest"
! args: --prepend-include /usr/share/autoconf
args: autotest/autotest.m4f
--- 126,128 ----
begin-language: "Autotest"
! args: --prepend-include /Developer/usr/share/autoconf
args: autotest/autotest.m4f
***************
*** 140,142 ****
begin-language: "M4sh"
! args: --prepend-include /usr/share/autoconf
args: m4sugar/m4sh.m4f
--- 140,142 ----
begin-language: "M4sh"
! args: --prepend-include /Developer/usr/share/autoconf
args: m4sugar/m4sh.m4f
***************
*** 152,154 ****
begin-language: "M4sugar"
! args: --prepend-include /usr/share/autoconf
args: m4sugar/m4sugar.m4f
--- 152,154 ----
begin-language: "M4sugar"
! args: --prepend-include /Developer/usr/share/autoconf
args: m4sugar/m4sugar.m4f


I am not sure I understand what in your setup causes autom4te not to find the file. Did you move autom4te to the directory Xcode3.2/ after it was initially installed in /usr/bin/? It's not clear to me from your question (I'm not familiar with Xcode, is that bundled with autoconf?).

Anyway... The location where autom4te looks for m4sugar.m4 is hardcoded in autom4te when the Autoconf package is installed. In fact it is even more subtle: the search path is configured in DATADIR/autom4te.cfg, but the value of DATADIR is hardcoded into autom4te. You can change the value of DATADIR by setting an environment variable like export AC_MACRODIR=/Xcode3.2/usr/share/autoconf, but if you moved /usr/share/autoconf/autom4te.cfg to /Xcode3.2/usr/share/autoconf/autom4te.cfg, the contents of that file will still point to /usr/share/autoconf/.

You could have a local ~/.autom4te.cfg to add more --prepend-include lines, but this is crude as well. IMHO the simplest solution if you want Autoconf installed in Xcode3.2/ is to install it with ./configure --prefix /Xcode3.2 && make && make install. It takes less half a minute.


In the Xcode4 environment:

sudo ln -s /Xcode4/usr/share/autoconf /usr/share/autoconf


If you have used MacPorts for installing much, you probably have an installation of autoconf which will then add in autom4te and start messing with your paths. If, like me, you are moving from MacPorts then you'll need to uninstall autoconf ( sudo port uninstall autoconf ) before making edits like the ones suggested by Ergwun

0

精彩评论

暂无评论...
验证码 换一张
取 消