-
Notifications
You must be signed in to change notification settings - Fork 2
/
Makefile.am
150 lines (118 loc) · 5.43 KB
/
Makefile.am
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
SUBDIRS = dic game utils qt po extras
ACLOCAL_AMFLAGS = -I m4
WIN32_ZIP_FILE = $(top_builddir)/eliot-$(VERSION)-win32.zip
WIN32_EXE_FILE = $(top_builddir)/eliot-$(VERSION)-win32.exe
WIN32_PACKAGE_DIR = $(top_builddir)/eliot-$(VERSION)
WIN32_INSTALLER_DIR = $(top_builddir)/eliot-installer-$(VERSION)
MACOSX_PACKAGE_DIR = $(top_builddir)/eliot-$(VERSION)/Eliot.app
DMG_FILE = $(top_builddir)/eliot-$(VERSION).dmg
.PHONY: package-win32-dir package-win32-zip package-win32-exe package-macosx
EXTRA_DIST = COPYING.arabica LGPL-2.0.txt
WIN32_DLLS = libgcc_s_sjlj-1.dll libwinpthread-1.dll libstdc++-6.dll
U2D = unix2dos
# Prepare the win32 package (directory only)
package-win32-dir:
# Remove previous stuff
rm -rf $(WIN32_PACKAGE_DIR)
mkdir -p $(WIN32_PACKAGE_DIR)
# Copy the binaries and strip them
cp $(top_builddir)/dic/compdic$(EXEEXT) $(top_builddir)/dic/listdic$(EXEEXT) $(top_builddir)/qt/eliot$(EXEEXT) $(WIN32_PACKAGE_DIR)
$(STRIP) $(WIN32_PACKAGE_DIR)/*
# Copy the i18n files
cat $(top_srcdir)/po/LINGUAS | while read lang; do \
mkdir -p $(WIN32_PACKAGE_DIR)/locale/$${lang}/LC_MESSAGES; \
cp $(top_srcdir)/po/$${lang}.gmo $(WIN32_PACKAGE_DIR)/locale/$${lang}/LC_MESSAGES/eliot.mo; \
done
mkdir -p $(WIN32_PACKAGE_DIR)/locale/qt4
cp $(QT4LOCALEDIR)/*.qm $(WIN32_PACKAGE_DIR)/locale/qt4/ || true
# Copy relevant text files
for i in AUTHORS COPYING COPYING.arabica NEWS THANKS; do \
cp $(top_srcdir)/$$i $(WIN32_PACKAGE_DIR)/$$i.txt; \
$(U2D) $(WIN32_PACKAGE_DIR)/$$i.txt; \
done
# Copy reports
cp -r $(top_srcdir)/extras/reports $(WIN32_PACKAGE_DIR)
$(U2D) $(WIN32_PACKAGE_DIR)/reports/README.txt
# Copy the cross-compiler DLLs
for i in $(WIN32_DLLS); do \
cp /usr/i686-w64-mingw32/bin/$$i $(WIN32_PACKAGE_DIR); \
done
# Prepare the win32 package (zip version)
package-win32-zip: package-win32-dir
rm -f $(WIN32_ZIP_FILE)
# Zip the temporary dir and remove it
zip -r -9 $(WIN32_ZIP_FILE) $(WIN32_PACKAGE_DIR)
rm -rf $(WIN32_PACKAGE_DIR)
@echo "Package generated: $(WIN32_ZIP_FILE)"
# Prepare the win32 package (exe version)
# This target supposes that a 'iscc' script is available:
# see https://katastrophos.net/andre/blog/2009/03/16/setting-up-the-inno-setup-compiler-on-debian/
# It also supposes the ELIOT_DIC_DIR environment variable points to a folder
# containing the dictionaries, with the correct structure.
package-win32-exe: package-win32-dir
rm -rf $(WIN32_INSTALLER_DIR)
# Make sure that the environment variable is present,
# and check quickly the directory
if [ ! -d "$(ELIOT_DIC_DIR)" ]; then \
echo "Environment variable ELIOT_DIC_DIR not correctly defined!"; \
exit 1; \
fi
if [ ! -d "$(ELIOT_DIC_DIR)/english" ]; then \
echo "Invalid directories structure in \\$$ELIOT_DIC_DIR!"; \
exit 1; \
fi
# Prepare a temporary directory for InnoSetup
mkdir -p $(WIN32_INSTALLER_DIR)
mv $(WIN32_PACKAGE_DIR) $(WIN32_INSTALLER_DIR)/eliot
cp -r $(top_srcdir)/extras/innosetup/inno* $(WIN32_INSTALLER_DIR)
cp -r $(top_builddir)/extras/innosetup/* $(WIN32_INSTALLER_DIR)
cp -r $(ELIOT_DIC_DIR) $(WIN32_INSTALLER_DIR)
# Run the compiler
iscc $(WIN32_INSTALLER_DIR)/eliot-setup.iss
mv $(WIN32_INSTALLER_DIR)/Output/*.exe $(WIN32_EXE_FILE)
rm -rf $(WIN32_INSTALLER_DIR)
@echo "Executable generated: $(WIN32_EXE_FILE)"
# Prepare the macosx package
package-macosx:
# Remove previous stuff
rm -rf $(top_builddir)/eliot-$(VERSION)
# Prepare the bundle structure
mkdir -p $(MACOSX_PACKAGE_DIR)/Contents/MacOS
mkdir -p $(MACOSX_PACKAGE_DIR)/Contents/Resources
cp $(top_srcdir)/extras/macosx/Info.plist $(MACOSX_PACKAGE_DIR)/Contents
cp $(top_srcdir)/extras/macosx/eliot-64.icns $(MACOSX_PACKAGE_DIR)/Contents/Resources
# Copy the binaries and strip them
cp $(top_builddir)/qt/eliot$(EXEEXT) $(MACOSX_PACKAGE_DIR)/Contents/MacOS/Eliot
strip $(MACOSX_PACKAGE_DIR)/Contents/MacOS/Eliot
# Copy the i18n files
cat $(top_srcdir)/po/LINGUAS | while read lang; do \
mkdir -p $(MACOSX_PACKAGE_DIR)/locale/$${lang}/LC_MESSAGES; \
cp $(top_srcdir)/po/$${lang}.gmo $(MACOSX_PACKAGE_DIR)/locale/$${lang}/LC_MESSAGES/eliot.mo; \
done
mkdir -p $(MACOSX_PACKAGE_DIR)/locale/qt4
cp $(QT4LOCALEDIR)/qt_*.qm $(MACOSX_PACKAGE_DIR)/locale/qt4/ || true
# Copy the shared libraries (up to 3 levels of recursive dependencies)
mkdir -p $(MACOSX_PACKAGE_DIR)/Contents/Frameworks
otool -L $(MACOSX_PACKAGE_DIR)/Contents/MacOS/Eliot | grep /opt/local/ | sed 's/ (.*//' > dylib.list1
otool -L `cat dylib.list1` | grep /opt/local/ | grep " (" | sed 's/ (.*//' | sort -u > dylib.list2
otool -L `cat dylib.list2` | grep /opt/local/ | grep " (" | sed 's/ (.*//' | sort -u > dylib.list3
for lib in `cat dylib.list3`; do \
cp $$lib $(MACOSX_PACKAGE_DIR)/Contents/Frameworks; \
done
rm -f dylib.list*
# Copy needed Qt resources
mkdir -p $(MACOSX_PACKAGE_DIR)/Contents/Resources
cp -r "`find /opt/local -name qt_menu.nib`" $(MACOSX_PACKAGE_DIR)/Contents/Resources
# Change the dependencies, so that we point to the libraries inside the bundle
cd $(MACOSX_PACKAGE_DIR)/Contents/Frameworks; \
for lib in `ls`; do \
for dep in `otool -L $$lib | grep /opt/local/ | sed 's/ (.*//'`; do \
chmod 755 $$lib; \
install_name_tool -change $$dep @executable_path/../Frameworks/`basename $$dep` $$lib; \
install_name_tool -change $$dep @executable_path/../Frameworks/`basename $$dep` ../MacOS/Eliot; \
done; \
done
# Build the .dmg file
package-macosx-dmg: package-macosx
rm -f $(DMG_FILE)
hdiutil create "$(DMG_FILE)" -verbose -scrub -srcfolder "$(top_builddir)/eliot-$(VERSION)"