Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Jan 2010 12:07:31 GMT
From:      Keith Gaughan <k@stereochro.me>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/142828: databases/libmemcached: Fails to build due to missing atomic locking primitives in GCC
Message-ID:  <201001141207.o0EC7Vaw058938@www.freebsd.org>
Resent-Message-ID: <201001141210.o0ECA1lT057004@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         142828
>Category:       ports
>Synopsis:       databases/libmemcached: Fails to build due to missing atomic locking primitives in GCC
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jan 14 12:10:01 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Keith Gaughan
>Release:        7.1
>Organization:
>Environment:
FreeBSD lir 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan  1 14:37:25 UTC 2009     root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
>Description:
This was also tested under FreeBSD 8.0 with identical results.

Building libmemcached fails due to a lack of support for GCC's __sync_fetch_and_add, &c., built-ins in any form. Here's the output from a build:

===>  Extracting for libmemcached-0.37_1

=> MD5 Checksum OK for libmemcached-0.37.tar.gz.

=> SHA256 Checksum OK for libmemcached-0.37.tar.gz.

===>   libmemcached-0.37_1 depends on file: /usr/local/bin/perl5.10.1 - found

===>  Patching for libmemcached-0.37_1

===>   libmemcached-0.37_1 depends on file: /usr/local/bin/perl5.10.1 - found

===>  Applying FreeBSD patches for libmemcached-0.37_1

/usr/bin/sed -i.bak -e 's|^pkgconfigdir.*|pkgconfigdir = ${PREFIX}/libdata/pkgconfig|'  /usr/ports/databases/libmemcached/work/libmemcached-0.37/Makefile.in

===>   libmemcached-0.37_1 depends on executable: gmake - found

===>   libmemcached-0.37_1 depends on file: /usr/local/bin/perl5.10.1 - found

===>   libmemcached-0.37_1 depends on executable: pkg-config - found

===>   libmemcached-0.37_1 depends on shared library: event-1.4 - found

===>  Configuring for libmemcached-0.37_1

checking build system type... i386-portbld-freebsd7.1

checking host system type... i386-portbld-freebsd7.1

checking for a BSD-compatible install... /usr/bin/install -c -o root -g wheel

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... config/install-sh -c -d

checking for gawk... gawk

checking whether gmake sets $(MAKE)... yes

checking for style of include used by gmake... GNU

checking for gcc... cc

checking for C compiler default output file name... a.out

checking whether the C compiler works... yes

checking whether we are cross compiling... no

checking for suffix of executables... 

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 dependency style of cc... gcc3

checking for isainfo... no

checking whether we are using the GNU C++ compiler... yes

checking whether c++ accepts -g... yes

checking dependency style of c++... gcc3

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 minix/config.h usability... no

checking minix/config.h presence... no

checking for minix/config.h... no

checking whether it is safe to define __EXTENSIONS__... yes

checking whether cc understands -c and -o together... yes

checking for a sed that does not truncate output... /usr/bin/sed

checking for fgrep... /usr/bin/grep -F

checking for ld used by cc... /usr/bin/ld

checking if the linker (/usr/bin/ld) is GNU ld... yes

checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B

checking the name lister (/usr/bin/nm -B) interface... BSD nm

checking whether ln -s works... yes

checking the maximum length of command line arguments... (cached) 262144

checking whether the shell understands some XSI constructs... yes

checking whether the shell understands "+="... no

checking for /usr/bin/ld option to reload object files... -r

checking for objdump... objdump

checking how to recognize dependent libraries... pass_all

checking for ar... ar

checking for strip... strip

checking for ranlib... ranlib

checking command to parse /usr/bin/nm -B output from cc object... ok

checking for dlfcn.h... yes

checking whether we are using the GNU C++ compiler... (cached) yes

checking whether c++ accepts -g... (cached) yes

checking dependency style of c++... (cached) gcc3

checking how to run the C++ preprocessor... c++ -E

checking for objdir... .libs

checking if cc supports -fno-rtti -fno-exceptions... no

checking for cc option to produce PIC... -fPIC -DPIC

checking if cc PIC flag -fPIC -DPIC works... yes

checking if cc static flag -static works... yes

checking if cc supports -c -o file.o... yes

checking if cc supports -c -o file.o... (cached) yes

checking whether the cc linker (/usr/bin/ld) supports shared libraries... yes

checking whether -lc should be explicitly linked in... no

checking dynamic linker characteristics... freebsd7.1 ld.so

checking how to hardcode library paths into programs... immediate

checking whether stripping libraries is possible... yes

checking if libtool supports shared libraries... yes

checking whether to build shared libraries... yes

checking whether to build static libraries... no

checking for ld used by c++... /usr/bin/ld

checking if the linker (/usr/bin/ld) is GNU ld... yes

checking whether the c++ linker (/usr/bin/ld) supports shared libraries... yes

checking for c++ option to produce PIC... -fPIC -DPIC

checking if c++ PIC flag -fPIC -DPIC works... yes

checking if c++ static flag -static works... yes

checking if c++ supports -c -o file.o... yes

checking if c++ supports -c -o file.o... (cached) yes

checking whether the c++ linker (/usr/bin/ld) supports shared libraries... yes

checking dynamic linker characteristics... freebsd7.1 ld.so

checking how to hardcode library paths into programs... immediate

checking if g++ supports C++0x features without additional flags... no

checking if g++ supports C++0x features with -std=c++0x... no

checking if g++ supports C++0x features with -std=gnu++0x... no

checking for working alloca.h... no

checking for alloca... yes

checking for stdlib.h... (cached) yes

checking for GNU libc compatible malloc... yes

checking for stdlib.h... (cached) yes

checking for GNU libc compatible realloc... yes

checking target system type... i386-portbld-freebsd7.1

checking whether __SUNPRO_C is declared... no

checking whether __ICC is declared... no

checking for ISO C++ 98 include files... yes

checking memory usability... yes

checking memory presence... yes

checking for memory... yes

checking tr1/memory usability... yes

checking tr1/memory presence... yes

checking for tr1/memory... yes

checking boost/shared_ptr.hpp usability... no

checking boost/shared_ptr.hpp presence... no

checking for boost/shared_ptr.hpp... no

checking the location of shared_ptr header file... 

checking "C Compiler version--yes"... "cc (GCC) 4.2.1 20070719  [FreeBSD]"

checking "C++ Compiler version"... "c++ (GCC) 4.2.1 20070719  [FreeBSD]"

checking whether byte ordering is bigendian... no

checking for an ANSI C-conforming const... yes

checking for inline... inline

checking for working volatile... yes

checking for C/C++ restrict keyword... __restrict

checking whether time.h and sys/time.h may both be included... yes

checking for size_t... yes

checking for special C compiler options needed for large files... no

checking for _FILE_OFFSET_BITS value needed for large files... no

checking size of off_t... 8

checking size of size_t... 4

checking size of long long... 8

checking if time_t is unsigned... no

checking stack direction... -1

checking for cos in -lm... yes

checking for setsockopt... yes

checking for bind... yes

checking whether madvise is declared... no

checking whether the compiler provides atomic builtins... no

checking for simple visibility declarations... yes

checking assert.h usability... yes

checking assert.h presence... yes

checking for assert.h... yes

checking whether to enable assertions... yes

checking whether it is safe to use -fdiagnostics-show-option... yes

checking whether it is safe to use -Wconversion... no

checking whether it is safe to use -Wextra... yes

checking whether it is safe to use -Wmissing-declarations from C++... no

checking whether it is safe to use -Wlogical-op... no

checking whether it is safe to use -Wredundant-decls from C++... yes

checking whether it is safe to use -Wattributes from C++... no

checking whether it is safe to use -Wno-attributes... no

checking for doxygen... no

checking for perl... perl

checking for working -pipe... yes

checking for library containing getopt_long... none required

checking for library containing gethostbyname... none required

checking for getline... no

checking for ld used by GCC... /usr/bin/ld

checking if the linker (/usr/bin/ld) is GNU ld... yes

checking for shared library run path origin... done

checking for libevent... yes

checking how to link with libevent... /usr/local/lib/libevent.so -lrt -Wl,-rpath -Wl,/usr/local/lib

checking for event_base_new... yes

checking for event_base_free... yes

checking for event_base_get_method... yes

checking for the pthreads library -lpthreads... no

checking whether pthreads work without any flags... no

checking whether pthreads work with -Kthread... no

checking whether pthreads work with -kthread... no

checking for the pthreads library -llthread... no

checking whether pthreads work with -pthread... yes

checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE

checking if more special flags are required for pthreads... -D_THREAD_SAFE

checking for pthread_yield_np... no

checking if pthread_yield takes zero arguments... yes

checking if pthread_yield takes one argument... no

checking for pthread_attr_getstacksize... yes

checking for pthread_attr_setprio... no

checking for pthread_attr_setschedparam... yes

checking for pthread_attr_setstacksize... yes

checking for pthread_condattr_create... no

checking for pthread_getsequence_np... no

checking for pthread_key_delete... yes

checking for pthread_rwlock_rdlock... yes

checking for pthread_setprio... yes

checking for pthread_setprio_np... no

checking for pthread_setschedparam... yes

checking for pthread_sigmask... yes

checking for pthread_attr_create... no

checking for rwlock_init... no

checking args to pthread_getspecific... POSIX

checking args to pthread_mutex_init... POSIX

checking args to readdir_r... POSIX

checking style of sigwait... POSIX

checking for pthread_attr_setscope... yes

checking if pthread_yield takes zero arguments... yes

checking if pthread_yield takes 1 argument... no

checking cxxabi.h usability... yes

checking cxxabi.h presence... yes

checking for cxxabi.h... yes

checking checking for abi::__cxa_demangle... yes

checking for htonll... 

checking for pod2man... /usr/local/bin/pod2man

checking for podchecker... /usr/local/bin/podchecker

checking for libinnodb... no

checking ucontext.h usability... yes

checking ucontext.h presence... yes

checking for ucontext.h... yes

checking for printstack... no

checking for dlfcn.h... (cached) yes

checking execinfo.h usability... no

checking execinfo.h presence... no

checking for execinfo.h... no

checking for backtrace... no

checking for backtrace_symbols_fd... no

checking atomic.h usability... no

checking atomic.h presence... no

checking for atomic.h... no

configure: creating ./config.status

config.status: creating Makefile

config.status: creating docs/Makefile

config.status: creating libmemcached/configure.h

config.status: creating support/libmemcached.pc

config.status: creating support/libmemcached.spec

config.status: creating support/libmemcached-fc.spec

config.status: creating config.h

config.status: executing depfiles commands

config.status: executing libtool commands

---

Configuration summary for libmemcached version 0.37



   * Installation prefix:       /usr/local

   * System type:               portbld-freebsd7.1

   * Host CPU:                  i386

   * C Compiler:                cc (GCC) 4.2.1 20070719  [FreeBSD]

   * Assertions enabled:        yes

   * Debug enabled:             no

   * Warnings as failure:       no



---

===>  Building for libmemcached-0.37_1

gmake  all-recursive

gmake[1]: Entering directory `/usr/ports/databases/libmemcached/work/libmemcached-0.37'

Making all in docs

gmake[2]: Entering directory `/usr/ports/databases/libmemcached/work/libmemcached-0.37/docs'

ln -s ../docs/memcached_auto.pod ../docs/memcached_increment.pop

ln -s ../docs/memcached_auto.pod ../docs/memcached_increment_with_initial.pop

ln -s ../docs/memcached_auto.pod ../docs/memcached_decrement.pop

ln -s ../docs/memcached_auto.pod ../docs/memcached_decrement_with_initial.pop

ln -s ../docs/memcached_behavior.pod ../docs/memcached_behavior_get.pop

ln -s ../docs/memcached_behavior.pod ../docs/memcached_behavior_set.pop

ln -s ../docs/memcached_callback.pod ../docs/memcached_callback_get.pop

ln -s ../docs/memcached_callback.pod ../docs/memcached_callback_set.pop

ln -s ../docs/memcached_create.pod ../docs/memcached_clone.pop

ln -s ../docs/memcached_create.pod ../docs/memcached_create.pop

ln -s ../docs/memcached_create.pod ../docs/memcached_free.pop

ln -s ../docs/memcached_create.pod ../docs/memcached_servers_reset.pop

ln -s ../docs/memcached_delete.pod ../docs/memcached_delete.pop

ln -s ../docs/memcached_delete.pod ../docs/memcached_delete_by_key.pop

ln -s ../docs/libmemcached.pod ../docs/libmemcached.pop

ln -s ../docs/libmemcached_examples.pod ../docs/libmemcached_examples.pop

ln -s ../docs/libmemcachedutil.pod ../docs/libmemcachedutil.pop

ln -s ../docs/memcached_analyze.pod ../docs/memcached_analyze.pop

ln -s ../docs/memcached_dump.pod ../docs/memcached_dump.pop

ln -s ../docs/memcached_flush.pod ../docs/memcached_flush.pop

ln -s ../docs/memcached_flush_buffers.pod ../docs/memcached_flush_buffers.pop

ln -s ../docs/memcached_generate_hash_value.pod ../docs/memcached_generate_hash_value.pop

ln -s ../docs/memcached_quit.pod ../docs/memcached_quit.pop

ln -s ../docs/memcached_strerror.pod ../docs/memcached_strerror.pop

ln -s ../docs/memcached_verbosity.pod ../docs/memcached_verbosity.pop

ln -s ../docs/memcapable.pod ../docs/memcapable.pop

ln -s ../docs/memcat.pod ../docs/memcat.pop

ln -s ../docs/memcp.pod ../docs/memcp.pop

ln -s ../docs/memdump.pod ../docs/memdump.pop

ln -s ../docs/memerror.pod ../docs/memerror.pop

ln -s ../docs/memflush.pod ../docs/memflush.pop

ln -s ../docs/memrm.pod ../docs/memrm.pop

ln -s ../docs/memslap.pod ../docs/memslap.pop

ln -s ../docs/memstat.pod ../docs/memstat.pop

ln -s ../docs/memcached_get.pod ../docs/memcached_get.pop

ln -s ../docs/memcached_get.pod ../docs/memcached_get_by_key.pop

ln -s ../docs/memcached_get.pod ../docs/memcached_fetch_result.pop

ln -s ../docs/memcached_get.pod ../docs/memcached_fetch_execute.pop

ln -s ../docs/memcached_get.pod ../docs/memcached_mget.pop

ln -s ../docs/memcached_get.pod ../docs/memcached_mget_by_key.pop

ln -s ../docs/memcached_get.pod ../docs/memcached_mget_execute.pop

ln -s ../docs/memcached_get.pod ../docs/memcached_mget_execute_by_key.pop

ln -s ../docs/memcached_get.pod ../docs/memcached_fetch.pop

ln -s ../docs/memcached_memory_allocators.pod ../docs/memcached_get_memory_allocators.pop

ln -s ../docs/memcached_memory_allocators.pod ../docs/memcached_set_memory_allocators.pop

ln -s ../docs/memcached_pool.pod ../docs/memcached_pool_behavior_get.pop

ln -s ../docs/memcached_pool.pod ../docs/memcached_pool_behavior_set.pop

ln -s ../docs/memcached_pool.pod ../docs/memcached_pool_create.pop

ln -s ../docs/memcached_pool.pod ../docs/memcached_pool_destroy.pop

ln -s ../docs/memcached_pool.pod ../docs/memcached_pool_pop.pop

ln -s ../docs/memcached_pool.pod ../docs/memcached_pool_push.pop

ln -s ../docs/memcached_result_st.pod ../docs/memcached_result_cas.pop

ln -s ../docs/memcached_result_st.pod ../docs/memcached_result_create.pop

ln -s ../docs/memcached_result_st.pod ../docs/memcached_result_flags.pop

ln -s ../docs/memcached_result_st.pod ../docs/memcached_result_free.pop

ln -s ../docs/memcached_result_st.pod ../docs/memcached_result_key_length.pop

ln -s ../docs/memcached_result_st.pod ../docs/memcached_result_key_value.pop

ln -s ../docs/memcached_result_st.pod ../docs/memcached_result_length.pop

ln -s ../docs/memcached_result_st.pod ../docs/memcached_result_st.pop

ln -s ../docs/memcached_result_st.pod ../docs/memcached_result_value.pop

ln -s ../docs/memcached_servers.pod ../docs/memcached_server_count.pop

ln -s ../docs/memcached_servers.pod ../docs/memcached_server_cursor.pop

ln -s ../docs/memcached_servers.pod ../docs/memcached_server_list.pop

ln -s ../docs/memcached_servers.pod ../docs/memcached_server_add.pop

ln -s ../docs/memcached_servers.pod ../docs/memcached_server_add_unix_socket.pop

ln -s ../docs/memcached_servers.pod ../docs/memcached_server_push.pop

ln -s ../docs/memcached_server_st.pod ../docs/memcached_server_list_free.pop

ln -s ../docs/memcached_server_st.pod ../docs/memcached_server_list_count.pop

ln -s ../docs/memcached_server_st.pod ../docs/memcached_server_list_append.pop

ln -s ../docs/memcached_server_st.pod ../docs/memcached_servers_parse.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_set.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_set_by_key.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_cas.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_cas_by_key.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_replace.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_replace_by_key.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_add.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_add_by_key.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_prepend.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_prepend_by_key.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_append.pop

ln -s ../docs/memcached_set.pod ../docs/memcached_append_by_key.pop

ln -s ../docs/memcached_stats.pod ../docs/memcached_stat.pop

ln -s ../docs/memcached_stats.pod ../docs/memcached_stat_get_keys.pop

ln -s ../docs/memcached_stats.pod ../docs/.pop

ln -s ../docs/memcached_stats.pod ../docs/memcached_stat_get_value.pop

ln -s ../docs/memcached_stats.pod ../docs/memcached_stat_servername.pop

ln -s ../docs/memcached_user_data.pod ../docs/memcached_get_user_data.pop

ln -s ../docs/memcached_user_data.pod ../docs/memcached_set_user_data.pop

ln -s ../docs/memcached_version.pod ../docs/memcached_version.pop

ln -s ../docs/memcached_version.pod ../docs/memcached_lib_version.pop

ln -s ../docs/hashkit_create.pod ../docs/hashkit_is_allocated.pop

ln -s ../docs/hashkit_create.pod ../docs/hashkit_create.pop

ln -s ../docs/hashkit_create.pod ../docs/hashkit_clone.pop

ln -s ../docs/hashkit_create.pod ../docs/hashkit_free.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_crc32.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_fnv1_32.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_fnv1_64.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_fnv1a_32.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_fnv1a_64.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_functions.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_hsieh.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_jenkins.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_md5.pop

ln -s ../docs/hashkit_functions.pod ../docs/hashkit_murmur.pop

ln -s ../docs/hashkit_value.pod ../docs/hashkit_value.pop

gmake  all-am

gmake[3]: Entering directory `/usr/ports/databases/libmemcached/work/libmemcached-0.37/docs'

/usr/local/bin/pod2man -c "hashkit_clone" -r "" -s 3 hashkit_clone.pop >  hashkit_clone.3

/usr/local/bin/pod2man -c "hashkit_crc32" -r "" -s 3 hashkit_crc32.pop >  hashkit_crc32.3

/usr/local/bin/pod2man -c "hashkit_create" -r "" -s 3 hashkit_create.pop >  hashkit_create.3

/usr/local/bin/pod2man -c "hashkit_fnv1_32" -r "" -s 3 hashkit_fnv1_32.pop >  hashkit_fnv1_32.3

/usr/local/bin/pod2man -c "hashkit_fnv1_64" -r "" -s 3 hashkit_fnv1_64.pop >  hashkit_fnv1_64.3

/usr/local/bin/pod2man -c "hashkit_fnv1a_32" -r "" -s 3 hashkit_fnv1a_32.pop >  hashkit_fnv1a_32.3

/usr/local/bin/pod2man -c "hashkit_fnv1a_64" -r "" -s 3 hashkit_fnv1a_64.pop >  hashkit_fnv1a_64.3

/usr/local/bin/pod2man -c "hashkit_free" -r "" -s 3 hashkit_free.pop >  hashkit_free.3

/usr/local/bin/pod2man -c "hashkit_functions" -r "" -s 3 hashkit_functions.pop >  hashkit_functions.3

/usr/local/bin/pod2man -c "hashkit_hsieh" -r "" -s 3 hashkit_hsieh.pop >  hashkit_hsieh.3

/usr/local/bin/pod2man -c "hashkit_is_allocated" -r "" -s 3 hashkit_is_allocated.pop >  hashkit_is_allocated.3

/usr/local/bin/pod2man -c "hashkit_jenkins" -r "" -s 3 hashkit_jenkins.pop >  hashkit_jenkins.3

/usr/local/bin/pod2man -c "hashkit_md5" -r "" -s 3 hashkit_md5.pop >  hashkit_md5.3

/usr/local/bin/pod2man -c "hashkit_murmur" -r "" -s 3 hashkit_murmur.pop >  hashkit_murmur.3

/usr/local/bin/pod2man -c "hashkit_value" -r "" -s 3 hashkit_value.pop >  hashkit_value.3

/usr/local/bin/pod2man -c "libmemcached" -r "" -s 3 libmemcached.pop >  libmemcached.3

/usr/local/bin/pod2man -c "libmemcached_examples" -r "" -s 3 libmemcached_examples.pop >  libmemcached_examples.3

/usr/local/bin/pod2man -c "memcached_add" -r "" -s 3 memcached_add.pop >  memcached_add.3

/usr/local/bin/pod2man -c "memcached_add_by_key" -r "" -s 3 memcached_add_by_key.pop >  memcached_add_by_key.3

/usr/local/bin/pod2man -c "memcached_analyze" -r "" -s 3 memcached_analyze.pop >  memcached_analyze.3

/usr/local/bin/pod2man -c "memcached_append" -r "" -s 3 memcached_append.pop >  memcached_append.3

/usr/local/bin/pod2man -c "memcached_append_by_key" -r "" -s 3 memcached_append_by_key.pop >  memcached_append_by_key.3

/usr/local/bin/pod2man -c "memcached_behavior_get" -r "" -s 3 memcached_behavior_get.pop >  memcached_behavior_get.3

/usr/local/bin/pod2man -c "memcached_behavior_set" -r "" -s 3 memcached_behavior_set.pop >  memcached_behavior_set.3

/usr/local/bin/pod2man -c "memcached_callback_get" -r "" -s 3 memcached_callback_get.pop >  memcached_callback_get.3

/usr/local/bin/pod2man -c "memcached_callback_set" -r "" -s 3 memcached_callback_set.pop >  memcached_callback_set.3

/usr/local/bin/pod2man -c "memcached_cas" -r "" -s 3 memcached_cas.pop >  memcached_cas.3

/usr/local/bin/pod2man -c "memcached_cas_by_key" -r "" -s 3 memcached_cas_by_key.pop >  memcached_cas_by_key.3

/usr/local/bin/pod2man -c "memcached_clone" -r "" -s 3 memcached_clone.pop >  memcached_clone.3

/usr/local/bin/pod2man -c "memcached_create" -r "" -s 3 memcached_create.pop >  memcached_create.3

/usr/local/bin/pod2man -c "memcached_decrement" -r "" -s 3 memcached_decrement.pop >  memcached_decrement.3

/usr/local/bin/pod2man -c "memcached_decrement_with_initial" -r "" -s 3 memcached_decrement_with_initial.pop >  memcached_decrement_with_initial.3

/usr/local/bin/pod2man -c "memcached_delete" -r "" -s 3 memcached_delete.pop >  memcached_delete.3

/usr/local/bin/pod2man -c "memcached_delete_by_key" -r "" -s 3 memcached_delete_by_key.pop >  memcached_delete_by_key.3

/usr/local/bin/pod2man -c "memcached_dump" -r "" -s 3 memcached_dump.pop >  memcached_dump.3

/usr/local/bin/pod2man -c "memcached_fetch" -r "" -s 3 memcached_fetch.pop >  memcached_fetch.3

/usr/local/bin/pod2man -c "memcached_fetch_execute" -r "" -s 3 memcached_fetch_execute.pop >  memcached_fetch_execute.3

/usr/local/bin/pod2man -c "memcached_fetch_result" -r "" -s 3 memcached_fetch_result.pop >  memcached_fetch_result.3

/usr/local/bin/pod2man -c "memcached_flush_buffers" -r "" -s 3 memcached_flush_buffers.pop >  memcached_flush_buffers.3

/usr/local/bin/pod2man -c "memcached_free" -r "" -s 3 memcached_free.pop >  memcached_free.3

/usr/local/bin/pod2man -c "memcached_generate_hash_value" -r "" -s 3 memcached_generate_hash_value.pop >  memcached_generate_hash_value.3

/usr/local/bin/pod2man -c "memcached_get" -r "" -s 3 memcached_get.pop >  memcached_get.3

/usr/local/bin/pod2man -c "memcached_get_by_key" -r "" -s 3 memcached_get_by_key.pop >  memcached_get_by_key.3

/usr/local/bin/pod2man -c "memcached_get_memory_allocators" -r "" -s 3 memcached_get_memory_allocators.pop >  memcached_get_memory_allocators.3

/usr/local/bin/pod2man -c "memcached_get_user_data" -r "" -s 3 memcached_get_user_data.pop >  memcached_get_user_data.3

/usr/local/bin/pod2man -c "memcached_increment" -r "" -s 3 memcached_increment.pop >  memcached_increment.3

/usr/local/bin/pod2man -c "memcached_increment_with_initial" -r "" -s 3 memcached_increment_with_initial.pop >  memcached_increment_with_initial.3

/usr/local/bin/pod2man -c "memcached_lib_version" -r "" -s 3 memcached_lib_version.pop >  memcached_lib_version.3

/usr/local/bin/pod2man -c "memcached_mget" -r "" -s 3 memcached_mget.pop >  memcached_mget.3

/usr/local/bin/pod2man -c "memcached_mget_by_key" -r "" -s 3 memcached_mget_by_key.pop >  memcached_mget_by_key.3

/usr/local/bin/pod2man -c "memcached_mget_execute" -r "" -s 3 memcached_mget_execute.pop >  memcached_mget_execute.3

/usr/local/bin/pod2man -c "memcached_mget_execute_by_key" -r "" -s 3 memcached_mget_execute_by_key.pop >  memcached_mget_execute_by_key.3

/usr/local/bin/pod2man -c "memcached_prepend" -r "" -s 3 memcached_prepend.pop >  memcached_prepend.3

/usr/local/bin/pod2man -c "memcached_prepend_by_key" -r "" -s 3 memcached_prepend_by_key.pop >  memcached_prepend_by_key.3

/usr/local/bin/pod2man -c "memcached_quit" -r "" -s 3 memcached_quit.pop >  memcached_quit.3

/usr/local/bin/pod2man -c "memcached_replace" -r "" -s 3 memcached_replace.pop >  memcached_replace.3

/usr/local/bin/pod2man -c "memcached_replace_by_key" -r "" -s 3 memcached_replace_by_key.pop >  memcached_replace_by_key.3

/usr/local/bin/pod2man -c "memcached_server_add" -r "" -s 3 memcached_server_add.pop >  memcached_server_add.3

/usr/local/bin/pod2man -c "memcached_server_count" -r "" -s 3 memcached_server_count.pop >  memcached_server_count.3

/usr/local/bin/pod2man -c "memcached_server_cursor" -r "" -s 3 memcached_server_cursor.pop >  memcached_server_cursor.3

/usr/local/bin/pod2man -c "memcached_server_list" -r "" -s 3 memcached_server_list.pop >  memcached_server_list.3

/usr/local/bin/pod2man -c "memcached_server_list_append" -r "" -s 3 memcached_server_list_append.pop >  memcached_server_list_append.3

/usr/local/bin/pod2man -c "memcached_server_list_count" -r "" -s 3 memcached_server_list_count.pop >  memcached_server_list_count.3

/usr/local/bin/pod2man -c "memcached_server_list_free" -r "" -s 3 memcached_server_list_free.pop >  memcached_server_list_free.3

/usr/local/bin/pod2man -c "memcached_server_push" -r "" -s 3 memcached_server_push.pop >  memcached_server_push.3

/usr/local/bin/pod2man -c "memcached_servers_parse" -r "" -s 3 memcached_servers_parse.pop >  memcached_servers_parse.3

/usr/local/bin/pod2man -c "memcached_set" -r "" -s 3 memcached_set.pop >  memcached_set.3

/usr/local/bin/pod2man -c "memcached_set_by_key" -r "" -s 3 memcached_set_by_key.pop >  memcached_set_by_key.3

/usr/local/bin/pod2man -c "memcached_set_memory_allocators" -r "" -s 3 memcached_set_memory_allocators.pop >  memcached_set_memory_allocators.3

/usr/local/bin/pod2man -c "memcached_set_user_data" -r "" -s 3 memcached_set_user_data.pop >  memcached_set_user_data.3

/usr/local/bin/pod2man -c "memcached_stat" -r "" -s 3 memcached_stat.pop >  memcached_stat.3

/usr/local/bin/pod2man -c "memcached_stat_get_keys" -r "" -s 3 memcached_stat_get_keys.pop >  memcached_stat_get_keys.3

/usr/local/bin/pod2man -c "memcached_stat_get_value" -r "" -s 3 memcached_stat_get_value.pop >  memcached_stat_get_value.3

/usr/local/bin/pod2man -c "memcached_stat_servername" -r "" -s 3 memcached_stat_servername.pop >  memcached_stat_servername.3

/usr/local/bin/pod2man -c "memcached_strerror" -r "" -s 3 memcached_strerror.pop >  memcached_strerror.3

/usr/local/bin/pod2man -c "memcached_verbosity" -r "" -s 3 memcached_verbosity.pop >  memcached_verbosity.3

/usr/local/bin/pod2man -c "memcached_version" -r "" -s 3 memcached_version.pop >  memcached_version.3

/usr/local/bin/pod2man -c "memcapable" -r "" -s 1 memcapable.pop >  memcapable.1

/usr/local/bin/pod2man -c "memcat" -r "" -s 1 memcat.pop >  memcat.1

/usr/local/bin/pod2man -c "memcp" -r "" -s 1 memcp.pop >  memcp.1

/usr/local/bin/pod2man -c "memdump" -r "" -s 1 memdump.pop >  memdump.1

/usr/local/bin/pod2man -c "memerror" -r "" -s 1 memerror.pop >  memerror.1

/usr/local/bin/pod2man -c "memflush" -r "" -s 1 memflush.pop >  memflush.1

/usr/local/bin/pod2man -c "memrm" -r "" -s 1 memrm.pop >  memrm.1

/usr/local/bin/pod2man -c "memslap" -r "" -s 1 memslap.pop >  memslap.1

/usr/local/bin/pod2man -c "memstat" -r "" -s 1 memstat.pop >  memstat.1

/usr/local/bin/pod2man -c "libmemcachedutil" -r "" -s 3 libmemcachedutil.pop >  libmemcachedutil.3

/usr/local/bin/pod2man -c "memcached_pool_behavior_set" -r "" -s 3 memcached_pool_behavior_set.pop >  memcached_pool_behavior_set.3

/usr/local/bin/pod2man -c "memcached_pool_behavior_get" -r "" -s 3 memcached_pool_behavior_get.pop >  memcached_pool_behavior_get.3

/usr/local/bin/pod2man -c "memcached_pool_create" -r "" -s 3 memcached_pool_create.pop >  memcached_pool_create.3

/usr/local/bin/pod2man -c "memcached_pool_destroy" -r "" -s 3 memcached_pool_destroy.pop >  memcached_pool_destroy.3

/usr/local/bin/pod2man -c "memcached_pool_push" -r "" -s 3 memcached_pool_push.pop >  memcached_pool_push.3

/usr/local/bin/pod2man -c "memcached_pool_pop" -r "" -s 3 memcached_pool_pop.pop >  memcached_pool_pop.3

gmake[3]: Leaving directory `/usr/ports/databases/libmemcached/work/libmemcached-0.37/docs'

gmake[2]: Leaving directory `/usr/ports/databases/libmemcached/work/libmemcached-0.37/docs'

gmake[2]: Entering directory `/usr/ports/databases/libmemcached/work/libmemcached-0.37'

  CC     libmemcached/protocol/ascii_handler.lo

  CC     libmemcached/protocol/binary_handler.lo

  CC     libmemcached/protocol/cache.lo

  CC     libmemcached/protocol/pedantic.lo

  CC     libmemcached/protocol/protocol_handler.lo

  CC     libmemcached/byteorder.lo

  CCLD   libmemcached/libbyteorder.la

  CCLD   libmemcached/libmemcachedprotocol.la

  CC     libmemcached/libmemcached_libmemcached_la-allocators.lo

  CC     libmemcached/libmemcached_libmemcached_la-analyze.lo

  CC     libmemcached/libmemcached_libmemcached_la-auto.lo

  CC     libmemcached/libmemcached_libmemcached_la-behavior.lo

  CC     libmemcached/libmemcached_libmemcached_la-connect.lo

  CC     libmemcached/libmemcached_libmemcached_la-crc.lo

  CC     libmemcached/libmemcached_libmemcached_la-delete.lo

  CC     libmemcached/libmemcached_libmemcached_la-do.lo

  CC     libmemcached/libmemcached_libmemcached_la-dump.lo

  CC     libmemcached/libmemcached_libmemcached_la-fetch.lo

  CC     libmemcached/libmemcached_libmemcached_la-flush.lo

  CC     libmemcached/libmemcached_libmemcached_la-flush_buffers.lo

  CC     libmemcached/libmemcached_libmemcached_la-get.lo

  CC     libmemcached/libmemcached_libmemcached_la-hash.lo

  CC     libmemcached/libmemcached_libmemcached_la-hosts.lo

  CC     libmemcached/libmemcached_libmemcached_la-io.lo

  CC     libmemcached/libmemcached_libmemcached_la-jenkins_hash.lo

  CC     libmemcached/libmemcached_libmemcached_la-key.lo

  CC     libmemcached/libmemcached_libmemcached_la-md5.lo

  CC     libmemcached/libmemcached_libmemcached_la-memcached.lo

  CC     libmemcached/libmemcached_libmemcached_la-murmur_hash.lo

  CC     libmemcached/libmemcached_libmemcached_la-parse.lo

  CC     libmemcached/libmemcached_libmemcached_la-purge.lo

  CC     libmemcached/libmemcached_libmemcached_la-quit.lo

  CC     libmemcached/libmemcached_libmemcached_la-response.lo

  CC     libmemcached/libmemcached_libmemcached_la-result.lo

  CC     libmemcached/libmemcached_libmemcached_la-server.lo

  CC     libmemcached/libmemcached_libmemcached_la-stats.lo

  CC     libmemcached/libmemcached_libmemcached_la-storage.lo

  CC     libmemcached/libmemcached_libmemcached_la-strerror.lo

  CC     libmemcached/libmemcached_libmemcached_la-verbosity.lo

  CC     libmemcached/libmemcached_libmemcached_la-version.lo

  CC     libmemcached/libmemcached_libmemcachedcallbacks_la-callback.lo

  CCLD   libmemcached/libmemcachedcallbacks.la

  CC     libmemcached/string.lo

  CCLD   libmemcached/libmemcachedinternal.la

  CCLD   libmemcached/libmemcached.la

  CC     libmemcached/util/pool.lo

  CCLD   libmemcached/libmemcachedutil.la

  CC     libhashkit/libhashkit_libhashkit_la-crc32.lo

  CC     libhashkit/libhashkit_libhashkit_la-behavior.lo

  CC     libhashkit/libhashkit_libhashkit_la-default.lo

  CC     libhashkit/libhashkit_libhashkit_la-fnv.lo

  CC     libhashkit/libhashkit_libhashkit_la-hashkit.lo

  CC     libhashkit/libhashkit_libhashkit_la-jenkins.lo

  CC     libhashkit/libhashkit_libhashkit_la-ketama.lo

  CC     libhashkit/libhashkit_libhashkit_la-md5.lo

  CC     libhashkit/libhashkit_libhashkit_la-murmur.lo

  CC     libhashkit/libhashkit_libhashkit_la-strerror.lo

  CCLD   libhashkit/libhashkit.la

  CC     clients/utilities.lo

  CCLD   clients/libutilities.la

  CC     clients/generator.lo

  CC     clients/execute.lo

  CCLD   clients/libgenexec.la

  CC     tests/server.lo

  CCLD   tests/libserver.la

  CC     tests/test.lo

  CCLD   tests/libtest.la

  CC     clients/memcapable.o

  CCLD   clients/memcapable

  CC     clients/memcat.o

  CCLD   clients/memcat

  CC     clients/memcp.o

  CCLD   clients/memcp

  CC     clients/memdump.o

  CCLD   clients/memdump

  CC     clients/memerror.o

  CCLD   clients/memerror

  CC     clients/memflush.o

  CCLD   clients/memflush

  CC     clients/memrm.o

  CCLD   clients/memrm

  CC     clients/memstat.o

  CCLD   clients/memstat

  CC     clients/memslap.o

  CC     clients/ms_conn.o

  CC     clients/ms_setting.o

  CC     clients/ms_sigsegv.o

  CC     clients/ms_stats.o

  CC     clients/ms_task.o

  CC     clients/ms_thread.o

  CCLD   clients/memslap

clients/ms_conn.o(.text+0x9c3): In function `ms_build_udp_headers':

clients/ms_conn.c:184: undefined reference to `__sync_fetch_and_add_4'

clients/ms_conn.o(.text+0x1bb7): In function `ms_reconn_socks':

clients/ms_conn.c:1055: undefined reference to `__sync_fetch_and_add_4'

clients/ms_conn.o(.text+0x2250): In function `ms_drive_machine':

clients/ms_conn.c:924: undefined reference to `__sync_fetch_and_add_4'

clients/ms_conn.o(.text+0x3375):clients/ms_conn.c:960: undefined reference to `__sync_fetch_and_add_4'

clients/ms_thread.o(.text+0x496): In function `ms_worker_libevent':

clients/ms_thread.c:215: undefined reference to `__sync_fetch_and_add_4'

clients/ms_thread.o(.text+0x4fa):clients/ms_thread.c:198: more undefined references to `__sync_fetch_and_add_4' follow

gmake[2]: *** [clients/memslap] Error 1

gmake[2]: Leaving directory `/usr/ports/databases/libmemcached/work/libmemcached-0.37'

gmake[1]: *** [all-recursive] Error 1

gmake[1]: Leaving directory `/usr/ports/databases/libmemcached/work/libmemcached-0.37'

gmake: *** [all] Error 2

*** Error code 1



Stop in /usr/ports/databases/libmemcached.

>How-To-Repeat:
cd /usr/ports/databases/libmemcached && make
>Fix:
The patch attached contains a rather gross hack that pulls in machine/atomic.h and maps the macros in ms_atomic.h onto the macros and functions listed there. Unfortunately, due to machine/atomic.h not listing support for atomic updates of 64-bit integers, this patch will not work on 64-bit machines. It does, however, fix the problem on 32-bit machines.

I will be doing some further work on improving the patch and will be submitting it upstream.

Patch attached with submission follows:

--- clients/ms_atomic.h	2009-12-19 00:22:53.000000000 +0000
+++ clients/ms_atomic.h.patched	2010-01-14 00:52:15.000000000 +0000
@@ -12,39 +12,19 @@
 #ifndef CLIENTS_MS_ATOMIC_H
 #define CLIENTS_MS_ATOMIC_H
 
-#if defined(__SUNPRO_C)
-# define _KERNEL
-# include <atomic.h>
-# if SIZEOF_SIZE_T == 8
-#  define  atomic_add_size(X, Y) atomic_add_64((X), (Y))
-#  define  atomic_add_size_nv(X, Y) atomic_add_64((X), (Y))
-#  define  atomic_dec_size(X, Y) atomic_add_64((X), (Y))
-#  define  atomic_dec_size_nv(X, Y) atomic_add_64((X), (Y))
-# else
-#  define  atomic_add_size(X, Y) atomic_add_32((X), (Y))
-#  define  atomic_add_size_nv(X, Y) atomic_add_32((X), (Y))
-#  define  atomic_dec_size(X, Y) atomic_add_32((X), (Y))
-#  define  atomic_dec_size_nv(X, Y) atomic_add_32((X), (Y))
-# endif
-# undef _KERNEL
-#else
-# define atomic_add_8(X, Y)  __sync_fetch_and_add((X), (Y))
-# define atomic_add_16(X, Y) __sync_fetch_and_add((X), (Y))
-# define atomic_add_32(X, Y) __sync_fetch_and_add((X), (Y))
-# define atomic_add_size(X, Y) __sync_fetch_and_add((X), (Y))
-# define atomic_dec_8(X)  __sync_fetch_and_sub((X), 1)
-# define atomic_dec_16(X) __sync_fetch_and_sub((X), 1)
-# define atomic_dec_32(X) __sync_fetch_and_sub((X), 1)
-# define atomic_dec_size(X) __sync_fetch_and_sub((X), 1)
-/* The same as above, but these return the new value instead of void */
-# define atomic_add_8_nv(X, Y)  __sync_fetch_and_add((X), (Y))
-# define atomic_add_16_nv(X, Y) __sync_fetch_and_add((X), (Y))
-# define atomic_add_32_nv(X, Y) __sync_fetch_and_add((X), (Y))
-# define atomic_add_size_nv(X, Y) __sync_fetch_and_add((X), (Y))
-# define atomic_dec_8_nv(X)  __sync_fetch_and_sub((X), 1)
-# define atomic_dec_16_nv(X) __sync_fetch_and_sub((X), 1)
-# define atomic_dec_32_nv(X) __sync_fetch_and_sub((X), 1)
-# define atomic_dec_size_nv(X) __sync_fetch_and_sub((X), 1)
-#endif /* defined(__SUNPRO_C) */
+#define _KERNEL
+#include <sys/cdefs.h>
+#include <machine/atomic.h>
+
+/* atomic_add_{8,16,32} already defined in machine/atomic.h */
+#define atomic_dec_8(X) atomic_subtract_8((X), 1)
+#define atomic_dec_16(X) atomic_subtract_16((X), 1)
+#define atomic_dec_32(X) atomic_subtract_32((X), 1)
+#define atomic_add_size(X, Y) atomic_add_32((X), (Y))
+#define atomic_dec_size(X, Y) atomic_subtract_32((X), (Y))
+#define atomic_add_size_nv(X, Y) atomic_fetchadd_32((X), (Y))
+#define atomic_add_32_nv(X, Y) atomic_fetchadd_32((X), (Y))
+
+#undef _KERNEL
 
 #endif /* CLIENTS_MS_ATOMIC_H */


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001141207.o0EC7Vaw058938>