1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-25 06:04:04 +03:00
Douglas Bagnall 3a7dbf8b77 examples:winexe: embed Samba version as exe timestamp
It turns out the timestamp doesn't need to be real, and it isn't used,
but it might as well tell you something. So let's make it tell you what
version of Samba it came from, which could be useful for people who have
lots of old winexes lying around, the poor souls.

00000040  0e 1f ba 0e 00 b4 09 cd  21 b8 01 4c cd 21 54 68  |........!..L.!Th|
00000050  69 73 20 70 72 6f 67 72  61 6d 20 63 61 6e 6e 6f  |is program canno|
00000060  74 20 62 65 20 72 75 6e  20 69 6e 20 44 4f 53 20  |t be run in DOS |
00000070  6d 6f 64 65 2e 0d 0d 0a  24 00 00 00 00 00 00 00  |mode....$.......|
00000080  50 45 00 00 64 86 0a 00  00 15 04 00 00 00 00 00  |PE..d...........|
                                    |  |  |
                                    |  |  major  4.
                                    |  minor     21.
                                    release      0

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13213

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>

Autobuild-User(master): Douglas Bagnall <dbagnall@samba.org>
Autobuild-Date(master): Fri May 31 01:28:06 UTC 2024 on atb-devel-224
2024-05-31 01:28:06 +00:00

53 lines
1.7 KiB
Python

#!/usr/bin/env python
import os
def configure(conf):
AR32 = ['i386', 'i586', 'i686']
AR64 = ['x86_64', 'amd64']
TC = ['mingw32', 'mingw32msvc', 'w64-mingw32']
found = False
for a in AR32:
for t in TC:
if conf.find_program(a + '-' + t + '-gcc', var='WINEXE_CC_WIN32'):
found = True
break
if found:
conf.DEFINE('HAVE_WINEXE_CC_WIN32', 1);
break
found = False
for a in AR64:
for t in TC:
if conf.find_program(a + '-' + t + '-gcc', var='WINEXE_CC_WIN64'):
found = True
break
if found:
conf.DEFINE('HAVE_WINEXE_CC_WIN64', 1);
break
source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH')
if source_date_epoch is None:
# We use the version to make up the timestamp that will be
# embedded in winexe.exe, to keep the build reproducible.
#
# This is less evil than it sounds. According to Raymond Chen in
# https://devblogs.microsoft.com/oldnewthing/20180103-00/?p=97705
# since Windows 10 the timestamp has been randomised.
#
# The purpose of the timestamp in Windows PE files seems to be
# to make spotting ABI changes in DLLs quicker, for which a
# random number is just as good as a real time. The timestamp
# in .exe files is not used.
import samba_version
v = samba_version.load_version(env=conf.env)
version = (v.MAJOR << 16) | (v.MINOR << 8) | v.RELEASE
source_date_epoch = str(version)
conf.env.SOURCE_DATE_EPOCH = source_date_epoch
conf.DEFINE("WINEXE_LDFLAGS",
"-s -Wall -Wl,-Bstatic -Wl,-Bdynamic -luserenv")