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
This commit is contained in:
frankmorgner
2012-04-15 21:01:16 +00:00
parent fb9489cd38
commit df7425f3e1
6 changed files with 180 additions and 133 deletions

View File

@@ -1,5 +1,5 @@
ACLOCAL_AMFLAGS = -I m4 ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src m4 doc SUBDIRS = src m4 doc win32
EXTRA_DIST = libnpa.pc.in apdus EXTRA_DIST = libnpa.pc.in apdus
@@ -15,74 +15,14 @@ do_subst = $(SED) \
-e 's,[@]OPENSC_LIBS[@],$(OPENSC_LIBS),g' \ -e 's,[@]OPENSC_LIBS[@],$(OPENSC_LIBS),g' \
-e 's,[@]top_srcdir[@],$(top_srcdir),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 pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libnpa.pc pkgconfig_DATA = libnpa.pc
libnpa.pc: libnpa.pc:
$(do_subst) < $(srcdir)/libnpa.pc.in > libnpa.pc $(do_subst) < $(srcdir)/libnpa.pc.in > libnpa.pc
win:
make -C win32 $@
clean-local: clean-local:
rm -f libnpa.pc rm -f libnpa.pc

View File

@@ -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

View File

@@ -110,6 +110,7 @@ AC_CONFIG_FILES([
Makefile Makefile
m4/Makefile m4/Makefile
src/Makefile src/Makefile
win32/Makefile
doc/Makefile doc/Makefile
]) ])
AC_OUTPUT AC_OUTPUT

55
npa/win32/Makefile.am Normal file
View File

@@ -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)

View File

@@ -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

107
npa/win32/build_npa.patch Normal file
View File

@@ -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