emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Avoid duplicate emacs.exe / emacs-$version.exe


From: Juan José García-Ripoll
Subject: Avoid duplicate emacs.exe / emacs-$version.exe
Date: Sat, 28 Mar 2020 17:53:00 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.90 (windows-nt)

Right now in my hard disk I have two copies of statically linked Emacs.
~/emacs-27/bin/emacs.exe
~/emacs-27/bin/emacs-27.0.90.exe (let me call it emacs-$version.exe)

Each of them is 128Mb large and waste space. I understand the latter is
only meant to be used when the version is required. runemacs.exe and
tools actually seem to rely on emacs.exe, because if I delete
emacs-$version.exe it still works fine.  Same goes for earlier releases.

I would suggest one of these options

a) Remove emacs-$version.exe during installation.

b) Same as a), but install a script emacs-$version.cmd containing just two
lines
    @echo off
    %~dp0\emacs.exe %*

c) Instead, remove emacs.exe and leave only emacs-$version.exe Make emacs.cmd a
script
    @echo off
    %~dp0\emacs-$version.exe %*
where $version is replaced with the current version. We also have to change
runemacs.exe to look for emacs-$version.exe

Option a) only invokes a change in Makefile.in. Option b) includes that change,
plus the creation of the script. This is in a patch attached to this
message. Option c) would be the most intrusive. I personally do not like it
because it binds a general utility, runemacs.exe, to a particular version.

After the patch:
juanj@DESKTOP-3A8AAJ0 MINGW64 ~/emacs-build/build/juanjo
$ du -smc ~/emacs-27/*
135     /c/Users/juanj/emacs-27/bin
1       /c/Users/juanj/emacs-27/include
1       /c/Users/juanj/emacs-27/lib
17      /c/Users/juanj/emacs-27/libexec
98      /c/Users/juanj/emacs-27/share
249     total

Before the patch:
juanj@DESKTOP-3A8AAJ0 MINGW64 ~/emacs-build/build/juanjo
$ du -smc ~/emacs-27/*
252     /c/Users/juanj/emacs-27/bin
1       /c/Users/juanj/emacs-27/include
1       /c/Users/juanj/emacs-27/lib
17      /c/Users/juanj/emacs-27/libexec
98      /c/Users/juanj/emacs-27/share
366     total

A 32% reduction in size.

--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
diff --git a/Makefile.in b/Makefile.in
index 67e15cf..67c14f2 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -499,10 +499,13 @@ install-arch-dep:
 endif
        -chmod 755 "$(DESTDIR)${bindir}/$(EMACSFULL)"
 ifndef NO_BIN_LINK
+ifeq ($(NTDIR),nt)
+       cd "$(DESTDIR)${bindir}" && mv "$(EMACSFULL)" "$(EMACS)"
+else
        rm -f "$(DESTDIR)${bindir}/$(EMACS)"
        cd "$(DESTDIR)${bindir}" && $(LN_S_FILEONLY) "$(EMACSFULL)" "$(EMACS)"
 endif
-else
+endif
        subdir=${ns_appresdir}/site-lisp && ${write_subdir}
        rm -rf ${ns_appresdir}/share
 endif
diff --git a/nt/Makefile.in b/nt/Makefile.in
index 6bdf824..7af6e78 100644
--- a/nt/Makefile.in
+++ b/nt/Makefile.in
@@ -167,7 +167,7 @@ LINK_CFLAGS =
 ## Unused.
 CPP_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFLAGS}
 
-all: ${EXE_FILES}
+all: ${EXE_FILES} emacs-$(version).cmd
 
 .PHONY: all
 
@@ -194,6 +194,7 @@ install:
        for file in ${INSTALLABLES} ; do \
          $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} 
"$(DESTDIR)${bindir}"/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e 
'$(TRANSFORM)'`${EXEEXT} ; \
        done
+       $(INSTALL_PROGRAM) emacs-$(version).cmd "$(DESTDIR)${bindir}"
        ${MKDIR_P} "$(DESTDIR)${datadir}/emacs/$(version)"
        $(INSTALL_DATA) ${srcdir}/README.W32 
"$(DESTDIR)${datadir}/emacs/$(version)"
 
@@ -251,6 +252,10 @@ cmdproxy${EXEEXT}:
 runemacs${EXEEXT}: ${srcdir}/runemacs.c $(EMACSRES)
        $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $^ -mwindows -o $@
 
+emacs-$(version).cmd:
+       echo '@echo off' > $@
+       echo '%~dp0\emacs.exe %*' >> $@
+
 ## Also used in ../src/Makefile.
 emacs.res ../src/emacs.res: emacs.rc ${srcdir}/icons/emacs.ico \
   ${srcdir}/icons/hand.cur ${srcdir}/$(EMACS_MANIFEST)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]