libgit2 / rugged

ruby bindings to libgit2
MIT License
2.24k stars 277 forks source link

Gem fails on smartos #403

Closed fire closed 9 years ago

fire commented 10 years ago

I can't install the gem on smartos.

# uname -a
SunOS SERIAL 5.11 joyent_20131120T074720Z i86pc i386 i86pc Solaris

# gcc -v
Using built-in specs.
COLLECT_GCC=/opt/local/gcc47/bin/gcc
COLLECT_LTO_WRAPPER=/opt/local/gcc47/libexec/gcc/x86_64-sun-solaris2.11/4.7.3/lto-wrapper
Target: x86_64-sun-solaris2.11
Configured with: ../gcc-4.7.3/configure --enable-languages='c obj-c++ objc go fortran c++' --enable-shared --enable-long-long --with-local-prefix=/opt/local --enable-libssp --enable-threads=posix --with-boot-ldflags='-static-libstdc++ -static-libgcc -Wl,-R/opt/local/lib ' --disable-nls --enable-__cxa_atexit --with-gxx-include-dir=/opt/local/gcc47/include/c++/ --without-gnu-ld --with-ld=/usr/bin/ld --with-gnu-as --with-as=/opt/local/bin/gas --prefix=/opt/local/gcc47 --build=x86_64-sun-solaris2.11 --host=x86_64-sun-solaris2.11 --infodir=/opt/local/gcc47/info --mandir=/opt/local/gcc47/man
Thread model: posix
gcc version 4.7.3 (GCC)

# cat mkmf.log
find_executable: checking for cmake... -------------------- yes

--------------------

find_executable: checking for gmake... -------------------- yes

--------------------

find_executable: checking for pkg-config... -------------------- yes

--------------------

"cmake .. -DBUILD_CLAR=OFF -DTHREADSAFE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-fPIC -DCMAKE_BUILD_TYPE=RelWithDebInfo"
-- Could NOT find HTTP_Parser (missing:  HTTP_PARSER_INCLUDE_DIR HTTP_PARSER_LIBRARY)
-- http-parser was not found or is too old; using bundled 3rd-party sources.
-- Configuring done
-- Generating done
-- Build files have been written to: /opt/local/lib/ruby/gems/2.1.1/gems/rugged-0.21.0/vendor/libgit2/build
/opt/local/bin/gmake
[  1%] Building C object CMakeFiles/git2.dir/src/config_file.c.o
In file included from /opt/local/lib/ruby/gems/2.1.1/gems/rugged-0.21.0/vendor/libgit2/include/git2/remote.h:16:0,
                 from /opt/local/lib/ruby/gems/2.1.1/gems/rugged-0.21.0/vendor/libgit2/include/git2/clone.h:14,
                 from /opt/local/lib/ruby/gems/2.1.1/gems/rugged-0.21.0/vendor/libgit2/include/git2.h:18,
                 from /opt/local/lib/ruby/gems/2.1.1/gems/rugged-0.21.0/vendor/libgit2/src/config.h:10,
                 from /opt/local/lib/ruby/gems/2.1.1/gems/rugged-0.21.0/vendor/libgit2/src/config_file.c:9:
/opt/local/lib/ruby/gems/2.1.1/gems/rugged-0.21.0/vendor/libgit2/include/git2/transport.h:65:46: error: expected declaration specifiers or '...' before '(' token
/opt/local/lib/ruby/gems/2.1.1/gems/rugged-0.21.0/vendor/libgit2/include/git2/transport.h:101:2: error: unknown type name 'git_cred_sign_callback'
/opt/local/lib/ruby/gems/2.1.1/gems/rugged-0.21.0/vendor/libgit2/include/git2/transport.h:198:2: error: unknown type name 'git_cred_sign_callback'
CMakeFiles/git2.dir/build.make:126: recipe for target 'CMakeFiles/git2.dir/src/config_file.c.o' failed
gmake[2]: *** [CMakeFiles/git2.dir/src/config_file.c.o] Error 1
CMakeFiles/Makefile2:63: recipe for target 'CMakeFiles/git2.dir/all' failed
gmake[1]: *** [CMakeFiles/git2.dir/all] Error 2
Makefile:116: recipe for target 'all' failed
gmake: *** [all] Error 2
arthurschreiber commented 10 years ago

I'm not sure whether libgit2 does support SmartOS or not. @carlosmn or @arrbee will know better.

carlosmn commented 10 years ago

SmartOS is basically Solaris which usually works (we don't test regularly but it's mosly just another unix system).

From the error messages, looks to be an issue with GCC rather than anything related to the OS itself. It looks like it doesn't understand the function pointer, which is weird since it seems to understand the other one just below it.

I'm stumped as to why it would have an issue with that line. I've just compiled the library with 4.7.4 and it works on a Debian box.

scunz commented 10 years ago

Is it possible that this specific version of libssh2 doesn't define LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC (or not as it is expected)? Otherwise I couldn't see why gcc should bail on a line 65 in that file (the 0.21.1 release doesn't seem to use this macros anymore)...

fire commented 10 years ago

When I manually build libgit I get complaints about not finding ssh.

[admin@UUID ~/libgit2]$ mkdir build && cd build
[admin@UUID libgit2/build]$
[admin@UUID ~/libgit2/build]$ cmake ..
-- The C compiler identification is GNU 4.7.3
-- Check for working C compiler: /opt/local/bin/cc
-- Check for working C compiler: /opt/local/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Found OpenSSL: /opt/local/lib/libssl.so;/opt/local/lib/libcrypto.so (found version "1.0.1h")
-- Could NOT find HTTP_Parser (missing:  HTTP_PARSER_INCLUDE_DIR HTTP_PARSER_LIBRARY)
-- http-parser was not found or is too old; using bundled 3rd-party sources.
-- Found ZLIB: /opt/local/lib/libz.so (found version "1.2.8")
-- Performing Test IS_FVISIBILITY=HIDDEN_SUPPORTED
-- Performing Test IS_FVISIBILITY=HIDDEN_SUPPORTED - Success
-- Performing Test IS_WNO-MISSING-FIELD-INITIALIZERS_SUPPORTED
-- Performing Test IS_WNO-MISSING-FIELD-INITIALIZERS_SUPPORTED - Success
-- Performing Test IS_WSTRICT-ALIASING=2_SUPPORTED
-- Performing Test IS_WSTRICT-ALIASING=2_SUPPORTED - Success
-- Performing Test IS_WSTRICT-PROTOTYPES_SUPPORTED
-- Performing Test IS_WSTRICT-PROTOTYPES_SUPPORTED - Success
-- Performing Test IS_WDECLARATION-AFTER-STATEMENT_SUPPORTED
-- Performing Test IS_WDECLARATION-AFTER-STATEMENT_SUPPORTED - Success
-- Performing Test IS_WNO-UNUSED-CONST-VARIABLE_SUPPORTED
-- Performing Test IS_WNO-UNUSED-CONST-VARIABLE_SUPPORTED - Failed
-- Performing Test IS_WNO-UNUSED-FUNCTION_SUPPORTED
-- Performing Test IS_WNO-UNUSED-FUNCTION_SUPPORTED - Success
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - found
-- Found PythonInterp: /opt/local/bin/python (found version "2.7.6")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/admin/libgit2/build
[admin@UUID ~/libgit2/build]$ cmake --build .
Scanning dependencies of target git2
[  0%] Building C object CMakeFiles/git2.dir/src/zstream.c.o
[  0%] Building C object CMakeFiles/git2.dir/src/reset.c.o
[  0%] Building C object CMakeFiles/git2.dir/src/mwindow.c.o
[  0%] Building C object CMakeFiles/git2.dir/src/hashsig.c.o
[  0%] Building C object CMakeFiles/git2.dir/src/remote.c.o
[  1%] Building C object CMakeFiles/git2.dir/src/revwalk.c.o
[  1%] Building C object CMakeFiles/git2.dir/src/fetch.c.o
[  1%] Building C object CMakeFiles/git2.dir/src/commit_list.c.o
[  1%] Building C object CMakeFiles/git2.dir/src/diff.c.o
[  1%] Building C object CMakeFiles/git2.dir/src/status.c.o
[  2%] Building C object CMakeFiles/git2.dir/src/branch.c.o
[  2%] Building C object CMakeFiles/git2.dir/src/diff_driver.c.o
[  2%] Building C object CMakeFiles/git2.dir/src/ident.c.o
[  2%] Building C object CMakeFiles/git2.dir/src/message.c.o
[  2%] Building C object CMakeFiles/git2.dir/src/odb.c.o
[  3%] Building C object CMakeFiles/git2.dir/src/tree.c.o
[  3%] Building C object CMakeFiles/git2.dir/src/strmap.c.o
[  3%] Building C object CMakeFiles/git2.dir/src/oid.c.o
[  3%] Building C object CMakeFiles/git2.dir/src/diff_file.c.o
[  3%] Building C object CMakeFiles/git2.dir/src/commit.c.o
[  4%] Building C object CMakeFiles/git2.dir/src/refs.c.o
[  4%] Building C object CMakeFiles/git2.dir/src/checkout.c.o
[  4%] Building C object CMakeFiles/git2.dir/src/tsort.c.o
[  4%] Building C object CMakeFiles/git2.dir/src/sortedcache.c.o
[  4%] Building C object CMakeFiles/git2.dir/src/stash.c.o
[  5%] Building C object CMakeFiles/git2.dir/src/indexer.c.o
[  5%] Building C object CMakeFiles/git2.dir/src/config_cache.c.o
[  5%] Building C object CMakeFiles/git2.dir/src/vector.c.o
[  5%] Building C object CMakeFiles/git2.dir/src/refdb.c.o
[  5%] Building C object CMakeFiles/git2.dir/src/odb_loose.c.o
[  5%] Building C object CMakeFiles/git2.dir/src/netops.c.o
[  6%] Building C object CMakeFiles/git2.dir/src/settings.c.o
[  6%] Building C object CMakeFiles/git2.dir/src/cherrypick.c.o
[  6%] Building C object CMakeFiles/git2.dir/src/cache.c.o
[  6%] Building C object CMakeFiles/git2.dir/src/fileops.c.o
[  6%] Building C object CMakeFiles/git2.dir/src/crlf.c.o
[  7%] Building C object CMakeFiles/git2.dir/src/delta-apply.c.o
[  7%] Building C object CMakeFiles/git2.dir/src/fnmatch.c.o
[  7%] Building C object CMakeFiles/git2.dir/src/buf_text.c.o
[  7%] Building C object CMakeFiles/git2.dir/src/transport.c.o
[  7%] Building C object CMakeFiles/git2.dir/src/merge.c.o
[  8%] Building C object CMakeFiles/git2.dir/src/ignore.c.o
[  8%] Building C object CMakeFiles/git2.dir/src/signature.c.o
[  8%] Building C object CMakeFiles/git2.dir/src/repository.c.o
[  8%] Building C object CMakeFiles/git2.dir/src/attr.c.o
[  8%] Building C object CMakeFiles/git2.dir/src/diff_tform.c.o
[  9%] Building C object CMakeFiles/git2.dir/src/date.c.o
[  9%] Building C object CMakeFiles/git2.dir/src/diff_stats.c.o
[  9%] Building C object CMakeFiles/git2.dir/src/config_file.c.o
/home/admin/libgit2/src/config_file.c: In function 'refcounted_strmap_take':
/home/admin/libgit2/src/config_file.c:234:2: warning: statement with no effect [-Wunused-value]
/home/admin/libgit2/src/config_file.c: In function 'config__refresh':
/home/admin/libgit2/src/config_file.c:320:2: warning: statement with no effect [-Wunused-value]
/home/admin/libgit2/src/config_file.c: In function 'git_config_file__ondisk':
/home/admin/libgit2/src/config_file.c:689:2: warning: statement with no effect [-Wunused-value]
/home/admin/libgit2/src/config_file.c: In function 'git_config_file__snapshot':
/home/admin/libgit2/src/config_file.c:789:2: warning: statement with no effect [-Wunused-value]
[  9%] Building C object CMakeFiles/git2.dir/src/blob.c.o
[  9%] Building C object CMakeFiles/git2.dir/src/blame_git.c.o
[ 10%] Building C object CMakeFiles/git2.dir/src/revert.c.o
[ 10%] Building C object CMakeFiles/git2.dir/src/tag.c.o
[ 10%] Building C object CMakeFiles/git2.dir/src/reflog.c.o
[ 10%] Building C object CMakeFiles/git2.dir/src/push.c.o
[ 10%] Building C object CMakeFiles/git2.dir/src/sha1_lookup.c.o
[ 11%] Building C object CMakeFiles/git2.dir/src/trace.c.o
[ 11%] Building C object CMakeFiles/git2.dir/src/path.c.o
[ 11%] Building C object CMakeFiles/git2.dir/src/odb_pack.c.o
[ 11%] Building C object CMakeFiles/git2.dir/src/buffer.c.o
[ 11%] Building C object CMakeFiles/git2.dir/src/thread-utils.c.o
[ 11%] Building C object CMakeFiles/git2.dir/src/graph.c.o
[ 12%] Building C object CMakeFiles/git2.dir/src/odb_mempack.c.o
[ 12%] Building C object CMakeFiles/git2.dir/src/errors.c.o
[ 12%] Building C object CMakeFiles/git2.dir/src/object_api.c.o
[ 12%] Building C object CMakeFiles/git2.dir/src/posix.c.o
[ 12%] Building C object CMakeFiles/git2.dir/src/pqueue.c.o
[ 13%] Building C object CMakeFiles/git2.dir/src/fetchhead.c.o
[ 13%] Building C object CMakeFiles/git2.dir/src/refdb_fs.c.o
[ 13%] Building C object CMakeFiles/git2.dir/src/pack-objects.c.o
[ 13%] Building C object CMakeFiles/git2.dir/src/config.c.o
[ 13%] Building C object CMakeFiles/git2.dir/src/diff_print.c.o
[ 14%] Building C object CMakeFiles/git2.dir/src/filter.c.o
[ 14%] Building C object CMakeFiles/git2.dir/src/hash.c.o
[ 14%] Building C object CMakeFiles/git2.dir/src/submodule.c.o
[ 14%] Building C object CMakeFiles/git2.dir/src/index.c.o
[ 14%] Building C object CMakeFiles/git2.dir/src/attr_file.c.o
[ 15%] Building C object CMakeFiles/git2.dir/src/util.c.o
[ 15%] Building C object CMakeFiles/git2.dir/src/clone.c.o
[ 15%] Building C object CMakeFiles/git2.dir/src/tree-cache.c.o
[ 15%] Building C object CMakeFiles/git2.dir/src/diff_patch.c.o
[ 15%] Building C object CMakeFiles/git2.dir/src/pack.c.o
[ 16%] Building C object CMakeFiles/git2.dir/src/notes.c.o
[ 16%] Building C object CMakeFiles/git2.dir/src/blame.c.o
[ 16%] Building C object CMakeFiles/git2.dir/src/pathspec.c.o
[ 16%] Building C object CMakeFiles/git2.dir/src/global.c.o
[ 16%] Building C object CMakeFiles/git2.dir/src/attrcache.c.o
[ 16%] Building C object CMakeFiles/git2.dir/src/delta.c.o
[ 17%] Building C object CMakeFiles/git2.dir/src/sysdir.c.o
[ 17%] Building C object CMakeFiles/git2.dir/src/pool.c.o
[ 17%] Building C object CMakeFiles/git2.dir/src/merge_file.c.o
[ 17%] Building C object CMakeFiles/git2.dir/src/iterator.c.o
[ 17%] Building C object CMakeFiles/git2.dir/src/object.c.o
[ 18%] Building C object CMakeFiles/git2.dir/src/filebuf.c.o
[ 18%] Building C object CMakeFiles/git2.dir/src/refspec.c.o
[ 18%] Building C object CMakeFiles/git2.dir/src/revparse.c.o
[ 18%] Building C object CMakeFiles/git2.dir/src/diff_xdiff.c.o
[ 18%] Building C object CMakeFiles/git2.dir/src/transports/cred_helpers.c.o
[ 19%] Building C object CMakeFiles/git2.dir/src/transports/auth_negotiate.c.o
[ 19%] Building C object CMakeFiles/git2.dir/src/transports/http.c.o
[ 19%] Building C object CMakeFiles/git2.dir/src/transports/smart_pkt.c.o
[ 19%] Building C object CMakeFiles/git2.dir/src/transports/smart_protocol.c.o
[ 19%] Building C object CMakeFiles/git2.dir/src/transports/ssh.c.o
/home/admin/libgit2/src/transports/ssh.c: In function 'ssh_agent_auth':
/home/admin/libgit2/src/transports/ssh.c:259:2: error: unknown type name 'LIBSSH2_AGENT'
/home/admin/libgit2/src/transports/ssh.c:259:2: warning: implicit declaration of function 'libssh2_agent_init' [-Wimplicit-function-declaration]
/home/admin/libgit2/src/transports/ssh.c:259:25: warning: initialization makes pointer from integer without a cast [enabled by default]
/home/admin/libgit2/src/transports/ssh.c:264:2: warning: implicit declaration of function 'libssh2_agent_connect' [-Wimplicit-function-declaration]
/home/admin/libgit2/src/transports/ssh.c:269:2: warning: implicit declaration of function 'libssh2_agent_list_identities' [-Wimplicit-function-declaration]
/home/admin/libgit2/src/transports/ssh.c:275:3: warning: implicit declaration of function 'libssh2_agent_get_identity' [-Wimplicit-function-declaration]
/home/admin/libgit2/src/transports/ssh.c:283:3: warning: implicit declaration of function 'libssh2_agent_userauth' [-Wimplicit-function-declaration]
/home/admin/libgit2/src/transports/ssh.c:292:2: warning: implicit declaration of function 'libssh2_agent_disconnect' [-Wimplicit-function-declaration]
/home/admin/libgit2/src/transports/ssh.c:293:2: warning: implicit declaration of function 'libssh2_agent_free' [-Wimplicit-function-declaration]
/home/admin/libgit2/src/transports/ssh.c: In function '_git_ssh_authenticate_session':
/home/admin/libgit2/src/transports/ssh.c:326:4: warning: implicit declaration of function 'libssh2_userauth_publickey' [-Wimplicit-function-declaration]
/home/admin/libgit2/src/transports/ssh.c:353:9: error: 'LIBSSH2_ERROR_AUTHENTICATION_FAILED' undeclared (first use in this function)
/home/admin/libgit2/src/transports/ssh.c:353:9: note: each undeclared identifier is reported only once for each function it appears in
CMakeFiles/git2.dir/build.make:2403: recipe for target 'CMakeFiles/git2.dir/src/transports/ssh.c.o' failed
gmake[2]: *** [CMakeFiles/git2.dir/src/transports/ssh.c.o] Error 1
CMakeFiles/Makefile2:63: recipe for target 'CMakeFiles/git2.dir/all' failed
gmake[1]: *** [CMakeFiles/git2.dir/all] Error 2
Makefile:126: recipe for target 'all' failed
gmake: *** [all] Error 2
fire commented 10 years ago

Maybe it isn't finding the ssh headers.

$ cd /opt/local/include/ $ ls libssh2ls libssh2* libssh2_publickey.h libssh2_sftp.h libssh2.h

I'm not sure why though.

carlosmn commented 10 years ago

What version of libssh2 do you have? If libgit2 is trying to build the ssh transport, then it means it detected that the headers exist, but for whatever reason the include isn't being set correctly. In either case we should have the same error messages when building libgit2 alone or through rugged, since they both use the same build system.

fire commented 10 years ago
# pkgin se libssh
php55-ssh2-0.12      PHP bindings to the functions of libssh2
php54-ssh2-0.12      PHP bindings to the functions of libssh2
php53-ssh2-0.12      PHP bindings to the functions of libssh2
libssh2-1.2.2nb3 =   SSH2 protocol library
libssh-0.54nb3 =     SSHv2+v1 protocol library; libssh.org version 0.5.4

=: package is installed and up-to-date
<: package is installed but newer version is available
>: installed package has a greater version than available package
twavq commented 9 years ago

Any luck with this issue? I'm stuck at the same place.

MerlinDMC commented 9 years ago

It seems like libssh2 is just too old. The LIBSSH2_AGENT was introduced after v1.2.2. https://github.com/karelia/libssh2/commit/7b351eed36197877160659b31fc8dcc8524f22f8 looks like it was introduced in v1.2.3.

MerlinDMC commented 9 years ago

After bumping the version of libssh2 to 1.4.3 libgit2 itself builds just fine. The rugged gem then also install without problems.

arthurschreiber commented 9 years ago

@MerlinDMC Thanks for looking into this!

MerlinDMC commented 9 years ago

As advertised in #smartos on IRC libssh2 1.4.3 will be part of the 2014Q3 branch of binary packages ... so starting from base/base64 14.3.0 rugged should build out of the box.

arthurschreiber commented 9 years ago

I'll update the README here in Rugged (and also in libgit2) to specify the minimum libssh2 version.

arthurschreiber commented 9 years ago

I'm closing this due to inactivity. Please feel free to open a new issue if this is still a problem.