source: git/doc/HACKING.htm @ c8f41099

stereo-2025warn-only-for-hanging-survey
Last change on this file since c8f41099 was fc1d89b, checked in by Olly Betts <olly@…>, 12 months ago

Update to use innosetup 6.2.2

The Hungarian translation is now official. Update the unofficial
Romanian translation.

  • Property mode set to 100644
File size: 6.5 KB
RevLine 
[e7839be]1<HTML><HEAD>
2<TITLE>Survex Hacker's Guide</TITLE>
3<STYLE type="text/css"><!--
4BODY, TD, CENTER, UL, OL {font-family: sans-serif;}
5-->
6</STYLE>
7</HEAD><BODY BGCOLOR=white TEXT=black>
8<H1>Hacking Survex</H1>
9
10<p>(That's hacking in the "tinkering with code" sense, not in the
11"breaking into other people's computer systems" sense).
12
13<p>This is currently a random collection of notes that need to be written
14down while I remember.  With time it should evolve into a more
15coherent document.  If you have any questions which this should answer
16but doesn't then ask me and I'll add them.
17
18<H2>Network code debugging</H2>
19
20<P>You can pick which network simplifications are attempted using "-z"
21with an argument listing code letters.  So:
22
23<ul>
24<li>-z=    no special simplifications (articulation still performed)
25<li>-z=l   remove "lollipops"
26<li>-z=p   remove parallel legs
27<li>-z=d   convert deltas to stars
28</ul>
29
30<P>And you can combine these in any combination:
31
32<ul>
33<li>-z=lp  remove "lollipops" and parallel legs
34<li>-z=lpd remove "lollipops" and parallel legs; convert deltas to stars
35</ul>
36
37<P>"-z=lpd" is the default (in 0.99 at least - more transformations may
38conceivably be added in future, although the simple common cases are
39already covered).
40
41<H2>Developing on Unix Platforms</H2>
42
[b63c928d]43<P>You'll need automake 1.5 or later (earlier versions don't support
[27b8b59]44per-executable CFLAGS; 1.6 has been tested and works, but wasn't a
45very stable release - automake 1.6.1 is a better bet)
[1ed5c4e]46and autoconf 2.50 or later (autoconf 2.52, 2.53, 2.64 and 2.71 have all
[9bf7aa33]47been used successfully).
[c372fc9]48
[dc74a56]49<p>The wxWidgets library is used for aven's UI.  Currently &gt;= 3.0.0 is
[1ed5c4e]50supported.
51
[dc74a56]52<p>The PROJ library is used for coordinate conversions.  Currently &gt;= 6.2.0 is
[1ed5c4e]53supported.
54
55<P>The Perl Locale::PO module is used for process message translation files.
56
[d5ef6ad]57<P>For building the documentation you'll need docbook-utils (also
58known as docbook-tools) and w3m.
[e7839be]59
[29e5a96]60<P>And for building unifont.pixelfont, you'll need unifont installed.
61
62<P>On Debian, you can install the required packages using:
63
64<pre>
[1ed5c4e]65sudo apt-get install autoconf automake liblocale-po-perl libproj-dev libwxgtk3.0-gtk3-dev inkscape netpbm docbook-utils w3m unifont
[29e5a96]66</pre>
[6127c82]67
[e7839be]68<H2>Building on Non-Unix Platforms</H2>
69
[c372fc9]70<H3>Mingw (Microsoft Windows)</H3>
[e7839be]71
72<P>Currently I build this with a Linux hosted cross-compiler.  I use
[adceff5]73the packaged cross-compiler in the debian testing/unstable distribution:
74
[bd285e5a]75<pre>
76sudo apt-get install mingw-w64-i686-dev
77</pre>
[e7839be]78
[d6a770d]79<p>
80I then install the various libraries by compiling from source.  For wxWidgets
[3e85309]81I apply a
[b1c66e1]82<a href="https://survex.com/software/wxWidgets-3.2.4.patch">patch</a> to
[3e85309]83disable a pointless and annoying compiler ABI check
[38bc415]84(with this check aven stops working each time my cross compiler package is
85upgraded to a new GCC version; without it everything works fine).
[853438c]86</p>
87
88<p>
89Then I configure, build and install with:
[bd285e5a]90</p>
91
92<pre>
[b1c66e1]93./configure --prefix=/usr/i686-w64-mingw32 --host i686-w64-mingw32 --with-msw --with-opengl --enable-display --disable-shared host_alias=i686-w64-mingw32 DOCBOOK_TO_MAN="xmlto man --skip-validation"
[bd285e5a]94make
95sudo make install
96</pre>
97
98<p>
[7576825]99For sqlite (needed by PROJ):
[d6a770d]100</p>
101
[bd285e5a]102<pre>
[7576825]103wget https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz
104tar xvf sqlite-autoconf-3360000.tar.gz
[bd285e5a]105mkdir BUILD
106cd BUILD
[7576825]107../configure --prefix=/usr/i686-w64-mingw32 --host i686-w64-mingw32 --disable-shared --disable-fts4 --disable-fts5 --disable-json1 --disable-rtree host_alias=i686-w64-mingw32
[bd285e5a]108make
109sudo make install
110</pre>
111
112<p>
[9cf9de0]113Sadly newer versions of PROJ have to be built with cmake.  For PROJ 9.3.0
114I used the following (TIFF is apparently useful for some grids, but would also
115need libtiff):
[7576825]116</p>
117
118<pre>
119mkdir BUILD
120cd BUILD
[9cf9de0]121cmake .. -DCMAKE_TOOLCHAIN_FILE=~/git/survex/cross-mingw.cmake -DCMAKE_INSTALL_PREFIX=/usr/i686-w64-mingw32 -DENABLE_CURL=OFF -DENABLE_TIFF=OFF -DBUILD_PROJSYNC=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON -DFETCHCONTENT_FULLY_DISCONNECTED=ON -DBUILD_TESTING=OFF
[7576825]122make
123sudo make install
124</pre>
125
[dc74a56]126<p>where <tt>cross-mingw.cmake</tt> contains:</p>
[9cf9de0]127
128<pre>
129# the name of the target operating system
130set(CMAKE_SYSTEM_NAME Windows)
131
132# which compilers to use for C and C++
133set(CMAKE_C_COMPILER   i686-w64-mingw32-gcc)
134set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
135
136# where is the target environment located
137set(CMAKE_FIND_ROOT_PATH  /usr/i686-w64-mingw32)
138
139# adjust the default behaviour of the FIND_XXX() commands:
140# search programs in the host environment
141set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
142
143# search headers and libraries in the target environment
144set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
145set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
146</pre>
147
[7576825]148<p>
149For ffmpeg 4.4.1:
[bd285e5a]150</p>
151
152<pre>
153sudo apt-get install yasm
154mkdir BUILD
155cd BUILD
[86801ff]156../configure --prefix=/usr/i686-w64-mingw32 --cross-prefix=i686-w64-mingw32- --enable-cross-compile --target-os=mingw32 --arch=i686 --disable-shared --disable-decoders --disable-demuxers --disable-programs --disable-network --disable-bsfs --disable-protocols --disable-devices
[bd285e5a]157make
158sudo make install
159</pre>
[d6a770d]160
[e7839be]161<P>Building on Windows in a native mingw environment will probably
162require tinkering.  Best bet is probably to install bash and use the
163current configure script.  I'm happy to help if you want to try this,
164and I'll incorporate patches provided they're fairly clean.
165
[9fe7af4f]166<H2>Microsoft Windows Installer Builder</H2>
167
168<P>We use <A HREF="http://www.jrsoftware.org/isinfo.php">InnoSetup</A> to
[fc1d89b]169build the MS Windows Installer.  Survex 1.4.8 was built using InnoSetup
1706.2.2.
[ebcdad9]171
172<P>Here are some random notes:
[9fe7af4f]173
[85f3565]174<H3>Packages Needed</H3>
175
[7576825]176<P>On Debian unstable/testing:
[adceff5]177
178<pre>
[8aebb0a]179sudo apt-get install wine wx3.0-i18n
[adceff5]180</pre>
181
182<P>And then run:
[85f3565]183
[adceff5]184<pre>
[fc1d89b]185wine ~/Downloads/innosetup-6.2.2.exe
[adceff5]186</pre>
[85f3565]187
[9fe7af4f]188<H3>Translations</H3>
189
[ebcdad9]190<P>In addition to the translations included with InnoSetup as standard, we also
[8b3362b]191add these, which you can find in the <code>lib</code> subdirectory of Survex's
[e367554]192source tree:
[9fe7af4f]193
194<UL>
[9990aab]195<li>ChineseSimplified.isl (6.1.0+)
196<li>ChineseTraditional.isl (6.1.0+)
197<li>EnglishBritish.isl (6.1.0+)
198<li>Greek.isl (6.1.0+)
199<li>Indonesian.isl (6.1.0+)
[fc1d89b]200<li>Romanian.isl (6.1.0+)
[9fe7af4f]201</UL>
202
[9990aab]203These are taken from the <a href="https://jrsoftware.org/files/istrans/">Inno
204Setup Translations</a> page.
[317c11b]205
[9fe7af4f]206<H3>survex.iss</H3>
207
208<P>This file is generated by configure (from the template survex.iss.in).
209We could instead have a static survex.iss which uses #include to pull in
210a file with the Survex version info in, but the current method works well
211enough so we'll stick with it for now (I suspect #include was introduced since
212we started using InnoSetup).
213
[e7839be]214</BODY></HTML>
Note: See TracBrowser for help on using the repository browser.