# Copyright 2002-2006 The Apache Software Foundation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # All these setting come from the configure script # We use configure to do most of the hard work as it is more # designed to handle different system complexity than make # # Process this file with autoconf to produce a configure script AC_INIT([[XML-Security-C]], [1.3.1], [security-dev@xml.apache.org], [xml-security-c]) AC_CONFIG_AUX_DIR([config]) # kick off automake AM_INIT_AUTOMAKE(XMl-Security-C, 1.3.1) AM_PROG_LIBTOOL # We want to control the autotools invocation AM_MAINTAINER_MODE # framework is a unique directory in src/ - allows configure to check # it is running in the correct directory AC_CONFIG_SRCDIR(src) # Define the files we wish to generate AC_CONFIG_FILES([Makefile\ lib/Makefile \ include/Makefile \ bin/Makefile ]) # AC_CONFIG_FILES([Makefile canon/Makefile transformers/Makefile dsig/Makefile enc/Makefile enc/OpenSSL/Makefile framework/Makefile utils/Makefile utils/unixutils/Makefile tools/Makefile samples/Makefile]) AC_CONFIG_HEADERS([src/framework/XSECConfig.hpp]) # Get user options AC_ARG_WITH(xerces, AC_HELP_STRING(--with-xerces, [Define Xerces directory. Values = 'yes' or installation directory. 'No' is not permitted (Default = yes)]), use_xerces=$withval, use_xerces=yes) if test x"$use_xerces" != "xyes" ; then if test x"$use_xerces" != "xno" ; then XERCESCROOT=$use_xerces else AC_MSG_ERROR([Cannot configure without Xerces]) fi fi AC_ARG_WITH(xalan, AC_HELP_STRING(--with-xalan, [Enable Xalan integration. Values = 'yes' or installation directory (Default = yes)]), use_xalan=$withval, use_xalan=yes) if test x"$use_xalan" != "xyes" ; then if test x"$use_xalan" != "xno" ; then XALANCROOT=$use_xalan fi fi AC_ARG_WITH(openssl, AC_HELP_STRING(--with-openssl, [Use Openssl. Values = 'yes' or installation directory (Default = yes)]), use_openssl=$withval, use_openssl=yes) if test x"$use_openssl" != "xyes" ; then if test x"$use_openssl" != "xno" ; then # Must be the source directory OPENSSL=$use_openssl fi fi AC_ARG_ENABLE(debug, AC_HELP_STRING(--enable-debug, [Compile a version of the library with symbols (Default = no)]), enable_debug=$enableval, enable_debug=no) # As of version 1.3, by default treat warnings as errors AC_ARG_ENABLE(warnerror, AC_HELP_STRING(--enable-warnerrer, [Treat warnings as errors during compile (Default = no)]), enable_warnerror=$enableval, enable_warnerror=no) # Check for basic programs AC_PROG_CC AC_PROG_CXX AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_AWK AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, true) # AC_PROG_CC Defines the OBJEXT objsuffix=".${OBJEXT}" # pthreads ACX_PTHREAD CXXFLAGS="${CXXFLAGS} ${PTHREAD_CFLAGS}" LIBS="${LIBS} ${PTHREAD_LIBS}" # Set up versions package_version_major=`echo ${PACKAGE_VERSION} | ${AWK} -F '.' '{print $1}'` package_version_medium=`echo ${PACKAGE_VERSION} | ${AWK} -F '.' '{print $2}'` package_version_minor=`echo ${PACKAGE_VERSION} | ${AWK} -F '.' '{print $3}'` package_lib_major=${package_version_major}${package_version_medium} package_lib_minor=${package_version_minor} package_lib_version=${package_lib_major}.${package_lib_minor} # "cache" the check for gcc -E AC_TRY_CPP() AC_LANG(C++) AC_TRY_CPP() # Need to reset CXXFLAGS if defaults have been set if test "$ac_test_CXXFLAGS" != set; then CXXFLAGS="" fi # Check for Intel > 8.0 (which fools configure into thinking it is GNU if test "x${ac_cv_cxx_compiler_gnu}" = "xyes"; then AC_MSG_CHECKING([for Intel compiler disguised as GNU]) intel_check=`${CXX} -v 2>&1 | ${AWK} '{print $1}'` if test "x${intel_check}" = "xVersion"; then AC_MSG_RESULT([yes]) ac_cv_cxx_compiler_gnu="no" else AC_MSG_RESULT([no]) fi fi AC_LANG(C) # Checks for required libraries AC_CHECK_LIB(m, floor) AC_CHECK_LIB(socket, getservent) # Determine the host system and Makefile fragment # Check for required includes AC_CHECK_HEADERS(unistd.h direct.h) # As a part of the automake process, AM_CHECK_LIBTOOL calls # this automatically. Adding here causes spurious warning messages #AC_CANONICAL_HOST # Ensure we are always compiling using library defs CFLAGS="${CFLAGS} -DXSEC_LIBRARY_BUILD" CXXFLAGS="${CXXFLAGS} -DXSEC_LIBRARY_BUILD" # Platform-specific Makefile setup # We have put most of the platform specific configuration here rather than # in the Makefile. Autoconf is designed with platform portability in mind, # so by putting the complexity here we should be able to create a more # portable makefile. case "${host}" in *-*-solaris*) platform=SOLARIS shlibsuffix=.so lib_name="lib${PACKAGE_TARNAME}.so.${package_lib_version}" lib_major_name="lib${PACKAGE_TARNAME}.so.${package_lib_major}" lib_short_name="lib${PACKAGE_TARNAME}.so" if test "x${ac_cv_cxx_compiler_gnu}" != "xyes"; then # Flags for warnings as errors cxxflags_warnerror="-xwe -errtags" # Flags for Optimise cxxflags_optimise="-xO2" # Flags for debug cxxflags_debug="-g" fi # Should use -D_REENTRANT - but not yet OK PLATFORM_OPTIONS=["${PLATFORM_OPTIONS} -DSOLARIS"] SHARED_OPTIONS="-G -DSOLARIS" LINK_OPTIONS="-DSOLARIS" ;; *-*-netbsd*) platform=NETBSD shlibsuffix=.so lib_name="lib${PACKAGE_TARNAME}.so.${package_lib_version}" lib_major_name="lib${PACKAGE_TARNAME}.so.${package_lib_major}" lib_short_name="lib${PACKAGE_TARNAME}.so" PLATFORM_OPTIONS=["${PLATFORM_OPTIONS} -DFREEBSD"] SHARED_OPTIONS=["-DNETBSD -shared"] LINK_OPTIONS=["-DNETBSD"] # NetBSD puts packages in /usr/pkg CPPFLAGS="${CPPFLAGS} -I/usr/pkg/include" LIBS="${LIBS} -L/usr/pkg/lib" ;; *-*-freebsd*) platform=FREEBSD shlibsuffix=.so lib_name="lib${PACKAGE_TARNAME}.so.${package_lib_version}" lib_major_name="lib${PACKAGE_TARNAME}.so.${package_version_major}" lib_short_name="lib${PACKAGE_TARNAME}.so" # Should use -D_REENTRANT - but not yet OK PLATFORM_OPTIONS=["${PLATFORM_OPTIONS} -DFREEBSD"] SHARED_OPTIONS="-DFREEBSD -shared -pthread -lc_r" LINK_OPTIONS="-DFREEBSD -pthread -lc_r" ;; *-*-linux*) platform=LINUX ; shlibsuffix=.so lib_name="lib${PACKAGE_TARNAME}.so.${package_lib_version}" lib_major_name="lib${PACKAGE_TARNAME}.so.${package_lib_major}" lib_short_name="lib${PACKAGE_TARNAME}.so" if test "x${ac_cv_cxx_compiler_gnu}" != "xyes"; then # Assume Intel CC PLATFORM_OPTIONS=["-w1 -mp -prec_div"] fi # Should use -D_REENTRANT - but not yet OK PLATFORM_OPTIONS=["${PLATFORM_OPTIONS} -DLINUX"] SHARED_OPTIONS=["-Wl,-soname,\$(LIBNAME) -DLINUX -shared"] LINK_OPTIONS=["-DLINUX -ldl"] ;; *-*-cygwin*) platform=CYGWIN shlibsuffix=.dll lib_name="cyg${PACKAGE_TARNAME}-${package_lib_version}.dll" lib_major_name="lib${PACKAGE_TARNAME}.dll.a" lib_short_name="cyg${PACKAGE_TARNAME}.dll" # Assume g++ PLATFORM_OPTIONS=["-Wall"] PLATFORM_OPTIONS=["${PLATFORM_OPTIONS} -DCYGWIN"] PIC="" SHARED_OPTIONS="-Wl,-soname,\$(LIBNAME) -DCYGWIN -shared -Xlinker --warn-once -Xlinker -Map -Xlinker ../lib/lib${PACKAGE_TARNAME}.map -Xlinker --output-def -Xlinker ../lib/lib${PACKAGE_TARNAME}.def -Xlinker --out-implib -Xlinker ../lib/\$(LIBMAJORNAME)" LINK_OPTIONS=["-DCYGWIN"] # Define installation commands as cygwin uses different defaults INSTALL_COMMAND_1=["\$(INSTALL) -d \$(DESTDIR)\${bindir} && \$(INSTALL) \${THISLIB} \$(DESTDIR)\${bindir}"] INSTALL_COMMAND_2=["\$(INSTALL) -d \$(DESTDIR)\${libdir} && \$(INSTALL) \$(LIB_DIR)/\$(LIBMAJORNAME) \$(DESTDIR)\${libdir}"] # Define this to kill the link commands LINK_COMMAND_1=true ;; # *-*-irix*) platform=IRIX ;; # *-*-aix*) platform=AIX ;; # *-*-hp*) platform=HPUX ; # case "${host}" in # *-*-hpux11*) osver=HPUX11;; # *-*-hpux10*) osver=HPUX10;; # *) osver=HPUX11;; # esac;; # *-*-mvs*) platform=OS390 ;; # *-*-osf*) platform=TRU64 ;; *-apple-darwin*) platform=MACOSX shlibsuffix=.dylib lib_name="lib${PACKAGE_TARNAME}.${package_lib_version}.dylib" lib_major_name="lib${PACKAGE_TARNAME}.${package_lib_major}.dylib" lib_short_name="lib${PACKAGE_TARNAME}.dylib" if test "x${ac_cv_cxx_compiler_gnu}" != "xyes"; then # Not sure if these will work - only tested with g++ PLATFORM_OPTIONS=["-w1 -mp -prec_div"] fi PLATFORM_OPTIONS=["${PLATFORM_OPTIONS} -DMACOSX"] SHARED_OPTIONS=["-Xlinker -install_name -Xlinker \$(LIBNAME) -DMACOSX -dynamiclib"] LINK_OPTIONS=["-DMACOSX"] ;; *) platform=UNKNOWN AC_MSG_ERROR([Unknown Platform. Aborting]) ;; esac # Now we should have all compiler specific flags. So set up specific flags # we need # First if we are using gcc then... if test "x${ac_cv_cxx_compiler_gnu}" = "xyes" ; then CXXFLAGS=["${CXXFLAGS} ${PLATFORM_OPTIONS} -Wall"] if test "$enable_debug" = "yes" ; then CXXFLAGS="${CXXFLAGS} -g" else CXXFLAGS="${CXXFLAGS} -O2 -DNDEBUG" fi if test "x${enable_warnerror}" = "xyes" ; then AC_MSG_WARN([Enabling error on warnings]) CXXFLAGS="${CXXFLAGS} -Werror -Wno-deprecated" fi else if test "$enable_debug" = "yes" ; then CXXFLAGS="${CXXFLAGS} ${cxxflags_debug}" else CXXFLAGS="${CXXFLAGS} ${cxxflags_optimise} -DNDEBUG" fi if test "x${enable_warnerror}" = "xyes" ; then AC_MSG_WARN([Enabling error on warnings]) CXXFLAGS="${CXXFLAGS} ${cxxflags_warnerror}" fi fi # How do we run the C++ compiler? CC1=["${CXX} ${CXXFLAGS}"] # Command to make the shared library MAKE_SHARED=["${CXX} ${CXXFLAGS} ${SHARED_OPTIONS}"] # Command to link an executable LINK=["${CXX} ${CXXFLAGS} ${LINK_OPTIONS}"] # Default commands to create the library in the correct place if test -z "$LINK_COMMAND_1" ; then LINK_COMMAND_1=["(cd \$(LIB_DIR) ; rm -f \$(LIBMAJORNAME) ; \$(LN_S) \$(LIBNAME) \$(LIBMAJORNAME))"] LINK_COMMAND_2=["(cd \$(LIB_DIR) ; rm -f \$(LIBSHORTNAME) ; \$(LN_S) \$(LIBNAME) \$(LIBSHORTNAME))"] fi # Default commands to install if test -z "$INSTALL_COMMAND_1" ; then INSTALL_COMMAND_1=["\$(INSTALL) -d \$(DESTDIR)\${libdir} && \$(INSTALL) \${THISLIB} \$(DESTDIR)\${libdir}"] INSTALL_COMMAND_2=["\$(RM) \$(DESTDIR)\${libdir}/\${LIBMAJORNAME} && \$(LN_S) \${LIBNAME} \$(DESTDIR)\${libdir}/\${LIBMAJORNAME}"] INSTALL_COMMAND_3=["\$(RM) \$(DESTDIR)\${libdir}/\${LIBSHORTNAME} && \$(LN_S) \${LIBNAME} \$(DESTDIR)\${libdir}/\${LIBSHORTNAME}"] fi # Find Xerces # Check for Xerces using XERCESCROOT (override any system version) AC_LANG(C++) if test $XERCESCROOT; then OLDCPPFLAGS=$CPPFLAGS CPPFLAGS=["${CPPFLAGS} -I${XERCESCROOT}/include"] AC_MSG_CHECKING([for Xerces 2.x or 3.x headers in XERCESCROOT/include]) AC_TRY_RUN([#include int main(int argc, char **argv) { if (XERCES_VERSION_MAJOR < 2) return 1; else return 0; }], xerces_lib_base=${XERCESCROOT} xerces_found=yes [AC_MSG_RESULT([found])], CPPFLAGS=$OLD_CPPFLAGS [AC_MSG_RESULT([no])]) fi if test -z $xerces_found ; then # Xerces was not found AC_MSG_CHECKING([for Xerces 2.x or 3.x headers in system includes]) AC_TRY_RUN([#include int main(int argc, char **argv) { if (XERCES_VERSION_MAJOR < 2) return 1; else return 0; }], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([Xerces 2.0 not found. Ensure XERCESCROOT points to base directory of Xerces and Xerces 2.0 or later is available])]) fi # Where is the Xerces lib? AC_MSG_CHECKING([for Xerces 2.x or 3.x library naming convention]) OLD_LIBS=$LIBS if test -z xerces_lib_base; then LIBS="${LIBS} -lxerces-c" else LIBS="-L${xerces_lib_base}/lib -lxerces-c ${LIBS}" fi AC_TRY_LINK([#include ], [XERCES_CPP_NAMESPACE_USE XMLPlatformUtils::Initialize(); return 0; ], [AC_MSG_RESULT([xerces-c])] xerceslib_found=yes, [LIBS=$OLD_LIBS]) if test -z $xerceslib_found; then if test -z xerces_lib_base; then LIBS="${LIBS} -lxerces-3.0" else LIBS="-L${xerces_lib_base}/lib -lxerces-3.0 ${LIBS}" fi AC_TRY_LINK([#include ], [XERCES_CPP_NAMESPACE_USE XMLPlatformUtils::Initialize(); return 0; ], [AC_MSG_RESULT([xerces-3.0])] xerceslib_found=yes, [AC_MSG_RESULT([unable to determine])] [AC_MSG_ERROR([cannot link to Xerces library])]) fi # Find out some properties of the version of Xerces we have AC_MSG_CHECKING([whether Xerces XMLFormatter requires a version]) AC_TRY_COMPILE([#include #include #include ], [using namespace XERCES_CPP_NAMESPACE; XMLCh s_encoding[] = { chLatin_U, chLatin_T, chLatin_F, chDash, chDigit_8, chNull }; XMLFormatter f(s_encoding, NULL, NULL, XMLFormatter::NoEscapes, XMLFormatter::UnRep_CharRef); ], [AC_MSG_RESULT([yes])] [AC_DEFINE(XSEC_XERCES_REQUIRES_MEMMGR)] [AC_DEFINE(XSEC_XERCES_FORMATTER_REQUIRES_VERSION)], [AC_MSG_RESULT([no])]) AC_MSG_CHECKING([whether Xerces XMLString has ::release]) AC_TRY_COMPILE([#include ], [using namespace XERCES_CPP_NAMESPACE; XMLCh * tst; XMLString::release(&tst); ], [AC_MSG_RESULT([yes])] [AC_DEFINE(XSEC_XERCES_XMLSTRING_HAS_RELEASE)], [AC_MSG_RESULT([no])]) AC_MSG_CHECKING([whether Xerces XMLElement has ::setIdAttribute(XMLCh*)]) AC_TRY_COMPILE([#include ], [using namespace XERCES_CPP_NAMESPACE; DOMElement * elt; elt->setIdAttribute(NULL); ], [AC_MSG_RESULT([yes])] xerces_has_setidattribute=yes [AC_DEFINE(XSEC_XERCES_HAS_SETIDATTRIBUTE)], [AC_MSG_RESULT([no])]) if test -z $xerces_has_setidattribute; then AC_MSG_CHECKING([whether Xerces XMLElement has ::setIdAttribute(XMLCh*, bool)]) AC_TRY_COMPILE([#include ], [using namespace XERCES_CPP_NAMESPACE; DOMElement * elt; elt->setIdAttribute(NULL, false); ], [AC_MSG_RESULT([yes])] xerces_has_setidattribute=yes [AC_DEFINE(XSEC_XERCES_HAS_BOOLSETIDATTRIBUTE)], [AC_MSG_RESULT([no])]) fi # For Xerces 3.x we now have a stricter DOM L3 implementation AC_MSG_CHECKING([whether Xerces DOMImplementationLS has DOMLSSerializer]) AC_TRY_COMPILE([#include ], [using namespace XERCES_CPP_NAMESPACE; DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(NULL); DOMLSSerializer *ls = ((DOMImplementationLS*)impl)->createLSSerializer(); ], [AC_MSG_RESULT([yes])] [AC_DEFINE(XSEC_XERCES_DOMLSSERIALIZER)], [AC_MSG_RESULT([no])]) AC_MSG_CHECKING([whether Xerces DOMEntity uses getInputEncoding()]) AC_TRY_COMPILE([#include ], [using namespace XERCES_CPP_NAMESPACE; DOMEntity *t; t->getInputEncoding(); ], [AC_MSG_RESULT([yes])] [AC_DEFINE(XSEC_XERCES_DOMENTITYINPUTENCODING)], [AC_MSG_RESULT([no])]) # Now check for Xalan if test x"$use_xalan" != x"no" ; then if test $XALANCROOT; then AC_MSG_CHECKING([for Xalan headers in XALANCROOT]) OLD_CPPFLAGS=$CPPFLAGS # Updated to include nls/include as this is generally needed for # compilation against non-installed xalan. # Also now include XALANCROOT/include to cater for installed xalan CPPFLAGS=["-I${XALANCROOT}/src -I${XALANCROOT}/include -I${XALANCROOT}/nls/include ${CPPFLAGS}"] AC_TRY_CPP([#include ], xalan_found=yes LIBS="-L${XALANCROOT}/lib -lxalan-c ${LIBS}" [AC_MSG_RESULT([found])], CPPFLAGS=$OLD_CPPFLAGS [AC_MSG_RESULT([no])]); fi if test -z $xalan_found ; then AC_MSG_CHECKING([for Xalan in system includes]) AC_TRY_CPP([#include ], xalan_found=yes LIBS="${LIBS} -lxalan-c" [AC_MSG_RESULT([found])], [AC_DEFINE(XSEC_NO_XALAN)] [AC_MSG_RESULT([no - WARNING - configuring for no Xalan])]); fi else # NO_XALAN is defined - so we skip AC_MSG_NOTICE([Warning - Xalan being configured out - XPath and XSLT will not be available]) AC_DEFINE(XSEC_NO_XALAN) fi if test "${xalan_found}" = "yes" ; then # Do we need xalanMsg.so? AC_MSG_CHECKING([if libxalanMsg is required]) old_libs=$LIBS LIBS="${LIBS} -lxalanMsg" AC_TRY_LINK([],[ int test=1; ], AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]) LIBS=${old_libs}); fi # Check for handling of XSLException types if test "$xalan_found" = "yes" ; then AC_MSG_CHECKING([whether XSLException::getType() returns XalanDOMString]) AC_TRY_COMPILE([#include ], [ try { int x = 1; } catch (XALAN_CPP_NAMESPACE_QUALIFIER XSLException &e) { e.getType().c_str(); } ], AC_DEFINE(XSEC_XSLEXCEPTION_RETURNS_DOMSTRING) [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]); AC_MSG_CHECKING([whether XercesParserLiaison ctor takes XercesDOMSupport]) AC_TRY_COMPILE([#include #include ], [ XALAN_CPP_NAMESPACE_QUALIFIER XercesDOMSupport theDOMSupport; XALAN_CPP_NAMESPACE_QUALIFIER XercesParserLiaison theParserLiaison(theDOMSupport); ], AC_DEFINE(XSEC_XERCESPARSERLIAISON_REQS_DOMSUPPORT) [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]); AC_MSG_CHECKING([whether XPathEvaluator::selectNodeList reqs NodeRefList]) AC_TRY_COMPILE([#include #include #include #include ], [ XALAN_CPP_NAMESPACE_QUALIFIER XercesDOMSupport theDOMSupport; XALAN_CPP_NAMESPACE_QUALIFIER XPathEvaluator theEvaluator; XALAN_CPP_NAMESPACE_QUALIFIER NodeRefList theResult( theEvaluator.selectNodeList( theDOMSupport, NULL, NULL, NULL)); ], [AC_MSG_RESULT([no])], AC_DEFINE(XSEC_SELECTNODELIST_REQS_NODEREFLIST) [AC_MSG_RESULT([yes])]); AC_MSG_CHECKING([whether Xalan classes req MemoryManager]) AC_TRY_COMPILE([ #include #include ], [ } XALAN_CPP_NAMESPACE_BEGIN class FunctionTest : public Function { public: typedef Function ParentType; FunctionTest(); virtual ~FunctionTest(); virtual XObjectPtr execute( XPathExecutionContext& executionContext, XalanNode* context, const XObjectArgVectorType& args, const LocatorType* locator) const; XObjectPtr execute( XPathExecutionContext& executionContext, XalanNode* context, const XObjectPtr arg1, const XObjectPtr arg2, const LocatorType* locator) const; XObjectPtr execute( XPathExecutionContext& executionContext, XalanNode* context, const XObjectPtr arg1, const XObjectPtr arg2, const XObjectPtr arg3, const LocatorType* locator) const; #if !defined(XALAN_NO_USING_DECLARATION) using ParentType::execute; #endif #if defined(XALAN_NO_COVARIANT_RETURN_TYPE) virtual Function* #else virtual FunctionTest* #endif clone() const; protected: virtual const XalanDOMString getError() const; private: // Not implemented... FunctionTest& operator=(const FunctionTest&); bool operator==(const FunctionTest&) const; }; void main2(void){ FunctionTest t; } XALAN_CPP_NAMESPACE_END int main3(void) { ], [AC_MSG_RESULT([no])], AC_DEFINE(XSEC_XALAN_REQS_MEMORYMANAGER) [AC_MSG_RESULT([yes])]); fi # AC_LANG(C) # Check for OpenSSL if test $OPENSSL ; then # First check includes AC_MSG_CHECKING([for OpenSSL headers in OPENSSL]) OLD_CPPFLAGS=$CPPFLAGS CPPFLAGS=["${CPPFLAGS} -I${OPENSSL}/include"] AC_TRY_CPP([#include ], openssl_found=yes AC_DEFINE(HAVE_OPENSSL) [AC_MSG_RESULT([found])], CPPFLAGS=$OLD_CPPFLAGS [AC_MSG_RESULT([no])]); # Now check libs # Note we keep both the base OPENSSL dir and /lib to handle # both an installed version or a source dir OLD_LIBS=$LIBS LIBS=["${LIBS} -L${OPENSSL} -lcrypto"] # As of 1.3 - use AC_TRY_LINK to check as AC_CHECK_LIB does # the wrong thing AC_MSG_CHECKING([for libcrypto]) AC_TRY_LINK([#include ], [EVP_EncryptInit(NULL, NULL, NULL, NULL) ; return 0; ], [AC_MSG_RESULT([found])] openssllib_found=yes, [LIBS=$OLD_LIBS]) if test -z $openssllib_found ; then LIBS=["${LIBS} -L${OPENSSL}/lib -lcrypto"] AC_TRY_LINK([#include ], [EVP_EncryptInit(NULL, NULL, NULL, NULL) ; return 0; ], [AC_MSG_RESULT([found])] openssllib_found=yes, [LIBS=$OLD_LIBS] [AC_MSG_RESULT([no])] [AC_MSG_ERROR(["Unable to find libcrypto"])]) fi fi if test -z $openssl_found ; then AC_MSG_CHECKING([for OpenSSL in system includes]) AC_TRY_CPP([#include ], openssl_found=yes AC_DEFINE(HAVE_OPENSSL) LIBS="${LIBS} -lcrypto" [AC_MSG_RESULT([found])], [AC_MSG_RESULT([no])] [AC_MSG_ERROR([OpenSSL header files not found. Please define OPENSSL])]); fi # Now try to find out some things about this version of OpenSSL AC_LANG(C++) AC_MSG_CHECKING([for const input buffers in OpenSSL]) AC_TRY_COMPILE([#include ], [ const unsigned char * buf; unsigned char * outbuf; RSA rsa; RSA_private_decrypt(1, buf, outbuf, &rsa, RSA_PKCS1_PADDING); ], [AC_MSG_RESULT([yes])] [AC_DEFINE(XSEC_OPENSSL_CONST_BUFFERS)], [AC_MSG_RESULT([no])]) # Check for full strength AES - Solaris 10 install is broken # and only supports low end AES. As the library does not have # this granularity, we have to disable AES in this instance. # AC_CHECK_DECL(EVP_aes_256_cbc, # [AC_DEFINE(XSEC_OPENSSL_HAVE_AES)], # ,[#include ]) AC_MSG_CHECKING([for non-broken AES support]) AC_TRY_LINK([#include ], [ EVP_aes_256_cbc(); ], [AC_MSG_RESULT([yes])] [AC_DEFINE(XSEC_OPENSSL_HAVE_AES)], [AC_MSG_RESULT([no])]) AC_CHECK_DECL(EVP_CIPHER_CTX_set_padding, [AC_DEFINE(XSEC_OPENSSL_CANSET_PADDING)], ,[#include ]) AC_CHECK_DECL(CRYPTO_cleanup_all_ex_data, [AC_DEFINE(XSEC_OPENSSL_HAVE_CRYPTO_CLEANUP_ALL_EX_DATA)], ,[#include ]) AC_MSG_CHECKING([for const input buffer in loadX509Base64Bin]) AC_TRY_COMPILE([#include ], [ const unsigned char * buf; d2i_X509(NULL, &buf, 1); ], [AC_MSG_RESULT([yes])] [AC_DEFINE(XSEC_OPENSSL_D2IX509_CONST_BUFFER)], [AC_MSG_RESULT([no])]) # String functions AC_CHECK_DECL(_strdup, [AC_DEFINE(XSEC_HAVE__STRDUP)], ,[#include ]) AC_CHECK_DECL(_stricmp, [AC_DEFINE(XSEC_HAVE__STRDUP)], ,[#include ]) AC_CHECK_DECL(_getcwd, [AC_DEFINE(XSEC_HAVE__GETCWD)], ,[#include ]) AC_CHECK_DECL(_getcwd, [AC_DEFINE(XSEC_HAVE__GETCWD)], ,[#include ]) AC_CHECK_DECL(stricmp, [AC_DEFINE(XSEC_HAVE_STRICMP)], ,[#include ]) AC_CHECK_DECL(strcasecmp, [AC_DEFINE(XSEC_HAVE_STRCASECMP)], ,[#include ]) # Populate Install directories AC_SUBST(prefix) AC_SUBST(exec_prefix) AC_SUBST(includedir) AC_SUBST(libdir) AC_SUBST(bindir) # Populate special platform specific make commands AC_SUBST(LINK_COMMAND_1) AC_SUBST(LINK_COMMAND_2) AC_SUBST(INSTALL_COMMAND_1) AC_SUBST(INSTALL_COMMAND_2) AC_SUBST(INSTALL_COMMAND_3) # Now populate the platform and Compiler related variables. AC_SUBST(platform) cxx=${CXX} AC_SUBST(cxx) cc=${CC} AC_SUBST(cc) AC_SUBST(prefix) AC_SUBST(osver) cxxflags=${CXXFLAGS} AC_SUBST(cxxflags) cppflags=${CPPFLAGS} AC_SUBST(cppflags) cflags=${CFLAGS} AC_SUBST(cflags) ldflags=${LDFLAGS} AC_SUBST(ldflags) libs=${LIBS} AC_SUBST(libs) transcoder=${TRANSCODER} AC_SUBST(transcoder) threads=${THREADS} AC_SUBST(threads) bitstobuild=${BITSTOBUILD} AC_SUBST(bitstobuild) cc1=${CC1} AC_SUBST(cc1) cc4=${CC4} AC_SUBST(cc4) ln_s=${LN_S} AC_SUBST(ln_s) install=${INSTALL} install_data=${INSTALL_DATA} AC_SUBST(install) AC_SUBST(install_data) make_shared=${MAKE_SHARED} AC_SUBST(make_shared) link=${LINK} AC_SUBST(link) AC_SUBST(objsuffix) AC_SUBST(shlibsuffix) # Populate the Makefile conditionals AM_CONDITIONAL(XSEC_AM_HAVE_OPENSSL, test x$openssl_found = xyes) # Versioning package_version=${PACKAGE_VERSION} package_libtool_version="${package_version_major}${package_version_medium}:${package_version_minor}" AC_SUBST(package_version) AC_SUBST(package_version_major) AC_SUBST(package_libtool_version) AC_DEFINE_UNQUOTED(XSEC_VERSION, "$package_version") AC_DEFINE_UNQUOTED(XSEC_VERSION_MAJOR, $package_version_major) AC_DEFINE_UNQUOTED(XSEC_VERSION_MEDIUM, $package_version_medium) AC_DEFINE_UNQUOTED(XSEC_VERSION_MINOR, $package_version_minor) package_name=${PACKAGE_NAME} AC_SUBST(package_name) package_tarname=${PACKAGE_TARNAME} AC_SUBST(package_tarname) # Library names AC_SUBST(lib_name) AC_SUBST(lib_major_name) AC_SUBST(lib_short_name) # output the Makefiles AC_OUTPUT()