The Makefile checks validity of the compiler command in the CC
variable by feeding the contents of that variable to the `type'
utility. Some environments include compiler options in the CC
variable such as architecture specific tuning flags. For such
cases it is necessary to first strip everything except the
command itself from the contents of the CC variable prior to
checking the command with the type utility, which is what this
patch is introducing. We use shell parameter expansion mechanism
for this purpose.
Signed-off-by: Dmitri Vorobiev <dmitri.vorobiev@movial.com>
Some compilation environments (such as Yocto) define the ARCH
environment variable to indicate the target architecture. For
such enviroments, hiredis build fails, because the expanded
$(ARCH) variable in the Makefile gets erroneously interpreted
as an argument to the `-ggdb' command line option during the
compilation stage or as an input file name during the linking
stage.
This patch removes $(ARCH) expansions from the Makefile. This
doesn't harm cross-compilation, the latter goes fine with the
properly assigned CC environment variable. For native builds,
this patch does not imply any changes.
Signed-off-by: Dmitri Vorobiev <dmitri.vorobiev@movial.com>
554: build: do not assume that INSTALL is cp r=badboy
INSTALL is supposed to be `install` in most of the cases which
doesn't work with directories, but works perfectly with files.
Don't do this assumption.
Reported-by: Jiří Vymazal <jvymazal@redhat.com>
References: https://bugzilla.redhat.com/show_bug.cgi?id=1506251
Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
INSTALL is supposed to be `install` in most of the cases which
doesn't work with directories, but works perfectly with files.
Don't do this assumption.
Reported-by: Jiří Vymazal <jvymazal@redhat.com>
References: https://bugzilla.redhat.com/show_bug.cgi?id=1506251
Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
524: Don't pass a negative value to __redisAsyncCommand if redisFormatSdsCommandArgv fails r=badboy
525: Fix compilation on FreeBSD 10.3 with default compiler r=badboy
Given FreeBSD 10.3 with default compiler:
> $ cc -v
> FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512
> Target: x86_64-unknown-freebsd10.3
Defining _XOPEN_SOURCE to 600 on the fixed line leads to the following errors:
> cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb net.c
> net.c:435:29: error: use of undeclared identifier 'AF_LOCAL'
> if (redisCreateSocket(c,AF_LOCAL) < 0)
> ^
> net.c:460:21: error: use of undeclared identifier 'AF_LOCAL'
> sa.sun_family = AF_LOCAL;
> ^
> 2 errors generated.
>
AF_LOCAL is defined in sys/socket.h within ifdef __BSD_VISIBLE.
__BSD_VISIBLE could be defined in sys/cdefs.h, but it is never done if _XOPEN_SOURCE is defined.
So on FreeBSD _XOPEN_SOURCE shouldn't be defined.
Prevented uv adapter from calling write when context has been freed
The `redisLibuvPoll` function can be called with both the `UV_READABLE` and `UV_WRITABLE` flags set at the same time. Calling `redisAsyncHandleRead` can lead to a disconnect and the context being cleaned up/freed. If this happens then `redisAsyncHandleWrite` should not be called otherwise memory read/write errors and duplicate freeing will occur.
These changes prevent this from happening by having the `redisLibuvCleanup` callback indicate that the context has been cleaned. This is done indirectly by setting the context to a null pointer, maybe someone can come up with a cleaner way.
Remove trailing comma in last value of `redisConnectionType` enum. This causes a compiler warning on Solaris compilers. I'd like to build this on Solaris with `-Werror`. However, due to the trailing comma, I cannot do that.
This PR removes the trailing comma, which should prevent it causing compiler warnings on any architecture.
In case of some glib-2.0 linker error ,
make examples
can't link with glib2.0, in this case -lglib-2.0 to after includes and move to last will solve the issues.
Do not define _XOPEN_SOURCE for OS X
redis@bb1747b appears to have introduced a build regression for OS X (and possibly elsewhere, I've only tested on a local Mac environment) — in master right now `make` reliably fails on OS X as reported in redis#431.
There looks to be another PR to fix the issue in redis#433.
This PR here simply returns to the previous behavior on OS X in a minimally-invasive way. There are of course a few different ways to do this with the directives; feel free to do something different, I just care that master can build on OS X 🙇