Remove support for 32 bit build

* admin/nt/dist-build/README-scripts: Update
* admin/nt/dist-build/README-windows-binaries: Update
* admin/nt/dist-build/build-zips.sh: Remove 32 bit and fix paths
* admin/nt/dist-build/build-dep-zips.py: Remove 32 bit and update
  paths
* admin/nt/dist-build/emacs.nsi: Remove 32 bit and fix paths
This commit is contained in:
Phillip Lord 2021-01-14 22:51:13 +00:00
parent f95c1b3230
commit 667f2e097c
5 changed files with 103 additions and 199 deletions

View file

@ -33,26 +33,21 @@ build-zips.sh file will create this for you.
A location for the dependencies. This needs to contain two zip files
with the dependencies. build-dep-zips.py will create these files for you.
~/emacs-build/deps/libXpm/i686
~/emacs-build/deps/libXpm/x86_64
~/emacs-build/deps/libXpm
Contain libXpm-noX4.dll. This file is used to load images for the
splash screen, menu items and so on. Emacs runs without it, but looks
horrible. The x86_64 comes from msys2, while the i686 comes from
ezwinports because it itself has no dependencies. These have to be
placed manually (but probably never need updating).
horrible. The files came original from msys2, and contains no
dependencies. It has to be placed manually (but probably never
need updating).
~/emacs-build/build/$version/i686
~/emacs-build/build/$version/x86_64
~/emacs-build/build/$version
We build Emacs out-of-source here. This directory is created by
build-zips.sh. This directory can be freely deleted after zips have
been created
~/emacs-build/install/$version/i686
~/emacs-build/install/$version/x86_64
~/emacs-build/install/$version
We install Emacs here. This directory is created by build-zips.sh.
This directory can and *should* be deleted after zips have been
@ -79,9 +74,9 @@ To do this:
Update msys to the latest version with `pacman -Syu`.
Then run build-dep-zips.py, in the ~/emacs-build/deps directory. Three
zips will be created, containing the 64bit and 32bit dependencies, as
well as the source for these.
Then run build-dep-zips.py, in the ~/emacs-build/deps directory. Two
zips will be created, containing the dependencies, as well as the
source for these.
For emacs release or pre-test version:
@ -105,12 +100,12 @@ To do this:
Update msys to the latest version with `pacman -Syu`.
Then run build-dep-zips.py, in ~/emacs-build/deps directory. Three
zips will be created, containing the 64bit and 32bit dependencies, as
well as the source for these. These deps files contain the date of
creation in their name. The deps file can be reused as desired, or a
new version created. Where multiple deps files exist, the most
recent will be used.
Then run build-dep-zips.py, in ~/emacs-build/deps directory. Two zips
will be created, containing the dependencies, as well as the source
for these. These deps files contain the date of creation in their
name. The deps file can be reused as desired, or a new version
created. Where multiple deps files exist, the most recent will be
used.
Now, run `build-zips.sh -s` to build a snapshot release.
@ -134,4 +129,5 @@ For snapshots from another branch
Snapshots can be build from any other branch. There is rarely a need
to do this, except where some significant, wide-ranging feature is
being added on a feature branch. In this case, the branch can be
given using `build-zips.sh -b pdumper -s` for example.
given using `build-zips.sh -b pdumper -s` for example. Any "/"
characters in the branch title are replaced.

View file

@ -4,7 +4,7 @@ See the end of the file for license conditions.
Precompiled Distributions of
Emacs for Windows
Jan 1, 2020
Jan 14, 2021
This directory contains precompiled distributions for GNU Emacs on
Windows
@ -25,51 +25,33 @@ old binaries.
Windows Binaries
================
Currently, we provide six different binary packages for Emacs, which
Currently, we provide three different binary packages for Emacs, which
are:
emacs-$VERSION-x86_64-installer.exe
emacs-$VERSION-installer.exe
Contains a 64-bit build of Emacs with dependencies as an installer
Contains Emacs with dependencies as an installer
package. Mostly, this is the best one to install.
emacs-$VERSION-x86_64.zip
emacs-$VERSION.zip
Contains a 64-bit build of Emacs with dependencies. This contains the
same files as the installer but as a zip file which some users may
prefer.
Contains Emacs with dependencies. This contains the same files as the
installer but as a zip file which some users may prefer.
emacs-$VERSION-x86_64-no-deps.zip
emacs-$VERSION-no-deps.zip
Contains a 64-bit build of Emacs without any dependencies. This may be
useful if you wish to install where the dependencies are already
available, or if you want the small possible Emacs.
emacs-$VERSION-i686-installer.exe
Contains a 32-bit build of Emacs with dependencies as an installer
package. This is useful for running on a 32-bit machine.
emacs-$VERSION-i686.zip
Contains a 32-bit build of Emacs with dependencies.
emacs-$VERSION-i686-no-deps.zip
Contains a 32-bit build of Emacs without dependencies
Contains Emacs without any dependencies. This may be useful if you
wish to install where the dependencies are already available, or if
you want the small possible Emacs.
In addition, we provide the following files which will not be useful
for most end-users.
emacs-$VERSION-x86_64-deps.zip
emacs-$VERSION-deps.zip
The dependencies. Unzipping this file on top of
emacs-$VERSION-x86_64-no-deps.zip should result in the same install as
emacs-$VERSION-x86_64.zip.
emacs-$VERSION-i686-deps.zip
The 32-bit version of the dependencies.
emacs-$VERSION-no-deps.zip should result in the same install as
emacs-$VERSION.zip.
emacs-$VERSION-deps-mingw-w64-src.zip
@ -85,7 +67,8 @@ Snapshots
We also distribute "snapshots" of Emacs built at points throughout the
development cycle, for those interested in following this cycle. They
are not recommended for normal users.
are not recommended for normal users; however, they are useful for
people who want to report bugs against the current master.
The files follow the same naming convention, but also include a date
(and sometimes information about their branch). The Emacs source at

View file

@ -17,7 +17,6 @@
## You should have received a copy of the GNU General Public License
## along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
import argparse
import multiprocessing as mp
import os
import shutil
import re
@ -64,31 +63,30 @@ def check_output_maybe(*args,**kwargs):
return check_output(*args,**kwargs)
## DLL Capture
def gather_deps(arch, directory):
os.mkdir(arch)
os.chdir(arch)
def gather_deps():
for dep in full_dll_dependency(directory):
check_output_maybe(["cp /{}/bin/{}*.dll .".format(directory, dep)],
os.mkdir("x86_64")
os.chdir("x86_64")
for dep in full_dll_dependency():
check_output_maybe(["cp /mingw64/bin/{}*.dll .".format(dep)],
shell=True)
## And package them up
## os.chdir(arch)
print("Zipping: {}".format(arch))
check_output_maybe("zip -9r ../emacs-{}-{}{}-deps.zip *"
.format(EMACS_MAJOR_VERSION, DATE, arch),
print("Zipping")
check_output_maybe("zip -9r ../emacs-{}-{}deps.zip *"
.format(EMACS_MAJOR_VERSION, DATE),
shell=True)
os.chdir("../")
## Return all Emacs dependencies
def full_dll_dependency(directory):
deps = [dll_dependency(dep, directory) for dep in DLL_REQ]
def full_dll_dependency():
deps = [dll_dependency(dep) for dep in DLL_REQ]
return set(sum(deps, []) + DLL_REQ)
## Dependencies for a given DLL
def dll_dependency(dll, directory):
def dll_dependency(dll):
output = check_output(["/mingw64/bin/ntldd", "--recursive",
"/{}/bin/{}*.dll".format(directory, dll)]).decode("utf-8")
"/mingw64/bin/{}*.dll".format(dll)]).decode("utf-8")
## munge output
return ntldd_munge(output)
@ -114,14 +112,11 @@ def ntldd_munge(out):
## Packages to fiddle with
## Source for gcc-libs is part of gcc
SKIP_SRC_PKGS=["mingw-w64-gcc-libs"]
SKIP_DEP_PKGS=["mingw-w64-x86_64-glib2"]
SKIP_DEP_PKGS=["mingw-w64-glib2"]
MUNGE_SRC_PKGS={"mingw-w64-libwinpthread-git":"mingw-w64-winpthreads-git"}
MUNGE_DEP_PKGS={
"mingw-w64-i686-libwinpthread":"mingw-w64-i686-libwinpthread-git",
"mingw-w64-x86_64-libwinpthread":"mingw-w64-x86_64-libwinpthread-git",
"mingw-w64-x86_64-libtre": "mingw-w64-x86_64-libtre-git",
"mingw-w64-i686-libtre": "mingw-w64-i686-libtre-git"
}
## Currently no packages seem to require this!
@ -155,13 +150,11 @@ def extract_deps():
# Get a list of all dependencies needed for packages mentioned above.
pkgs = PKG_REQ[:]
print("Initial pkgs", pkgs)
n = 0
while n < len(pkgs):
subdeps = immediate_deps(pkgs[n])
for p in subdeps:
if not (p in pkgs or p in SKIP_DEP_PKGS):
print("adding", p)
pkgs.append(p)
n = n + 1
@ -171,33 +164,29 @@ def extract_deps():
def download_source(tarball):
print("Acquiring {}...".format(tarball))
if os.path.exists("../emacs-src-cache/{}".format(tarball)):
print("Copying {} from local".format(tarball))
shutil.copyfile("../emacs-src-cache/{}".format(tarball),
"{}".format(tarball))
else:
if not os.path.exists("../emacs-src-cache/{}".format(tarball)):
print("Downloading {}...".format(tarball))
check_output_maybe(
"wget -a ../download.log -O {} {}/{}/download"
"wget -a ../download.log -O ../emacs-src-cache/{} {}/{}/download"
.format(tarball, SRC_REPO, tarball),
shell=True
)
print("Downloading {}... done".format(tarball))
print("Copying {} from local".format(tarball))
shutil.copyfile("../emacs-src-cache/{}".format(tarball),
"{}".format(tarball))
## Fetch all the source code
def gather_source(deps):
if not os.path.exists("emacs-src-cache"):
os.mkdir("emacs-src-cache")
## Source for gcc-libs is part of gcc
## Source for libwinpthread is in libwinpthreads
## mpc, termcap, xpm -- has x86_64, and i686 versions
## This needs to have been run first at the same time as the
## system was updated.
os.mkdir("emacs-src")
os.chdir("emacs-src")
to_download = []
for pkg in deps:
pkg_name_and_version= \
check_output(["pacman","-Q", pkg]).decode("utf-8").strip()
@ -208,31 +197,18 @@ def gather_source(deps):
pkg_name=pkg_name_components[0]
pkg_version=pkg_name_components[1]
## make a simple name to make lookup easier
simple_pkg_name = re.sub(r"x86_64-","",pkg_name)
## source pkgs don't have an architecture in them
pkg_name = re.sub(r"x86_64-","",pkg_name)
if(simple_pkg_name in SKIP_SRC_PKGS):
if(pkg_name in SKIP_SRC_PKGS):
continue
## Some packages have different source files for different
## architectures. For these we need two downloads.
if(simple_pkg_name in ARCH_PKGS):
downloads = [pkg_name,
re.sub(r"x86_64","i686",pkg_name)]
else:
downloads = [simple_pkg_name]
## Switch names if necessary
pkg_name = MUNGE_SRC_PKGS.get(pkg_name,pkg_name)
for d in downloads:
## Switch names if necessary
d = MUNGE_SRC_PKGS.get(d,d)
tarball = "{}-{}.src.tar.gz".format(pkg_name,pkg_version)
tarball = "{}-{}.src.tar.gz".format(d,pkg_version)
to_download.append(tarball)
## Download in parallel or it is just too slow
p = mp.Pool(1)
p.map(download_source,to_download)
download_source(tarball)
print("Zipping")
check_output_maybe("zip -9 ../emacs-{}-{}deps-mingw-w64-src.zip *"
@ -245,7 +221,6 @@ def gather_source(deps):
def clean():
print("Cleaning")
os.path.isdir("emacs-src") and shutil.rmtree("emacs-src")
os.path.isdir("i686") and shutil.rmtree("i686")
os.path.isdir("x86_64") and shutil.rmtree("x86_64")
os.path.isfile("download.log") and os.remove("download.log")
@ -259,12 +234,6 @@ def clean():
parser.add_argument("-s", help="snapshot build",
action="store_true")
parser.add_argument("-t", help="32 bit deps only",
action="store_true")
parser.add_argument("-f", help="64 bit deps only",
action="store_true")
parser.add_argument("-r", help="source code only",
action="store_true")
@ -278,7 +247,7 @@ def clean():
action="store_true")
args = parser.parse_args()
do_all=not (args.c or args.r or args.f or args.t)
do_all=not (args.c or args.r)
@ -294,11 +263,8 @@ def clean():
else:
DATE=""
if( do_all or args.t ):
gather_deps("i686","mingw32")
if( do_all or args.f ):
gather_deps("x86_64","mingw64")
if( do_all):
gather_deps()
if( do_all or args.r ):
deps=extract_deps()

View file

@ -29,70 +29,62 @@ function git_up {
}
function build_zip {
ARCH=$1
PKG=$2
HOST=$3
echo [build] Building Emacs-$VERSION for $ARCH
if [ $ARCH == "i686" ]
then
PATH=/mingw32/bin:$PATH
MSYSTEM=MINGW32
fi
echo [build] Building Emacs-$VERSION
## Clean the install location because we use it twice
rm -rf $HOME/emacs-build/install/emacs-$VERSION/$ARCH
mkdir --parents $HOME/emacs-build/build/emacs-$VERSION/$ARCH
cd $HOME/emacs-build/build/emacs-$VERSION/$ARCH
rm -rf $HOME/emacs-build/install/emacs-$VERSION
mkdir --parents $HOME/emacs-build/build/emacs-$VERSION
cd $HOME/emacs-build/build/emacs-$VERSION
## Do we need this or is it the default?
export PKG_CONFIG_PATH=/mingw64/lib/pkgconfig
export PKG_CONFIG_PATH=$PKG
## Running configure forces a rebuild of the C core which takes
## time that is not always needed, so do not do it unless we have
## to.
if [ ! -f Makefile ] || (($CONFIG))
then
echo [build] Configuring Emacs $ARCH
echo [build] Configuring Emacs
$REPO_DIR/$BRANCH/configure \
--without-dbus \
--host=$HOST --without-compress-install \
--without-compress-install \
$CACHE \
CFLAGS="$CFLAGS"
fi
make -j 4 $INSTALL_TARGET \
prefix=$HOME/emacs-build/install/emacs-$VERSION/$ARCH
cd $HOME/emacs-build/install/emacs-$VERSION/$ARCH
zip -r -9 emacs-$OF_VERSION-$ARCH-no-deps.zip *
mv emacs-$OF_VERSION-$ARCH-no-deps.zip $HOME/emacs-upload
prefix=$HOME/emacs-build/install/emacs-$VERSION
cd $HOME/emacs-build/install/emacs-$VERSION
zip -r -9 emacs-$OF_VERSION-no-deps.zip *
mv emacs-$OF_VERSION-no-deps.zip $HOME/emacs-upload
if [ -z $SNAPSHOT ];
then
DEPS_FILE=$HOME/emacs-build/deps/emacs-$MAJOR_VERSION-$ARCH-deps.zip
DEPS_FILE=$HOME/emacs-build/deps/emacs-$MAJOR_VERSION-deps.zip
else
## Pick the most recent snapshot whatever that is
DEPS_FILE=`ls $HOME/emacs-build/deps/emacs-$MAJOR_VERSION-*-$ARCH-deps.zip | tail -n 1`
DEPS_FILE=`ls $HOME/emacs-build/deps/emacs-$MAJOR_VERSION-*-deps.zip | tail -n 1`
fi
echo [build] Using $DEPS_FILE
unzip -d bin $DEPS_FILE
zip -r -9 emacs-$OF_VERSION-$ARCH.zip *
mv emacs-$OF_VERSION-$ARCH.zip ~/emacs-upload
zip -r -9 emacs-$OF_VERSION.zip *
mv emacs-$OF_VERSION.zip ~/emacs-upload
}
function build_installer {
ARCH=$1
cd $HOME/emacs-build/install/emacs-$VERSION
cd $HOME/emacs-build/install/
echo [build] Calling makensis in `pwd`
cp $REPO_DIR/$BRANCH/admin/nt/dist-build/emacs.nsi .
makensis -v4 \
-DARCH=$ARCH -DEMACS_VERSION=$ACTUAL_VERSION \
-DEMACS_VERSION=$ACTUAL_VERSION \
-DVERSION_BRANCH=$VERSION \
-DOUT_VERSION=$OF_VERSION emacs.nsi
rm emacs.nsi
mv emacs-$OF_VERSION-$ARCH-installer.exe ~/emacs-upload
mv emacs-$OF_VERSION-installer.exe ~/emacs-upload
}
set -o errexit
@ -101,7 +93,6 @@ SNAPSHOT=
CACHE=
BUILD=1
BUILD_32=1
BUILD_64=1
GIT_UP=0
CONFIG=1
@ -112,19 +103,8 @@ INSTALL_TARGET="install-strip"
REPO_DIR=$HOME/emacs-build/git/
while getopts "36gb:hnsiV:" opt; do
while getopts "gb:hnsiV:" opt; do
case $opt in
3)
BUILD_32=1
BUILD_64=0
GIT_UP=0
;;
6)
BUILD_32=0
BUILD_64=1
GIT_UP=0
;;
g)
BUILD_32=0
BUILD_64=0
@ -150,10 +130,11 @@ while getopts "36gb:hnsiV:" opt; do
;;
h)
echo "build-zips.sh"
echo " -3 32 bit build only"
echo " -6 64 bit build only"
echo " -b args -- build args branch"
echo " -g git update and worktree only"
echo " -i build installer only"
echo " -n do not configure"
echo " -s snaphot build"
exit 0
;;
\?)
@ -223,18 +204,7 @@ if (($BUILD_64))
then
if (($BUILD))
then
build_zip x86_64 /mingw64/lib/pkgconfig x86_64-w64-mingw32
build_zip
fi
build_installer x86_64
fi
## Do the 64 bit build first, because we reset some environment
## variables during the 32 bit which will break the build.
if (($BUILD_32))
then
if (($BUILD))
then
build_zip i686 /mingw32/lib/pkgconfig i686-w64-mingw32
fi
build_installer i686
build_installer
fi

View file

@ -2,7 +2,7 @@
!include LogicLib.nsh
!include x64.nsh
Outfile "emacs-${OUT_VERSION}-${ARCH}-installer.exe"
Outfile "emacs-${OUT_VERSION}-installer.exe"
SetCompressor /solid lzma
@ -14,15 +14,15 @@ Var StartMenuFolder
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_WELCOMEPAGE_TEXT "Welcome to Emacs -- the editor of a lifetime."
!define MUI_WELCOMEFINISHPAGE_BITMAP "${ARCH}\share\emacs\${EMACS_VERSION}\etc\images\splash.bmp"
!define MUI_ICON "${ARCH}\share\emacs\${EMACS_VERSION}\etc\images\icons\hicolor\scalable\apps\emacs.ico"
!define MUI_UNICON "${ARCH}\share\emacs\${EMACS_VERSION}\etc\images\icons\hicolor\scalable\apps\emacs.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\etc\images\splash.bmp"
!define MUI_ICON "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\etc\images\icons\hicolor\scalable\apps\emacs.ico"
!define MUI_UNICON "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\etc\images\icons\hicolor\scalable\apps\emacs.ico"
!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_TEXT_TOP "The GNU General Public License"
!insertmacro MUI_PAGE_LICENSE "${ARCH}\share\emacs\${EMACS_VERSION}\lisp\COPYING"
!insertmacro MUI_PAGE_LICENSE "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\lisp\COPYING"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
@ -36,19 +36,7 @@ Var StartMenuFolder
Name Emacs-${EMACS_VERSION}
function .onInit
${If} ${RunningX64}
${If} ${ARCH} == "x86_64"
StrCpy $INSTDIR "$PROGRAMFILES64\Emacs"
${Else}
StrCpy $INSTDIR "$PROGRAMFILES32\Emacs"
${Endif}
${Else}
${If} ${ARCH} == "x86_64"
Quit
${Else}
StrCpy $INSTDIR "$PROGRAMFILES\Emacs"
${Endif}
${EndIf}
StrCpy $INSTDIR "$PROGRAMFILES64\Emacs"
functionend
@ -56,7 +44,8 @@ Section
SetOutPath $INSTDIR
File /r ${ARCH}
File /r emacs-${VERSION_BRANCH}
# define uninstaller name
WriteUninstaller $INSTDIR\Uninstall.exe
@ -66,7 +55,7 @@ Section
CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_END
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Emacs.lnk" "$INSTDIR\${ARCH}\bin\runemacs.exe"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Emacs.lnk" "$INSTDIR\emacs-${VERSION_BRANCH}\bin\runemacs.exe"
SectionEnd
@ -78,7 +67,7 @@ Section "Uninstall"
Delete "$INSTDIR\Uninstall.exe"
# now delete installed directory
RMDir /r "$INSTDIR\${ARCH}"
RMDir /r "$INSTDIR"
RMDir "$INSTDIR"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder