Try this please. diff --git a/Makefile.am b/Makefile.am index fb707df..690e466 100644 --- a/Makefile.am +++ b/Makefile.am @@ -238,6 +238,9 @@ endif if NO_CFMAKERAW nodist_tmux_SOURCES += compat/cfmakeraw.c endif +if NO_OPENAT +nodist_tmux_SOURCES += compat/openat.c +endif # Install tmux.1 in the right format. install-exec-hook: diff --git a/compat.h b/compat.h index b84ff40..ab3224b 100644 --- a/compat.h +++ b/compat.h @@ -243,7 +243,13 @@ int unsetenv(const char *); #ifndef HAVE_CFMAKERAW /* cfmakeraw.c */ -void cfmakeraw(struct termios *tio); +void cfmakeraw(struct termios *); +#endif + +#ifndef HAVE_OPENAT +/* openat.c */ +#define AT_FDCWD -100 +int openat(int, const char *, int, ...); #endif #ifdef HAVE_GETOPT diff --git a/compat/openat.c b/compat/openat.c new file mode 100644 index 0000000..005235b --- /dev/null +++ b/compat/openat.c @@ -0,0 +1,63 @@ +/* $Id$ */ + +/* + * Copyright (c) 2013 Nicholas Marriott <n...@users.sourceforge.net> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <errno.h> +#include <fcntl.h> +#include <stdarg.h> +#include <unistd.h> + +#include "tmux.h" + +int +openat(int fd, const char *path, int flags, ...) +{ + mode_t mode; + va_list ap; + int dotfd, retval, saved_errno; + + if (flags & O_CREAT) { + va_start(ap, flags); + mode = va_arg(ap, mode_t); + va_end(ap); + } else + mode = 0; + + dotfd = -1; + if (fd != AT_FDCWD) { + dotfd = open(".", O_RDONLY); + if (dotfd == -1) + return (-1); + if (fchdir(fd) != 0) + return (-1); + } + + retval = open(path, flags, mode); + + if (dotfd != -1) { + if (fchdir(dotfd) != 0) { + saved_errno = errno; + close(retval); + close(dotfd); + errno = saved_errno; + return (-1); + } + close(dotfd); + } + + return (retval); +} diff --git a/configure.ac b/configure.ac index 68c50fb..ceb37db 100644 --- a/configure.ac +++ b/configure.ac @@ -323,6 +323,13 @@ if test "x$found_cfmakeraw" = xyes; then fi AM_CONDITIONAL(NO_CFMAKERAW, [test "x$found_cfmakeraw" = xno]) +# Look for openat, compat/openat.c used if missing. +AC_CHECK_FUNC(openat, found_openat=yes, found_openat=no) +if test "x$found_openat" = xyes; then + AC_DEFINE(HAVE_OPENAT) +fi +AM_CONDITIONAL(NO_OPENAT, [test "x$found_openat" = xno]) + # Look for getopt. glibc's getopt does not enforce argument order and the ways # of making it do so are stupid, so just use our own instead. AC_CHECK_FUNC(getopt, found_getopt=yes, found_getopt=no)
On Thu, Oct 10, 2013 at 03:39:40PM +0800, harvey zh wrote: > Hi, > > 2013/10/10 Thomas Adam <[1]tho...@xteddy.org> > > Hi, > > Did you "make clean" first, and rerun autogen.sh and run ./configure > etc? > > Yes. > Here is the error log: > $ rm -rf /Library/Caches/Homebrew/tmux--git > $ brew upgrade --HEAD tmux > ==> Upgrading 1 outdated package, with result: > tmux HEAD > ==> Upgrading tmux > ==> Cloning git://[2]git.code.sf.net/p/tmux/tmux-code > Cloning into '/Library/Caches/Homebrew/tmux--git'... > remote: Counting objects: 208, done. > remote: Compressing objects: 100% (207/207), done. > remote: Total 208 (delta 50), reused 24 (delta 0) > Receiving objects: 100% (208/208), 501.19 KiB | 135.00 KiB/s, done. > Resolving deltas: 100% (50/50), done. > Checking connectivity... done > ==> sh autogen.sh > ==> ./configure --prefix=/usr/local/Cellar/tmux/HEAD > --sysconfdir=/usr/local/etc > ==> make install > * * * * * * * * cwd = AT_FDCWD; > * * * * * * * * * * * ^ > 1 error generated. > make: *** [cmd-load-buffer.o] Error 1 > make: *** Waiting for unfinished jobs.... > READ THIS: [3]https://github.com/mxcl/homebrew/wiki/troubleshooting > * > > -- Thomas Adam > On 10 October 2013 08:18, harvey zh <[4]zh.jli...@gmail.com> wrote: > > Hi > > > > The latest git version cann't be compiled on Mac OS X. > > $ brew install --HEAD tmux > > > > failed. > > > > When compiled manually, I get the following errors: > > > > cmd-load-buffer.c: In function *cmd_load_buffer_exec*: > > cmd-load-buffer.c:90: error: *AT_FDCWD* undeclared (first use in this > > function) > > cmd-load-buffer.c:90: error: (Each undeclared identifier is reported > only > > once > > cmd-load-buffer.c:90: error: for each function it appears in.) > > cmd-load-buffer.c:92: warning: implicit declaration of function > *openat* > > cmd-load-buffer.c:92: warning: nested extern declaration of *openat* > > make: *** [cmd-load-buffer.o] Error 1 > > > > > > $ uname -a > > Darwin harvey-pc.local 12.5.0 Darwin Kernel Version 12.5.0: Mon Jul 29 > > 16:33:49 PDT 2013; root:xnu-2050.48.11~1/RELEASE_X86_64 x86_64 > > > > > > ------------------------------------------------------------------------------ > > October Webinars: Code for Performance > > Free Intel webinars can help you accelerate application performance. > > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the > most > > from > > the latest Intel processors and coprocessors. See abstracts and > register > > > > > [5]http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk > > _______________________________________________ > > tmux-users mailing list > > [6]tmux-users@lists.sourceforge.net > > [7]https://lists.sourceforge.net/lists/listinfo/tmux-users > > > > References > > Visible links > 1. mailto:tho...@xteddy.org > 2. http://git.code.sf.net/p/tmux/tmux-code > 3. https://github.com/mxcl/homebrew/wiki/troubleshooting > 4. mailto:zh.jli...@gmail.com > 5. > http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk > 6. mailto:tmux-users@lists.sourceforge.net > 7. https://lists.sourceforge.net/lists/listinfo/tmux-users > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk > _______________________________________________ > tmux-users mailing list > tmux-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/tmux-users ------------------------------------------------------------------------------ October Webinars: Code for Performance Free Intel webinars can help you accelerate application performance. Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from the latest Intel processors and coprocessors. See abstracts and register > http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users