From df7425f3e125f35730c281ef986e7109bb063705 Mon Sep 17 00:00:00 2001 From: frankmorgner Date: Sun, 15 Apr 2012 21:01:16 +0000 Subject: [PATCH] automate cross compile for windows in win32. use the power of the opensc build script git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@772 96b47cad-a561-4643-ad3b-153ac7d7599c --- npa/Makefile.am | 68 ++------------------- npa/Makefile.am.opensc | 69 --------------------- npa/configure.ac | 1 + npa/win32/Makefile.am | 55 +++++++++++++++++ npa/win32/build_fix_zlib.patch | 13 ++++ npa/win32/build_npa.patch | 107 +++++++++++++++++++++++++++++++++ 6 files changed, 180 insertions(+), 133 deletions(-) delete mode 100644 npa/Makefile.am.opensc create mode 100644 npa/win32/Makefile.am create mode 100644 npa/win32/build_fix_zlib.patch create mode 100644 npa/win32/build_npa.patch diff --git a/npa/Makefile.am b/npa/Makefile.am index 0d459d0..7623d6d 100644 --- a/npa/Makefile.am +++ b/npa/Makefile.am @@ -1,5 +1,5 @@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src m4 doc +SUBDIRS = src m4 doc win32 EXTRA_DIST = libnpa.pc.in apdus @@ -15,74 +15,14 @@ do_subst = $(SED) \ -e 's,[@]OPENSC_LIBS[@],$(OPENSC_LIBS),g' \ -e 's,[@]top_srcdir[@],$(top_srcdir),g' -do_export = cp $(abs_srcdir)/Makefile.am.opensc src/libopensc/Makefile.am - -opensc_img = $(abs_srcdir)/src/opensc/win32/build/image -opensc_root = $(opensc_img)/opensc - -fixup_la = find "$(opensc_img)" -name '*.la' | while read f; do \ - top="$$(dirname "$$(dirname "$$(echo "$${f}")")" | $(SED) 's\#//\#/\#g')" \ - $(SED) 's\#//\#'"$${top}"'/\#g' "$${f}" > "$${f}.tmp"; \ - mv "$${f}.tmp" "$${f}"; \ - done -restore_la = find "$(opensc_img)" -name '*.la' | while read f; do \ - x="$$(echo "$(opensc_img)" | $(SED) 's\#/$$\#\#')" \ - $(SED) 's\#'"$${x}"'/[^/]*/lib\#//lib\#g' "$${f}" > "$${f}.tmp"; \ - mv "$${f}.tmp" "$${f}"; \ - done - -$(opensc_root)/lib/libopensc.la: - cd $(top_srcdir)/src/opensc && \ - ./bootstrap && \ - ./configure --disable-doc && \ - EXTRA_OPENSC_CONFIG="`$(do_export)`" \ - ZLIB_VERSION="1.2.6" \ - OPENSSL_VERSION="1.0.1_with_openpace-0.7" \ - OPENSSL_URL="http://www2.informatik.hu-berlin.de/~morgner/openssl-1.0.1_with_openpace-0.7.tar.gz" \ - EXTRA_OPENSSL_CONFIG="experimental-pace" \ - win32/installer_from_build.sh - -$(opensc_root)/lib/libnpa.la: $(opensc_root)/lib/libopensc.la - $(fixup_la) - export ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes; ./configure \ - --sbindir=/bin \ - --prefix=/ \ - --host=i586-mingw32msvc \ - --build=$(shell gcc -dumpmachine) \ - --program-prefix='' \ - LIBS="-lws2_32" \ - PKG_CONFIG_PATH="$(opensc_root)/lib/pkgconfig" \ - PKG_CONFIG_SYSROOT_DIR="$(opensc_root)" \ - OPENSC_LIBS="-L$(opensc_root)/lib -lopensc" || ($(restore_la) && false) - make install DESTDIR="$(opensc_root)" || ($(restore_la) && false) - $(restore_la) - -win-opensc: $(opensc_root)/lib/libopensc.la - -win: $(opensc_root)/lib/libnpa.la - mkdir -p $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32 - for i in \ - $(opensc_root)/bin/*npa*.dll \ - $(opensc_root)/bin/*opensc*.dll \ - $(opensc_root)/bin/*eay*.dll \ - $(opensc_root)/bin/*ltdl*.dll \ - $(opensc_root)/bin/*zlib*.dll \ - $(opensc_root)/bin/npa-tool.exe \ - ; do cp $${i} $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32; done - mkdir -p $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32/include - for i in \ - $(opensc_root)/include/openssl \ - $(opensc_root)/include/npa \ - ; do cp -r $${i} $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32/include; done - mkdir -p $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32/include/libopensc - cp $(srcdir)/src/opensc/src/libopensc/*.h $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32/include/libopensc - rm -f $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32/*pkcs* $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32/include/libopensc/*internal*.h - pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libnpa.pc libnpa.pc: $(do_subst) < $(srcdir)/libnpa.pc.in > libnpa.pc +win: + make -C win32 $@ + clean-local: rm -f libnpa.pc diff --git a/npa/Makefile.am.opensc b/npa/Makefile.am.opensc deleted file mode 100644 index 151a7aa..0000000 --- a/npa/Makefile.am.opensc +++ /dev/null @@ -1,69 +0,0 @@ -include $(top_srcdir)/win32/ltrc.inc - -MAINTAINERCLEANFILES = $(srcdir)/Makefile.in - -EXTRA_DIST = Makefile.mak - -lib_LTLIBRARIES = libopensc.la -noinst_HEADERS = cards.h ctbcs.h internal.h esteid.h muscle.h muscle-filesystem.h \ - internal-winscard.h p15card-helper.h \ - opensc.h pkcs15.h \ - cardctl.h asn1.h log.h \ - errors.h types.h compression.h itacns.h iso7816.h \ - authentic.h iasecc.h iasecc-sdo.h - -AM_CPPFLAGS = -DOPENSC_CONF_PATH=\"$(sysconfdir)/opensc.conf\" -AM_CFLAGS = $(OPTIONAL_OPENSSL_CFLAGS) $(OPTIONAL_OPENCT_CFLAGS) \ - $(OPTIONAL_PCSC_CFLAGS) $(OPTIONAL_ZLIB_CFLAGS) \ - $(LTLIB_CFLAGS) -INCLUDES = -I$(top_srcdir)/src - -libopensc_la_SOURCES = \ - sc.c ctx.c log.c errors.c \ - asn1.c base64.c sec.c card.c iso7816.c dir.c ef-atr.c padding.c apdu.c \ - \ - pkcs15.c pkcs15-cert.c pkcs15-data.c pkcs15-pin.c \ - pkcs15-prkey.c pkcs15-pubkey.c pkcs15-sec.c \ - pkcs15-algo.c pkcs15-cache.c pkcs15-syn.c \ - \ - muscle.c muscle-filesystem.c \ - \ - ctbcs.c reader-ctapi.c reader-pcsc.c reader-openct.c \ - \ - card-setcos.c card-miocos.c card-flex.c card-gpk.c \ - card-cardos.c card-tcos.c card-default.c card-npa.c \ - card-mcrd.c card-starcos.c card-openpgp.c card-jcop.c \ - card-oberthur.c card-belpic.c card-atrust-acos.c card-entersafe.c \ - card-incrypto34.c card-piv.c card-muscle.c card-acos5.c \ - card-asepcos.c card-akis.c card-gemsafeV1.c card-rutoken.c \ - card-rtecp.c card-westcos.c card-myeid.c card-ias.c \ - card-javacard.c card-itacns.c card-authentic.c \ - card-iasecc.c iasecc-sdo.c \ - \ - pkcs15-openpgp.c pkcs15-infocamere.c pkcs15-starcert.c \ - pkcs15-tcos.c pkcs15-esteid.c pkcs15-postecert.c pkcs15-gemsafeGPK.c \ - pkcs15-actalis.c pkcs15-atrust-acos.c pkcs15-tccardos.c pkcs15-piv.c \ - pkcs15-esinit.c pkcs15-westcos.c pkcs15-pteid.c pkcs15-oberthur.c \ - pkcs15-itacns.c pkcs15-gemsafeV1.c \ - compression.c p15card-helper.c -if WIN32 -libopensc_la_SOURCES += $(top_builddir)/win32/versioninfo.rc -endif -libopensc_la_LIBADD = $(OPTIONAL_OPENSSL_LIBS) $(OPTIONAL_OPENCT_LIBS) \ - $(OPTIONAL_ZLIB_LIBS) $(LTLIB_LIBS) \ - $(top_builddir)/src/pkcs15init/libpkcs15init.la \ - $(top_builddir)/src/scconf/libscconf.la \ - $(top_builddir)/src/common/libcompat.la -if WIN32 -libopensc_la_LIBADD += -lws2_32 -endif -libopensc_la_LDFLAGS = $(AM_LDFLAGS) \ - -version-info @OPENSC_LT_CURRENT@:@OPENSC_LT_REVISION@:@OPENSC_LT_AGE@ \ - -no-undefined - -if WIN32 -# def file required for MS users to build library -mylibdir=$(libdir) -mylib_DATA=.libs/@WIN_LIBPREFIX@opensc-@OPENSC_LT_OLDEST@.dll.def -.libs/@WIN_LIBPREFIX@opensc-@OPENSC_LT_OLDEST@.dll.def: libopensc.la -endif diff --git a/npa/configure.ac b/npa/configure.ac index 6f718f2..f0079db 100644 --- a/npa/configure.ac +++ b/npa/configure.ac @@ -110,6 +110,7 @@ AC_CONFIG_FILES([ Makefile m4/Makefile src/Makefile + win32/Makefile doc/Makefile ]) AC_OUTPUT diff --git a/npa/win32/Makefile.am b/npa/win32/Makefile.am new file mode 100644 index 0000000..adad01b --- /dev/null +++ b/npa/win32/Makefile.am @@ -0,0 +1,55 @@ +EXTRA_DIST = build_fix_zlib.patch build_npa.patch + + +all-local: + echo "Use \`make win\` to cross compile for Windows" + + +OPENSC ?= $(abs_builddir)/opensc +$(OPENSC)/configure.ac: + git clone git://github.com/frankmorgner/OpenSC.git $(OPENSC) + true cp Makefile.am.opensc.libopensc $(OPENSC)/src/libopensc/Makefile.am + +OPENSC_TAR_GZ=$(OPENSC)/opensc-0.12.3-pre1.tar.gz +$(OPENSC_TAR_GZ): $(OPENSC)/configure.ac + cd $(OPENSC) && ./bootstrap && ./configure --disable-doc + make -C $(OPENSC) dist + +NPA_TAR_GZ=$(abs_top_builddir)/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz +$(NPA_TAR_GZ): + make -C $(abs_top_builddir) dist + +BUILD=$(abs_builddir)/build +$(BUILD)/build: $(OPENSC_TAR_GZ) $(NPA_TAR_GZ) + svn co -r123 http://www.opensc-project.org/svn/build/trunk $(BUILD) + patch -p1 -d $(BUILD) < build_fix_zlib.patch + patch -p1 -d $(BUILD) < build_npa.patch + mkdir -p $(BUILD)/sources + cp $(OPENSC_TAR_GZ) $(BUILD)/sources + cp $(NPA_TAR_GZ) $(BUILD)/sources + + +MINGW ?= i586-mingw32msvc +IMAGE=$(BUILD)/image/opensc +NPA_TOOL_EXE=$(IMAGE)/bin/npa-tool.exe +$(NPA_TOOL_EXE): $(BUILD)/build + cd $(BUILD) && \ + export ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes; \ + CHOST=$(MINGW) CBUILD=`gcc -dumpmachine` \ + ZLIB_VERSION="1.2.6" \ + ./build + + +WIN32_DIR=$(abs_top_builddir)/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32 +win: $(NPA_TOOL_EXE) + mv $(IMAGE) $(WIN32_DIR) + $(INSTALL) -d $(WIN32_DIR)/include/libopensc + $(INSTALL_DATA) -t $(WIN32_DIR)/include/libopensc \ + $(OPENSC)/src/libopensc/*.h + rm -f $(WIN32_DIR)/include/libopensc/*internal*.h + +clean-local: + rm -rf $(IMAGE) $(WIN32_DIR) + +distclean-local: + rm -rf $(OPENSC) $(BUILD) diff --git a/npa/win32/build_fix_zlib.patch b/npa/win32/build_fix_zlib.patch new file mode 100644 index 0000000..6a901b8 --- /dev/null +++ b/npa/win32/build_fix_zlib.patch @@ -0,0 +1,13 @@ +Index: build/build +=================================================================== +--- build.orig/build 2012-04-15 20:42:56.183646915 +0200 ++++ build/build 2012-04-15 20:43:06.951700312 +0200 +@@ -419,7 +419,7 @@ + OPENSC_COMPONENTS="pcsc" + export PKG_CONFIG="true" + export MAN2HTML="true" +- export ZLIB_LIBS="-L${OPENSC_ROOT}/lib -lzdll" ++ #export ZLIB_LIBS="-L${OPENSC_ROOT}/lib -lzdll" + export ICONV_CFLAGS="-I${OPENSC_ROOT}/include" + export ICONV_LIBS="-L${OPENSC_ROOT}/lib -liconv" + fi diff --git a/npa/win32/build_npa.patch b/npa/win32/build_npa.patch new file mode 100644 index 0000000..aa663e2 --- /dev/null +++ b/npa/win32/build_npa.patch @@ -0,0 +1,107 @@ +Index: build/build +=================================================================== +--- build.orig/build 2012-04-15 21:55:56.517367834 +0200 ++++ build/build 2012-04-15 22:08:45.505181046 +0200 +@@ -92,12 +92,13 @@ + for url in \ + ${ZLIB_URL} ${LZO_URL} ${LIBTOOL_URL} ${ICONV_URL} \ + ${OPENSSL_URL} ${OPENCT_URL} ${OPENSC_URL} ${LIBP11_URL} \ +- ${ENGINE_PKCS11_URL} ${PKCS11_HELPER_URL} ${OPENVPN_URL}; \ ++ ${ENGINE_PKCS11_URL} ${PKCS11_HELPER_URL} ${OPENVPN_URL} \ ++ ${NPA_URL}; \ + do + download1 "${url}" + done + +- if [ "$(ls "${SOURCESROOT}" | wc -l | sed 's/[ \t]//g')" != 11 ]; then ++ if [ "$(ls "${SOURCESROOT}" | wc -l | sed 's/[ \t]//g')" != 12 ]; then + die "sources is unclean." + fi + } +@@ -201,6 +202,7 @@ + zlib-dynamic ${ZLIB_CFLAGS} \ + no-capieng \ + --openssldir=/etc/ssl \ ++ experimental-pace \ + ${EXTRA_OPENSSL_CONFIG} \ + || die "Configure openssl" + [ -n "${BUILD_FOR_WINDOWS}" ] && perl util/mkdef.pl crypto ssl NT update +@@ -244,7 +246,24 @@ + CFLAGS="${CFLAGS} --include=cardmod-mingw-compat.h -I${SCRIPTROOT}/include" \ + --enable-openssl --enable-zlib ${extra_opensc} --enable-doc \ + || die "Configure opensc" +- ${MAKE} ${MAKEOPTS} ${MAKE_AUTOCONF_INSTALL_TARGET} DESTDIR="${OPENSC_ROOT}" || die "make opensc" ++ ${MAKE} ${MAKEOPTS} ${MAKE_AUTOCONF_INSTALL_TARGET} DESTDIR="${OPENSC_ROOT}" \ ++ || test -x ${OPENSC_ROOT}/bin/libopensc-3.dll || die "make opensc" ++ ++ fixup_la ++ ++ cd "${SCRIPTROOT}" ++ restore_la ++} ++ ++build_npa() { ++ fixup_la ++ ++ echo "Build npa" ++ cd "${BUILDROOT}/npa"* || die "cd npa" ++ ./configure ${CONFIGOPTS} ${EXTRA_NPA_CONFIG} \ ++ CFLAGS="${CFLAGS} -I${SCRIPTROOT}/include" LIBS="${LIBS} -lws2_32" \ ++ || die "Configure npa" ++ ${MAKE} ${MAKEOPTS} ${MAKE_AUTOCONF_INSTALL_TARGET} DESTDIR="${OPENSC_ROOT}" || die "make npa" + + fixup_la + +@@ -410,6 +429,8 @@ + export LZO_LIBS="-L${OPENVPN_ROOT}/lib -llzo2" + export PKCS11_HELPER_CFLAGS="-I${OPENVPN_ROOT}/include" + export PKCS11_HELPER_LIBS="-L${OPENVPN_ROOT}/lib -lpkcs11-helper" ++export OPENSC_CFLAGS="-I${OPENSC_ROOT}/include" ++export OPENSC_LIBS="-L${OPENSC_ROOT}/lib -lopensc" + + if [ -n "${BUILD_FOR_WINDOWS}" ]; then + CONFIGOPTS=" \ +@@ -430,6 +451,7 @@ + fixup_win64_libtool + build_dep + build_opensc ++build_npa + build_engine_pkcs11 + build_openvpn + copy_docs +Index: build/build.vars +=================================================================== +--- build.orig/build.vars 2012-04-15 21:55:32.361248035 +0200 ++++ build/build.vars 2012-04-15 21:56:04.533407557 +0200 +@@ -4,7 +4,7 @@ + ZLIB_VERSION="${ZLIB_VERSION:-1.2.5}" + LIBTOOL_VERSION="${LIBTOOL_VERSION:-2.4}" + ICONV_VERSION="${ICONV_VERSION:-1.14}" +-OPENSSL_VERSION="${OPENSSL_VERSION:-1.0.0e}" ++OPENSSL_VERSION="${OPENSSL_VERSION:-1.0.1_with_openpace-0.7}" + OPENCT_VERSION="${OPENCT_VERSION:-0.6.20}" + OPENSC_VERSION="${OPENSC_VERSION:-0.12.2}" + LIBP11_VERSION="${LIBP11_VERSION:-0.2.8}" +@@ -12,12 +12,13 @@ + PKCS11_HELPER_VERSION="${PKCS11_HELPER_VERSION:-1.09}" + LZO_VERSION="${LZO_VERSION:-2.05}" + OPENVPN_VERSION="${OPENVPN_VERSION:-2.2.1}" ++NPA_VERSION="${NPA_VERSION:-0.4}" + OPENSC_COMPONENTS="openct" + + ZLIB_URL="${ZLIB_URL:-http://www.zlib.net/zlib-${ZLIB_VERSION}.tar.gz}" + LIBTOOL_URL="${LIBTOOL_URL:-http://ftp.gnu.org/gnu/libtool/libtool-${LIBTOOL_VERSION}.tar.gz}" + ICONV_URL="${ICONV_URL:-http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${ICONV_VERSION}.tar.gz}" +-OPENSSL_URL="${OPENSSL_URL:-http://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz}" ++OPENSSL_URL="${OPENSSL_URL:-http://www2.informatik.hu-berlin.de/~morgner/openssl-${OPENSSL_VERSION}.tar.gz}" + OPENCT_URL="${OPENCT_URL:-http://www.opensc-project.org/files/openct/openct-${OPENCT_VERSION}.tar.gz}" + OPENSC_URL="${OPENSC_URL:-http://www.opensc-project.org/files/opensc/opensc-${OPENSC_VERSION}.tar.gz}" + LIBP11_URL="${LIBP11_URL:-http://www.opensc-project.org/files/libp11/libp11-${LIBP11_VERSION}.tar.gz}" +@@ -25,6 +26,7 @@ + PKCS11_HELPER_URL="${PKCS11_HELPER_URL:-http://www.opensc-project.org/files/pkcs11-helper/pkcs11-helper-${PKCS11_HELPER_VERSION}.tar.bz2}" + LZO_URL="${LZO_URL:-http://www.oberhumer.com/opensource/lzo/download/lzo-${LZO_VERSION}.tar.gz}" + OPENVPN_URL="${OPENVPN_URL:-http://swupdate.openvpn.net/community/releases/openvpn-${OPENVPN_VERSION}.tar.gz}" ++NPA_URL="${NPA_URL:-http://downloads.sourceforge.net/project/vsmartcard/npa/npa-${NPA_VERSION}.tar.gz}" + + #CHOST + #CTARGET