Skip site navigation (1)Skip section navigation (2)
Date:      21 Jul 2012 02:18:57 -0000
From:      Michael Gmelin <freebsd@grem.de>
To:        FreeBSD-gnats-submit@FreeBSD.org
Cc:        delphij@FreeBSD.org
Subject:   ports/170045: [PATCH] security/cryptopp: Optional build of shared library version
Message-ID:  <20120721021857.16560.qmail@mail.grem.de>
Resent-Message-ID: <201207210230.q6L2UFtB080436@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         170045
>Category:       ports
>Synopsis:       [PATCH] security/cryptopp: Optional build of shared library version
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jul 21 02:30:14 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     Michael Gmelin
>Release:        FreeBSD 8.2-RELEASE-p1 amd64
>Organization:
Grem Equity GmbH
>Environment:
System: FreeBSD srv06 8.2-RELEASE-p1 FreeBSD 8.2-RELEASE-p1 #0 r221593: Sat May  7 15:12:25
>Description:
Crypto++ includes a shared library target, which is helpful for certain use
cases (including dlopen/dlclose and RTLD_GLOBAL). The FreeBSD port should
allow to facilitate this.

See also:
http://www.cryptopp.com/wiki/Linux#Shared_objects

Port maintainer (delphij@FreeBSD.org) is cc'd.

Generated with FreeBSD Port Tools 0.99_6 (mode: change, diff: suffix)
>How-To-Repeat:
>Fix:
This patch adds a STATIC option, which is enabled by default; future
versions of the port might change the default to disabled, for the time
being it seems more reasonable this way, so current users of cryptopp won't
experience unpleasant surprises on update.

In absence of an official dynamic library versioning scheme upstream the
shared library interface version starts at 0 (so the shared libraries are
installed as libcryptopp.so -> libcryptopp.so.0 -> libcryptopp.so.5.6.1).

Building the dynamic library version adds -fPIC to CXXFLAGS.

The port now uses new-style options and a new option THREADS has been added
to allow thread-safe compilation. This is enabled by default, which - in
practice - only affects the dynamic library version. The change to the
patch to GNUMakefile allows passing of linker options to the shared library
target.

--- cryptopp-5.6.1_2.patch begins here ---
diff -ruN --exclude=CVS ../cryptopp.orig/Makefile ./Makefile
--- ../cryptopp.orig/Makefile	2011-11-10 05:38:32.000000000 +0000
+++ ./Makefile	2012-07-21 01:45:34.103056664 +0000
@@ -7,7 +7,7 @@
 
 PORTNAME=		cryptopp
 PORTVERSION=		5.6.1
-PORTREVISION=		1
+PORTREVISION=		2
 CATEGORIES=		security
 MASTER_SITES=		SF \
 			http://www.cryptopp.com/
@@ -16,6 +16,12 @@
 MAINTAINER=		delphij@FreeBSD.org
 COMMENT=		A free C++ class library of Cryptographic Primitives
 
+OPTIONS_DEFINE=		DEBUG DOCS STATIC THREADS
+OPTIONS_DEFAULT=	STATIC THREADS
+STATIC_DESC=		Build static version only (no shared libs)
+
+.include <bsd.port.options.mk>
+
 NO_WRKSUBDIR=		yes
 USE_ZIP=		yes
 EXTRACT_BEFORE_ARGS=	-aq
@@ -23,8 +29,26 @@
 MAKE_JOBS_SAFE=		yes
 MAKEFILE=		GNUmakefile
 
-.if !defined(WITH_DEBUG)
-CXXFLAGS+=	-DNDEBUG
+LIBVERSION=		0
+PLIST_SUB+=		LIBVERSION=${LIBVERSION}
+PLIST_SUB+=		PORTVERSION=${PORTVERSION}
+
+.if ${PORT_OPTIONS:MDEBUG}
+CXXFLAGS+=		-DNDEBUG
+.endif
+
+.if ${PORT_OPTIONS:MSTATIC}
+PLIST_SUB+=		DYNAMIC_ENABLED="@comment "
+.else
+PLIST_SUB+=		DYNAMIC_ENABLED=""
+MAKE_ARGS=		all libcryptopp.so
+CXXFLAGS+=		-fPIC
+USE_LDCONFIG=		yes
+.endif
+
+.if ${PORT_OPTIONS:MTHREADS}
+CXXFLAGS+=		${PTHREAD_CFLAGS}
+LDFLAGS+=		${PTHREAD_LIBS}
 .endif
 
 do-install:
@@ -36,7 +60,12 @@
 			-and -not -name 'resource.h'`; do \
 		${INSTALL_DATA} $$i ${PREFIX}/include/cryptopp; \
 	done)
-.if !defined(NOPORTDOCS)
+.if !${PORT_OPTIONS:MSTATIC}
+	${INSTALL_LIB} ${WRKSRC}/libcryptopp.so ${PREFIX}/lib/libcryptopp.so.${PORTVERSION}
+	${LN} -fs libcryptopp.so.${PORTVERSION} ${PREFIX}/lib/libcryptopp.so.${LIBVERSION}
+	${LN} -fs libcryptopp.so.${LIBVERSION} ${PREFIX}/lib/libcryptopp.so
+.endif
+.if ${PORT_OPTIONS:MDOCS}
 	${MKDIR} ${PREFIX}/share/doc/cryptopp
 	${CP} ${WRKSRC}/Readme.txt ${PREFIX}/share/doc/cryptopp/README
 	${CP} ${WRKSRC}/License.txt ${PREFIX}/share/doc/cryptopp/License
diff -ruN --exclude=CVS ../cryptopp.orig/files/patch-GNUmakefile ./files/patch-GNUmakefile
--- ../cryptopp.orig/files/patch-GNUmakefile	2011-01-27 20:47:30.000000000 +0000
+++ ./files/patch-GNUmakefile	2012-07-21 01:35:28.726776901 +0000
@@ -1,5 +1,5 @@
 --- ./GNUmakefile.orig	2010-08-09 14:22:42.000000000 -0700
-+++ ./GNUmakefile	2011-01-27 12:43:08.905856979 -0800
++++ ./GNUmakefile	2012-07-21 03:14:01.000000000 +0200
 @@ -1,4 +1,4 @@
 -CXXFLAGS = -DNDEBUG -g -O2
 +#CXXFLAGS = -DNDEBUG -g -O2
@@ -19,3 +19,12 @@
  ISMINGW = $(shell $(CXX) --version 2>&1 | $(EGREP) -c "mingw")
  
  ifneq ($(GCC42_OR_LATER),0)
+@@ -151,7 +151,7 @@
+	$(RANLIB) $@
+ 
+ libcryptopp.so: $(LIBOBJS)
+-	$(CXX) -shared -o $@ $(LIBOBJS)
++	$(CXX) -shared -o $@ $(CXXFLAGS) $(LDFLAGS) $(LIBOBJS)
+ 
+ cryptest.exe: libcryptopp.a $(TESTOBJS)
+	$(CXX) -o $@ $(CXXFLAGS) $(TESTOBJS) -L. -lcryptopp $(LDFLAGS) $(LDLIBS)
diff -ruN --exclude=CVS ../cryptopp.orig/pkg-plist ./pkg-plist
--- ../cryptopp.orig/pkg-plist	2009-03-27 00:02:32.000000000 +0000
+++ ./pkg-plist	2012-07-21 01:45:34.102055960 +0000
@@ -132,6 +132,9 @@
 include/cryptopp/zinflate.h
 include/cryptopp/zlib.h
 lib/libcryptopp.a
+%%DYNAMIC_ENABLED%%lib/libcryptopp.so
+%%DYNAMIC_ENABLED%%lib/libcryptopp.so.%%LIBVERSION%%
+%%DYNAMIC_ENABLED%%lib/libcryptopp.so.%%PORTVERSION%%
 @dirrm include/cryptopp
 %%PORTDOCS%%%%DOCSDIR%%/README
 %%PORTDOCS%%%%DOCSDIR%%/License
--- cryptopp-5.6.1_2.patch ends here ---

>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120721021857.16560.qmail>