mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 01:39:16 -04:00
Add port for libstrophe, an XMPP library for C
Parts of this port is based on work by fabianfreyer@github
This commit is contained in:
parent
422175aa35
commit
dbdecc9f33
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=379170
7 changed files with 356 additions and 0 deletions
|
@ -58,6 +58,7 @@
|
||||||
SUBDIR += libnice-gst010
|
SUBDIR += libnice-gst010
|
||||||
SUBDIR += libnice-gst1
|
SUBDIR += libnice-gst1
|
||||||
SUBDIR += libpurple
|
SUBDIR += libpurple
|
||||||
|
SUBDIR += libstrophe
|
||||||
SUBDIR += libtelepathy
|
SUBDIR += libtelepathy
|
||||||
SUBDIR += libyahoo2
|
SUBDIR += libyahoo2
|
||||||
SUBDIR += licq
|
SUBDIR += licq
|
||||||
|
|
30
net-im/libstrophe/Makefile
Normal file
30
net-im/libstrophe/Makefile
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# $FreeBSD$
|
||||||
|
|
||||||
|
PORTNAME= libstrophe
|
||||||
|
PORTVERSION= 0.8.7
|
||||||
|
CATEGORIES= net-im
|
||||||
|
|
||||||
|
MAINTAINER= arved@FreeBSD.org
|
||||||
|
COMMENT= Lightweight XMPP library
|
||||||
|
|
||||||
|
LICENSE= MIT
|
||||||
|
LICENSE_FILE= ${WRKSRC}/MIT-LICENSE.txt
|
||||||
|
|
||||||
|
LIB_DEPENDS= libexpat.so:${PORTSDIR}/textproc/expat2
|
||||||
|
|
||||||
|
USE_GITHUB= yes
|
||||||
|
GH_ACCOUNT= strophe
|
||||||
|
GH_PROJECT= libstrophe
|
||||||
|
GH_COMMIT= 2093aac
|
||||||
|
GH_TAGNAME= ${GH_COMMIT}
|
||||||
|
USE_AUTOTOOLS= autoconf:env automake:env libtoolize:env
|
||||||
|
USES= libtool pkgconfig
|
||||||
|
GNU_CONFIGURE= yes
|
||||||
|
CONFIGURE_ARGS+= --with-pkgconfigdir=${PREFIX}/libdata/pkgconfig
|
||||||
|
USE_OPENSSL= yes
|
||||||
|
USE_LDCONFIG= yes
|
||||||
|
|
||||||
|
pre-configure:
|
||||||
|
cd ${WRKSRC}; ./bootstrap.sh
|
||||||
|
|
||||||
|
.include <bsd.port.mk>
|
2
net-im/libstrophe/distinfo
Normal file
2
net-im/libstrophe/distinfo
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
SHA256 (libstrophe-0.8.7.tar.gz) = 455ee68951a1460d71676ce1e4d50f21a0af07bdca3e3a1c44fd149e5a375bed
|
||||||
|
SIZE (libstrophe-0.8.7.tar.gz) = 125960
|
72
net-im/libstrophe/files/patch-configure.ac
Normal file
72
net-im/libstrophe/files/patch-configure.ac
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
--- configure.ac.orig 2015-01-27 23:23:08 UTC
|
||||||
|
+++ configure.ac
|
||||||
|
@@ -12,11 +12,11 @@ AS_CASE([$host_os],
|
||||||
|
[freebsd*], [PLATFORM="freebsd"],
|
||||||
|
[PLATFORM="nix"])
|
||||||
|
|
||||||
|
-PKG_CHECK_MODULES([openssl], [openssl], [PC_REQUIRES+=(openssl)],
|
||||||
|
+PKG_CHECK_MODULES([openssl], [openssl], [PC_REQUIRES="openssl ${PC_REQUIRES}"],
|
||||||
|
[AC_CHECK_HEADER([openssl/ssl.h],
|
||||||
|
[
|
||||||
|
openssl_LIBS="-lssl -lcrypto"
|
||||||
|
- PC_LIBS+=($openssl_LIBS)
|
||||||
|
+ PC_LIBS="${openssl_LIBS} ${PC_LIBS}"
|
||||||
|
],
|
||||||
|
[AC_MSG_ERROR([openssl not found; openssl required])]
|
||||||
|
)])
|
||||||
|
@@ -32,7 +32,7 @@ if test "x$with_libxml2" != xno; then
|
||||||
|
PKG_CHECK_MODULES([libxml2], [libxml-2.0 >= 2.7],
|
||||||
|
[
|
||||||
|
with_libxml2=yes
|
||||||
|
- PC_REQUIRES+=(libxml-2.0)
|
||||||
|
+ PC_REQUIRES="libxml-2.0 ${PC_REQUIRES}"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
old_CFLAGS=$CFLAGS
|
||||||
|
@@ -42,19 +42,19 @@ if test "x$with_libxml2" != xno; then
|
||||||
|
with_libxml2=yes
|
||||||
|
libxml2_CFLAGS="-I${includedir}/libxml2"
|
||||||
|
libxml2_LIBS="-lxml2"
|
||||||
|
- PC_LIBS+=($libxml2_LIBS)
|
||||||
|
- PC_CFLAGS+=($libxml2_CFLAGS)
|
||||||
|
+ PC_LIBS="${libxml2_LIBS} ${PC_LIBS}"
|
||||||
|
+ PC_CFLAGS="${libxml2_CFLAGS} ${PC_CFLAGS}"
|
||||||
|
],
|
||||||
|
[AC_MSG_ERROR([libxml2 not found.])])
|
||||||
|
CFLAGS=$old_CFLAGS
|
||||||
|
])
|
||||||
|
else
|
||||||
|
PKG_CHECK_MODULES([expat], [expat >= 2.0.0],
|
||||||
|
- [PC_REQUIRES+=(expat)],
|
||||||
|
+ [PC_REQUIRES="expat ${PC_REQUIRES}"],
|
||||||
|
[AC_CHECK_HEADER([expat.h],
|
||||||
|
[
|
||||||
|
expat_LIBS="-lexpat"
|
||||||
|
- PC_LIBS+=($expat_LIBS)
|
||||||
|
+ PC_LIBS="${expat_LIBS} ${PC_LIBS}"
|
||||||
|
],
|
||||||
|
[AC_MSG_ERROR([expat not found; expat required.])]
|
||||||
|
)
|
||||||
|
@@ -80,7 +80,7 @@ if test "x$PLATFORM" != xfreebsd; then
|
||||||
|
AC_CHECK_LIB([resolv], [res_query], [],
|
||||||
|
[AC_CHECK_LIB([resolv], [__res_query], [],
|
||||||
|
[AC_MSG_ERROR([libresolv not found; libresolv required.])])])
|
||||||
|
- PC_LIBS+=(-lresolv)
|
||||||
|
+ PC_LIBS="-lresolv ${PC_LIBS}"
|
||||||
|
else
|
||||||
|
AC_MSG_NOTICE([skipping libresolv checks for freebsd])
|
||||||
|
fi
|
||||||
|
@@ -97,9 +97,10 @@ m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLD
|
||||||
|
|
||||||
|
AM_CONDITIONAL([PARSER_EXPAT], [test x$with_parser != xlibxml2])
|
||||||
|
|
||||||
|
-AC_SUBST([PC_REQUIRES], [${PC_REQUIRES[[@]]}])
|
||||||
|
-AC_SUBST([PC_CFLAGS], [${PC_CFLAGS[[@]]}])
|
||||||
|
-AC_SUBST([PC_LIBS], [${PC_LIBS[[@]]}])
|
||||||
|
+AC_SUBST([PC_REQUIRES], [${PC_REQUIRES}])
|
||||||
|
+AC_SUBST([PC_CFLAGS], [${PC_CFLAGS}])
|
||||||
|
+AC_SUBST([PC_LIBS], [${PC_LIBS}])
|
||||||
|
+AC_SUBST([LIB_VERSION], [0:0:0])
|
||||||
|
|
||||||
|
AC_SUBST(PARSER_NAME)
|
||||||
|
AC_SUBST(PARSER_CFLAGS)
|
241
net-im/libstrophe/files/patch-use-openssl-sha1
Normal file
241
net-im/libstrophe/files/patch-use-openssl-sha1
Normal file
|
@ -0,0 +1,241 @@
|
||||||
|
diff --git a/Makefile.am b/Makefile.am
|
||||||
|
index dadce55..6c63974 100644
|
||||||
|
--- Makefile.am
|
||||||
|
+++ Makefile.am
|
||||||
|
@@ -21,11 +21,11 @@ libstrophe_la_LDFLAGS = $(SSL_LIBS) $(PARSER_LIBS)
|
||||||
|
libstrophe_la_LDFLAGS += -export-symbols-regex '^xmpp_'
|
||||||
|
libstrophe_la_SOURCES = src/auth.c src/conn.c src/ctx.c \
|
||||||
|
src/event.c src/handler.c src/hash.c \
|
||||||
|
- src/jid.c src/md5.c src/sasl.c src/scram.c src/sha1.c \
|
||||||
|
+ src/jid.c src/md5.c src/sasl.c src/scram.c \
|
||||||
|
src/snprintf.c src/sock.c src/stanza.c src/thread.c \
|
||||||
|
src/tls_openssl.c src/util.c \
|
||||||
|
src/common.h src/hash.h src/md5.h src/ostypes.h src/parser.h \
|
||||||
|
- src/sasl.h src/scram.h src/sha1.h src/sock.h src/thread.h src/tls.h \
|
||||||
|
+ src/sasl.h src/scram.h src/sock.h src/thread.h src/tls.h \
|
||||||
|
src/util.h
|
||||||
|
|
||||||
|
if PARSER_EXPAT
|
||||||
|
diff --git a/src/sasl.c b/src/sasl.c
|
||||||
|
index 3d83fd0..9e1b40b 100644
|
||||||
|
--- src/sasl.c
|
||||||
|
+++ src/sasl.c
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
#include "ostypes.h"
|
||||||
|
#include "sasl.h"
|
||||||
|
#include "md5.h"
|
||||||
|
-#include "sha1.h"
|
||||||
|
+#include <openssl/sha.h>
|
||||||
|
#include "scram.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
@@ -355,8 +355,8 @@ char *sasl_scram_sha1(xmpp_ctx_t *ctx, const char *challenge,
|
||||||
|
const char *first_bare, const char *jid,
|
||||||
|
const char *password)
|
||||||
|
{
|
||||||
|
- uint8_t key[SHA1_DIGEST_SIZE];
|
||||||
|
- uint8_t sign[SHA1_DIGEST_SIZE];
|
||||||
|
+ uint8_t key[SHA_DIGEST_LENGTH];
|
||||||
|
+ uint8_t sign[SHA_DIGEST_LENGTH];
|
||||||
|
char *r = NULL;
|
||||||
|
char *s = NULL;
|
||||||
|
char *i = NULL;
|
||||||
|
@@ -422,7 +422,7 @@ char *sasl_scram_sha1(xmpp_ctx_t *ctx, const char *challenge,
|
||||||
|
SCRAM_SHA1_ClientKey((uint8_t *)password, strlen(password),
|
||||||
|
(uint8_t *)sval, sval_len, (uint32_t)ival, key);
|
||||||
|
SCRAM_SHA1_ClientSignature(key, (uint8_t *)auth, strlen(auth), sign);
|
||||||
|
- for (j = 0; j < SHA1_DIGEST_SIZE; j++) {
|
||||||
|
+ for (j = 0; j < SHA_DIGEST_LENGTH; j++) {
|
||||||
|
sign[j] ^= key[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/scram.c b/src/scram.c
|
||||||
|
index 5cce168..688028f 100644
|
||||||
|
--- src/scram.c
|
||||||
|
+++ src/scram.c
|
||||||
|
@@ -19,46 +19,46 @@
|
||||||
|
#include <assert.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
-#include "sha1.h"
|
||||||
|
+#include <openssl/sha.h>
|
||||||
|
#include "ostypes.h"
|
||||||
|
|
||||||
|
#include "scram.h"
|
||||||
|
|
||||||
|
/* block size for HMAC */
|
||||||
|
#define BLOCK_SIZE 64
|
||||||
|
-#if BLOCK_SIZE < SHA1_DIGEST_SIZE
|
||||||
|
-#error BLOCK_SIZE must not be less than SHA1_DIGEST_SIZE
|
||||||
|
+#if BLOCK_SIZE < SHA_DIGEST_LENGTH
|
||||||
|
+#error BLOCK_SIZE must not be less than SHA_DIGEST_LENGTH
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const uint8_t ipad = 0x36;
|
||||||
|
static const uint8_t opad = 0x5C;
|
||||||
|
|
||||||
|
-static void SHA1(const uint8_t* data, size_t len,
|
||||||
|
- uint8_t digest[SHA1_DIGEST_SIZE])
|
||||||
|
+static void _SHA1(const uint8_t* data, size_t len,
|
||||||
|
+ uint8_t digest[SHA_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
- SHA1_CTX ctx;
|
||||||
|
+ SHA_CTX ctx;
|
||||||
|
SHA1_Init(&ctx);
|
||||||
|
- SHA1_Update(&ctx, data, len);
|
||||||
|
- SHA1_Final(&ctx, digest);
|
||||||
|
+ SHA1_Update(&ctx, (const void*) data, len);
|
||||||
|
+ SHA1_Final(digest, &ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HMAC_SHA1(const uint8_t *key, size_t key_len,
|
||||||
|
const uint8_t *text, size_t len,
|
||||||
|
- uint8_t digest[SHA1_DIGEST_SIZE])
|
||||||
|
+ uint8_t digest[SHA_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
uint8_t key_pad[BLOCK_SIZE];
|
||||||
|
uint8_t key_ipad[BLOCK_SIZE];
|
||||||
|
uint8_t key_opad[BLOCK_SIZE];
|
||||||
|
- uint8_t sha_digest[SHA1_DIGEST_SIZE];
|
||||||
|
+ uint8_t sha_digest[SHA_DIGEST_LENGTH];
|
||||||
|
int i;
|
||||||
|
- SHA1_CTX ctx;
|
||||||
|
+ SHA_CTX ctx;
|
||||||
|
|
||||||
|
memset(key_pad, 0, sizeof(key_pad));
|
||||||
|
if (key_len <= BLOCK_SIZE) {
|
||||||
|
memcpy(key_pad, key, key_len);
|
||||||
|
} else {
|
||||||
|
/* according to RFC2104 */
|
||||||
|
- SHA1(key, key_len, key_pad);
|
||||||
|
+ _SHA1(key, key_len, key_pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < BLOCK_SIZE; i++) {
|
||||||
|
@@ -67,19 +67,19 @@ static void HMAC_SHA1(const uint8_t *key, size_t key_len,
|
||||||
|
}
|
||||||
|
|
||||||
|
SHA1_Init(&ctx);
|
||||||
|
- SHA1_Update(&ctx, key_ipad, BLOCK_SIZE);
|
||||||
|
- SHA1_Update(&ctx, text, len);
|
||||||
|
- SHA1_Final(&ctx, sha_digest);
|
||||||
|
+ SHA1_Update(&ctx, (const void*) key_ipad, BLOCK_SIZE);
|
||||||
|
+ SHA1_Update(&ctx, (const void*) text, len);
|
||||||
|
+ SHA1_Final(sha_digest, &ctx);
|
||||||
|
|
||||||
|
SHA1_Init(&ctx);
|
||||||
|
- SHA1_Update(&ctx, key_opad, BLOCK_SIZE);
|
||||||
|
- SHA1_Update(&ctx, sha_digest, SHA1_DIGEST_SIZE);
|
||||||
|
- SHA1_Final(&ctx, digest);
|
||||||
|
+ SHA1_Update(&ctx, (const void*) key_opad, BLOCK_SIZE);
|
||||||
|
+ SHA1_Update(&ctx, (const void*) sha_digest, SHA_DIGEST_LENGTH);
|
||||||
|
+ SHA1_Final(digest, &ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len,
|
||||||
|
const uint8_t *salt, size_t salt_len, uint32_t i,
|
||||||
|
- uint8_t digest[SHA1_DIGEST_SIZE])
|
||||||
|
+ uint8_t digest[SHA_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
int j, k;
|
||||||
|
uint8_t tmp[128];
|
||||||
|
@@ -89,7 +89,7 @@ static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len,
|
||||||
|
/* assume salt + INT(1) isn't longer than sizeof(tmp) */
|
||||||
|
assert(salt_len <= sizeof(tmp) - sizeof(int1));
|
||||||
|
|
||||||
|
- memset(digest, 0, SHA1_DIGEST_SIZE);
|
||||||
|
+ memset(digest, 0, SHA_DIGEST_LENGTH);
|
||||||
|
if (i == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@@ -99,11 +99,11 @@ static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len,
|
||||||
|
|
||||||
|
/* 'text' for Hi is a 'key' for HMAC */
|
||||||
|
HMAC_SHA1(text, len, tmp, salt_len + sizeof(int1), digest);
|
||||||
|
- memcpy(tmp, digest, SHA1_DIGEST_SIZE);
|
||||||
|
+ memcpy(tmp, digest, SHA_DIGEST_LENGTH);
|
||||||
|
|
||||||
|
for (j = 1; j < i; j++) {
|
||||||
|
- HMAC_SHA1(text, len, tmp, SHA1_DIGEST_SIZE, tmp);
|
||||||
|
- for (k = 0; k < SHA1_DIGEST_SIZE; k++) {
|
||||||
|
+ HMAC_SHA1(text, len, tmp, SHA_DIGEST_LENGTH, tmp);
|
||||||
|
+ for (k = 0; k < SHA_DIGEST_LENGTH; k++) {
|
||||||
|
digest[k] ^= tmp[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -111,33 +111,33 @@ static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len,
|
||||||
|
|
||||||
|
void SCRAM_SHA1_ClientKey(const uint8_t *password, size_t len,
|
||||||
|
const uint8_t *salt, size_t salt_len, uint32_t i,
|
||||||
|
- uint8_t key[SHA1_DIGEST_SIZE])
|
||||||
|
+ uint8_t key[SHA_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
- uint8_t salted[SHA1_DIGEST_SIZE];
|
||||||
|
+ uint8_t salted[SHA_DIGEST_LENGTH];
|
||||||
|
|
||||||
|
/* XXX: Normalize(password) is omitted */
|
||||||
|
|
||||||
|
SCRAM_SHA1_Hi(password, len, salt, salt_len, i, salted);
|
||||||
|
- HMAC_SHA1(salted, SHA1_DIGEST_SIZE, (uint8_t *)"Client Key",
|
||||||
|
+ HMAC_SHA1(salted, SHA_DIGEST_LENGTH, (uint8_t *)"Client Key",
|
||||||
|
strlen("Client Key"), key);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA1_DIGEST_SIZE],
|
||||||
|
+void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA_DIGEST_LENGTH],
|
||||||
|
const uint8_t *AuthMessage, size_t len,
|
||||||
|
- uint8_t sign[SHA1_DIGEST_SIZE])
|
||||||
|
+ uint8_t sign[SHA_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
- uint8_t stored[SHA1_DIGEST_SIZE];
|
||||||
|
+ uint8_t stored[SHA_DIGEST_LENGTH];
|
||||||
|
|
||||||
|
- SHA1(ClientKey, SHA1_DIGEST_SIZE, stored);
|
||||||
|
- HMAC_SHA1(stored, SHA1_DIGEST_SIZE, AuthMessage, len, sign);
|
||||||
|
+ SHA1(ClientKey, SHA_DIGEST_LENGTH, stored);
|
||||||
|
+ HMAC_SHA1(stored, SHA_DIGEST_LENGTH, AuthMessage, len, sign);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA1_DIGEST_SIZE],
|
||||||
|
- const uint8_t ClientSignature[SHA1_DIGEST_SIZE],
|
||||||
|
- uint8_t proof[SHA1_DIGEST_SIZE])
|
||||||
|
+void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA_DIGEST_LENGTH],
|
||||||
|
+ const uint8_t ClientSignature[SHA_DIGEST_LENGTH],
|
||||||
|
+ uint8_t proof[SHA_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
- for (i = 0; i < SHA1_DIGEST_SIZE; i++) {
|
||||||
|
+ for (i = 0; i < SHA_DIGEST_LENGTH; i++) {
|
||||||
|
proof[i] = ClientKey[i] ^ ClientSignature[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/scram.h b/src/scram.h
|
||||||
|
index a0b996b..f81a5b6 100644
|
||||||
|
--- src/scram.h
|
||||||
|
+++ src/scram.h
|
||||||
|
@@ -19,18 +19,18 @@
|
||||||
|
/* make sure the stdint.h types are available */
|
||||||
|
#include "ostypes.h"
|
||||||
|
|
||||||
|
-#include "sha1.h"
|
||||||
|
+#include<openssl/sha.h>
|
||||||
|
|
||||||
|
void SCRAM_SHA1_ClientKey(const uint8_t *password, size_t len,
|
||||||
|
const uint8_t *salt, size_t salt_len, uint32_t i,
|
||||||
|
- uint8_t key[SHA1_DIGEST_SIZE]);
|
||||||
|
+ uint8_t key[SHA_DIGEST_LENGTH]);
|
||||||
|
|
||||||
|
-void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA1_DIGEST_SIZE],
|
||||||
|
+void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA_DIGEST_LENGTH],
|
||||||
|
const uint8_t *AuthMessage, size_t len,
|
||||||
|
- uint8_t sign[SHA1_DIGEST_SIZE]);
|
||||||
|
+ uint8_t sign[SHA_DIGEST_LENGTH]);
|
||||||
|
|
||||||
|
-void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA1_DIGEST_SIZE],
|
||||||
|
- const uint8_t ClientSignature[SHA1_DIGEST_SIZE],
|
||||||
|
- uint8_t proof[SHA1_DIGEST_SIZE]);
|
||||||
|
+void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA_DIGEST_LENGTH],
|
||||||
|
+ const uint8_t ClientSignature[SHA_DIGEST_LENGTH],
|
||||||
|
+ uint8_t proof[SHA_DIGEST_LENGTH]);
|
||||||
|
|
||||||
|
#endif /* __LIBSTROPHE_SCRAM_H__ */
|
4
net-im/libstrophe/pkg-descr
Normal file
4
net-im/libstrophe/pkg-descr
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
libstrophe is a minimal XMPP library written in C. It has almost no external
|
||||||
|
dependencies, only an XML parsing library (expat or libxml are both supported).
|
||||||
|
|
||||||
|
WWW: http://strophe.im/libstrophe/
|
6
net-im/libstrophe/pkg-plist
Normal file
6
net-im/libstrophe/pkg-plist
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
include/strophe.h
|
||||||
|
lib/libstrophe.so.0.0.0
|
||||||
|
lib/libstrophe.so.0
|
||||||
|
lib/libstrophe.so
|
||||||
|
lib/libstrophe.a
|
||||||
|
libdata/pkgconfig/libstrophe.pc
|
Loading…
Add table
Reference in a new issue