mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-13 17:20:55 +00:00
Packaging for LyX 1.3.6 on Windows.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_3_X@10001 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
51c86b27c0
commit
552efbcd59
116
development/Win32/packaging/README
Normal file
116
development/Win32/packaging/README
Normal file
@ -0,0 +1,116 @@
|
||||
Packaging LyX 1.3.6 for Windows
|
||||
===============================
|
||||
|
||||
Preparing the way
|
||||
=================
|
||||
|
||||
The very first thing to do on the way to creating a LyX/Win package is
|
||||
to build the sources and install them somewhere accessible. (I've been
|
||||
using PREFIX='/J/Programs/LyX'.)
|
||||
|
||||
Thereafter, the contents of this tree must be manipulated a
|
||||
little. I've written a little script, package_lyxwin.sh, to automate
|
||||
the process:
|
||||
|
||||
* Copy the DLLs qt-mt3.dll, libiconv-2.dll, mingwm10.dll to the
|
||||
$PREFIX/bin/ directory. These are needed by the LyX executable.
|
||||
|
||||
* Strip the binaries in $PREFIX/bin/ of all debugging info.
|
||||
|
||||
* Copy dt2dv.exe and dv2dt.exe to $PREFIX/bin/ and clean_dvi.py to
|
||||
$PREFIX/Resources/lyx/scripts/ These are needed to enable dvips, yap
|
||||
et al. to cope with "file names with spaces".
|
||||
|
||||
* Add formats and converters to the $PREFIX/Resources/lyx/configure
|
||||
script so that users can use the clean_dvi script transparently.
|
||||
|
||||
* Remove all stuff generated by running configure. It makes sense on
|
||||
your machine only, not for whoever is installing LyX. Specifically
|
||||
|
||||
xfonts/fonts.dir, xfonts/fonts.scale, doc/LaTeXConfig.lyx,
|
||||
lyxrc.defaults, packages.lst and textclass.lst
|
||||
|
||||
should all be removed.
|
||||
|
||||
Creating the LyX icons
|
||||
======================
|
||||
|
||||
All icons are to be found in sub-directory icons/.
|
||||
|
||||
The LyX icons, lyx_32x32.ico and lyx_doc_32x32.ico, are based on .svg
|
||||
files written and realease into the public domain by Andy Fitzsimon:
|
||||
|
||||
http://openclipart.org/clipart/computer/icons/etiquette-theme/aps/LyX.svg
|
||||
http://openclipart.org/clipart/computer/icons/etiquette-theme/mimetype.svg
|
||||
|
||||
lyx.svg is Andy's original.
|
||||
lyx_doc.svg is a merger of LyX.svg with mimetype.svg
|
||||
|
||||
Working on a linux box, I used sodipodi (http://www.sodipodi.com/) to
|
||||
create the .svg file and to export these vector graphics images to
|
||||
32x32 pixel bitmaps (.png format). Thereafter I used gimp
|
||||
(http://www.gimp.org/) to generate reduced color depth versions (16,
|
||||
256 colors).
|
||||
|
||||
Finally, on a WindowsXP machine, I used IconXP
|
||||
(http://www.aha-soft.com/iconxp/) to build the .ico files from these
|
||||
.png files at differing resolutions.
|
||||
|
||||
Adding the LyX icons to lyx.exe
|
||||
===============================
|
||||
|
||||
********************************************************************
|
||||
NOTE: Run 'strip' on lyx.exe before adding any images to it. 'strip'
|
||||
will not work after images have been added.
|
||||
|
||||
$ strip lyx.exe
|
||||
j:\mingw\bin\strip.exe: lyx.exe: File in wrong format
|
||||
********************************************************************
|
||||
|
||||
Windows executables can store various "resources", including images. I
|
||||
used ResourceHacker (http://rpi.net.au/~ajohnson/resourcehacker) to
|
||||
add the LyX icons to the .exe file.
|
||||
|
||||
Fire up ResHacker.exe and load lyx.exe
|
||||
File>Open... lyx.exe
|
||||
|
||||
Action>Add a new Resource...
|
||||
Open file with resource ... lyx_32x32.ico
|
||||
Resource Type will be set to "ICONGROUP"
|
||||
Set Resource Name to "1". (No inverted commas.)
|
||||
Add Resource
|
||||
|
||||
The icon will be shown in the main Resource Hacker window under
|
||||
Icon Group>1>0 and as Icon>5[0-3].
|
||||
|
||||
Repeat for lyx_doc_32x32.ico, setting the Resource Name to "2".
|
||||
|
||||
Save the modified lyx.exe. Resource Hacker will copy the original to
|
||||
lyx_original.exe. Remove it.
|
||||
|
||||
Building the LyX installer
|
||||
==========================
|
||||
|
||||
At this point my J:\Programs\LyX tree now contains everything that is
|
||||
to be released as a LyX/Win package. All that remains to do is to
|
||||
generate a Windows installer for it. I've written a script for NSIS
|
||||
(http://nsis.sourceforge.net/) to compile into an installer.
|
||||
|
||||
You'll need to compile and install lyx_path_prefix.dll. From the
|
||||
comments in lyx_path_prefix.C:
|
||||
|
||||
/* Compile the code with
|
||||
*
|
||||
* g++ -I/c/Program\ Files/NSIS/Contrib -Wall -shared \
|
||||
* lyx_path_prefix.c -o lyx_path_prefix.dll
|
||||
*
|
||||
* Move resulting .dll to /c/Program\ Files/NSIS/Plugins
|
||||
*/
|
||||
|
||||
Thereafter, you'll be able to build the installer itself:
|
||||
|
||||
$ <PATH to>/makensis lyx_installer.nsi
|
||||
|
||||
creating lyx_setup_136.exe ready to ship.
|
||||
|
||||
END README
|
100
development/Win32/packaging/clean_dvi.py
Normal file
100
development/Win32/packaging/clean_dvi.py
Normal file
@ -0,0 +1,100 @@
|
||||
#! /usr/bin/env python
|
||||
|
||||
'''
|
||||
file clean_dvi.py
|
||||
This file is part of LyX, the document processor.
|
||||
Licence details can be found in the file COPYING
|
||||
or at http://www.lyx.org/about/licence.php3
|
||||
|
||||
author Angus Leeming
|
||||
Full author contact details are available in the file CREDITS
|
||||
or at http://www.lyx.org/about/credits.php
|
||||
|
||||
Usage:
|
||||
python clean_dvi.py infile.dvi outfile.dvi
|
||||
|
||||
clean_dvi modifies the input .dvi file so that
|
||||
dvips and yap (a dvi viewer on Windows) can find
|
||||
any embedded PostScript files whose names are protected
|
||||
with "-quotes.
|
||||
|
||||
It works by:
|
||||
1 translating the machine readable .dvi file to human
|
||||
readable .dtl form,
|
||||
2 manipulating any references to external files
|
||||
3 translating the .dtl file back to .dvi format.
|
||||
|
||||
It requires dv2dt and dt2dv from the DTL dviware package
|
||||
http://www.ctan.org/tex-archive/dviware/dtl/
|
||||
'''
|
||||
|
||||
import os, re, sys
|
||||
|
||||
def usage(prog_name):
|
||||
return 'Usage: %s in.dvi out.dvi\n' \
|
||||
% os.path.basename(prog_name)
|
||||
|
||||
|
||||
def warning(message):
|
||||
sys.stderr.write(message + '\n')
|
||||
|
||||
|
||||
def error(message):
|
||||
sys.stderr.write(message + '\n')
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def manipulated_dtl(data):
|
||||
psfile_re = re.compile(r'(.*PSfile=")(.*)(" llx=.*)')
|
||||
|
||||
lines = data.split('\n')
|
||||
for i in range(len(lines)):
|
||||
line = lines[i]
|
||||
match = psfile_re.search(line)
|
||||
if match != None:
|
||||
file = match.group(2).replace('"', '')
|
||||
lines[i] = '%s%s%s' \
|
||||
% ( match.group(1), file, match.group(3) )
|
||||
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
def main(argv):
|
||||
# First establish that the expected information has
|
||||
# been input on the command line and whether the
|
||||
# required executables exist.
|
||||
if len(argv) != 3:
|
||||
error(usage(argv[0]))
|
||||
|
||||
infile = argv[1]
|
||||
outfile = argv[2]
|
||||
|
||||
if not os.path.exists(infile):
|
||||
error('Unable to read "%s"\n' % infile)
|
||||
|
||||
# Convert the input .dvi file to .dtl format.
|
||||
dv2dt_call = 'dv2dt "%s"' % infile
|
||||
dv2dt_stdin, dv2dt_stdout, dv2dt_stderr = \
|
||||
os.popen3(dv2dt_call, 't')
|
||||
|
||||
dv2dt_stdin.close()
|
||||
dv2dt_data = dv2dt_stdout.read()
|
||||
dv2dt_status = dv2dt_stdout.close()
|
||||
|
||||
if dv2dt_status != None or len(dv2dt_data) == 0:
|
||||
dv2dt_err = dv2dt_stderr.read()
|
||||
error("Failed: %s\n%s\n" % ( dv2dt_call, dv2dt_err) )
|
||||
|
||||
# Manipulate the .dtl file.
|
||||
dtl_data = manipulated_dtl(dv2dt_data)
|
||||
if dtl_data == None:
|
||||
error("Failed to manipulate the dtl file")
|
||||
|
||||
# Convert this .dtl file back to .dvi format.
|
||||
dt2dv_call = 'dt2dv -si "%s"' % outfile
|
||||
dt2dv_stdin = os.popen(dt2dv_call, 'w')
|
||||
dt2dv_stdin.write(dtl_data)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv)
|
111
development/Win32/packaging/package_lyxwin.sh
Normal file
111
development/Win32/packaging/package_lyxwin.sh
Normal file
@ -0,0 +1,111 @@
|
||||
#! /bin/sh
|
||||
|
||||
# This script aims to do averything necessary to automate the packaging
|
||||
# of LyX/Win ready for an Windows Installer to be built.
|
||||
|
||||
# It copies these files into the appropriate places in the LyX tree.
|
||||
# qt-mt3.dll
|
||||
# libiconv-2.dll
|
||||
# mingw10.dll
|
||||
# clean_dvi.py
|
||||
# dv2dt.exe
|
||||
# dt2dv.exe
|
||||
|
||||
# It strips the executables.
|
||||
|
||||
# It adds formats and converters to the Resources/lyx/configure script to
|
||||
# ensure that the generated .dvi file is usable.
|
||||
|
||||
# It removes all stuff generated by running configure:
|
||||
# xfonts/
|
||||
# doc/LaTeXConfig.lyx
|
||||
# lyxrc.defaults
|
||||
# packages.lst
|
||||
# textclass.lst
|
||||
|
||||
# The installee should regenerate them by running configure on his machine.
|
||||
|
||||
QT_DLL="$HOME/qt3/bin/qt-mt3.dll"
|
||||
LIBICONV_DLL="/j/MinGW/bin/libiconv-2.dll"
|
||||
MINGW_DLL="/j/MinGW/bin/mingwm10.dll"
|
||||
CLEAN_DVI_PY="clean_dvi.py"
|
||||
DTL_DIR=dtl
|
||||
DT2DV="$DTL_DIR/dt2dv.exe"
|
||||
DV2DT="$DTL_DIR/dv2dt.exe"
|
||||
|
||||
LYX_INSTALL_DIR="/j/Programs/LyX"
|
||||
|
||||
# Change this to 'mv -f' when you are confident that
|
||||
# the various sed scripts are working correctly.
|
||||
MV='mv -f'
|
||||
|
||||
windows_packaging()
|
||||
{
|
||||
# Install the necessary .dlls and clean_dvi stuff.
|
||||
for file in "${QT_DLL}" "${LIBICONV_DLL}" "${MINGW_DLL}" "${DT2DV}" "${DV2DT}"
|
||||
do
|
||||
cp "${file}" "$LYX_INSTALL_DIR"/bin/. || {
|
||||
echo "Failed to copy ${file} to the LyX package" >&2
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
|
||||
cp "${CLEAN_DVI_PY}" "$LYX_INSTALL_DIR"/Resources/lyx/scripts/. || {
|
||||
echo "Failed to copy ${CLEAN_DVI_PY} to the LyX package" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Strip the executables
|
||||
(
|
||||
cd "${LYX_INSTALL_DIR}/bin"
|
||||
for file in *.exe
|
||||
do
|
||||
strip $file
|
||||
done
|
||||
)
|
||||
|
||||
# Modify the configure script,
|
||||
# * add a dvi2 format
|
||||
# * change the latex->dvi converter to latex->dvi2
|
||||
# * add a dvi2->dvi converter
|
||||
# * fix the generated chkconfig.sed so that it works with versions of
|
||||
# sed that get confused by sed scripts with DOS line endings.
|
||||
TMP=tmp.$$
|
||||
CONFIGURE="${LYX_INSTALL_DIR}"/Resources/lyx/configure
|
||||
# Do this to make it easy to compare the before and after files.
|
||||
dos2unix "${CONFIGURE}"
|
||||
sed '
|
||||
# (Note that this sed script contains TAB characters.)
|
||||
# Append the dvi2 format after the dvi format.
|
||||
/^ *\\\\Format[ ]\{1,\}dvi[ ]\{1,\}/a\
|
||||
\\\\Format dvi2 dvi DirtyDVI ""
|
||||
|
||||
# Change the latex->dvi converter to latex->dvi2
|
||||
# and append the dvi2->dvi converter
|
||||
/^ *\\\\converter[ ]\{1,\}latex[ ]\{1,\}dvi[ ]\{1,\}/{
|
||||
s/dvi/dvi2/
|
||||
a\
|
||||
\\\\converter dvi2 dvi "python \\\$\\\$s/scripts/clean_dvi.py \\\$\\\$i \\\$\\\$o" ""
|
||||
}
|
||||
' "${CONFIGURE}" > "${TMP}"
|
||||
cmp -s "${CONFIGURE}" "${TMP}" || {
|
||||
diff -u "${CONFIGURE}" "${TMP}"
|
||||
${MV} "${TMP}" "${CONFIGURE}"
|
||||
}
|
||||
rm -f "${TMP}"
|
||||
|
||||
# Strip the executables
|
||||
(
|
||||
cd "${LYX_INSTALL_DIR}/Resources/lyx"
|
||||
rm -rf xfonts
|
||||
for file in doc/LaTeXConfig.lyx lyxrc.defaults packages.lst textclass.lst
|
||||
do
|
||||
rm -f $file
|
||||
done
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
windows_packaging || exit 1
|
||||
|
||||
# The end
|
Loading…
Reference in New Issue
Block a user