After upgrading to Ruby 1.9.3 (from 1.9.2 using system RVM) on Ubuntu 10.04.3, I removed all of my gems, and attempted to reinstall pg (ala bundle install pg
).
It then threw an error and informed me that I should look at mkmf.log, both of which are included in this gist: https://gist.github.com/d05a81701d968895c730
libpq-dev, libpq5, and postgresql-client are all installed and working correctly. Pointing gem at pg_config, and the include and bin directories directly does not appear to change anything.
I've seen several questions about similar error messages around stackoverflow, and the rest of the web, but they all appear to be simple missing dependency issues (most of them are solved by installing libpq-dev), so I'm at a bit of a loss.
Various other properties that might be useful / relevant:
Thanks in advance.
gem_make.out:
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /usr/local/rvm/rubies/ruby-1.9.3-p0/bin/ruby extconf.rb checking for pg_config... yes Using config values from /usr/bin/pg_config checking for libpq-fe.h... yes checking for libpq/libpq-fs.h... yes checking for PQconnectdb() in -lpq... no checking for PQconnectdb() in -llibpq... no checking for PQconnectdb() in -lms/libpq... no Can't find the PostgreSQL client library (libpq) *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.
ldd.stdout:
$ldd /usr/lib/libpq.so linux-gate.so.1 => (0xf57fe000) libssl.so.0.9.8 => /lib/i686/cmov/libssl.so.0.9.8 (0xb77f4000) libcrypto.so.0.9.8 => /lib/i686/cmov/libcrypto.so.0.9.8 (0xb76a2000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb75f1000) libcom_err.so.2 => /lib/libcom_err.so.2 (0xb75ec000) libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb75bd000) libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb758b000) libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2 (0xb7544000) libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb752b000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb73d0000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb73cc000) libz.so.1 => /lib/libz.so.1 (0xb73b7000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7393000) libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb738b000) libkeyutils.so.1 => /lib/libkeyutils.so.1 (0xb7386000) libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb7372000) /lib/ld-linux.so.2 (0xb786a000) liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0xb7365000) libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0xb734d000) libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0xb72b2000) libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0xb72a0000) libgcrypt.so.11 => /lib/libgcrypt.so.11 (0xb722d000) libgpg-error.so.0 => /lib/libgpg-error.so.0 (0xb7228000)
pgconfig.stdout:
$pg_config --ldflags --libs -Wl,-Bsymbolic-functions -Wl,--as-needed -Wl,--as-needed -lpgport -lxslt -lxml2 -lpam -lssl -lcrypto -lkrb5 -lcom_err -lgssapi_krb5 -lz -lreadline -lcrypt -ldl -lm
mkmf.log:
find_executable: checking for pg_config... -------------------- yes -------------------- find_header: checking for libpq-fe.h... -------------------- yes "gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L. -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -lpthread -lrt -ldl -lcrypt -lm -lc" checked program was: /* begin */ 1: #include "ruby.h" 2: 3: int main() {return 0;} /* end */ "gcc -E -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -o conftest.i" checked program was: /* begin */ 1: #include "ruby.h" 2: 3: #include <libpq-fe.h> /* end */ -------------------- find_header: checking for libpq/libpq-fs.h... -------------------- yes "gcc -E -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -o conftest.i" checked program was: /* begin */ 1: #include "ruby.h" 2: 3: #include <libpq/libpq-fs.h> /* end */ -------------------- have_library: checking for PQconnectdb() in -lpq... -------------------- no "gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L. -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -lpq -lpthread -lrt -ldl -lcrypt -lm -lc" /usr/lib/libpq.so: undefined reference to `X509_STORE_set_flags@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `CRYPTO_set_locking_callback@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ENGINE_init@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ENGINE_free@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ENGINE_load_private_key@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ENGINE_finish@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `X509_check_private_key@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `X509_free@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_CTX_new@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_pending@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `TLSv1_method@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `X509_STORE_load_locations@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_CTX_set_verify@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ERR_pop_to_mark@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_new@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_get_error@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ERR_get_error@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ENGINE_by_id@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_write@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_load_error_strings@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_CTX_load_verify_locations@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `BIO_ctrl@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `PEM_read_bio_PrivateKey@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `CRYPTO_set_id_callback@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_free@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `BIO_free@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_CTX_get_cert_store@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `X509_get_subject_name@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_shutdown@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_CTX_set_client_cert_cb@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `PEM_read_bio_X509@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ERR_set_mark@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `OPENSSL_config@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `X509_NAME_get_text_by_NID@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_read@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_CTX_ctrl@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ERR_reason_error_string@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_get_peer_certificate@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `X509_NAME_oneline@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_set_ex_data@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_set_fd@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_library_init@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `CRYPTO_num_locks@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_get_ex_data@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `SSL_connect@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `BIO_new_file@OPENSSL_0.9.8' collect2: ld returned 1 exit status checked program was: /* begin */ 1: #include "ruby.h" 2: 3: #include <libpq-fe.h> 4: 5: /*top*/ 6: int main() {return 0;} 7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; } /* end */ "gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L. -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -lpq -lpthread -lrt -ldl -lcrypt -lm -lc" conftest.c: In function 't': conftest.c:7: error: too few arguments to function 'PQconnectdb' checked program was: /* begin */ 1: #include "ruby.h" 2: 3: #include <libpq-fe.h> 4: 5: /*top*/ 6: int main() {return 0;} 7: int t() { PQconnectdb(); return 0; } /* end */ -------------------- have_library: checking for PQconnectdb() in -llibpq... -------------------- no "gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L. -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -llibpq -lpthread -lrt -ldl -lcrypt -lm -lc" /usr/bin/ld: cannot find -llibpq collect2: ld returned 1 exit status checked program was: /* begin */ 1: #include "ruby.h" 2: 3: #include <libpq-fe.h> 4: 5: /*top*/ 6: int main() {return 0;} 7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; } /* end */ "gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L. -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -llibpq -lpthread -lrt -ldl -lcrypt -lm -lc" conftest.c: In function 't': conftest.c:7: error: too few arguments to function 'PQconnectdb' checked program was: /* begin */ 1: #include "ruby.h" 2: 3: #include <libpq-fe.h> 4: 5: /*top*/ 6: int main() {return 0;} 7: int t() { PQconnectdb(); return 0; } /* end */ -------------------- have_library: checking for PQconnectdb() in -lms/libpq... -------------------- no "gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L. -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -lms/libpq -lpthread -lrt -ldl -lcrypt -lm -lc" /usr/bin/ld: cannot find -lms/libpq collect2: ld returned 1 exit status checked program was: /* begin */ 1: #include "ruby.h" 2: 3: #include <libpq-fe.h> 4: 5: /*top*/ 6: int main() {return 0;} 7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; } /* end */ "gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L. -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -lms/libpq -lpthread -lrt -ldl -lcrypt -lm -lc" conftest.c: In function 't': conftest.c:7: error: too few arguments to function 'PQconnectdb' checked program was: /* begin */ 1: #include "ruby.h" 2: 3: #include <libpq-fe.h> 4: 5: /*top*/ 6: int main() {return 0;} 7: int t() { PQconnectdb(); return 0; } /* end */ --------------------
I've got the same problem in my case was lib's inside .rvm/usr/lib which was taken to this compilation instead of lib's from system. I'm not sure why that happens and why it doesn't work (in my case on Ubuntu 10.04 x86_64) but to solve it just :
mv ~/.rvm/usr/lib ~/.rvm/usr/lib_rvm
for a while or forever ;)
If someone will investigate why that happen I will be appreciate. Regards.
Look at the mkmf.log
around line 39:
"gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include -D_FILE_OFFSET_BITS=64 -I/usr/include/postgresql -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -fPIC conftest.c -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L. -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -lpq -lpthread -lrt -ldl -lcrypt -lm -lc" /usr/lib/libpq.so: undefined reference to `X509_STORE_set_flags@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `CRYPTO_set_locking_callback@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ENGINE_init@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ENGINE_free@OPENSSL_0.9.8' /usr/lib/libpq.so: undefined reference to `ENGINE_load_private_key@OPENSSL_0.9.8' ...
Smells like a missing OpenSSL. I also don't see a -lssl
in the library list but the missing symbols suggest that it should be there.
So try installing the OpenSSL libraries (version 0.9.8 by the look of things). Then see if pg_config --libs
contains -lssl
or similar and try again. If all of this works then you might want to send a bug report to the Ubuntu people so that they can fix the libpq-dev dependencies.
Sorry, I don't have an Ubuntu set up anywhere accessible at the moment so there is some guesswork going on here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With