Opened 9 years ago

Closed 8 years ago

#48085 closed defect (worksforme)

Upgrade Redis 3.0.2 fatal error: 'jemalloc/jemalloc.h' file not found

Reported by: muriel.hernan@… Owned by: macports-tickets@…
Priority: Normal Milestone:
Component: ports Version: 2.3.3
Keywords: Cc: mp@…
Port: redis

Description (last modified by ryandesign (Ryan Carsten Schmidt))

In OS X 10.10.3 to run this command:

sudo port selfupdate && sudo port upgrade outdated
Error: org.macports.build for port redis returned: command execution failed
Please see the log file for port redis for details:
    /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_databases_redis/redis/main.log
Error: Unable to upgrade port: 1

Attachments (2)

main.log (5.9 KB) - added by muriel.hernan@… 9 years ago.
log redis upgrade
redis-fails-even-with-jemalloc-installed.log (38.3 KB) - added by mp@… 9 years ago.
Failure when building redis after first installing jemalloc port

Download all attachments as: .zip

Change History (10)

Changed 9 years ago by muriel.hernan@…

Attachment: main.log added

log redis upgrade

comment:1 Changed 9 years ago by ryandesign (Ryan Carsten Schmidt)

Description: modified (diff)
Keywords: jemalloc.h removed
Owner: changed from macports-tickets@… to brianjlandau@…
Port: redis added; Redis removed

That was not a clean build attempt. Please clean and try again.

comment:2 Changed 9 years ago by zzanderr

In the README included in the source, I see the following:

Allocator
---------

Selecting a non-default memory allocator when building Redis is done by setting
the `MALLOC` environment variable. Redis is compiled and linked against libc
malloc by default, with the exception of jemalloc being the default on Linux
systems. This default was picked because jemalloc has proven to have fewer
fragmentation problems than libc malloc.

To force compiling against libc malloc, use:

    % make MALLOC=libc

To compile against jemalloc on Mac OS X systems, use:

    % make MALLOC=jemalloc

Is it possible that it is compiling against jemalloc on Mac OS X by default?

I am experiencing the same problem with an _install_ build, on Leopard 10.5.8 (PPC) myself.

comment:3 Changed 9 years ago by zzanderr

redis builds for me manually with

$ make malloc=libc

comment:4 Changed 9 years ago by mp@…

Cc: mp@… added

Cc Me!

Changed 9 years ago by mp@…

Failure when building redis after first installing jemalloc port

comment:5 Changed 9 years ago by mp@…

According to the redis README, a make distclean is needed for the supplied dependencies to build correctly:

Fixing build problems with dependencies or cached build options
---------
Redis has some dependencies which are included into the "deps" directory.
"make" does not rebuild dependencies automatically, even if something in the
source code of dependencies is changes.

When you update the source code with `git pull` or when code inside the
dependencies tree is modified in any other way, make sure to use the following
command in order to really clean everything and rebuild from scratch:

    make distclean

This will clean: jemalloc, lua, hiredis, linenoise.

so adding

compiler.whitelist  macports-gcc

pre-build {
    system -W ${worksrcpath} "make distclean"
}

works fine.

(The jemalloc supplied with redis doesn't get configured correctly if /usr/bin/clang is chosen as compiler, and fails with

:info:build configure: error: C preprocessor "/lib/cpp" fails sanity check

in such a case.)


Some other tests:


If the line

build.args-append   MALLOC=jemalloc

in the redis Portfile is commented out, redis installs fine.


Redis fails to build even if the jemalloc port is installed manually first.
Attached log: attachment:redis-fails-even-with-jemalloc-installed.log
The jemalloc supplied with redis should apparently be used.

comment:6 Changed 9 years ago by larryv (Lawrence Velázquez)

I am unable to reproduce any of these problems on my Yosemite system with Xcode 6.3.2.

Running make distclean should not be necessary because MacPorts should always be working from a clean source distribution. We don’t support incremental builds or building from a dirty state.

Using FSF GCC as the compiler is not an acceptable solution. In any case, I do not see the preprocessor failure with Apple LLVM Compiler 6.1.0.

If the default allocator on OS X is libc’s, why are we explicitly using jemalloc?

comment:7 Changed 9 years ago by mf2k (Frank Schima)

Owner: changed from brianjlandau@… to macports-tickets@…

See #47649.

comment:8 Changed 8 years ago by dbevans (David B. Evans)

Resolution: worksforme
Status: newclosed

Update to version 3.0.7 in r145650.

Builds successfully on local El Capitan and on all active buildbots (including Yosemite)

Note: See TracTickets for help on using tickets.