Error libevent2 development libraries are not installed properly in required location

I am working on install Coturn which is an open-source Stun and TURN server. For that, I had two options, one was to download the debian package and install it by gdebi, and other was to make the p...

I am working on install Coturn which is an open-source Stun and TURN server. For that, I had two options, one was to download the debian package and install it by gdebi, and other was to make the project manually. I went for the easier route, and unfortunately the package installation is failing.

Right now, even when I try to remove the package it fails : Is there any way I can remove this package and install it properly either via source or binary.

Output for purge :

coturn-master # apt-get purge coturn
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  coturn
0 upgraded, 0 newly installed, 1 to remove and 539 not upgraded.
1 not fully installed or removed.
After this operation, 1.234 kB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database ... 51439 files and directories currently installed.)
Removing coturn ...
update-rc.d: error: cannot find a LSB script for coturn
dpkg: error processing coturn (--remove):
 subprocess installed post-removal script returned error exit status 1
Errors were encountered while processing:
 coturn
E: Sub-process /usr/bin/dpkg returned an error code (1)

I have the source package downloaded for coturn, but I cannot use that as dependencies are not satisfied, and whenver I try to manually fulfil the dependencies, coturn throws stones in path.. :-(

coturn-master # ./configure
ginstall: not found
install is /usr/bin/install
pkill is /usr/bin/pkill
sqlite3: not found
sqlite: not found
Use TMP dir /var/tmp
Compiler: cc
Library option -lsocket cannot be used
Library option -lwldap32 cannot be used
Library option -lwldap64 cannot be used
Library option -lintl cannot be used
Sockets code is fine: no sin_len field present
Ignore IP_RECVERR
Crypto SSL lib found.
SSL lib found.
Libevent2 development is not installed properly
ERROR: Libevent2 development libraries are not installed properly in required location.
ERROR: may be you have just too old libevent tool - then you have to upgrade it.
See the INSTALL file.
Abort.


coturn-master # apt-get install sqlite3
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libc-bin libc-dev-bin libc-l10n libc6 libc6-dev libsqlite3-0 libsqlite3-dev locales oracle-java8-installer postgresql-9.1
  postgresql-9.4 postgresql-contrib-9.4
Suggested packages:
  glibc-doc sqlite3-doc binfmt-support visualvm ttf-baekmuk ttf-unfonts ttf-unfonts-core ttf-kochi-gothic ttf-sazanami-gothic
  ttf-kochi-mincho ttf-sazanami-mincho ttf-arphic-uming firefox firefox-2 iceweasel mozilla-firefox iceape-browser
  mozilla-browser epiphany-gecko epiphany-webkit epiphany-browser galeon midbrowser moblin-web-browser xulrunner xulrunner-1.9
  konqueror chromium-browser midori google-chrome locales-all libdbd-pg-perl
Recommended packages:
  postgresql-contrib-9.1 sysstat
The following packages will be REMOVED:
  coturn
The following NEW packages will be installed:
  libc-l10n sqlite3
The following packages will be upgraded:
  libc-bin libc-dev-bin libc6 libc6-dev libsqlite3-0 libsqlite3-dev locales oracle-java8-installer postgresql-9.1 postgresql-9.4
  postgresql-contrib-9.4
11 upgraded, 2 newly installed, 1 to remove and 528 not upgraded.
1 not fully installed or removed.
Need to get 0 B/19,3 MB of archives.
After this operation, 6.894 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Preconfiguring packages ...
(Reading database ... 51439 files and directories currently installed.)
Removing coturn ...
update-rc.d: error: cannot find a LSB script for coturn
dpkg: error processing coturn (--remove):
 subprocess installed post-removal script returned error exit status 1
Errors were encountered while processing:
 coturn
E: Sub-process /usr/bin/dpkg returned an error code (1)

Coturn requires SID branch, so I added this in source.list. Is that the reason it’s trying to pull PostgreSQL-9.1. I don’t want 9.1, I have 9.4 already.

sources.list :

deb     http://mirror.hetzner.de/debian/packages wheezy main contrib non-free
deb     http://mirror.hetzner.de/debian/security wheezy/updates main contrib non-free

deb     http://cdn.debian.net/debian/ wheezy main non-free contrib
deb-src http://cdn.debian.net/debian/ wheezy main non-free contrib

deb     http://security.debian.org/  wheezy/updates  main contrib non-free
deb-src http://security.debian.org/  wheezy/updates  main contrib non-free
// Below line I added. 
deb http://ftp.de.debian.org/debian sid main 

What can I do to remedy this problem. Thank you.

I am using ubuntu 10.10 trying to install libevent development libraries libevent1 and libevent2. I used the below command-

apt-get install libevent-dev libevent1-dev

But it shows-
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libevent1-dev

Then i used- apt-get install libevent-dev
But it says libevent-dev is already a newest version. Is that libevent2?
I’m a root user. Am I doing anything wrong? Does ubuntu 10.10 support libevent2? Really appreciate your help. Thanks

Frodik's user avatar

Frodik

14.5k22 gold badges89 silver badges138 bronze badges

asked Feb 7, 2014 at 9:10

saz's user avatar

Yes, libevent-dev installs libevent2. If you check what apt-get says when it installs it:

apt-get install libevent-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libevent-core-2.0-5 libevent-extra-2.0-5 libevent-openssl-2.0-5 libevent-pthreads-2.0-5
The following NEW packages will be installed:
  libevent-core-2.0-5 libevent-dev libevent-extra-2.0-5 libevent-openssl-2.0-5 libevent-pthreads-2.0-5

Notice the 2.0.x versions of libevent.

answered Jun 20, 2014 at 22:56

Jure Triglav's user avatar

Jure TriglavJure Triglav

1,82218 silver badges22 bronze badges

#!/bin/sh # Proprietary configure script of Coturn project cleanup() { rm -rf ${TMPCPROGC} rm -rf ${TMPCPROGB} rm -rf ${TH_TMPCPROGC} rm -rf ${TH_TMPCPROGB} rm -rf ${GCM_TMPCPROGC} rm -rf ${GCM_TMPCPROGB} rm -rf ${PQ_TMPCPROGC} rm -rf ${PQ_TMPCPROGB} rm -rf ${MYSQL_TMPCPROGC} rm -rf ${MYSQL_TMPCPROGB} rm -rf ${MONGO_TMPCPROGC} rm -rf ${MONGO_TMPCPROGB} rm -rf ${D_TMPCPROGC} rm -rf ${D_TMPCPROGB} rm -rf ${SQL_TMPCPROGC} rm -rf ${SQL_TMPCPROGO} rm -rf ${E_TMPCPROGC} rm -rf ${E_TMPCPROGO} rm -rf ${HR_TMPCPROGC} rm -rf ${HR_TMPCPROGB} rm -rf ${TMPCADDRPROGO} } testlibraw() { ${CC} ${TMPCPROGC} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS}${1} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Library option —${1} cannot be used« return 0 else OSLIBS=«${OSLIBS}${1}« return 1 fi } testsqlite_comp() { SQLITE_LIBS=-lsqlite3 ${CC} -c ${SQL_TMPCPROGC} -o ${SQL_TMPCPROGO} ${OSCFLAGS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «SQLite development is not installed properly« return 0 else DBLIBS=«${DBLIBS} ${SQLITE_LIBS}« return 1 fi } testlibevent2_comp() { ${CC} -c ${E_TMPCPROGC} -o ${E_TMPCPROGO} ${OSCFLAGS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Libevent2 development is not installed properly« return 0 else return 1 fi } testhiredis() { HIREDISCFLAGS= HIREDISLIBS=-lhiredis ${CC} ${HR_TMPCPROGC} -o ${HR_TMPCPROGB} ${OSCFLAGS} ${DBLIBS} ${HIREDISCFLAGS} ${HIREDISLIBS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} ${ECHO_CMD} «HIREDIS DEVELOPMENT LIBRARY (libhiredis.*) AND/OR HEADERS (hiredis/*.h)« ${ECHO_CMD} « ARE NOT INSTALLED PROPERLY ON THIS SYSTEM.« ${ECHO_CMD} « THAT’S OK BUT THE TURN SERVER IS BUILDING WITHOUT REDIS SUPPORT.« ${ECHO_CMD} return 0 else DBCFLAGS=«${DBCFLAGS} ${HIREDISCFLAGS}« DBLIBS=«${DBLIBS} ${HIREDISLIBS}« return 1 fi } testlibpq() { POSTCFLAGS=«-I${PREFIX}/pgsql/include -I${PREFIX}/include/pgsql/ -I${PREFIX}/include/postgres/ -I${PREFIX}/postgres/include/ -I${PREFIX}/include/postgresql/ -I${PREFIX}/postgresql/include/« POSTCFLAGS=«${POSTCFLAGS} -I/usr/local/pgsql/include -I/usr/local/include/pgsql/ -I/usr/local/include/postgres/ -I/usr/local/postgres/include/ -I/usr/local/include/postgresql/ -I/usr/local/postgresql/include/« POSTCFLAGS=«${POSTCFLAGS} -I/usr/pgsql/include -I/usr/include/pgsql/ -I/usr/include/postgres/ -I/usr/postgres/include/ -I/usr/include/postgresql/ -I/usr/postgresql/include/« for ilib in ${PREFIX}/pgsql/lib ${PREFIX}/lib/pgsql ${PREFIX}/lib64/pgsql /usr/local/pgsql/lib /usr/local/lib/pgsql /usr/local/lib64/pgsql /usr/pgsql/lib /usr/lib/pgsql /usr/lib64/pgsql ${PREFIX}/postgres/lib ${PREFIX}/lib/postgres ${PREFIX}/lib64/postgres /usr/local/postgres/lib /usr/local/lib/postgres /usr/local/lib64/postgres /usr/postgres/lib /usr/lib/postgres /usr/lib64/postgres ${PREFIX}/postgresql/lib ${PREFIX}/lib/postgresql ${PREFIX}/lib64/postgresql /usr/local/postgresql/lib /usr/local/lib/postgresql /usr/local/lib64/postgresql /usr/postgresql/lib /usr/lib/postgresql /usr/lib64/postgresql do if [ -d ${ilib} ] ; then POSTLIBS=«${POSTLIBS} -L${ilib}« if ! [ -z «${TURN_ACCEPT_RPATH}« ] ; then TURN_RPATH=«${TURN_RPATH} -Wl,-rpath,${ilib}« fi fi done POSTLIBS=«${OSLIBS} ${POSTLIBS} -lpq« ${CC} ${PQ_TMPCPROGC} -o ${PQ_TMPCPROGB} ${OSCFLAGS} ${DBCFLAGS} ${POSTCFLAGS} ${DBLIBS} ${POSTLIBS} ${OSLIBS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} ${ECHO_CMD} «POSTGRESQL DEVELOPMENT LIBRARY (libpq.a) AND/OR HEADER (libpq-fe.h)« ${ECHO_CMD} « ARE NOT INSTALLED PROPERLY ON THIS SYSTEM.« ${ECHO_CMD} « THAT’S OK BUT THE TURN SERVER IS BUILDING WITHOUT POSTGRESQL DATABASE SUPPORT.« ${ECHO_CMD} return 0 else DBCFLAGS=«${DBCFLAGS} ${POSTCFLAGS}« DBLIBS=«${DBLIBS} ${POSTLIBS}« return 1 fi } testlibmysql() { MYSQL_CFLAGS=«-I${PREFIX}/mysql/include -I${PREFIX}/include/mysql/« MYSQL_CFLAGS=«${MYSQL_CFLAGS} -I/usr/local/mysql/include -I/usr/local/include/mysql/« MYSQL_CFLAGS=«${MYSQL_CFLAGS} -I/usr/mysql/include -I/usr/include/mysql/« for ilib in ${PREFIX}/mysql/lib ${PREFIX}/lib/mysql ${PREFIX}/lib64/mysql /usr/local/mysql/lib /usr/local/lib/mysql /usr/local/lib64/mysql /usr/mysql/lib /usr/lib/mysql /usr/lib64/mysql do if [ -d ${ilib} ] ; then MYSQL_LIBS=«${MYSQL_LIBS} -L${ilib}« if ! [ -z «${TURN_ACCEPT_RPATH}« ] ; then TURN_RPATH=«${TURN_RPATH} -Wl,-rpath,${ilib}« fi fi done MYSQL_LIBS=«${OSLIBS} ${MYSQL_LIBS} -lmysqlclient« ${CC} ${MYSQL_TMPCPROGC} -o ${MYSQL_TMPCPROGB} ${OSCFLAGS} ${DBCFLAGS} ${DBLIBS} ${MYSQL_CFLAGS} ${MYSQL_LIBS} ${OSLIBS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} ${ECHO_CMD} «MYSQL DEVELOPMENT LIBRARY (libmysqlclient) AND/OR HEADER (mysql.h)« ${ECHO_CMD} « ARE NOT INSTALLED PROPERLY ON THIS SYSTEM.« ${ECHO_CMD} « THAT’S OK BUT THE TURN SERVER IS BUILDING WITHOUT MYSQL DATABASE SUPPORT.« ${ECHO_CMD} return 0 else DBCFLAGS=«${DBCFLAGS} ${MYSQL_CFLAGS}« DBLIBS=«${DBLIBS} ${MYSQL_LIBS}« return 1 fi } testlibmongoc() { for inc in ${PREFIX}/libmongoc-1.0 ${PREFIX}/libbson-1.0 /usr/local/include/libmongoc-1.0 /usr/local/include/libbson-1.0 /usr/libmongoc-1.0 -I/usr/libbson-1.0 do if [ -d ${inc} ] ; then MONGO_CFLAGS=«${MONGO_CFLAGS} -I${inc}« fi done MONGO_LIBS=«-lmongoc-1.0 -lbson-1.0« ${CC} ${MONGO_TMPCPROGC} -o ${MONGO_TMPCPROGB} ${OSCFLAGS} ${DBCFLAGS} ${DBLIBS} ${MONGO_CFLAGS} ${MONGO_LIBS} ${OSLIBS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} ${ECHO_CMD} «MONGODB DEVELOPMENT LIBRARIES (libmongoc-1.0 and libbson-1.0) AND/OR HEADER (mongoc.h)« ${ECHO_CMD} « ARE NOT INSTALLED PROPERLY ON THIS SYSTEM.« ${ECHO_CMD} « THAT’S OK BUT THE TURN SERVER IS BUILDING WITHOUT MONGODB SUPPORT.« ${ECHO_CMD} return 0 else DBCFLAGS=«${DBCFLAGS} ${MONGO_CFLAGS}« DBLIBS=«${DBLIBS} ${MONGO_LIBS}« return 1 fi } testlib() { testlibraw l${1} } pthread_testlib() { SYSTEM=`uname` if [ «${SYSTEM}« = «DragonFly« ] ; then OSLIBS=«${OSLIBS} -pthread« TURN_NO_SCTP=1 fi ISBSD=`uname | grep -i bsd` if ! [ -z «${ISBSD}« ] ; then OSLIBS=«${OSLIBS} -pthread« fi if [ -z «${PTHREAD_LIBS}« ] ; then ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then return 1 else ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -pthread 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then OSLIBS=«${OSLIBS} -pthread« return 1 else ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -lpthread 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then OSLIBS=«${OSLIBS} -lpthread« return 1 fi fi fi else OSLIBS=«${OSLIBS} ${PTHREAD_LIBS}« fi ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then return 1 else ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -D_GNU_SOURCE 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Older GNU pthread library found« OSCFLAGS=«${OSCFLAGS} -D_GNU_SOURCE« return 1 else ${ECHO_CMD} «Do not use pthreads« fi fi return 0 } pthread_testbarriers() { ${ECHO_CMD} «pthread_barrier_t barrier;« >> ${TH_TMPCPROGC} ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «pthread barriers not found« OSCFLAGS=«${OSCFLAGS} -DTURN_NO_THREAD_BARRIERS« fi } gcm_testlib() { if [ -z «${TURN_NO_GCM}« ] ; then ${CC} ${GCM_TMPCPROGC} -o ${GCM_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then return 1 else return 0 fi else return 0 fi } testdaemon() { ${CC} ${D_TMPCPROGC} -o ${D_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then OSCFLAGS=«${OSCFLAGS} -DTURN_HAS_DAEMON« fi } test_sin_len() { TMPCADDRPROGC=src/client/ns_turn_ioaddr.c ${CC} -c ${OSCFLAGS} -DTURN_HAS_SIN_LEN -Isrc ${TMPCADDRPROGC} -o ${TMPCADDRPROGO} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then OSCFLAGS=«${OSCFLAGS} -DTURN_HAS_SIN_LEN« ${ECHO_CMD} «Sockets code is fine: sin_len field present« else ${CC} -c ${OSCFLAGS} -Isrc ${TMPCADDRPROGC} -o ${TMPCADDRPROGO} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Sockets code is fine: no sin_len field present« else ${ECHO_CMD} «WARNING: trial compilation failed: src/client/ns_turn_ioaddr.c« fi fi } ######################### # Start ######################### cleanup ######################### # To be set: ######################### if [ -z «${ECHO_CMD}« ] ; then ECHO_CMD=echo fi if [ -z «${FIND_CMD}« ] ; then FIND_CMD=find fi if [ -z «${PORTNAME}« ] ; then PORTNAME=turnserver fi ######################### # Installation directory options ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n «$ac_prev«; then eval $ac_prev=$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr «X$ac_option« : [^=]*=(.*)` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in —) ac_dashdash=yes ;; -bindir | —bindir | —bindi | —bind | —bin | —bi) ac_prev=BINDIR ;; -bindir=* | —bindir=* | —bindi=* | —bind=* | —bin=* | —bi=*) BINDIR=$ac_optarg ;; -localstatedir | —localstatedir | —localstatedi | —localstated | —localstate | —localstat) ac_prev=LOCALSTATEDIR ;; -localstatedir=* | —localstatedir=* | —localstatedi=* | —localstated=* | —localstate=* | —localstat=*) LOCALSTATEDIR=$ac_optarg ;; -turndbdir | —turndbdir | —turndbdi | —turndbd | —turndb | —turnd) ac_prev=TURNDBDIR ;; -turndbdir=* | —turndbdir=* | —turndbdi=* | —turndbd=* | —turndb=* | —turnd=*) TURNDBDIR=$ac_optarg ;; -datadir | —datadir | —datadi | —datad | -schemadir | —schemadir) ac_prev=SCHEMADIR ;; -datadir=* | —datadir=* | —datadi=* | —datad=* | -schemadir=* | —schemadir=*) SCHEMADIR=$ac_optarg ;; -docdir | —docdir | —docdi | —doc | —do | -docsdir | —docsdir | —docsdi | —docs) ac_prev=DOCDIR ;; -docdir=* | —docdir=* | —docdi=* | —doc=* | —do=* | -docsdir=* | —docsdir=* | —docsdi=* | —docs=*) DOCSDIR=$ac_optarg ;; -examplesdir | —examplesdir | -examples | —examples) ac_prev=EXAMPLESDIR ;; -examplesdir=* | —examplesdir=* | -examples=* | —examples=*) EXAMPLESDIR=$ac_optarg ;; -includedir | —includedir | —includedi | —included | —include | —includ | —inclu | —incl | —inc) ac_prev=INCLUDEDIR ;; -includedir=* | —includedir=* | —includedi=* | —included=* | —include=* | —includ=* | —inclu=* | —incl=* | —inc=*) INCLUDEDIR=$ac_optarg ;; -turnincludedir | —turnincludedir) ac_prev=TURNINCLUDEDIR ;; -turnincludedir=* | —turnincludedir=*) TURNINCLUDEDIR=$ac_optarg ;; -libdir | —libdir | —libdi | —libd) ac_prev=LIBDIR ;; -libdir=* | —libdir=* | —libdi=* | —libd=*) LIBDIR=$ac_optarg ;; -mandir | —mandir | —mandi | —mand | —man | —ma | —m | -manprefix | —manprefix) ac_prev=MAXPREFIX ;; -mandir=* | —mandir=* | —mandi=* | —mand=* | —man=* | —ma=* | —m=* | -manprefix=* | —manprefix=*) MANPREFIX=$ac_optarg ;; -prefix | —prefix | —prefi | —pref | —pre | —pr | —p) ac_prev=PREFIX ;; -prefix=* | —prefix=* | —prefi=* | —pref=* | —pre=* | —pr=* | —p=*) PREFIX=$ac_optarg ;; -sysconfdir | —sysconfdir | —sysconfdi | —sysconfd | —sysconf | —syscon | —sysco | —sysc | —sys | —sy | -confdir | —confdir) ac_prev=CONFDIR ;; -sysconfdir=* | —sysconfdir=* | —sysconfdi=* | —sysconfd=* | —sysconf=* | —syscon=* | —sysco=* | —sysc=* | —sys=* | —sy=* | -confdir=* | —confdir=*) CONFDIR=$ac_optarg ;; -disable-rpath | —disable-rpath) TURN_DISABLE_RPATH=1 ;; esac done if test -n «$ac_prev«; then ac_option=—`echo $ac_prev | sed s/_/-/g` as_fn_error $? «missing argument to $ac_option« fi ############################################# if [ -z «${PREFIX}« ] ; then if [ -z «${prefix}« ] ; then SYSTEM=`uname` if [ «${SYSTEM}« = «NetBSD« ] ; then # A little tough guy PREFIX=/usr/pkg elif [ «${SYSTEM}« = «SunOS« ] ; then # A fat guy PREFIX=/usr else # An ordinary person PREFIX=/usr/local fi else PREFIX=${prefix} fi fi if [ -z «${BINDIR}« ] ; then if [ -z «${bindir}« ] ; then BINDIR=${PREFIX}/bin else BINDIR=${bindir} fi fi if [ -z «${LOCALSTATEDIR}« ] ; then if [ -z «${localstatedir}« ] ; then if [ «${PREFIX}« = «/usr« ] ; then LOCALSTATEDIR=/var else LOCALSTATEDIR=${PREFIX}/var fi else LOCALSTATEDIR=${localstatedir} fi fi if [ -z «${CONFDIR}« ] ; then if [ -z «${confdir}« ] ; then CONFDIR=${PREFIX}/etc else CONFDIR=${confdir} fi fi if [ -z «${MANPREFIX}« ] ; then if [ -z «${manprefix}« ] ; then MANPREFIX=${PREFIX} else MANPREFIX=${manprefix} fi fi if [ -z «${EXAMPLESDIR}« ] ; then if [ -z «${examplesdir}« ] ; then EXAMPLESDIR=${PREFIX}/share/examples/${PORTNAME} else EXAMPLESDIR=${examplesdir} fi fi if [ -z «${DOCSDIR}« ] ; then if [ -z «${docsdir}« ] ; then DOCSDIR=${PREFIX}/share/doc/${PORTNAME} else DOCSDIR=${docsdir} fi fi if [ -z «${LIBDIR}« ] ; then if [ -z «${libdir}« ] ; then LIBDIR=${PREFIX}/lib else LIBDIR=${libdir} fi fi if [ -z «${SCHEMADIR}« ] ; then if [ -z «${schemadir}« ] ; then SCHEMADIR=${PREFIX}/share/${PORTNAME} else SCHEMADIR=${schemadir} fi fi if [ -z «${INCLUDEDIR}« ] ; then if [ -z «${includedir}« ] ; then INCLUDEDIR=${PREFIX}/include else INCLUDEDIR=${includedir} fi fi if [ -z «${TURNINCLUDEDIR}« ] ; then if [ -z «${turnincludedir}« ] ; then TURNINCLUDEDIR=${INCLUDEDIR}/turn else TURNINCLUDEDIR=${turnincludedir} fi fi ############################################### if [ -z «${ARCHIVERCMD}« ] ; then ARCHIVERCMD=«ar -r« fi if [ -z «${MORECMD}« ]; then type more 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then MORECMD=«more« else type less 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then MORECMD=«less« else MORECMD=«cat« fi fi fi OSCFLAGS=«-I${INCLUDEDIR} -I${PREFIX}/include/ -I/usr/local/include ${CFLAGS}« OSLIBS=«${LDFLAGS}« for ilib in ${PREFIX}/lib/event2/ ${PREFIX}/lib/ /usr/local/lib/event2/ /usr/local/lib/ ${PREFIX}/lib64/event2/ ${PREFIX}/lib64/ /usr/local/lib64/event2/ /usr/local/lib64/ do if [ -d ${ilib} ] ; then OSLIBS=«${OSLIBS} -L${ilib}« TURN_RPATH=«${TURN_RPATH} -Wl,-rpath,${ilib}« fi done SYSTEM=`uname` if [ «${SYSTEM}« = «NetBSD« ] ; then OSCFLAGS=«${OSCFLAGS} -I/usr/pkg/include« OSLIBS=«-L/usr/pkg/lib ${OSLIBS}« if ! [ -z «${TURN_ACCEPT_RPATH}« ] ; then TURN_RPATH=«${TURN_RPATH} -Wl,-rpath,/usr/pkg/lib« fi fi ########################### # Install shell commands ########################### type ginstall 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then INSTALL_PROGRAM=«ginstall« INSTALL_MAN=«ginstall« INSTALL_SCRIPT=«ginstall« INSTALL_SHARED_LIB=«ginstall« INSTALL_STATIC_LIB=«ginstall« INSTALL_DATA=«ginstall« MKDIR=«ginstall -d« else type install 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then INSTALL_PROGRAM=«install« INSTALL_MAN=«install« INSTALL_SCRIPT=«install« INSTALL_SHARED_LIB=«install« INSTALL_STATIC_LIB=«install« INSTALL_DATA=«install« MKDIR=«install -d« else INSTALL_PROGRAM=«cp -pf« INSTALL_MAN=«cp -pf« INSTALL_SCRIPT=«cp -pf« INSTALL_SHARED_LIB=«cp -pf« INSTALL_STATIC_LIB=«cp -pf« INSTALL_DATA=«cp -pf« MKDIR=«mkdir -p« fi fi type pkill 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then PKILL_PROGRAM=«pkill« else PKILL_PROGRAM=«${ECHO_CMD}« fi INSTALL_DIR=«cp -rpf« MKBUILDDIR=«mkdir -p« RMCMD=«rm -rf« type sqlite3 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then SQLITE_CMD=«sqlite3« else type sqlite 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then SQLITE_CMD=«sqlite« else SQLITE_CMD=${ECHO_CMD} fi fi ############################# # Adjustments for Solaris ############################# SYSTEM=`uname` if [ «${SYSTEM}« = «SunOS« ] ; then # Solaris ? is this you ?! OSCFLAGS=«${OSCFLAGS} -D__EXTENSIONS__ -D_XOPEN_SOURCE=500 -DTURN_NO_GETDOMAINNAME« OSLIBS=«${OSLIBS} -lnsl« TURN_NO_SCTP=1 fi ######################### # Temporary DIR location: ######################### TMPDIR=«.« if [ -d /var/tmp ] ; then TMPDIR=«/var/tmp« elif [ -d /tmp ] ; then TMPDIR=/tmp fi ${ECHO_CMD} Use TMP dir ${TMPDIR} ######################### # Basic C test programs ######################### TMPCADDRPROGO=${TMPDIR}/__test__ccomp_addr_$$.o TMPCPROG=__test__ccomp__$$ TMPCPROGC=${TMPDIR}/${TMPCPROG}.c TMPCPROGB=${TMPDIR}/${TMPCPROG} cat > ${TMPCPROGC} <<! #include <stdlib.h> int main(int argc, char** argv) { return (int)(argv[argc][0]); } ! TH_TMPCPROG=__test__ccomp__pthread__$$ TH_TMPCPROGC=${TMPDIR}/${TH_TMPCPROG}.c TH_TMPCPROGB=${TMPDIR}/${TH_TMPCPROG} cat > ${TH_TMPCPROGC} <<! #include <stdlib.h> #include <pthread.h> int main(int argc, char** argv) { pthread_mutexattr_settype(0,PTHREAD_MUTEX_RECURSIVE); return (int)pthread_create(0,0,0,0)+(int)(argv[argc][0]); } ! GCM_TMPCPROG=__test__ccomp__gcm__$$ GCM_TMPCPROGC=${TMPDIR}/${GCM_TMPCPROG}.c GCM_TMPCPROGB=${TMPDIR}/${GCM_TMPCPROG} cat > ${GCM_TMPCPROGC} <<! #include <stdlib.h> #include <openssl/ssl.h> #include <openssl/evp.h> int main(int argc, char** argv) { return (int)EVP_CIPH_GCM_MODE; } ! D_TMPCPROG=__test__ccomp__daemon__$$ D_TMPCPROGC=${TMPDIR}/${D_TMPCPROG}.c D_TMPCPROGB=${TMPDIR}/${D_TMPCPROG} cat > ${D_TMPCPROGC} <<! #include <stdlib.h> #include <unistd.h> int main(int argc, char** argv) { return (int)daemon(0,0)+(int)(argv[argc][0]); } ! E_TMPCPROG=__test__ccomp__libevent2__$$ E_TMPCPROGC=${TMPDIR}/${E_TMPCPROG}.c E_TMPCPROGO=${TMPDIR}/${E_TMPCPROG}.o cat > ${E_TMPCPROGC} <<! #include <stdlib.h> #include <event2/event.h> int main(int argc, char** argv) { return (int)(argv[argc][0]); } ! SQL_TMPCPROG=__test__ccomp__sqlite__$$ SQL_TMPCPROGC=${TMPDIR}/${SQL_TMPCPROG}.c SQL_TMPCPROGO=${TMPDIR}/${SQL_TMPCPROG}.o cat > ${SQL_TMPCPROGC} <<! #include <stdlib.h> #include <sqlite3.h> int main(int argc, char** argv) { return (int)(argv[argc][0]); } ! HR_TMPCPROG=__test__ccomp__hiredis__$$ HR_TMPCPROGC=${TMPDIR}/${HR_TMPCPROG}.c HR_TMPCPROGB=${TMPDIR}/${HR_TMPCPROG} cat > ${HR_TMPCPROGC} <<! #include <stdlib.h> #include <hiredis/hiredis.h> #include <hiredis/async.h> int main(int argc, char** argv) { redisAsyncHandleRead(NULL); return (int)(argv[argc][0]); } ! PQ_TMPCPROG=__test__ccomp__libpq__$$ PQ_TMPCPROGC=${TMPDIR}/${PQ_TMPCPROG}.c PQ_TMPCPROGB=${TMPDIR}/${PQ_TMPCPROG} cat > ${PQ_TMPCPROGC} <<! #include <stdlib.h> #include <libpq-fe.h> int main(int argc, char** argv) { return (argc+(PQprotocolVersion(NULL))+(int)(argv[0][0])); } ! MYSQL_TMPCPROG=__test__ccomp__libmysql__$$ MYSQL_TMPCPROGC=${TMPDIR}/${MYSQL_TMPCPROG}.c MYSQL_TMPCPROGB=${TMPDIR}/${MYSQL_TMPCPROG} cat > ${MYSQL_TMPCPROGC} <<! #include <stdlib.h> #include <mysql.h> int main(int argc, char** argv) { return (argc+ (int)(mysql_real_connect(NULL, NULL, NULL, NULL, NULL, 0, NULL, 0)!=0)+ (int)(argv[0][0])); } ! MONGO_TMPCPROG=__test__ccomp__libmongoc__$$ MONGO_TMPCPROGC=${TMPDIR}/${MONGO_TMPCPROG}.c MONGO_TMPCPROGB=${TMPDIR}/${MONGO_TMPCPROG} cat > ${MONGO_TMPCPROGC} <<! #include <mongoc.h> int main(int argc, char** argv) { return (argc+ (int)(mongoc_client_new(«mongodb://localhost:27017»)!=0)+ (int)(argv[0][0])); } ! ########################## # What is our compiler ? ########################## if [ -z «${CC}« ] ; then CC=cc ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then CC=gcc ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then CC=clang ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then CC=unknown fi fi fi fi ${ECHO_CMD} «Compiler: ${CC}« if [ -z «${TURN_ACCEPT_RPATH}« ] ; then ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} -Wl,-rpath,/usr/lib 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then TURN_ACCEPT_RPATH=1 fi fi ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «ERROR: cannot use compiler ${CC} properly« cleanup exit fi ########################### # Check if we can use GNU # or Clang compiler flags ########################### GNUOSCFLAGS=«-g ${GNUOSCFLAGS}« GNUOSCFLAGS=«${GNUOSCFLAGS} -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual« GNUOSCFLAGS=«${GNUOSCFLAGS}« ${CC} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Hm…« ${CC} -Wall ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Not an ordinary GNU or Clang compiler« else ${ECHO_CMD} «g++ or something…« GNUOSCFLAGS=«-g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wpointer-arith -Wcast-qual« ${CC} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Not an ordinary g++ compiler« GNUOSCFLAGS=«-x c++ -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wpointer-arith -Wcast-qual« ${CC} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Not an ordinary c++ compiler« else ${ECHO_CMD} «Clang++ compiler ?« OSCFLAGS=«${GNUOSCFLAGS} ${OSCFLAGS}« fi else OSCFLAGS=«${GNUOSCFLAGS} ${OSCFLAGS}« fi fi else OSCFLAGS=«${GNUOSCFLAGS} ${OSCFLAGS}« fi ########################### # Test some general-purpose # libraries ########################### testlib socket testlib rt testlib wldap32 ER=$? if ! [ ${ER} -eq 0 ] ; then echo «CYGWIN ?« fi testlib wldap64 testlib intl testlib nsl testlib resolv ########################### # Test sockets compilation ########################### test_sin_len ########################### # Can we use multi-threading ? ########################### pthread_testlib ER=$? if [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «ERROR: Cannot find pthread library functions.« exit fi if [ -z ${TURN_NO_THREAD_BARRIERS} ] ; then pthread_testbarriers else TURN_NO_THREAD_BARRIERS=«-DTURN_NO_THREAD_BARRIERS« fi if [ -z ${TURN_IP_RECVERR} ] ; then ${ECHO_CMD} «Ignore IP_RECVERR« else ${ECHO_CMD} «Use IP_RECVERR« TURN_IP_RECVERR=«-DTURN_IP_RECVERR« OSCFLAGS=«${OSCFLAGS} ${TURN_IP_RECVERR}« fi ########################### # Can we use daemon ? ########################### testdaemon ########################### # Test OpenSSL installation ########################### testlib crypto ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Crypto SSL lib found.« else ${ECHO_CMD} «ERROR: OpenSSL Crypto development libraries are not installed properly in required location.« ${ECHO_CMD} «Abort.« cleanup exit fi testlib ssl ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «SSL lib found.« else ${ECHO_CMD} «ERROR: OpenSSL development libraries are not installed properly in required location.« ${ECHO_CMD} «Abort.« cleanup exit fi ########################### # Can we use GCM cipher ? ########################### if [ -z ${TURN_NO_GCM} ] ; then gcm_testlib ER=$? if [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «WARNING: Cannot find GCM support.« ${ECHO_CMD} «Turning GCM off.« TURN_NO_GCM=«-DTURN_NO_GCM« fi else TURN_NO_GCM=«-DTURN_NO_GCM« fi ########################### # Test Libevent2 setup ########################### testlibevent2_comp ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Libevent2 development found.« else ${ECHO_CMD} «ERROR: Libevent2 development libraries are not installed properly in required location.« ${ECHO_CMD} «ERROR: may be you have just too old libevent tool — then you have to upgrade it.« ${ECHO_CMD} «See the INSTALL file.« ${ECHO_CMD} «Abort.« cleanup exit fi testlib event_core ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Libevent2 runtime found.« testlib event_extra ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Libevent2 runtime ‘extra’ found.« else ${ECHO_CMD} «ERROR: Libevent2 ‘extra’ runtime library is not installed properly in required location.« ${ECHO_CMD} «See the INSTALL file.« ${ECHO_CMD} «Abort.« cleanup exit fi else testlib event ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Libevent2 runtime found (old style).« else ${ECHO_CMD} «ERROR: Libevent2 runtime libraries are not installed properly in required location.« ${ECHO_CMD} «See the INSTALL file.« ${ECHO_CMD} «Abort.« cleanup exit fi fi if [ -z «${TURN_NO_TLS}« ] ; then testlib event_openssl ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Libevent2 openssl found.« else ${ECHO_CMD} «ERROR: Libevent2 development libraries are not compiled with OpenSSL support.« ${ECHO_CMD} «TLS will be disabled.« TURN_NO_TLS=«-DTURN_NO_TLS« fi else TURN_NO_TLS=«-DTURN_NO_TLS« fi testlib event_pthreads ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Libevent2 pthreads found.« else ${ECHO_CMD} «ERROR: Libevent2 development libraries are not compiled with threads support.« exit fi ########################### # Test SQLite setup ########################### if [ -z «${TURN_NO_SQLITE}« ] ; then testlib sqlite3 ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «SQLite library found.« else ${ECHO_CMD} «SQLite3 development library cannot be found.« TURN_NO_SQLITE=«-DTURN_NO_SQLITE« fi if [ -z «${TURN_NO_SQLITE}« ] ; then testsqlite_comp ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «SQLite development found.« else ${ECHO_CMD} «SQLite development libraries are not installed properly in required location.« TURN_NO_SQLITE=«-DTURN_NO_SQLITE« fi fi if ! [ -z «${TURN_NO_SQLITE}« ] ; then ${ECHO_CMD} ${ECHO_CMD} «SQLite DEVELOPMENT LIBRARY (libsqlite3) AND/OR HEADER (sqlite3.h)« ${ECHO_CMD} « ARE NOT INSTALLED PROPERLY ON THIS SYSTEM.« ${ECHO_CMD} « THAT’S OK BUT THE TURN SERVER IS BUILDING WITHOUT SQLITE SUPPORT.« ${ECHO_CMD} fi else TURN_NO_SQLITE=«-DTURN_NO_SQLITE« SQLITE_CMD=${ECHO_CMD} fi if [ -z «${TURNDBDIR}« ] ; then TURNDBDIR=${LOCALSTATEDIR}/db fi ########################### # Test PostgreSQL ########################### if [ -z «${TURN_NO_PQ}« ] ; then testlibpq ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «PostgreSQL found.« else TURN_NO_PQ=«-DTURN_NO_PQ« fi else TURN_NO_PQ=«-DTURN_NO_PQ« fi ########################### # Test MySQL ########################### if [ -z «${TURN_NO_MYSQL}« ] ; then testlibmysql ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «MySQL found.« else TURN_NO_MYSQL=«-DTURN_NO_MYSQL« fi else TURN_NO_MYSQL=«-DTURN_NO_MYSQL« fi ########################### # Test MongoDB ########################### if [ -z «${TURN_NO_MONGO}« ] ; then testlibmongoc ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «MongoDB found.« else TURN_NO_MONGO=«-DTURN_NO_MONGO« fi else TURN_NO_MONGO=«-DTURN_NO_MONGO« fi ########################### # Test Redis ########################### if [ -z «${TURN_NO_HIREDIS}« ] ; then testhiredis ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} «Hiredis found.« else TURN_NO_HIREDIS=«-DTURN_NO_HIREDIS« fi else TURN_NO_HIREDIS=«-DTURN_NO_HIREDIS« fi ############################### # LDCONFIG ############################### if [ -z «${LDCONFIG}« ] ; then ISBSD=`uname | grep -i bsd` if [ -z «${ISBSD}« ] ; then ISLINUX=`uname | grep -i linux` if [ -z «${ISLINUX}« ] ; then SYSTEM=`uname` if [ «${SYSTEM}« = «SunOS« ] ; then LDCONFIG=«crle -u -l« else LDCONFIG=${ECHO_CMD} fi else LDCONFIG=«ldconfig -n« fi else LDCONFIG=«ldconfig -m« fi fi ############################### # SCTP ############################### if [ -z «${TURN_NO_SCTP}« ] ; then if [ -z «${TURN_SCTP_INCLUDE}« ] ; then if [ -f /usr/include/netinet/sctp.h ] ; then TURN_SCTP_INCLUDE=«-DTURN_SCTP_INCLUDE=«</usr/include/netinet/sctp.h>«« fi else TURN_SCTP_INCLUDE=«-DTURN_SCTP_INCLUDE=«\»${TURN_SCTP_INCLUDE}\»»« fi else TURN_NO_SCTP=«-DTURN_NO_SCTP« fi ############################### # So, what we have now: ############################### OSCFLAGS=«${OSCFLAGS} ${TURN_NO_SCTP} ${TURN_SCTP_INCLUDE} ${TURN_NO_THREAD_BARRIERS} ${TURN_NO_DTLS} ${TURN_NO_GCM} ${TURN_NO_TLS} -DINSTALL_PREFIX=${PREFIX} -DTURNDB=${TURNDBDIR}/turndb« if ! [ -z «${TURN_ACCEPT_RPATH}« ] ; then if [ -z «${TURN_DISABLE_RPATH}« ] ; then TURN_RPATH=«${TURN_RPATH} -Wl,-rpath,/usr/local/lib« OSLIBS=«${OSLIBS} ${TURN_RPATH}« fi fi ${ECHO_CMD} PREFIX=«${PREFIX}« LOCALSTATEDIR=«${LOCALSTATEDIR}« OSLIBS=«${OSLIBS}« DBLIBS=«${DBLIBS}« OSCFLAGS=«${OSCFLAGS}« DBCFLAGS=«${DBCFLAGS}« $@ ############################### # Make make: ############################### ${ECHO_CMD} «#################################« > Makefile ${ECHO_CMD} «# Generated by configure script #« >> Makefile ${ECHO_CMD} «#################################« >> Makefile ${ECHO_CMD} «ECHO_CMD = ${ECHO_CMD}« >> Makefile ${ECHO_CMD} «CC = ${CC}« >> Makefile ${ECHO_CMD} «LDFLAGS += ${OSLIBS}« >> Makefile ${ECHO_CMD} «DBLIBS += ${DBLIBS}« >> Makefile ${ECHO_CMD} «CFLAGS += ${OSCFLAGS}« >> Makefile ${ECHO_CMD} «CPPFLAGS = ${CPPFLAGS}« >> Makefile ${ECHO_CMD} «DBCFLAGS += ${DBCFLAGS} ${TURN_NO_PQ} ${TURN_NO_MYSQL} ${TURN_NO_SQLITE} ${TURN_NO_MONGO} ${TURN_NO_HIREDIS}« >> Makefile ${ECHO_CMD} «#« >> Makefile ${ECHO_CMD} «PORTNAME = ${PORTNAME}« >> Makefile ${ECHO_CMD} «PREFIX = ${PREFIX}« >> Makefile ${ECHO_CMD} «prefix = ${PREFIX}« >> Makefile ${ECHO_CMD} «BINDIR = ${BINDIR}« >> Makefile ${ECHO_CMD} «bindir = ${BINDIR}« >> Makefile ${ECHO_CMD} «LOCALSTATEDIR = ${LOCALSTATEDIR}« >> Makefile ${ECHO_CMD} «localstatedir = ${LOCALSTATEDIR}« >> Makefile ${ECHO_CMD} «TURNDBDIR = ${TURNDBDIR}« >> Makefile ${ECHO_CMD} «turndbdir = ${TURNDBDIR}« >> Makefile ${ECHO_CMD} «CONFDIR = ${CONFDIR}« >> Makefile ${ECHO_CMD} «confdir = ${CONFDIR}« >> Makefile ${ECHO_CMD} «MANPREFIX = ${MANPREFIX}« >> Makefile ${ECHO_CMD} «manprefix = ${MANPREFIX}« >> Makefile ${ECHO_CMD} «EXAMPLESDIR = ${EXAMPLESDIR}« >> Makefile ${ECHO_CMD} «examplesdir = ${EXAMPLESDIR}« >> Makefile ${ECHO_CMD} «DOCSDIR = ${DOCSDIR}« >> Makefile ${ECHO_CMD} «docsdir = ${DOCSDIR}« >> Makefile ${ECHO_CMD} «LIBDIR = ${LIBDIR}« >> Makefile ${ECHO_CMD} «libdir = ${LIBDIR}« >> Makefile ${ECHO_CMD} «SCHEMADIR = ${SCHEMADIR}« >> Makefile ${ECHO_CMD} «schemadir = ${SCHEMADIR}« >> Makefile ${ECHO_CMD} «INCLUDEDIR = ${INCLUDEDIR}« >> Makefile ${ECHO_CMD} «includedir = ${INCLUDEDIR}« >> Makefile ${ECHO_CMD} «TURNINCLUDEDIR = ${TURNINCLUDEDIR}« >> Makefile ${ECHO_CMD} «turnincludedir = ${TURNINCLUDEDIR}« >> Makefile ${ECHO_CMD} «#« >> Makefile ${ECHO_CMD} «ARCHIVERCMD = ${ARCHIVERCMD}« >> Makefile ${ECHO_CMD} «MKDIR = ${MKDIR}« >> Makefile ${ECHO_CMD} «SQLITE_CMD = ${SQLITE_CMD}« >> Makefile ${ECHO_CMD} «INSTALL_PROGRAM = ${INSTALL_PROGRAM}« >> Makefile ${ECHO_CMD} «PKILL_PROGRAM = ${PKILL_PROGRAM}« >> Makefile ${ECHO_CMD} «INSTALL_MAN = ${INSTALL_MAN}« >> Makefile ${ECHO_CMD} «INSTALL_SCRIPT = ${INSTALL_SCRIPT}« >> Makefile ${ECHO_CMD} «INSTALL_SHARED_LIB = ${INSTALL_SHARED_LIB}« >> Makefile ${ECHO_CMD} «INSTALL_STATIC_LIB = ${INSTALL_STATIC_LIB}« >> Makefile ${ECHO_CMD} «INSTALL_DATA = ${INSTALL_DATA}« >> Makefile ${ECHO_CMD} «INSTALL_DIR = ${INSTALL_DIR}« >> Makefile ${ECHO_CMD} «MKBUILDDIR = ${MKBUILDDIR}« >> Makefile ${ECHO_CMD} «RMCMD = ${RMCMD}« >> Makefile ${ECHO_CMD} «MORECMD = ${MORECMD}« >> Makefile ${ECHO_CMD} «LDCONFIG=${LDCONFIG}« >> Makefile ${ECHO_CMD} «################################« >> Makefile ${ECHO_CMD} «« >> Makefile cat Makefile.in >> Makefile ############################### # End: ############################### cleanup ${ECHO_CMD} «Makefile created: success.«

About your question, here is how I fixed the problem, I extended the answer because in the comments some users ask for that:

First, your error is a problem caused by a previous installation (for another package or update), the tor package doesn’t depend on that library, I have Xubuntu 17.10 a FRESH INSTALL, and here is the output of installing tor:

sudo apt install tor

As you see, there is no requirement for libevent*, but you have to fix that error before installing tor, I suggest you to try executing the following commands:

sudo apt install libevent-dev
sudo apt install libevent1-dev
sudo apt install libevent-2.1-6

Here there is a screenshot of the output of every command (Installing the dependencies in this way produces NO ERRORS):

sudo apt install libevent-dev # This library is required for the libevent-2.1.6, Xubuntu 17.10 already comes with this version of libevent.

sudo apt install libevent-dev

sudo apt install libevent1-dev # This library is required for the libevent-1.4-2, but Xubuntu 17.10 already comes with libevent-2.1.6 so that is the cause of the conflict. I suggest you to install it, just if you really need it, otherwise, use the latest version.

sudo apt install libevent1-dev

And the last command will be sudo apt install libevent-2.1-6, this is just to prove that Xubuntu 17.10 comes with this library:

sudo apt install libevent-2.1-6

These commands will install dependencies one by one in a separate way, avoiding the conflict, because if you use sudo apt install libevent*, that command is the cause of the error message, see the image below. You’re trying to install two versions of the same library at the same time.

sudo apt install libevent*

After executing those commands, I didn’t get any errors and the dependencies are now correctly installed.

Finally, if you want, you can execute sudo apt autoremove, to delete the unnecesary packages.

sudo apt autoremove

Hope it helps, good luck!

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

This case is it.

[root@VIDA0 turnserver-2.6.2.1]# ./configure 
install is /usr/bin/install
pkill is /usr/bin/pkill
more is /usr/bin/more
Use TMP dir /var/tmp
Compiler: cc
Do not use -lsocket
Do not use -lwldap32
Do not use -lwldap64
Do not use -lintl
Sockets code is fine: no sin_len field present
relay threads can be used... may be...
Do not use -lcrypto
ERROR: OpenSSL Crypto development libraries are not installed properly in required location.
Abort.

and .. done.. install is failure..

What can I do about this? I searched for the error but did not get anything

Sathyajith Bhat's user avatar

asked Mar 31, 2016 at 5:48

Tony's user avatar

2

Just install the dev package of openssl which will install the headers.

if your OS is Redhat / Centos / Fedora : sudo yum install openssl-devel
Ubuntu / Debian : sudo apt-get install libssl-dev

answered Mar 31, 2016 at 13:48

Root's user avatar

В данной статье я покажу как используя библиотеку libevent, написать простейший Web-сервер, который будет по запросу клиентов выдавать файлы jpeg картинок.

Библиотека libevent предоставляет программистам доступ к кроссплатформенному асинхронному сетевому API. На основе данной библиотеки можно создавать высокопроизводительные сетевые приложения. Например, libevent используется в таких известных приложениях как Memcached (распределённая система кэширования) и TOR (распределённая анонимная сеть).

Скачать код сервера можно тут.

Начнем рассмотрение кода с функции main ():

75:int main (int argc, char *argv[])
76:{
77: struct event_base *ev_base;
78: struct evhttp *ev_http;
79:  
80: if (argc != 3) {
81:     printf ("Usage: %s host portn", argv[0]);
82:     exit (1);
83: }
84:
85: ev_base = event_init ();
86:
87: ev_http = evhttp_new (ev_base);
88: if (evhttp_bind_socket (ev_http, argv[1], (u_short)atoi (argv[2]))) {
89:     printf ("Failed to bind %s:%sn", argv[1], argv[2]);
90:     exit (1);
91: }
92: evhttp_set_cb (ev_http, "/img", http_img_cb, NULL);
93:
94: event_base_dispatch (ev_base);
95:
96: return 0;
97:}

Наш Web-сервер будет принимать два параметра из командной строки: IP адрес и порт, которые будет прослушивать сервер. В строках 80-83 идет проверка количества переданных параметров из командной строки. Не забывайте, что первым элементом массива argv[] всегда является имя самого приложения.

Строка 85 производит инициализацию библиотеки libevent, возвращает указатель на структуру данных «struct event_base». Во все дальнейшие вызовы функций библиотеки libevent должна будет передаваться эта переменная.

С 87 по 92 строку создается HTTP сервер, вызывается функция, которая инициализирует прослушку на переданном в командной строке адресе. Если вдруг данный адрес уже прослушивается каким-то другим приложением или у нас нет прав на занятие данного адреса (на забывайте, что порты до 1024 может занимать только приложение запущенное с правами пользователя root), то программа выводит сообщение на экран и завершает выполнение. Далее мы устанавливаем callback-функцию для «/img» URI.

Вся библиотека libevent построена на основе так называемых «callback»-функций (функций обратного вызова), они работают следующим образом: допустим мы хотим, чтобы при наступлении какого-то события («event» — англ. «событие», отсюда и название библиотеки) вызывалась наша функция. Для этого мы, использую API libevent, регистрируем нашу функцию для конкретного события (это может быть событие таймера, готовность сокета к приему данных, запрос URI и т.д). В дальнейшем, при наступлении этого события, происходит вызов нашей функции, которой передаются все необходимые параметры.

Строка 94 запускает цикл обработки событий. В нашем примере цикл будет выполнятся бесконечное количество раз, так как мы не предусмотрели завершение работы HTTP сервера. Для того чтобы выйти из этого цикла и завершить работу сервера, нужно будет в консоли нажать CTRL+C.

Теперь рассмотрим обработку «/img» HTTP запроса:

13:static void http_img_cb (struct evhttp_request *request, void *ctx)
14:{
15: struct evbuffer *evb;
16: int fd;
17: const char *fname;
18: struct stat stbuf;
19: int total_read_bytes, read_bytes;
20: struct evkeyvalq uri_params;
21:
22: evb = evbuffer_new ();
23:
24: printf ("Request from: %s:%d URI: %sn", request->remote_host, request->remote_port, request->uri);
25:
26: evhttp_parse_query (request->uri, &uri_params);
27: fname = evhttp_find_header (&uri_params, "name");
28:
29: if (!fname) {
30:     evbuffer_add_printf (evb, "Bad request");
31:     evhttp_send_reply (request, HTTP_BADREQUEST, "Bad request", evb);
32:     evhttp_clear_headers (&uri_params);
33:     evbuffer_free (evb);
34:     return;
35: }

Сторка 13 объявляет «callback» функцию http_img_cb (). При вызове функции, ей, в качестве аргументов, передастся указатель на структуру «struct evhttp_request», в которой содержится вся необходимая информация о HTTP запросе и указатель на пользовательские данные. В нашем примере переменная «ctx» не используется.
Строка 22 инициализирует переменную с типом «struct evbuffer *».

В libevent структура «struct evbuffer» является основным типом для работы с данными Ввода/Вывода («I/O»). API для работы с «struct evbuffer» позволяет эффективно считывать, записывать и производить поиск данных.

Строка 26 вызывает libevent функцию «evhttp_parse_query ()», которая принимает строку URI и возвращает список со значениями «ключ» → «значение» из параметров URI. Например, если произошел запрос «http://serverIP:port/img?aa=bb&cc=dd» и вызвали функцию «evhttp_parse_query (request->uri, &uri_params)», то в «uri_params» будут содержаться пары «aa» → «bb», «cc» → «dd». API libevent содержит несколько функций для работы с типом «struct evkeyvalq».

Строка 27 вызывает одну из таких функций, которая принимает указатель на структуру «struct evkeyvalq» и строку с ключом. Функция возвращает значение ключа или «NULL», если такой ключ не найден. В нашем случае мы будем принимать в URI параметрах ключ «name», в котором будет содержаться имя требуемого файла.

Строки 29-35 проверяют, чтобы ключ «name» был указан в URI параметрах. Если он не указан, мы, используя функцию «evhttp_send_reply ()», отсылаем ответ клиенту с HTTP кодом 400 и сообщением для пользователя «Bad request». Далее вызываем функцию «evhttp_clear_headers ()» для очистки списка «ключ» → «значение» и функцию «evbuffer_free ()» для освобождения памяти, занимаемой структурой «struct evbuffer» и выходим из функции.

Функция «evhttp_send_reply ()» является основным способом отсылки HTTP сообщений клиентам, в параметрах она принимает указатель на структуру «struct evhttp_request», HTTP код (в libevent есть несколько предопределённых констант с HTTP кодами), строку с коротким текстовым сообщением для броузера и указатель на структуру «struct evbuffer» — эти данные будут непосредственно отображены клиенту.

37: if ((fd = open (fname, O_RDONLY)) < 0) {
38:     evbuffer_add_printf (evb, " File %s not found", fname);
39:     evhttp_send_reply (request, HTTP_NOTFOUND, "File not found", evb);
40:     evhttp_clear_headers (&uri_params);
41:     evbuffer_free (evb);
42:     return;
43: }
44: if (fstat (fd, &stbuf) < 0) {
45:     evbuffer_add_printf (evb, "File %s not found", fname);
46:     evhttp_send_reply (request, HTTP_NOTFOUND, "File not found", evb);
47:     evhttp_clear_headers (&uri_params);
48:     evbuffer_free (evb);
49:     close (fd);
50:     return;
51: }

Строки 37-51 открывают файл для чтения. Имя файла берется из параметра «name». Далее вызывается функция «fstat ()», которая возвращает различную системную информацию о файле. Если в любой из функций произошла ошибка, то мы отсылаем ответ клиенту с HTTP кодом 404 и сообщением для пользователя «File not found», освобождаем память и выходим из функции.

53: total_read_bytes = 0;
54: while (total_read_bytes < stbuf.st_size) {
55:     read_bytes = evbuffer_read (evb, fd, stbuf.st_size);
56:     if (read_bytes < 0) {
57:         evbuffer_add_printf (evb, "Error reading file %s", fname);
58:         evhttp_send_reply (request, HTTP_NOTFOUND, "File not found", evb);
59:         evhttp_clear_headers (&uri_params);
60:         evbuffer_free (evb);
61:         close (fd);
62:         return;
63:     }
64:     total_read_bytes += read_bytes;
65: }

Строки 53-65 считывают данные из открытого файла в структуру «struct evbuffer». Функция «evbuffer_read ()» принимает в параметрах указатель на структуру «struct evbuffer», десктриптор открытого файла и сколько байтов нужно считать. Функция возвращает количество считанных байтов из файла. Возможна такая ситуация, что файл слишком большой, и его нельзя считать одним вызовом «evbuffer_read ()», тогда мы в цикле сверяем количество уже считанных байтов с размером файла, полученного из вызова «fstat ()» и при необходимости повторяем считывание.

66: evhttp_add_header (request->output_headers, "Content-Type", "image/jpeg");
67: evhttp_send_reply (request, HTTP_OK, "HTTP_OK", evb);
68:
69: evhttp_clear_headers (&uri_params);
70: evbuffer_free (evb);
71: close (fd);
72:}

Строки 66-72 отсылают содержание файла клиенту с HTTP кодом 200. Предварительно добавив к ответу HTTP заголовок «Content-Type: image/jpeg», это необходимо для того, чтобы броузер клиента правильно отобразил содержание картинки. После этого освобождаем память, закрываем файл и выходим из функции.

Сборка и тестирование.

Скопируйте в текущую директорию пару jpeg картинок и запомните имена файлов.

Чтобы скомпилить данный код, вам нужно на своем компьютере установить библиотеку libevent версии 1.4.XX (замените XX на последнюю доступную версию). На некоторых Linux дистрибутивах надо будет установить пакет «libevent-dev» Примеры:
для Gentoo: emerge libevent
для Ubuntu: aptitude install libevent-dev

После того, как библиотека установлена, сохраните код программы в файл main.c и можно попробовать скомпилить:
gcc main.c -o web_server -levent

Если ни каких ошибок не было, то у вас в текущей директории появится файл «web_server». Запускаем его с параметрами IP адрес и порт, например:
./web_server 127.0.0.1 8090

Теперь на своей машине откройте любой броузер и введите такой URL: http://127.0.0.1:8090/img?name=имя_jpeg_картинки
Должна показаться картинка. Ура, вы только что создали web сервер!

Немного о безопасности.
Web-сервер в данном виде не пригоден для использования в Интернете, так как нет проверки к какому файлу идет обращение. Допустим, можно послать такой запрос: «http://serverIP:port/img?name=/etc/passwd» и клиенту отошлется файл со списком пользователей системы. Я специально опустил рассмотрение безопасности, так как это тема целой отдельной статьи. Могу лишь посоветовать, что вполне безопасно запускать такой Web-сервер в «chroot» среде, предварительно скомпилив его с флагом «-static».

Что дальше.
Возможно, я в скором времени напишу продолжение о разработке простейшего Web-сервера, где покажу как можно кэшировать файлы картинок. Так же недавно начал писать статейку, где хочу рассказать, как можно организовать взаимодействие сервера и Flash клиента посредством двоичного протокола и API libevent.
Есть много разных интересный вещей, что можно сделать используя API libevent. Главное что отличает разработку программ с используя libevent — это простота и в то же время эффективность и скорость выполнения полученных программ. Обязательно почитайте книгу Learning Libevent. Успешного кодинга!

P.S. Подсветка кода почему-то не отображается ;/

Модератор: Bizdelnick

azsx

Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Не устанавливается zabbix, пакет libevent-2.0-5

У меня ubuntu 18.04.
При установке zabbix по инструкции https://losst.ru/ustanovka-zabbix-na-ubuntu пишет ошибку

sudo apt install zabbix-server-mysql zabbix-frontend-php
[sudo] пароль для pu:
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Некоторые пакеты невозможно установить. Возможно, вы просите невозможного,
или же используете нестабильную версию дистрибутива, где запрошенные вами
пакеты ещё не созданы или были удалены из Incoming.
Следующая информация, возможно, поможет вам:

Пакеты, имеющие неудовлетворённые зависимости:
zabbix-server-mysql : Зависит: libevent-2.0-5 (>= 2.0.10-stable) но он не может быть установлен
Рекомендует: snmpd но он не будет установлен
E: Невозможно исправить ошибки, у вас отложены (held) битые пакеты.

Я почитал про

zabbix-server-mysql : Зависит: libevent-2.0-5 (>= 2.0.10-stable) но он не может быть установлен

На нерусских сайтах пишут, что данный пакет ещё в 17 версию не стали портировать. Потом предлагают исправить source.list и дальше все понимают, что надо сделать. Но я не все.
Скажите, пожалуйста, что надо делать?

Аватара пользователя

Hephaestus

Сообщения: 3729
Статус: Многоуважаемый джинн…
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Не устанавливается zabbix, пакет libevent-2.0-5

Сообщение

Hephaestus » 05.10.2018 09:38

azsx писал(а): ↑

05.10.2018 05:19


Скажите, пожалуйста, что надо делать?

Ровно то, что Вы уже знаете:

azsx писал(а): ↑

05.10.2018 05:19


исправить source.list

Что и откуда Вы пытаетесь установить?
Инструкция по Вашей ссылке предписывает установку пакета вручную, без использования репов. Вы делаете именно так? Зачем?
zabbix-server-mysql присутствует в репах и никакого libevent в зависимостях у него нет.
Но даже если нужно libevent, этот пакет тоже имеется в репах.
Версия 2.1.6 соответствует условию «>= 2.0.10-stable», которое указано в Вашем сообщении об ошибке. Можно попробовать поставить этот пакет отдельно, не рассчитывая на автоматическое разруливание зависимости.
Однако ещё раз: libevent в зависимостях zabbix-server-mysql не указан.
Отсюда вывод: Вы ставите что-то не то и не оттуда.
Поэтому рекомендация, которую Вы нашли в сети совершенно правильная: проверить sources.list, поправить при необходимости и поставить желаемый пакет.
Как именно поправить sources.list, сказано, например, по ссылке на странице с пакетом zabbix-server-mysql

Используйте любой из серверов-зеркал, добавив его в свой файл /etc/apt/sources.list, например так:

deb http://cz.archive.ubuntu.com/ubuntu bionic main universe
Заменив cz.archive.ubuntu.com/ubuntu нужным сервером.

Вот эти вещи в sources.list и проверяйте.

А вообще, странно, что Вы это спрашиваете. Вроде не первый день в линуксах.

Последний раз редактировалось Hephaestus 05.10.2018 10:56, всего редактировалось 1 раз.

Пускай скрипят мои конечности.
Я — повелитель бесконечности…
Мой блог

Аватара пользователя

Hephaestus

Сообщения: 3729
Статус: Многоуважаемый джинн…
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Не устанавливается zabbix, пакет libevent-2.0-5

Сообщение

Hephaestus » 05.10.2018 10:42

azsx писал(а): ↑

05.10.2018 10:18


Как я понимаю, они предлагают поменять мне репозитории на буржуйские. Но мне ведь этого не надо! Я хочу на русской убунту остаться, верно?

Нет, неверно. Это просто зеркала, расположенные в разных точках планеты. Файлы там абсолютно одинаковые (по крайней мере, должны быть — в этом смысл зеркала). Обычно рекомендуют выбрать зеркало, которое ближе территориально, просто, чтобы быстрее скачивалось. Но иногда выходит наоборот: с «дальних» — качается быстрее.

К языковой локализации интерфейса это вообще не имеет отношения.

P.S. Тот факт, что зеркало из вашего sources.list отсутствует на сайте, означает только одно: вы пользуетесь неактуальным/неподдерживаемым/левым зеркалом, так что неудивительно, если с ним возникают проблемы.

Пускай скрипят мои конечности.
Я — повелитель бесконечности…
Мой блог

azsx

Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Не устанавливается zabbix, пакет libevent-2.0-5

Сообщение

azsx » 05.10.2018 11:17

serzh-z писал: ↑

05.10.2018 11:09


dpkg -i zabbix-release_3.4-1+bionic_all.deb

serzh-z вот мне кажется вот этой командой он мне должен был source.list изменить. А он вроде ничо не поменял.
Поэтому мне хочется понять чо и как самому надо поменять.
зы
только я вот такой ставлю

Shell

sudo dpkg -i zabbix-release_4.0-2+xenial_all.deb

Аватара пользователя

serzh-z

Бывший модератор
Сообщения: 8256
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Не устанавливается zabbix, пакет libevent-2.0-5

Сообщение

serzh-z » 05.10.2018 11:29

azsx
Если бы «ничего не поменял», то установилась бы версия zabbix из офф. репозиториев.

4.0 официально не поддерживается, я привел дословную цитату по установке _последней стабильной, поддерживаемой в Ubuntu, версией_.

Установка:

Для установки libevent-dev в Ubuntu / Linux Mint / Debian, введите в Терминал:

sudo apt update

sudo apt install libevent-dev


libevent-dev — Асинхронная библиотека уведомлений о событиях (файлы разработки)

Подробная информация о пакете:

Асинхронная библиотека уведомлений о событиях (файлы разработки)


Май 2019


Источник: packages.ubuntu.com

  • Зависимости:

  • libevent-2.1-6

    Асинхронная библиотека уведомлений о событиях

  • libevent-core-2.1-6

    Асинхронная библиотека уведомлений о событиях (ядро)

  • libevent-extra-2.1-6

    Асинхронная библиотека уведомлений о событиях (дополнительно)

  • libevent-openssl-2.1-6

    Асинхронная библиотека уведомлений о событиях (openssl)

  • libevent-pthreads-2.1-6

    Асинхронная библиотека уведомлений о событиях (pthreads)

Понравилась статья? Поделить с друзьями:
  • Error level php ini
  • Error level f 400000031
  • Error level e 400070031
  • Error level e 400030035
  • Error level analysis программа