Windows compatibility fixes
- spec file for pyinstaller detects architecture (32 or 64bit) - spec file uses os.path.join - spec file creates and adds the list of messagetypes - added MinGW/MSyS support in Makefile - separate Makefile.msvc for MCVC - bitmsghash.cpp minor adjustments to build also on MSVC/MinGW - if frozen mode, messagetypes loads the list of files from a text file generated during archive building rather than from a directory
This commit is contained in:
parent
a95f4aa255
commit
67c8966a21
|
@ -1,15 +1,30 @@
|
||||||
|
import ctypes
|
||||||
|
import os
|
||||||
|
|
||||||
srcPath = "C:\\src\\PyBitmessage\\src\\"
|
srcPath = "C:\\src\\PyBitmessage\\src\\"
|
||||||
qtPath = "C:\\Qt\\4.8.6\\"
|
qtPath = "C:\\Qt-4.8.7\\"
|
||||||
openSSLPath = "C:\\OpenSSL-1.0.2e\\"
|
openSSLPath = "C:\\OpenSSL-1.0.2j\\"
|
||||||
outPath = "C:\\src\\PyInstaller\\bitmessagemain"
|
outPath = "C:\\src\\PyInstaller-3.2.1\\bitmessagemain"
|
||||||
|
|
||||||
# -*- mode: python -*-
|
# -*- mode: python -*-
|
||||||
a = Analysis([srcPath + 'bitmessagemain.py'],
|
a = Analysis([srcPath + 'bitmessagemain.py'],
|
||||||
pathex=[outPath],
|
pathex=[outPath],
|
||||||
hiddenimports=[],
|
hiddenimports=['messagetypes'],
|
||||||
hookspath=None,
|
hookspath=None,
|
||||||
runtime_hooks=None)
|
runtime_hooks=None)
|
||||||
|
|
||||||
|
# manually add messagetypes directory and its listing
|
||||||
|
with open(os.path.join(srcPath, 'messagetypes.txt'), 'wt') as f:
|
||||||
|
for mt in os.listdir(os.path.join(srcPath, 'messagetypes')):
|
||||||
|
if mt == "__init__.py":
|
||||||
|
continue
|
||||||
|
splitted = os.path.splitext(mt)
|
||||||
|
if splitted[1] != ".py":
|
||||||
|
continue
|
||||||
|
f.write(mt + "\n")
|
||||||
|
a.scripts.append((os.path.join('messagetypes', mt), os.path.join(srcPath, 'messagetypes', mt), 'PYMODULE'))
|
||||||
|
a.datas.append(('messagetypes.txt', os.path.join(srcPath, 'messagetypes.txt'), 'DATA'))
|
||||||
|
|
||||||
# fix duplicates
|
# fix duplicates
|
||||||
for d in a.datas:
|
for d in a.datas:
|
||||||
if 'pyconfig' in d[0]:
|
if 'pyconfig' in d[0]:
|
||||||
|
@ -22,11 +37,11 @@ def addTranslations():
|
||||||
for file in os.listdir(srcPath + 'translations'):
|
for file in os.listdir(srcPath + 'translations'):
|
||||||
if file[-3:] != ".qm":
|
if file[-3:] != ".qm":
|
||||||
continue
|
continue
|
||||||
extraDatas.append(('translations\\'+file, srcPath + 'translations\\' + file, 'DATA'))
|
extraDatas.append((os.path.join('translations', file), os.path.join(srcPath, 'translations', file) 'DATA'))
|
||||||
for file in os.listdir(qtPath + 'translations'):
|
for file in os.listdir(qtPath + 'translations'):
|
||||||
if file[0:3] != "qt_" or file[5:8] != ".qm":
|
if file[0:3] != "qt_" or file[5:8] != ".qm":
|
||||||
continue
|
continue
|
||||||
extraDatas.append(('translations\\'+file, qtPath + 'translations\\' + file, 'DATA'))
|
extraDatas.append((os.path.join('translations', file), os.path.join(qtPath, 'translations', file), 'DATA'))
|
||||||
return extraDatas
|
return extraDatas
|
||||||
|
|
||||||
def addUIs():
|
def addUIs():
|
||||||
|
@ -35,14 +50,24 @@ def addUIs():
|
||||||
for file in os.listdir(srcPath + 'bitmessageqt'):
|
for file in os.listdir(srcPath + 'bitmessageqt'):
|
||||||
if file[-3:] != ".ui":
|
if file[-3:] != ".ui":
|
||||||
continue
|
continue
|
||||||
extraDatas.append(('ui\\'+file, srcPath + 'bitmessageqt\\' + file, 'DATA'))
|
extraDatas.append((os.path.join('ui', file), os.path.join(srcPath, 'bitmessageqt', file), 'DATA'))
|
||||||
return extraDatas
|
return extraDatas
|
||||||
|
|
||||||
# append the translations directory
|
# append the translations directory
|
||||||
a.datas += addTranslations()
|
a.datas += addTranslations()
|
||||||
a.datas += addUIs()
|
a.datas += addUIs()
|
||||||
|
|
||||||
a.binaries.append(('msvcr120.dll', 'C:\\WINDOWS\\system32\\msvcr120.dll', 'BINARY'))
|
if ctypes.sizeof(ctypes.c_voidp) == 4:
|
||||||
|
arch=32
|
||||||
|
else:
|
||||||
|
arch=64
|
||||||
|
|
||||||
|
a.binaries += [('libeay32.dll', openSSLPath + 'libeay32.dll', 'BINARY'),
|
||||||
|
(os.path.join('bitmsghash', 'bitmsghash%i.dll' % (arch)), os.path.join(srcPath, 'bitmsghash', 'bitmsghash%i.dll' % (arch)), 'BINARY'),
|
||||||
|
(os.path.join('bitmsghash', 'bitmsghash.cl'), os.path.join(srcPath, 'bitmsghash', 'bitmsghash.cl'), 'BINARY'),
|
||||||
|
(os.path.join('sslkeys', 'cert.pem'), os.path.join(srcPath, 'sslkeys', 'cert.pem'), 'BINARY'),
|
||||||
|
(os.path.join('sslkeys', 'key.pem'), os.path.join(srcPath, 'sslkeys', 'key.pem'), 'BINARY')
|
||||||
|
]
|
||||||
|
|
||||||
pyz = PYZ(a.pure)
|
pyz = PYZ(a.pure)
|
||||||
exe = EXE(pyz,
|
exe = EXE(pyz,
|
||||||
|
@ -50,9 +75,9 @@ exe = EXE(pyz,
|
||||||
a.binaries,
|
a.binaries,
|
||||||
a.zipfiles,
|
a.zipfiles,
|
||||||
a.datas,
|
a.datas,
|
||||||
a.binaries + [('libeay32.dll', openSSLPath + 'libeay32.dll', 'BINARY'), ('bitmsghash\\bitmsghash32.dll', srcPath + 'bitmsghash\\bitmsghash32.dll', 'BINARY'), ('bitmsghash\\bitmsghash.cl', srcPath + 'bitmsghash\\bitmsghash.cl', 'BINARY'), ('sslkeys\\cert.pem', srcPath + 'sslkeys\\cert.pem', 'BINARY'), ('sslkeys\\key.pem', srcPath + 'sslkeys\\key.pem', 'BINARY')],
|
a.binaries,
|
||||||
name='Bitmessage.exe',
|
name='Bitmessage.exe',
|
||||||
debug=False,
|
debug=False,
|
||||||
strip=None,
|
strip=None,
|
||||||
upx=False,
|
upx=False,
|
||||||
console=False, icon= srcPath + 'images\\can-icon.ico')
|
console=False, icon= os.path.join(srcPath, 'images', 'can-icon.ico')
|
||||||
|
|
|
@ -2,6 +2,11 @@ UNAME_S := $(shell uname -s)
|
||||||
ifeq ($(UNAME_S),Darwin)
|
ifeq ($(UNAME_S),Darwin)
|
||||||
CCFLAGS += -I/usr/local/Cellar/openssl/1.0.2d_1/include
|
CCFLAGS += -I/usr/local/Cellar/openssl/1.0.2d_1/include
|
||||||
LDFLAGS += -L/usr/local/Cellar/openssl/1.0.2d_1/lib
|
LDFLAGS += -L/usr/local/Cellar/openssl/1.0.2d_1/lib
|
||||||
|
else ifeq ($(UNAME_S),MINGW32_NT-6.1)
|
||||||
|
CCFLAGS += -IC:\OpenSSL-1.0.2j-mingw\include -D_WIN32 -march=native
|
||||||
|
LDFLAGS += -static-libgcc -LC:\OpenSSL-1.0.2j-mingw\lib -lwsock32 -o bitmsghash32.dll -Wl,--out-implib,bitmsghash.a
|
||||||
|
else
|
||||||
|
LDFLAGS += -lpthread -o bigmsghash.so
|
||||||
endif
|
endif
|
||||||
|
|
||||||
all: bitmsghash.so
|
all: bitmsghash.so
|
||||||
|
@ -10,11 +15,11 @@ powtest:
|
||||||
./testpow.py
|
./testpow.py
|
||||||
|
|
||||||
bitmsghash.so: bitmsghash.o
|
bitmsghash.so: bitmsghash.o
|
||||||
g++ bitmsghash.o -shared -fPIC -lpthread -lcrypto $(LDFLAGS) -o bitmsghash.so
|
g++ bitmsghash.o -shared -fPIC -lcrypto $(LDFLAGS)
|
||||||
|
|
||||||
bitmsghash.o:
|
bitmsghash.o:
|
||||||
g++ -Wall -O3 -march=native -fPIC $(CCFLAGS) -c bitmsghash.cpp
|
g++ -Wall -O3 -march=native -fPIC $(CCFLAGS) -c bitmsghash.cpp
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f bitmsghash.o bitmsghash.so
|
rm -f bitmsghash.o bitmsghash.so bitmsghash*.dll
|
||||||
|
|
||||||
|
|
2
src/bitmsghash/Makefile.msvc
Normal file
2
src/bitmsghash/Makefile.msvc
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
all:
|
||||||
|
cl /I C:\OpenSSL-1.0.2j\include /INCREMENTAL bitmsghash.cpp /MT /link /DLL /OUT:bitmsghash32.dll /LIBPATH:C:\OpenSSL-1.0.2j\lib\ libeay32.lib ws2_32.lib
|
|
@ -66,7 +66,11 @@ void * threadfunc(void* param) {
|
||||||
successval = tmpnonce;
|
successval = tmpnonce;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef _WIN32
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
return NULL;
|
return NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void getnumthreads()
|
void getnumthreads()
|
||||||
|
@ -104,7 +108,11 @@ void getnumthreads()
|
||||||
#endif
|
#endif
|
||||||
for (unsigned int i = 0; i < len * 8; i++)
|
for (unsigned int i = 0; i < len * 8; i++)
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
|
#if defined(_MSC_VER)
|
||||||
if (dwProcessAffinity & (1i64 << i))
|
if (dwProcessAffinity & (1i64 << i))
|
||||||
|
#else // CYGWIN/MINGW
|
||||||
|
if (dwProcessAffinity & (1ULL << i))
|
||||||
|
#endif
|
||||||
#elif defined __linux__
|
#elif defined __linux__
|
||||||
if (CPU_ISSET(i, &dwProcessAffinity))
|
if (CPU_ISSET(i, &dwProcessAffinity))
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -3,7 +3,7 @@ from os import path, listdir
|
||||||
from string import lower
|
from string import lower
|
||||||
|
|
||||||
from debug import logger
|
from debug import logger
|
||||||
|
import paths
|
||||||
|
|
||||||
class MsgBase(object):
|
class MsgBase(object):
|
||||||
def encode(self):
|
def encode(self):
|
||||||
|
@ -28,7 +28,15 @@ def constructObject(data):
|
||||||
else:
|
else:
|
||||||
return returnObj
|
return returnObj
|
||||||
|
|
||||||
for mod in listdir(path.dirname(__file__)):
|
mods = []
|
||||||
|
if paths.frozen is not None:
|
||||||
|
with open(path.join(path.dirname(path.dirname(__file__)), 'messagetypes.txt'), 'rt') as f:
|
||||||
|
for m in f.readline():
|
||||||
|
mods.append(m.rstrip())
|
||||||
|
else:
|
||||||
|
mods = listdir(path.dirname(__file__))
|
||||||
|
|
||||||
|
for mod in mods:
|
||||||
if mod == "__init__.py":
|
if mod == "__init__.py":
|
||||||
continue
|
continue
|
||||||
splitted = path.splitext(mod)
|
splitted = path.splitext(mod)
|
||||||
|
|
Reference in New Issue
Block a user