From: Uwe Hermann Date: Fri, 4 Apr 2014 18:24:52 +0000 (+0200) Subject: sigrok-cross-mingw: Drop MSI Python installer, ship only libs/modules. X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=5f44a3680b5d63cd07a5ec28ae32684b55f55002;p=sigrok-util.git sigrok-cross-mingw: Drop MSI Python installer, ship only libs/modules. Until now we used to include the official Python MSI Windows installer in the installers for our frontends (sigrok-cli and PulseView), and it was run during the installation of the sigrok frontend. Python was also hardcoded to be installed into c:\python32. Change this to only ship python32.dll and python32.zip now, which are simply copied into the install location of the frontend (e.g. "c:\Program Files (x86)\sigrok\PulseView". The python32.zip file contains a few DLLs and libs, and all Python stdlib modules. This has various advantages: - There are no longer issues if a user has other Python versions installed on the same OS (e.g. a different Python 3 version and/or Python 2.x versions). The sigrok frontends will always use _only_ the local Python from their install dir and ignore any others. - We (or rather the Python MSI installer) no longer create any registry entries, potentially change the PATH env. variable, change file associations, add Python to the Windows "list of installed software", create a Start Menu entry for Python, or do any other things that affect the system as a whole. After an uninstall of the respective sigrok frontend no traces of (our local) Python will be left on the system. - We no longer need to hardcode any path for the Python install. The required files will always be installed whereever the sigrok frontend is installed, no matter wheter it's on c:\ or any other drive. - The installation time is reduced (we no longer need to run the official MSI installer) and the size of our NSIS installers is also reduced quite a bit (python32.dll + python32.zip are a lot smaller than the full Python MSI installer). - Frontend load times might even be reduced a bit, since Python will now only scan for modules in the two locations we provide (the python32.zip file and the decoders/ subdirectory). Add srd_decodersdir.patch which replaces the (now obsolete) patches pulseview_decodersdir.patch and sigrok_cli_decodersdir.patch. --- diff --git a/cross-compile/mingw/pulseview_decodersdir.patch b/cross-compile/mingw/pulseview_decodersdir.patch deleted file mode 100644 index 5532362..0000000 --- a/cross-compile/mingw/pulseview_decodersdir.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/main.cpp b/main.cpp -index 3fa93c4..db589f3 100644 ---- a/main.cpp -+++ b/main.cpp -@@ -120,7 +120,7 @@ int main(int argc, char *argv[]) - - #ifdef ENABLE_DECODE - // Initialise libsigrokdecode -- if (srd_init(NULL) != SRD_OK) { -+ if (srd_init("decoders") != SRD_OK) { - qDebug() << "ERROR: libsigrokdecode init failed."; - break; - } diff --git a/cross-compile/mingw/sigrok-cross-mingw b/cross-compile/mingw/sigrok-cross-mingw index 6e511da..5a807cb 100755 --- a/cross-compile/mingw/sigrok-cross-mingw +++ b/cross-compile/mingw/sigrok-cross-mingw @@ -2,7 +2,7 @@ ## ## This file is part of the sigrok-util project. ## -## Copyright (C) 2013 Uwe Hermann +## Copyright (C) 2013-2014 Uwe Hermann ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by @@ -62,13 +62,13 @@ cd $BUILDDIR # ----------------------------------------------------------------------------- -# Python3 +mkdir -p $PREFIX + # Cross-compiling Python is highly non-trivial, so we avoid it for now. # The download below is a repackaged tarball of the official Python 3.2.3 MSI -# installer for Windows: http://python.org/ftp/python/3.2.3/python-3.2.3.msi -# The MSI file has been installed on a Windows box and then the c:\Python32 -# files have been stored in the Python32.tar.gz tarball. -mkdir -p $PREFIX +# installer for Windows: http://python.org/ftp/python/3.2.3/python-3.2.3.msi. +# The MSI file has been installed on a Windows box and then c:\Python32\libs +# and c:\Python32\include have been stored in the Python32.tar.gz tarball. $WGET http://www.sigrok.org/tmp/Python32.tar.gz -O $PREFIX/Python32.tar.gz tar xzf $PREFIX/Python32.tar.gz -C $PREFIX @@ -86,9 +86,15 @@ Libs: -L$PREFIX/Python32/libs -lpython32 Cflags: -I$PREFIX/Python32/include EOF -# Download the Python 3.2.3 MSI installer (needed for NSIS runs). -$WGET -c http://python.org/ftp/python/3.2.3/python-3.2.3.msi \ - -O $PREFIX/python-3.2.3.msi +# The python32.dll and python32.zip files will be shipped in the NSIS +# Windows installers (required for protocol decoding to work). +# The file python32.dll (NOT the same as python3.dll) is copied from an +# installed Python 3.2.3 (see above) from c:\Windows\system32\python32.dll. +# The file python32.zip contains all files from the 'DLLs', 'Lib', and 'libs' +# subdirectories from an installed Python on Windows (c:\python32), i.e. some +# libraries and all Python stdlib modules. +$WGET http://www.sigrok.org/tmp/python32.dll -O $PREFIX/python32.dll +$WGET http://www.sigrok.org/tmp/python32.zip -O $PREFIX/python32.zip # libusb0.dll (needs to be shipped with frontends) $WGET -c http://$SF_MIRROR/project/libusb-win32/libusb-win32-releases/$VER_LIBUSB_WIN32/libusb-win32-bin-$VER_LIBUSB_WIN32.zip @@ -125,6 +131,7 @@ cd .. git clone git://sigrok.org/libsigrokdecode cd libsigrokdecode ./autogen.sh +patch -p1 < ../../srd_decodersdir.patch PKG_CONFIG_PATH_i686_pc_mingw32=$P ./configure $C $L make $PARALLEL V=1 make install @@ -158,7 +165,6 @@ cd .. # sigrok-cli git clone git://sigrok.org/sigrok-cli cd sigrok-cli -patch -p1 < ../../sigrok_cli_decodersdir.patch ./autogen.sh PKG_CONFIG_PATH_i686_pc_mingw32=$P:$P2 ./configure $C make $PARALLEL V=1 @@ -169,7 +175,6 @@ cd .. # PulseView git clone git://sigrok.org/pulseview cd pulseview -patch -p1 < ../../pulseview_decodersdir.patch PKG_CONFIG_PATH_i686_pc_mingw32=$P:$P2 cmake $CM -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DDISABLE_WERROR=y . make $PARALLEL VERBOSE=1 make install diff --git a/cross-compile/mingw/sigrok_cli_decodersdir.patch b/cross-compile/mingw/sigrok_cli_decodersdir.patch deleted file mode 100644 index 2cf140b..0000000 --- a/cross-compile/mingw/sigrok_cli_decodersdir.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/main.c b/main.c -index 9ab3f77..9d34034 100644 ---- a/main.c -+++ b/main.c -@@ -216,7 +216,7 @@ int main(int argc, char **argv) - goto done; - - if (opt_pds) { -- if (srd_init(NULL) != SRD_OK) -+ if (srd_init("decoders") != SRD_OK) - goto done; - if (srd_session_new(&srd_sess) != SRD_OK) { - g_critical("Failed to create new decode session."); -diff --git a/show.c b/show.c -index db643d1..55c1bf6 100644 ---- a/show.c -+++ b/show.c -@@ -65,7 +65,7 @@ void show_version(void) - printf("\n"); - - #ifdef HAVE_SRD -- if (srd_init(NULL) == SRD_OK) { -+ if (srd_init("decoders") == SRD_OK) { - printf("Supported protocol decoders:\n"); - srd_decoder_load_all(); - for (l = srd_decoder_list(); l; l = l->next) { diff --git a/cross-compile/mingw/srd_decodersdir.patch b/cross-compile/mingw/srd_decodersdir.patch new file mode 100644 index 0000000..029db03 --- /dev/null +++ b/cross-compile/mingw/srd_decodersdir.patch @@ -0,0 +1,37 @@ +diff --git a/srd.c b/srd.c +index f5b885f..1599957 100644 +--- a/srd.c ++++ b/srd.c +@@ -140,16 +140,32 @@ SRD_API int srd_init(const char *path) + /* Add our own module to the list of built-in modules. */ + PyImport_AppendInittab("sigrokdecode", PyInit_sigrokdecode); + ++ /* ++ * MinGW: Hardcode the frontend's install dir as PYTHONHOME. ++ * The NSIS installers will place python*.dll and python*.zip (which ++ * contains all required libs and Python modules) there. ++ * ++ * Also hardcode that only the Python stdlib and the libsigrokdecode ++ * PDs in the 'decoders' subdirectory in the frontend's install ++ * directory are ever used/found by Python. This avoids various issues ++ * with other Python libs and modules installed on the same system. ++ */ ++ + /* Initialize the Python interpreter. */ ++ Py_SetPythonHome(L"."); + Py_Initialize(); ++ PyRun_SimpleString("import sys; sys.path = ['python32.zip']"); + ++#if 0 + /* Installed decoders. */ + if ((ret = srd_decoder_searchpath_add(DECODERS_DIR)) != SRD_OK) { + Py_Finalize(); + return ret; + } ++#endif + + /* Path specified by the user. */ ++ path = "decoders"; + if (path) { + if ((ret = srd_decoder_searchpath_add(path)) != SRD_OK) { + Py_Finalize();