Repository: sharkdp/fd (language: rust)

Issue:
Fails to build on Ubuntu 20.04.2
**Describe the bug you encountered:**

Tried to compile with `cargo install fd-find`, but got a build error:

```
    Updating crates.io index
  Installing fd-find v8.2.1
   Compiling libc v0.2.88
   Compiling bitflags v1.2.1
   Compiling cfg-if v1.0.0
   Compiling memchr v2.3.4
   Compiling log v0.4.14
   Compiling unicode-width v0.1.8
   Compiling fs_extra v1.2.0
   Compiling autocfg v1.0.1
   Compiling cc v1.0.67
   Compiling once_cell v1.7.2
   Compiling regex-syntax v0.6.22
   Compiling strsim v0.8.0
   Compiling ansi_term v0.11.0
   Compiling vec_map v0.8.2
   Compiling lazy_static v1.4.0
   Compiling fnv v1.0.7
   Compiling same-file v1.0.6
   Compiling anyhow v1.0.38
   Compiling version_check v0.9.2
   Compiling ansi_term v0.12.1
   Compiling humantime v2.1.0
   Compiling walkdir v2.3.1
   Compiling thread_local v1.1.3
   Compiling lscolors v0.7.1
   Compiling crossbeam-utils v0.8.3
   Compiling aho-corasick v0.7.15
   Compiling bstr v0.2.15
   Compiling jemalloc-sys v0.3.2
   Compiling term_size v0.3.2
   Compiling nix v0.20.0
   Compiling dirs-sys-next v0.1.2
   Compiling atty v0.2.14
   Compiling num_cpus v1.13.0
   Compiling users v0.11.0
   Compiling textwrap v0.11.0
   Compiling dirs-next v2.0.0
   Compiling regex v1.4.3
   Compiling clap v2.33.3
   Compiling globset v0.4.6
   Compiling ignore v0.4.17
   Compiling fd-find v8.2.1
   Compiling ctrlc v3.1.8
error: failed to run custom build command for `jemalloc-sys v0.3.2`

Caused by:
  process didn't exit successfully: `/tmp/cargo-installivkPmY/release/build/jemalloc-sys-2a8e2fda041f38a7/build-script-build` (exit code: 101)
  --- stdout
  TARGET=x86_64-unknown-linux-gnu
  HOST=x86_64-unknown-linux-gnu
  NUM_JOBS=32
  OUT_DIR="/tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out"
  BUILD_DIR="/tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/build"
  SRC_DIR="/home/j/.cargo/registry/src/github.com-1ecc6299db9ec823/jemalloc-sys-0.3.2"
  OPT_LEVEL = Some("3")
  TARGET = Some("x86_64-unknown-linux-gnu")
  HOST = Some("x86_64-unknown-linux-gnu")
  CC_x86_64-unknown-linux-gnu = None
  CC_x86_64_unknown_linux_gnu = None
  HOST_CC = None
  CC = None
  CFLAGS_x86_64-unknown-linux-gnu = None
  CFLAGS_x86_64_unknown_linux_gnu = None
  HOST_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some("false")
  CARGO_CFG_TARGET_FEATURE = Some("fxsr,sse,sse2")
  CC="cc"
  CFLAGS="-O3 -ffunction-sections -fdata-sections -fPIC -m64 -Wall"
  JEMALLOC_REPO_DIR="jemalloc"
  JEMALLOC_SRC_DIR="/tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/jemalloc"
  cargo:rustc-cfg=prefixed
  --with-jemalloc-prefix=_rjem_
  running: "sh" "/tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/jemalloc/configure" "--disable-cxx" "--with-jemalloc-prefix=_rjem_" "--with-private-namespace=_rjem_" "--host=x86_64-unknown-linux-gnu" "--build=x86_64-unknown-linux-gnu" "--prefix=/tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out"
  checking for xsltproc... false
  checking for x86_64-unknown-linux-gnu-gcc... cc
  checking whether the C compiler works... yes
  checking for C compiler default output file name... a.out
  checking for suffix of executables... 
  checking whether we are cross compiling... no
  checking for suffix of object files... o
  checking whether we are using the GNU C compiler... yes
  checking whether cc accepts -g... yes
  checking for cc option to accept ISO C89... none needed
  checking whether compiler is cray... no
  checking whether compiler supports -std=gnu11... yes
  checking whether compiler supports -Wall... yes
  checking whether compiler supports -Wshorten-64-to-32... no
  checking whether compiler supports -Wsign-compare... yes
  checking whether compiler supports -Wundef... yes
  checking whether compiler supports -Wno-format-zero-length... yes
  checking whether compiler supports -pipe... yes
  checking whether compiler supports -g3... yes
  checking how to run the C preprocessor... cc -E
  checking for grep that handles long lines and -e... /usr/bin/grep
  checking for egrep... /usr/bin/grep -E
  checking for ANSI C header files... yes
  checking for sys/types.h... yes
  checking for sys/stat.h... yes
  checking for stdlib.h... yes
  checking for string.h... yes
  checking for memory.h... yes
  checking for strings.h... yes
  checking for inttypes.h... yes
  checking for stdint.h... yes
  checking for unistd.h... yes
  checking whether byte ordering is bigendian... no
  checking size of void *... 8
  checking size of int... 4
  checking size of long... 8
  checking size of long long... 8
  checking size of intmax_t... 8
  checking build system type... x86_64-unknown-linux-gnu
  checking host system type... x86_64-unknown-linux-gnu
  checking whether pause instruction is compilable... yes
  checking number of significant virtual address bits... 48
  checking for x86_64-unknown-linux-gnu-ar... no
  checking for ar... ar
  checking for x86_64-unknown-linux-gnu-nm... no
  checking for nm... nm
  checking for gawk... no
  checking for mawk... mawk
  checking malloc.h usability... yes
  checking malloc.h presence... yes
  checking for malloc.h... yes
  checking whether malloc_usable_size definition can use const argument... no
  checking for library containing log... -lm
  checking whether __attribute__ syntax is compilable... yes
  checking whether compiler supports -fvisibility=hidden... yes
  checking whether compiler supports -fvisibility=hidden... no
  checking whether compiler supports -Werror... yes
  checking whether compiler supports -herror_on_warning... no
  checking whether tls_model attribute is compilable... yes
  checking whether compiler supports -Werror... yes
  checking whether compiler supports -herror_on_warning... no
  checking whether alloc_size attribute is compilable... yes
  checking whether compiler supports -Werror... yes
  checking whether compiler supports -herror_on_warning... no
  checking whether format(gnu_printf, ...) attribute is compilable... yes
  checking whether compiler supports -Werror... yes
  checking whether compiler supports -herror_on_warning... no
  checking whether format(printf, ...) attribute is compilable... yes
  checking for a BSD-compatible install... /usr/bin/install -c
  checking for x86_64-unknown-linux-gnu-ranlib... no
  checking for ranlib... ranlib
  checking for ld... /usr/bin/ld
  checking for autoconf... false
  checking for memalign... yes
  checking for valloc... yes
  checking whether compiler supports -O3... yes
  checking whether compiler supports -O3... no
  checking whether compiler supports -funroll-loops... yes
  checking configured backtracing method... N/A
  checking for sbrk... yes
  checking whether utrace(2) is compilable... no
  checking whether a program using __builtin_unreachable is compilable... yes
  checking whether a program using __builtin_ffsl is compilable... yes
  checking LG_PAGE... 12
  Missing VERSION file, and unable to generate it; creating bogus VERSION
  checking pthread.h usability... yes
  checking pthread.h presence... yes
  checking for pthread.h... yes
  checking for pthread_create in -lpthread... yes
  checking dlfcn.h usability... yes
  checking dlfcn.h presence... yes
  checking for dlfcn.h... yes
  checking for dlsym... no
  checking for dlsym in -ldl... yes
  checking whether pthread_atfork(3) is compilable... yes
  checking whether pthread_setname_np(3) is compilable... yes
  checking for library containing clock_gettime... none required
  checking whether clock_gettime(CLOCK_MONOTONIC_COARSE, ...) is compilable... yes
  checking whether clock_gettime(CLOCK_MONOTONIC, ...) is compilable... yes
  checking whether mach_absolute_time() is compilable... no
  checking whether compiler supports -Werror... yes
  checking whether syscall(2) is compilable... yes
  checking for secure_getenv... yes
  checking for sched_getcpu... yes
  checking for sched_setaffinity... yes
  checking for issetugid... no
  checking for _malloc_thread_cleanup... no
  checking for _pthread_mutex_init_calloc_cb... no
  checking for TLS... yes
  checking whether C11 atomics is compilable... yes
  checking whether GCC __atomic atomics is compilable... yes
  checking whether GCC __sync atomics is compilable... yes
  checking whether Darwin OSAtomic*() is compilable... no
  checking whether madvise(2) is compilable... yes
  checking whether madvise(..., MADV_FREE) is compilable... yes
  checking whether madvise(..., MADV_DONTNEED) is compilable... yes
  checking whether madvise(..., MADV_DO[NT]DUMP) is compilable... yes
  checking whether madvise(..., MADV_[NO]HUGEPAGE) is compilable... yes
  checking whether to force 32-bit __sync_{add,sub}_and_fetch()... no
  checking whether to force 64-bit __sync_{add,sub}_and_fetch()... no
  checking for __builtin_clz... yes
  checking whether Darwin os_unfair_lock_*() is compilable... no
  checking whether Darwin OSSpin*() is compilable... no
  checking whether glibc malloc hook is compilable... yes
  checking whether glibc memalign hook is compilable... yes
  checking whether pthreads adaptive mutexes is compilable... yes
  checking whether compiler supports -D_GNU_SOURCE... yes
  checking whether compiler supports -Werror... yes
  checking whether compiler supports -herror_on_warning... no
  checking whether strerror_r returns char with gnu source is compilable... yes
  checking for stdbool.h that conforms to C99... yes
  checking for _Bool... yes
  configure: creating ./config.status
  config.status: creating Makefile
  config.status: creating jemalloc.pc
  config.status: creating doc/html.xsl
  config.status: creating doc/manpages.xsl
  config.status: creating doc/jemalloc.xml
  config.status: creating include/jemalloc/jemalloc_macros.h
  config.status: creating include/jemalloc/jemalloc_protos.h
  config.status: creating include/jemalloc/jemalloc_typedefs.h
  config.status: creating include/jemalloc/internal/jemalloc_preamble.h
  config.status: creating test/test.sh
  config.status: creating test/include/test/jemalloc_test.h
  config.status: creating config.stamp
  config.status: creating bin/jemalloc-config
  config.status: creating bin/jemalloc.sh
  config.status: creating bin/jeprof
  config.status: creating include/jemalloc/jemalloc_defs.h
  config.status: creating include/jemalloc/internal/jemalloc_internal_defs.h
  config.status: creating test/include/test/jemalloc_test_defs.h
  config.status: executing include/jemalloc/internal/public_symbols.txt commands
  config.status: executing include/jemalloc/internal/private_symbols.awk commands
  config.status: executing include/jemalloc/internal/private_symbols_jet.awk commands
  config.status: executing include/jemalloc/internal/public_namespace.h commands
  config.status: executing include/jemalloc/internal/public_unnamespace.h commands
  config.status: executing include/jemalloc/internal/size_classes.h commands
  config.status: executing include/jemalloc/jemalloc_protos_jet.h commands
  config.status: executing include/jemalloc/jemalloc_rename.h commands
  config.status: executing include/jemalloc/jemalloc_mangle.h commands
  config.status: executing include/jemalloc/jemalloc_mangle_jet.h commands
  config.status: executing include/jemalloc/jemalloc.h commands
  ===============================================================================
  jemalloc version   : 0.0.0-0-g0000000000000000000000000000000000000000
  library revision   : 2

  CONFIG             : --disable-cxx --with-jemalloc-prefix=_rjem_ --with-private-namespace=_rjem_ --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu --prefix=/tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out build_alias=x86_64-unknown-linux-gnu host_alias=x86_64-unknown-linux-gnu CC=cc 'CFLAGS=-O3 -ffunction-sections -fdata-sections -fPIC -m64 -Wall' 'LDFLAGS=-O3 -ffunction-sections -fdata-sections -fPIC -m64 -Wall' 'CPPFLAGS=-O3 -ffunction-sections -fdata-sections -fPIC -m64 -Wall'
  CC                 : cc
  CONFIGURE_CFLAGS   : -std=gnu11 -Wall -Wsign-compare -Wundef -Wno-format-zero-length -pipe -g3 -fvisibility=hidden -O3 -funroll-loops
  SPECIFIED_CFLAGS   : -O3 -ffunction-sections -fdata-sections -fPIC -m64 -Wall
  EXTRA_CFLAGS       : 
  CPPFLAGS           : -O3 -ffunction-sections -fdata-sections -fPIC -m64 -Wall -D_GNU_SOURCE -D_REENTRANT
  CXX                : 
  CONFIGURE_CXXFLAGS : 
  SPECIFIED_CXXFLAGS : 
  EXTRA_CXXFLAGS     : 
  LDFLAGS            : -O3 -ffunction-sections -fdata-sections -fPIC -m64 -Wall
  EXTRA_LDFLAGS      : 
  DSO_LDFLAGS        : -shared -Wl,-soname,$(@F)
  LIBS               : -lm  -lpthread -ldl
  RPATH_EXTRA        : 

  XSLTPROC           : false
  XSLROOT            : /usr/share/xml/docbook/stylesheet/docbook-xsl

  PREFIX             : /tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out
  BINDIR             : /tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/bin
  DATADIR            : /tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/share
  INCLUDEDIR         : /tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/include
  LIBDIR             : /tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/lib
  MANDIR             : /tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/share/man

  srcroot            : /tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/jemalloc/
  abs_srcroot        : /tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/jemalloc/
  objroot            : 
  abs_objroot        : /tmp/cargo-installivkPmY/release/build/jemalloc-sys-db8460196fd71a38/out/build/

  JEMALLOC_PREFIX    : _rjem_
  JEMALLOC_PRIVATE_NAMESPACE
                     : _rjem_je_
  install_suffix     : 
  malloc_conf        : 
  autogen            : 0
  debug              : 0
  stats              : 1
  prof               : 0
  prof-libunwind     : 0
  prof-libgcc        : 0
  prof-gcc           : 0
  fill               : 1
  utrace             : 0
  xmalloc            : 0
  log                : 0
  lazy_lock          : 0
  cache-oblivious    : 1
  cxx                : 0
  ===============================================================================
  running: "make" "srcroot=../jemalloc/" "-j" "32"

  --- stderr
  thread 'main' panicked at 'failed to execute command: No such file or directory (os error 2)', /home/j/.cargo/registry/src/github.com-1ecc6299db9ec823/jemalloc-sys-0.3.2/build.rs:389:19
  stack backtrace:
     0: rust_begin_unwind
               at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:493:5
     1: std::panicking::begin_panic_fmt
               at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:435:5
     2: build_script_build::run
     3: build_script_build::main
     4: core::ops::function::FnOnce::call_once
  note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
warning: build failed, waiting for other jobs to finish...
error: failed to compile `fd-find v8.2.1`, intermediate artifacts can be found at `/tmp/cargo-installivkPmY`

Caused by:
  build failed

```

I also tried installing jemalloc with `sudo apt install libjemalloc2 libjemalloc-dev librust-jemalloc-sys-dev` but that made no difference.

<!--
Please check out the troubleshooting section first:
  https://github.com/sharkdp/fd#troubleshooting
-->


**Describe what you expected to happen:**
I expected the build to successfully complete.

**What version of `fd` are you using?**
<!-- paste the output of `fd --version` here -->
latest version. Can't use the cmd since it won't build.

**Which operating system / distribution are you on?**
<!--
Unix:    paste the output of `uname -srm` and `lsb_release -a` here.
Windows: please tell us your Windows version
-->

`uname -srm`:     `Linux 5.8.0-44-generic x86_64`
`lsb_release -a`:  
```
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

```




Discussion / hints:
Thank you for reporting this.

Interesting. Several commands are executed during the `jemalloc-sys` build time. Do you have `git` installed? `autoconf`?

Could you maybe try to run `cargo install fd-find` using `strace` and check which command was executed last?
Something like this:
```
strace -f cargo install fd-find 2> log.txt
```
Then check the end of log.txt for `exec`/`ececv`/… system calls
For me installing `make` fixed it, thanks for the `strace` tip!
That also fixed it for me. 
Perhaps it's a good idea to document this (implicit) dependency in the README?
I'm thinking it would fit well in the section about using `cargo install` for installing the binary.
@jjpe Yes, that sounds like a good idea.

Fix patch:
diff --git a/README.md b/README.md
index e75c79a83..91db1a72f 100644
--- a/README.md
+++ b/README.md
@@ -632,6 +632,8 @@ cargo install fd-find
 ```
 Note that rust version *1.42.0* or later is required.
 
+`make` is also needed for the build.
+
 ### From binaries
 
 The [release page](https://github.com/sharkdp/fd/releases) includes precompiled binaries for Linux, macOS and Windows. Statically-linked binaries are also available: look for archives with `musl` in the file name.


Test patch: