Bug 170045 - [PATCH] security/cryptopp: Optional build of shared library version
Summary: [PATCH] security/cryptopp: Optional build of shared library version
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: Normal Affects Only Me
Assignee: Xin LI
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-07-21 03:30 UTC by Michael Gmelin
Modified: 2012-07-24 00:30 UTC (History)
1 user (show)

See Also:


Attachments
cryptopp-5.6.1_2.patch (3.23 KB, patch)
2012-07-21 03:30 UTC, Michael Gmelin
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Gmelin 2012-07-21 03:30:14 UTC
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)

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.
Comment 1 Edwin Groothuis freebsd_committer freebsd_triage 2012-07-21 03:30:46 UTC
Responsible Changed
From-To: freebsd-ports-bugs->delphij

Over to maintainer (via the GNATS Auto Assign Tool)
Comment 2 dfilter service freebsd_committer freebsd_triage 2012-07-23 23:44:48 UTC
Author: delphij
Date: Mon Jul 23 22:44:33 2012
New Revision: 301416
URL: http://svn.freebsd.org/changeset/ports/301416

Log:
  Make it possible to build and install shared library of crypto++, and
  convert to use OPTIONSng [1].
  
  While I'm there, also add an option to build with GCC 4.6.x and newer
  binutils, which enables use of AES-NI.
  
  PR:		ports/170045
  Submitted by:	Michael Gmelin <freebsd grem.de>

Modified:
  head/security/cryptopp/Makefile
  head/security/cryptopp/files/patch-GNUmakefile
  head/security/cryptopp/pkg-plist

Modified: head/security/cryptopp/Makefile
==============================================================================
--- head/security/cryptopp/Makefile	Mon Jul 23 21:19:52 2012	(r301415)
+++ head/security/cryptopp/Makefile	Mon Jul 23 22:44:33 2012	(r301416)
@@ -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,13 @@ DISTNAME=		cryptopp${PORTVERSION:S/.//g}
 MAINTAINER=		delphij@FreeBSD.org
 COMMENT=		A free C++ class library of Cryptographic Primitives
 
+OPTIONS_DEFINE=		DEBUG DOCS GCC46 STATIC THREADS
+OPTIONS_DEFAULT=	STATIC THREADS
+STATIC_DESC=		Build static version only (no shared libs)
+GCC46_DESC=		Build with GCC 4.6+
+
+.include <bsd.port.options.mk>
+
 NO_WRKSUBDIR=		yes
 USE_ZIP=		yes
 EXTRACT_BEFORE_ARGS=	-aq
@@ -23,8 +30,30 @@ USE_GMAKE=		yes
 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:MGCC46}
+USE_GCC=		4.6+
+.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 +65,12 @@ do-install:
 			-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

Modified: head/security/cryptopp/files/patch-GNUmakefile
==============================================================================
--- head/security/cryptopp/files/patch-GNUmakefile	Mon Jul 23 21:19:52 2012	(r301415)
+++ head/security/cryptopp/files/patch-GNUmakefile	Mon Jul 23 22:44:33 2012	(r301416)
@@ -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)

Modified: head/security/cryptopp/pkg-plist
==============================================================================
--- head/security/cryptopp/pkg-plist	Mon Jul 23 21:19:52 2012	(r301415)
+++ head/security/cryptopp/pkg-plist	Mon Jul 23 22:44:33 2012	(r301416)
@@ -132,6 +132,9 @@ include/cryptopp/zdeflate.h
 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
_______________________________________________
svn-ports-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-ports-all
To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
Comment 3 Xin LI freebsd_committer freebsd_triage 2012-07-23 23:45:22 UTC
State Changed
From-To: open->closed

Committed, thanks! 

(Note that the original submission gets DEBUG handling the 
different way, making it -DNDEBUG when DEBUG is desired, 
fixed in the commit).
Comment 4 Michael Gmelin 2012-07-24 00:24:11 UTC
Thanks  for correcting the flaw.