taylanbayi...@gmail.com (Taylan Ulrich "Bayırlı/Kammer") skribis:
> l...@gnu.org (Ludovic Courtès) writes: > >> taylanbayi...@gmail.com (Taylan Ulrich "Bayırlı/Kammer") skribis: >>>>> ./configure: ./config.status: >>>>> /home/taylan/src/guix/build/guix-0.9.1/_build/sub/test-tmp/store/d41iyl2gyk0r: >>>>> bad interpreter: No such file or directory [...] >>> Hmm, that commit didn't fix the issue. >> >> You mean it doesn’t error out directly upon ‘make check’? Could you >> run “grep length …/_build/config.log”? > > Yes, it still goes through the tests and fails at guix-environment.sh > with the same error. I repeated all steps from a new clone of master. > > taylan@T420:~/src/guix/build$ grep length guix-0.9.1/_build/sub/config.log > configure:6946: checking the length of the installed socket file name > configure:6969: checking the length of the socket file name used in tests > configure:6980: checking the length of a typical hash bang line > configure:6992: checking the length of a hash bang line used in tests > ac_cv_guix_hash_bang_length=73 > ac_cv_guix_socket_file_name_length=74 > ac_cv_guix_test_hash_bang_length=127 > ac_cv_guix_test_socket_file_name_length=90 Arff, I see. I’ve change LINUX_HASH_BANG_LIMIT in guix.m4 to 127 instead of 128 to account for the trailing zero. This time it should detect the problem early. >>> Only the error message is broken. >> >> Would be interesting to see which is the piece of software that has an >> even lower limit here. > > For what it's worth, I confirmed that on my system (Debian 8), using > /bin/bash (in case it should be relevant): > > - the hash bang limit of a called script is 127 characters, and > > - when I pass the limit, I get an error message where the path is > truncated to 77 characters. The “bad interpreter” message comes from Bash, in execute_cmd.c. However, that file does this: --8<---------------cut here---------------start------------->8--- char sample[80]; […] #if defined (HAVE_HASH_BANG_EXEC) READ_SAMPLE_BUF (command, sample, sample_len); sample[sample_len - 1] = '\0'; if (sample_len > 2 && sample[0] == '#' && sample[1] == '!') { char *interp; int ilen; interp = getinterp (sample, sample_len, (int *)NULL); --8<---------------cut here---------------end--------------->8--- where READ_SAMPLE_BUF is: --8<---------------cut here---------------start------------->8--- #define READ_SAMPLE_BUF(file, buf, len) \ do \ { \ fd = open(file, O_RDONLY); \ if (fd >= 0) \ { \ len = read (fd, buf, 80); \ close (fd); \ } \ else \ len = -1; \ } \ while (0) --8<---------------cut here---------------end--------------->8--- Now we know. :-) Ludo’.