FAQ / Building and Installing / Q0115
| /Q0101 /Q0102 /Q0103 /Q0104 /Q0105 /Q0106 /Q0107 /Q0108 /Q0109 /Q0110 /Q0111 /Q0112 /Q0113 /Q0114 /Q0115 /Q0116 /Q0117 /Q0118 /Q0119 /Q0120 |
Q0115
Question
What does Can't open ../scripts/newer: No such file or directory mean? I got it while trying to build Exim.
Answer
You are using FreeBSD, or another OS that has a make command which tries to optimize the running of commands. Exim's Makefile contains targets with sequential commands like this:
buildpcre:
@cd pcre; $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" \
CFLAGS="$(CFLAGS) $(PCRE_CFLAGS)" \
RANLIB="$(RANLIB)" HDRS="$(PHDRS)" \
INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE)"
@if $(SHELL) $(SCRIPTS)/newer pcre/libpcre.a exim; then \
/bin/rm -f exim eximon.bin; fiThe second command assumes that the cd pcre in the first command is no longer in effect. If you have -j3 in your default set of MAKEFLAGS, FreeBSD make tries to optimize, and ends up up with both commands in the same shell process. The result is that $(SCRIPTS) (which has a value of ../scripts) is not found. The simplest solution is to force make to use backwards compatibility mode with each command in its own shell, by using the -B flag. To ensure that this happens throughout the build, it's best to export it in your environment:
MAKEFLAGS='-B' ort MAKEFLAGS e
| /Q0101 /Q0102 /Q0103 /Q0104 /Q0105 /Q0106 /Q0107 /Q0108 /Q0109 /Q0110 /Q0111 /Q0112 /Q0113 /Q0114 /Q0115 /Q0116 /Q0117 /Q0118 /Q0119 /Q0120 |
FAQ / Building and Installing / Q0115
