146 lines
5.4 KiB
Diff
146 lines
5.4 KiB
Diff
From 740d67e54bc66018ff6897ed376065d2cb7bbece Mon Sep 17 00:00:00 2001
|
|
From: Christoph Reiter <reiter.christoph@gmail.com>
|
|
Date: Thu, 17 Jun 2021 18:52:16 +0530
|
|
Subject: [PATCH 040/N] build: link win resource files and build pythonw
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
|
---
|
|
Makefile.pre.in | 26 +++++++++++++++++++++-----
|
|
configure.ac | 27 +++++++++++++++++++++++++++
|
|
2 files changed, 48 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
|
index 928020f..4b7c462 100644
|
|
--- a/Makefile.pre.in
|
|
+++ b/Makefile.pre.in
|
|
@@ -38,6 +38,7 @@ CC= @CC@
|
|
CXX= @CXX@
|
|
LINKCC= @LINKCC@
|
|
AR= @AR@
|
|
+WINDRES= @WINDRES@
|
|
READELF= @READELF@
|
|
SOABI= @SOABI@
|
|
LDVERSION= @LDVERSION@
|
|
@@ -124,6 +125,7 @@ PY_CORE_CFLAGS= $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE
|
|
PY_CORE_LDFLAGS=$(PY_LDFLAGS) $(PY_LDFLAGS_NODIST)
|
|
# Strict or non-strict aliasing flags used to compile dtoa.c, see above
|
|
CFLAGS_ALIASING=@CFLAGS_ALIASING@
|
|
+RCFLAGS=@RCFLAGS@
|
|
|
|
|
|
# Machine-dependent subdirectories
|
|
@@ -286,6 +288,7 @@ LIBOBJS= @LIBOBJS@
|
|
|
|
PYTHON= python$(EXE)
|
|
BUILDPYTHON= python$(BUILDEXE)
|
|
+BUILDPYTHONW= pythonw$(BUILDEXE)
|
|
|
|
HOSTRUNNER= @HOSTRUNNER@
|
|
|
|
@@ -622,7 +625,7 @@ all: @DEF_MAKE_ALL_RULE@
|
|
.PHONY: all
|
|
|
|
.PHONY: build_all
|
|
-build_all: check-clean-src $(BUILDPYTHON) platform sharedmods \
|
|
+build_all: check-clean-src $(BUILDPYTHON) $(BUILDPYTHONW) platform sharedmods \
|
|
gdbhooks Programs/_testembed scripts checksharedmods rundsymutil
|
|
|
|
.PHONY: build_wasm
|
|
@@ -789,9 +792,21 @@ coverage-report: regen-token regen-frozen
|
|
clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
|
|
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir)
|
|
|
|
+python_exe.o: $(srcdir)/PC/python_exe.rc
|
|
+ $(WINDRES) $(RCFLAGS) -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/python_exe.rc $@
|
|
+
|
|
+pythonw_exe.o: $(srcdir)/PC/pythonw_exe.rc
|
|
+ $(WINDRES) $(RCFLAGS) -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/pythonw_exe.rc $@
|
|
+
|
|
+python_nt.o: $(srcdir)/PC/python_nt.rc
|
|
+ $(WINDRES) $(RCFLAGS) -DORIGINAL_FILENAME=\\\"$(DLLLIBRARY)\\\" -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/python_nt.rc $@
|
|
+
|
|
+$(BUILDPYTHONW): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) pythonw_exe.o
|
|
+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -mwindows -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) pythonw_exe.o
|
|
+
|
|
# Build the interpreter
|
|
-$(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS)
|
|
- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS)
|
|
+$(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS) python_exe.o
|
|
+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) python_exe.o
|
|
|
|
platform: $(PYTHON_FOR_BUILD_DEPS) pybuilddir.txt
|
|
$(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform
|
|
@@ -880,10 +895,10 @@ $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \
|
|
|
|
# This rule builds the Cygwin Python DLL and import library if configured
|
|
# for a shared core library; otherwise, this rule is a noop.
|
|
-$(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS)
|
|
+$(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS) python_nt.o
|
|
if test -n "$(DLLLIBRARY)"; then \
|
|
$(LDSHARED) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \
|
|
- $(LIBS) $(MODLIBS) $(SYSLIBS); \
|
|
+ $(LIBS) $(MODLIBS) $(SYSLIBS) python_nt.o; \
|
|
else true; \
|
|
fi
|
|
|
|
@@ -1979,6 +1994,7 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@
|
|
done
|
|
if test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \
|
|
$(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
|
|
+ $(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(BINDIR)/python3w$(EXE); \
|
|
else \
|
|
$(INSTALL_PROGRAM) $(STRIPFLAG) Mac/pythonw $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
|
|
fi
|
|
diff --git a/configure.ac b/configure.ac
|
|
index 4f754c0..dd0f41a 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -1759,6 +1759,10 @@ AC_SUBST([LINK_PYTHON_OBJS])
|
|
AC_SUBST([AR])
|
|
AC_CHECK_TOOLS([AR], [ar aal], [ar])
|
|
|
|
+# windres program
|
|
+AC_SUBST(WINDRES)
|
|
+AC_CHECK_TOOL(WINDRES, windres)
|
|
+
|
|
# tweak ARFLAGS only if the user didn't set it on the command line
|
|
AC_SUBST([ARFLAGS])
|
|
if test -z "$ARFLAGS"
|
|
@@ -7086,10 +7090,33 @@ AC_MSG_RESULT([done])
|
|
case $host in
|
|
*-*-mingw*)
|
|
LIBS="$LIBS -lversion -lshlwapi -lpathcch"
|
|
+ AC_PROG_AWK
|
|
+ if test "$AWK" = "gawk"; then
|
|
+ awk_extra_flag="--non-decimal-data"
|
|
+ fi
|
|
+ AC_MSG_CHECKING([FIELD3])
|
|
+ FIELD3=$($AWK $awk_extra_flag '\
|
|
+ /^#define PY_RELEASE_LEVEL_/ {levels[$2]=$3} \
|
|
+ /^#define PY_MICRO_VERSION[[:space:]]+/ {micro=$3} \
|
|
+ /^#define PY_RELEASE_LEVEL[[:space:]]+/ {level=levels[$3]} \
|
|
+ /^#define PY_RELEASE_SERIAL[[:space:]]+/ {serial=$3} \
|
|
+ END {print micro * 1000 + level * 10 + serial}' \
|
|
+ $srcdir/Include/patchlevel.h
|
|
+ )
|
|
+
|
|
+ AC_MSG_RESULT([${FIELD3}])
|
|
+ RCFLAGS="$RCFLAGS -DFIELD3=$FIELD3 -O COFF"
|
|
+
|
|
+ case $host in
|
|
+ i686*) RCFLAGS="$RCFLAGS --target=pe-i386" ;;
|
|
+ x86_64*) RCFLAGS="$RCFLAGS --target=pe-x86-64" ;;
|
|
+ *) ;;
|
|
+ esac
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
+AC_SUBST(RCFLAGS)
|
|
|
|
# Availability of -O2:
|
|
AC_CACHE_CHECK([for -O2], [ac_cv_compile_o2], [
|