Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failing to build bcrypt-ruby when installing from a Rails application #59

Closed
balinterdi opened this issue Apr 3, 2013 · 6 comments
Closed

Comments

@balinterdi
Copy link

When I try to install the gem from inside a Rails application (more precisely, a Rails engine) it fails with the following error message:

/Users/balint/.rbenv/versions/1.9.3-p392/bin/ruby extconf.rb 
creating Makefile

make
compiling bcrypt_ext.c
compiling crypt.c
compiling crypt_blowfish.c
compiling crypt_gensalt.c
compiling wrapper.c
In file included from wrapper.c:27:
/Users/balint/.rbenv/versions/1.9.3-p392/include/ruby-1.9.1/ruby/backward/util.h:2:2: warning: #warning use "ruby/util.h" instead of bare "util.h"
linking shared-object bcrypt_ext.bundle

make install
/usr/bin/install -c -m 0755 bcrypt_ext.bundle /Users/balint/code/rails/wlb
make: *** No rule to make target `-/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib/bcrypt_ext.bundle', needed by `install-so'.  Stop.

However, I succeeded in installing the gem explicitly with gem install bcrypt-ruby -v '3.0.1'.

The ruby version I used was 1.9.3-p392.

gcc -v outputs the following:

Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.11~28/src/configure -- disable-checking --enable-werror -- prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.11~28/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

AFAIK I don't have any bundle option or env. var that could cause the compilation process to be modified.

Could you tell me what the difference between the installation processes could be and how should the problem be dealt with?

Thank you.

@tmm1
Copy link
Collaborator

tmm1 commented Apr 3, 2013

Can you include the generated Makefile that's causing a make error?

@balinterdi
Copy link
Author

    SHELL = /bin/sh

    # V=0 quiet, V=1 verbose.  other values don't work.
    V = 0
    Q1 = $(V:1=)
    Q = $(Q1:0=@)
    n=$(NULLCMD)
    ECHO1 = $(V:1=@$n)
    ECHO = $(ECHO1:0=@echo)

    #### Start of system configuration section. ####

    srcdir = .
    topdir = /Users/balint/.rbenv/versions/1.9.3-p392/include/ruby-1.9.1
    hdrdir = /Users/balint/.rbenv/versions/1.9.3-p392/include/ruby-1.9.1
    arch_hdrdir = /Users/balint/.rbenv/versions/1.9.3-p392/include/ruby-1.9.1/$(arch)
    VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
    prefix = $(DESTDIR)/Users/balint/.rbenv/versions/1.9.3-p392
    rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
    exec_prefix = $(prefix)
    vendorhdrdir = $(rubyhdrdir)/vendor_ruby
    sitehdrdir = $(rubyhdrdir)/site_ruby
    rubyhdrdir = $(includedir)/$(RUBY_BASE_NAME)-$(ruby_version)
    vendordir = $(rubylibprefix)/vendor_ruby
    sitedir = $(rubylibprefix)/site_ruby
    ridir = $(datarootdir)/$(RI_BASE_NAME)
    mandir = $(datarootdir)/man
    localedir = $(datarootdir)/locale
    libdir = $(exec_prefix)/lib
    psdir = $(docdir)
    pdfdir = $(docdir)
    dvidir = $(docdir)
    htmldir = $(docdir)
    infodir = $(datarootdir)/info
    docdir = $(datarootdir)/doc/$(PACKAGE)
    oldincludedir = $(DESTDIR)/usr/include
    includedir = $(prefix)/include
    localstatedir = $(prefix)/var
    sharedstatedir = $(prefix)/com
    sysconfdir = $(prefix)/etc
    datadir = $(datarootdir)
    datarootdir = $(prefix)/share
    libexecdir = $(exec_prefix)/libexec
    sbindir = $(exec_prefix)/sbin
    bindir = $(exec_prefix)/bin
    rubylibdir = $(rubylibprefix)/$(ruby_version)
    archdir = $(rubylibdir)/$(arch)
    sitelibdir = $(sitedir)/$(ruby_version)
    sitearchdir = $(sitelibdir)/$(sitearch)
    vendorlibdir = $(vendordir)/$(ruby_version)
    vendorarchdir = $(vendorlibdir)/$(sitearch)

    NULLCMD = :

    CC = gcc
    CXX = g++
    LIBRUBY = $(LIBRUBY_A)
    LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
    LIBRUBYARG_SHARED = 
    LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
    empty =
    OUTFLAG = -o $(empty)
    COUTFLAG = -o $(empty)

    RUBY_EXTCONF_H = 
    cflags   =  $(optflags) $(debugflags) $(warnflags)
    optflags = -O3
    debugflags = -ggdb
    warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration
    CFLAGS   = -fno-common   -Wno-error=shorten-64-to-32 -pipe $(ARCH_FLAG)
    INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
    DEFS     = 
    CPPFLAGS =  -I'/Users/balint/.rbenv/versions/1.9.3-p392/include'  -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE $(DEFS) $(cppflags)
    CXXFLAGS = $(CFLAGS) $(cxxflags)
    ldflags  = -L. -L'/Users/balint/.rbenv/versions/1.9.3-p392/lib'  -L/usr/local/lib
    dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace
    ARCH_FLAG = 
    DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
    LDSHARED = $(CC) -dynamic -bundle
    LDSHAREDXX = $(CXX) -dynamic -bundle
    AR = ar
    EXEEXT = 

    RUBY_BASE_NAME = ruby
    RUBY_INSTALL_NAME = ruby
    RUBY_SO_NAME = ruby
    arch = x86_64-darwin12.3.0
    sitearch = $(arch)
    ruby_version = 1.9.1
    ruby = /Users/balint/.rbenv/versions/1.9.3-p392/bin/ruby
    RUBY = $(ruby)
    RM = rm -f
    RM_RF = $(RUBY) -run -e rm -- -rf
    RMDIRS = rmdir -p
    MAKEDIRS = mkdir -p
    INSTALL = /usr/bin/install -c
    INSTALL_PROG = $(INSTALL) -m 0755
    INSTALL_DATA = $(INSTALL) -m 644
    COPY = cp
    TOUCH = exit >

    #### End of system configuration section. ####

    preload = 

    libpath = . $(libdir)
    LIBPATH =  -L. -L$(libdir)
    DEFFILE = 

    CLEANFILES = mkmf.log
    DISTCLEANFILES = 
    DISTCLEANDIRS = 

    extout = 
    extout_prefix = 
    target_prefix = 
    LOCAL_LIBS = 
    LIBS =   -lpthread -ldl -lobjc 
    SRCS = bcrypt_ext.c crypt.c crypt_blowfish.c crypt_gensalt.c wrapper.c
    OBJS = bcrypt_ext.o crypt.o crypt_blowfish.o crypt_gensalt.o wrapper.o
    TARGET = bcrypt_ext
    DLLIB = $(TARGET).bundle
    EXTSTATIC = 
    STATIC_LIB = 

    BINDIR        = $(bindir)
    RUBYCOMMONDIR = $(sitedir)$(target_prefix)
    RUBYLIBDIR = /Users/balint/code/rails/wlb/!binary |-/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib$(target_prefix)
    RUBYARCHDIR = /Users/balint/code/rails/wlb/!binary |-/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib$(target_prefix)
    HDRDIR        = $(rubyhdrdir)/ruby$(target_prefix)
    ARCHHDRDIR    = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)

    TARGET_SO     = $(DLLIB)
    CLEANLIBS     = $(TARGET).bundle 
    CLEANOBJS     = *.o  *.bak

    all:    $(DLLIB)
    static: $(STATIC_LIB)
    .PHONY: all install static install-so install-rb
    .PHONY: clean clean-so clean-rb

    clean-static::
    clean-rb-default::
    clean-rb::
    clean-so::
    clean: clean-so clean-static clean-rb-default clean-rb
            -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time

    distclean-rb-default::
    distclean-rb::
    distclean-so::
    distclean: clean distclean-so distclean-rb-default distclean-rb
            @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
            @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
            @-$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true

    realclean: distclean
    install: install-so install-rb

    install-so: $(RUBYARCHDIR)/$(DLLIB)
    $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
        -$(Q)$(MAKEDIRS) $(@D)
        $(INSTALL_PROG) $(DLLIB) $(@D)
    clean-static::
        -$(Q)$(RM) $(STATIC_LIB)
    install-rb: pre-install-rb install-rb-default
    install-rb-default: pre-install-rb-default
    pre-install-rb: Makefile
    pre-install-rb-default: Makefile
    pre-install-rb-default:
        $(ECHO) installing default bcrypt_ext libraries
    ./.RUBYARCHDIR.time:
        $(Q) $(MAKEDIRS) $(RUBYARCHDIR)
        $(Q) $(TOUCH) $@

    site-install: site-install-so site-install-rb
    site-install-so: install-so
    site-install-rb: install-rb

    .SUFFIXES: .c .m .cc .mm .cxx .cpp .C .o

    .cc.o:
        $(ECHO) compiling $(<)
        $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

    .mm.o:
        $(ECHO) compiling $(<)
        $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

    .cxx.o:
        $(ECHO) compiling $(<)
        $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

    .cpp.o:
        $(ECHO) compiling $(<)
        $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

    .C.o:
        $(ECHO) compiling $(<)
        $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

    .c.o:
        $(ECHO) compiling $(<)
        $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<

    .m.o:
        $(ECHO) compiling $(<)
        $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<

    $(DLLIB): $(OBJS) Makefile
        $(ECHO) linking shared-object $(DLLIB)
        -$(Q)$(RM) $(@)
        $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)



    $(OBJS): $(hdrdir)/ruby.h $(hdrdir)/ruby/defines.h $(arch_hdrdir)/ruby/config.h

@balinterdi
Copy link
Author

Also created a gist with this Makefile

@tmm1
Copy link
Collaborator

tmm1 commented Apr 3, 2013

Strange:

    RUBYLIBDIR = /Users/balint/code/rails/wlb/!binary |-/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib$(target_prefix)

@tmm1
Copy link
Collaborator

tmm1 commented Apr 3, 2013

I don't see anything in the code that would be causing this. Does this weird !binary |- thing happen in other gems too?

@balinterdi
Copy link
Author

The weird !binary |- thing came from a .bundle/config file in the project's directory:

$ bundle config
path
Set for your local app (/Users/balint/code/rails/wlb/.bundle/config): "!binary |-"

I'm not sure how that file was generated and put there but deleting it and rerunning bundle install worked flawlessly.

Thanks a lot for helping me sort that out.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants