views:

53

answers:

1

I have installed libssl-dev and openssl but I get this when I install node.js:

> ./configure && make && make install                                                                                          
Checking for program g++ or c++          : /usr/bin/g++                                                                                                               
Checking for program cpp                 : /usr/bin/cpp                                                                                                               
Checking for program ar                  : /usr/bin/ar                                                                                                                
Checking for program ranlib              : /usr/bin/ranlib                                                                                                            
Checking for g++                         : ok                                                                                                                         
Checking for program gcc or cc           : /usr/bin/gcc                                                                                                               
Checking for gcc                         : ok                                                                                                                         
Checking for library dl                  : yes                                                                                                                        
Checking for openssl                     : not found                                                                                                                  
Checking for function SSL_library_init   : yes                                                                                                                        
Checking for header openssl/crypto.h     : yes                                                                                                                        
Checking for library rt                  : yes                                                                                                                        
Checking for fdatasync(2) with c++       : yes 

Openssl is not found. But node was installed successfully.

Why isn't openssl found? Anyone has the same problem?

+1  A: 

This isn't exactly a programming question. Still...

Quick answer

The installer checks for OpenSSL support in two ways. The first check failed for you, the second succeeded. For me, the first check succeeded (see below). Either way works.

Longer answer

Here's what I got when I built it:

$ sudo apt-get install libssl-dev
$ ./configure
Checking for program g++ or c++          : /usr/bin/g++ 
Checking for program cpp                 : /usr/bin/cpp 
Checking for program ar                  : /usr/bin/ar 
Checking for program ranlib              : /usr/bin/ranlib 
Checking for g++                         : ok  
Checking for program gcc or cc           : /usr/bin/gcc 
Checking for gcc                         : ok  
Checking for library dl                  : yes 
Checking for openssl                     : yes 
Checking for library rt                  : yes 
<---snip--->

Presuming you downloaded node.js v0.2.3 from http://nodejs.org/, the configuration is mostly done by waf in the file wscript.

The relevant lines are:

  if not Options.options.without_ssl:
    if conf.check_cfg(package='openssl',
                      args='--cflags --libs',
                      uselib_store='OPENSSL'):
      Options.options.use_openssl = conf.env["USE_OPENSSL"] = True
      conf.env.append_value("CPPFLAGS", "-DHAVE_OPENSSL=1")
    else:
      libssl = conf.check_cc(lib='ssl',
                             header_name='openssl/ssl.h',
                             function_name='SSL_library_init',
                             libpath=['/usr/lib', '/usr/local/lib', '/opt/local/lib', '/usr/sfw/lib'],
                             uselib_store='OPENSSL')
      libcrypto = conf.check_cc(lib='crypto',
                                header_name='openssl/crypto.h',
                                uselib_store='OPENSSL')

The first part is simple enough. It runs pkgconfig. Here is what happens when I do the equivalent by hand:

 $ pkg-config openssl --cflags --libs
 -lssl -lcrypto  

The second set of checks is run if pkg-config fails to confirm the package is installed. In that case, it tries to compile a trivial gcc program which checks for the existence of functions in libcrypt and libssl. If those both succeed, installation continues. If one of them fails, there's a fatal error, and the script bombs out.

Conspicuous Compiler
Okay, but the problem is why doesn't node find my openssl. I have it installed by "aptitude install libssl-dev openssl".
weng
@weng That aspect of your question is not programming related, and if that's what you're concerned about rather than understanding the programming behind it, you should ask on ServerFault. As I indicated in my answer, the problem is pkg-config doesn't thing openssl is there. If you run 'pkg-config openssl || echo "No OpenSSL"' you should see this. See 'man pkg-config' on how to construct a .pc file to tell pkg-config a package is installed.
Conspicuous Compiler