Christian Egli | f70f4e0 | 2011-01-03 15:09:06 +0000 | [diff] [blame] | 1 | This HACKING file describes the development environment. -*- org -*- |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 2 | |
Christian Egli | 311d52b | 2013-01-11 16:19:23 +0000 | [diff] [blame] | 3 | Copyright (C) 2008, 2009, 2011 ViewPlus Technologies, Inc. and Abilitiessoft, Inc. |
Christian Egli | 818e58b | 2015-06-05 14:27:06 +0200 | [diff] [blame] | 4 | Copyright (C) 2012, 2013, 2014,2015 Swiss Library for the Blind, Visually Impaired and Print Disabled |
Christian Egli | 311d52b | 2013-01-11 16:19:23 +0000 | [diff] [blame] | 5 | |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 6 | Copying and distribution of this file, with or without modification, |
| 7 | are permitted in any medium without royalty provided the copyright |
Christian Egli | 741b007 | 2014-09-18 11:08:45 +0200 | [diff] [blame] | 8 | notice and this notice are preserved. This file is offered as-is, |
| 9 | without any warranty. |
Christian Egli | eddc466 | 2009-03-09 13:27:20 +0000 | [diff] [blame] | 10 | |
| 11 | This file attempts to describe the maintainer-specific notes to follow |
| 12 | when hacking liblouis. |
| 13 | |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 14 | * Developing |
| 15 | ** Where to get it |
Christian Egli | 71647d6 | 2014-05-20 09:20:28 +0200 | [diff] [blame] | 16 | The development sources are available through git at github.com: |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 17 | |
Christian Egli | 71647d6 | 2014-05-20 09:20:28 +0200 | [diff] [blame] | 18 | https://github.com/liblouis/liblouis |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 19 | |
| 20 | ** Build requirements |
Christian Egli | 818e58b | 2015-06-05 14:27:06 +0200 | [diff] [blame] | 21 | To build Automake, Autoconf, and Libtool are used. If you are getting |
| 22 | the sources from git (or change configure.ac), you'll need to have |
| 23 | these tools installed to (re)build. Optionally (if you want to |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 24 | generate man pages) you'll also need help2man. All of these programs |
| 25 | are available from ftp://ftp.gnu.org/gnu. |
| 26 | |
Christian Egli | a02c136 | 2017-03-06 10:38:45 +0100 | [diff] [blame^] | 27 | If you want to run the YAML based test suite you will have to install |
| 28 | ~libyaml~. |
| 29 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 30 | On Mac OS, the programs can be optained with Homebrew (http://brew.sh): |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 31 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 32 | brew install automake libtool pkg-config texinfo |
| 33 | |
| 34 | Note that if you are using Homebrew to install liblouis (see below), |
| 35 | the build dependencies are installed automatically. |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 36 | |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 37 | ** Gnulib |
Christian Egli | 818e58b | 2015-06-05 14:27:06 +0200 | [diff] [blame] | 38 | Gnulib (http://www.gnu.org/software/gnulib) is used to provide |
| 39 | portable basic functionality to programs and libraries. We use two |
| 40 | instances of gnulib, one to provide portable functions such as |
| 41 | ~malloc~, ~strndup~, etc to the library and another one to provide |
| 42 | portable functionality such as ~getopt~, ~progname~ or |
| 43 | ~version-etc~ to the tools. |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 44 | |
Christian Egli | 818e58b | 2015-06-05 14:27:06 +0200 | [diff] [blame] | 45 | The first time invocation to import gnulib for the library was |
| 46 | |
| 47 | gnulib-tool --add-import --lib=libgnu --source-base=gnulib \ |
| 48 | --m4-base=gnulib/m4 --aux-dir=build-aux --libtool \ |
| 49 | --macro-prefix=gl --no-vc-files \ |
| 50 | malloc-gnu realloc-gnu strndup |
| 51 | |
| 52 | and for the tools |
| 53 | |
| 54 | gnulib-tool --add-import --lib=libgnutools --source-base=tools/gnulib \ |
| 55 | --m4-base=tools/gnulib/m4 --aux-dir=build-aux --libtool \ |
| 56 | --macro-prefix=gl_tools --no-vc-files \ |
| 57 | getopt-gnu malloc-gnu progname version-etc |
| 58 | |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 59 | More modules might have been added since. The currently-used gnulib |
| 60 | modules and other gnulib information are recorded in |
Christian Egli | 818e58b | 2015-06-05 14:27:06 +0200 | [diff] [blame] | 61 | ~gnulib/m4/gnulib-cache.m4~ and ~tools/gnulib/m4/gnulib-cache.m4~. |
| 62 | |
| 63 | If you want to update from the current gnulib, install gnulib, and |
| 64 | then run the following commands in the top-level directory. |
| 65 | |
| 66 | gnulib-tool --add-import --lib=libgnu --source-base=gnulib \ |
| 67 | --m4-base=gnulib/m4 --aux-dir=build-aux --libtool \ |
| 68 | --macro-prefix=gl --no-vc-files |
| 69 | gnulib-tool --add-import --lib=libgnutools --source-base=tools/gnulib \ |
| 70 | --m4-base=tools/gnulib/m4 --aux-dir=build-aux --libtool \ |
| 71 | --macro-prefix=gl_tools --no-vc-files |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 72 | |
| 73 | ** How to build |
Christian Egli | 71647d6 | 2014-05-20 09:20:28 +0200 | [diff] [blame] | 74 | After getting the sources from git, with |
Christian Egli | 81b0481 | 2009-11-05 11:07:17 +0000 | [diff] [blame] | 75 | |
Christian Egli | 71647d6 | 2014-05-20 09:20:28 +0200 | [diff] [blame] | 76 | git clone https://github.com/liblouis/liblouis.git |
Christian Egli | 81b0481 | 2009-11-05 11:07:17 +0000 | [diff] [blame] | 77 | |
| 78 | and installing the tools above, change to the liblouis directory and |
| 79 | and bootstrap the project with the following command |
| 80 | |
| 81 | ./autogen.sh |
| 82 | |
| 83 | to do a fresh build. Then run configure as usual: |
| 84 | |
| 85 | ./configure |
| 86 | |
| 87 | You have the choice to compile liblouis for either 16- or 32-bit |
| 88 | Unicode. By default it is compiled for the former. To get 32-bit |
| 89 | Unicode run configure with --enable-ucs4 . |
| 90 | |
| 91 | After running configure run "make" and then "make install". You must |
| 92 | have root privileges for the installation step. |
Christian Egli | 5510e4a | 2009-11-05 09:55:30 +0000 | [diff] [blame] | 93 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 94 | ** Install with Homebrew |
| 95 | Homebrew (http://brew.sh) is a package manager for Mac OS X that |
| 96 | installs software from source. There is nothing special about the |
| 97 | installation process in the sense that under the hood it happens |
| 98 | exactly as described above, with the only difference that Homebrew |
| 99 | automates it completely. |
| 100 | |
| 101 | First, use the ~brew tap~ command to add the repository that includes |
| 102 | the liblouis formula: |
| 103 | |
| 104 | brew tap liblouis/liblouis |
| 105 | |
| 106 | Now you are ready to install liblouis: |
| 107 | |
| 108 | brew install liblouis |
| 109 | |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 110 | ** Docker |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 111 | Docker (https://www.docker.com) can be useful both for creating a |
| 112 | development environment for liblouis, and for shipping the |
| 113 | application. |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 114 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 115 | Setting up a developer environment can take long and can be |
| 116 | problematic especially for Windows. Thanks to Docker we can set up the |
| 117 | environment for you, we can easily distribute it as an image, which |
| 118 | can be run by anybody and will behave exactly the same for everybody. |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 119 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 120 | Docker images of liblouis are being built automatically each time |
| 121 | something changes in the code (see https://registry.hub.docker.com/repos/liblouis). |
| 122 | In order to use them, first get Docker at |
| 123 | http://docs.docker.com/introduction/get-docker. Download the latest |
| 124 | liblouis image with: |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 125 | |
Bert Frees | 16f2820 | 2015-09-11 15:54:03 +0200 | [diff] [blame] | 126 | docker pull liblouis/liblouis |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 127 | |
| 128 | Then, enter the development environment by running the image in a |
| 129 | Docker container: |
| 130 | |
Bert Frees | 16f2820 | 2015-09-11 15:54:03 +0200 | [diff] [blame] | 131 | docker run -it liblouis/liblouis bash |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 132 | |
| 133 | Local files and directories can be "mounted" inside the container, in |
| 134 | order to make it easier to edit files and to persist changes across |
| 135 | runs. For example, to use local table files: |
| 136 | |
| 137 | docker run -it -v $(pwd)/tables:/tmp/liblouis/tables liblouis/liblouis bash |
| 138 | |
| 139 | See the Docker documentation for more info. |
| 140 | |
| 141 | The same Docker image can be used as a development environment and as |
| 142 | the application itself. For example, to run the lou_translate tool |
| 143 | from inside a Docker container: |
| 144 | |
Bert Frees | 16f2820 | 2015-09-11 15:54:03 +0200 | [diff] [blame] | 145 | docker run -it liblouis/liblouis lou_translate en-us-g1.ctb |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 146 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 147 | To rebuild the image yourself, run the following command in the root |
| 148 | directory of the liblouis source: |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 149 | |
Bert Frees | 16f2820 | 2015-09-11 15:54:03 +0200 | [diff] [blame] | 150 | docker build -t liblouis/liblouis . |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 151 | |
Bert Frees | 12e9904 | 2015-11-15 12:23:40 +0100 | [diff] [blame] | 152 | A .dockerignore file is required if you want to compile the source both on te host and in the Docker |
| 153 | container. The .dockerignore file can be updated from .gitignore with: |
| 154 | |
| 155 | make .dockerignore |
| 156 | |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 157 | ** How to run tests |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 158 | Tests are run with |
Bert Frees | d41c9ac | 2015-03-25 14:42:43 +0100 | [diff] [blame] | 159 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 160 | make check |
| 161 | |
Christian Egli | f70f4e0 | 2011-01-03 15:09:06 +0000 | [diff] [blame] | 162 | ** How to debug |
Christian Egli | 45b3d32 | 2013-01-17 09:51:56 +0000 | [diff] [blame] | 163 | First you have to build liblouis with debugging info enabled. |
| 164 | |
| 165 | $ ./configure CFLAGS='-g -O0 -Wall -Wextra' |
| 166 | $ make |
| 167 | |
Christian Egli | f70f4e0 | 2011-01-03 15:09:06 +0000 | [diff] [blame] | 168 | Starting the programs under the tools directory within gdb is a little |
| 169 | tricky as they are linked with libtool. See the info page of libtool |
| 170 | for more information. To start lou_checktable for table wiskunde.ctb |
| 171 | for example you'd have to issue the following commands: |
| 172 | |
| 173 | $ libtool --mode=execute gdb ./tools/lou_checktable |
| 174 | (gdb) run tables/wiskunde.ctb |
| 175 | |
Christian Egli | c77a589 | 2012-05-11 12:11:26 +0000 | [diff] [blame] | 176 | ** How to find memory leaks |
| 177 | Valgrind is a tool that can be used to find memory errors. It is |
| 178 | recommended that you compile liblouis without any optimizations and |
| 179 | with all warnings enabled before running it through Valgrind: |
| 180 | |
| 181 | $ ./configure CFLAGS='-g -O0 -Wall' |
| 182 | $ make |
| 183 | |
| 184 | Then use Valgrind to analyze liblouis. For example you can run |
| 185 | lou_translate trough Valgrind: |
| 186 | |
| 187 | $ libtool --mode=execute valgrind -v --tool=memcheck \ |
| 188 | --leak-check=full --leak-resolution=high --log-file=valgrind.log \ |
| 189 | ./tools/lou_translate en-us-g2.ctb |
| 190 | |
| 191 | Type a few words at the prompt, check translation and terminate |
| 192 | lou_translate. Now open the file valgrind.log and see if there are any |
| 193 | memory leaks reported. |
| 194 | |
| 195 | You can also just run lou_checktable for example: |
| 196 | |
| 197 | $ libtool --mode=execute valgrind -v --tool=memcheck \ |
| 198 | --leak-check=full --leak-resolution=high --log-file=valgrind.log \ |
Davy Kager | b32f70a | 2016-07-04 12:16:33 +0200 | [diff] [blame] | 199 | ./tools/lou_checktable tables/nl-BE-g0.utb |
Christian Egli | c77a589 | 2012-05-11 12:11:26 +0000 | [diff] [blame] | 200 | |
| 201 | Again open valgrind.log to see if any memory leaks were reported. |
| 202 | |
Christian Egli | ae43532 | 2012-05-14 10:00:36 +0000 | [diff] [blame] | 203 | For the full experience run lou_allround under Valgrind: |
| 204 | |
| 205 | $ libtool --mode=execute valgrind -v --tool=memcheck \ |
| 206 | --leak-check=full --show-reachable=yes \ |
| 207 | --leak-resolution=high --track-origins=yes \ |
| 208 | --log-file=valgrind.log ./tools/lou_allround |
| 209 | |
Christian Egli | 6eb6334 | 2013-06-03 10:03:54 +0000 | [diff] [blame] | 210 | ** How to analyze performance |
| 211 | Gprof helps you analyze the performance of programs. You have to |
| 212 | compile liblouis as follows: |
| 213 | |
| 214 | $ ./configure --disable-shared |
| 215 | $ make clean all CFLAGS='-g -O0 -pg' LDFLAGS='-all-static' |
| 216 | |
| 217 | Then translate some stuff with a large table: |
| 218 | |
| 219 | $ ./tools/lou_translate tests/tables/large.ctb |
| 220 | |
| 221 | Finally look at the call profile: |
| 222 | |
| 223 | $ libtool --mode=execute gprof ./tools/lou_translate gmon.out |
| 224 | |
Bert Frees | d51268a | 2015-11-15 17:23:45 +0100 | [diff] [blame] | 225 | ** How to build for Windows |
Christian Egli | 311d52b | 2013-01-11 16:19:23 +0000 | [diff] [blame] | 226 | See the README.windows file and the windows subdirectory. |
Christian Egli | 75cd569 | 2012-05-16 08:00:37 +0000 | [diff] [blame] | 227 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 228 | *** How to cross-compile for Windows |
| 229 | To compile for win32, use the MinGW win32 cross-compiler as shown |
| 230 | below. Use the prefix option to install the binaries to a temporary |
Christian Egli | 854386d | 2016-06-01 16:47:42 +0200 | [diff] [blame] | 231 | place where you can create a zip file. The LDFLAGS='-all-static' |
| 232 | ensures that libgcc is linked in statically. Otherwise the users need |
| 233 | to have libgcc_s_sjlj-1.dll. |
Christian Egli | 75cd569 | 2012-05-16 08:00:37 +0000 | [diff] [blame] | 234 | |
Christian Egli | d5bea6c | 2016-06-03 08:38:52 +0200 | [diff] [blame] | 235 | Some users want the dlls unversioned. To achieve that add |
| 236 | '-avoid-version' to LDFLAGS. |
| 237 | |
Christian Egli | 854386d | 2016-06-01 16:47:42 +0200 | [diff] [blame] | 238 | ./configure --build=i686-pc-linux-gnu --host=i686-w64-mingw32 --prefix=/tmp/liblouis-mingw32 |
Christian Egli | d5bea6c | 2016-06-03 08:38:52 +0200 | [diff] [blame] | 239 | make LDFLAGS='-avoid-version -Xcompiler -static-libgcc' |
Christian Egli | daaf7e3 | 2013-06-21 14:27:14 +0000 | [diff] [blame] | 240 | make install |
Christian Egli | 854386d | 2016-06-01 16:47:42 +0200 | [diff] [blame] | 241 | zip -r liblouis-mingw32msvc.zip /tmp/liblouis-mingw32 |
Christian Egli | 75cd569 | 2012-05-16 08:00:37 +0000 | [diff] [blame] | 242 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 243 | To compile for win64, use the MinGW-w64 cross-compiler: |
| 244 | |
Christian Egli | 854386d | 2016-06-01 16:47:42 +0200 | [diff] [blame] | 245 | ./configure --build=i686-pc-linux-gnu --host=x86_64-w64-mingw32 --prefix=/tmp/liblouis-w64-mingw32 |
Christian Egli | d5bea6c | 2016-06-03 08:38:52 +0200 | [diff] [blame] | 246 | make LDFLAGS='-avoid-version -Xcompiler -static-libgcc' |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 247 | make install |
| 248 | zip -r liblouis-w64-mingw32.zip /tmp/liblouis-w64-mingw32 |
| 249 | |
Bert Frees | d51268a | 2015-11-15 17:23:45 +0100 | [diff] [blame] | 250 | Two makefile rules have been provided to do this automatically for you. Docker will be used if the |
| 251 | right cross-compiler is not installed. To compile for win32 using the MinGW cross-compiler, run make |
| 252 | distwin32. This will produce a ZIP file called liblouis-<version>-win32.zip. To compile for win64 |
| 253 | using the MinGW-w64 cross-compiler, run make distwin64. This will produce a ZIP file called |
| 254 | liblouis-<version>-win64.zip. |
| 255 | |
Bert Frees | 34df6a6 | 2015-04-10 16:10:21 +0200 | [diff] [blame] | 256 | *** TODO How to build for Windows using Cygwin |
| 257 | (possibly use a Vagrantfile as demonstration + explain that Cygwin |
| 258 | binaries can not be used outside the Cygwin environment) |
| 259 | |
| 260 | *** TODO How to build for Windows using MinGW |
| 261 | (possibly use a Vagrant file as demonstration) |
| 262 | |
Christian Egli | 75cd569 | 2012-05-16 08:00:37 +0000 | [diff] [blame] | 263 | |
Christian Egli | eddc466 | 2009-03-09 13:27:20 +0000 | [diff] [blame] | 264 | * Release Procedure |
| 265 | These steps describe what a maintainer does to make a release; they |
| 266 | are not needed for ordinary patch submission. |
| 267 | |
Christian Egli | 2d889a8 | 2015-12-07 08:56:55 +0100 | [diff] [blame] | 268 | ** Update the NEWS entry |
| 269 | If any new tables were added or renamed please note them with their |
| 270 | name in the NEWS entry. This is usefull for projects like NVDA. |
| 271 | |
Christian Egli | eddc466 | 2009-03-09 13:27:20 +0000 | [diff] [blame] | 272 | ** Set the version number |
| 273 | Update the version number in NEWS (with version, date, and release |
| 274 | type), ChangeLog and configure.ac. |
| 275 | |
Christian Egli | d1f5718 | 2011-05-18 07:16:46 +0000 | [diff] [blame] | 276 | Don't forget to update the libtool versioning info in configure.ac, |
| 277 | i.e. LIBLOUIS_REVISION and possibly LIBLOUIS_CURRENT and LIBLOUIS_AGE. |
| 278 | |
Christian Egli | eddc466 | 2009-03-09 13:27:20 +0000 | [diff] [blame] | 279 | ** Commit and tag |
| 280 | Commit the changes and tag this version |
| 281 | |
Christian Egli | 5f9c03f | 2014-09-01 14:01:41 +0200 | [diff] [blame] | 282 | git tag -s v2.6.0 -m "Release 2.6.0" |
| 283 | git push origin v2.6.0 |
Christian Egli | eddc466 | 2009-03-09 13:27:20 +0000 | [diff] [blame] | 284 | |
| 285 | If you know the exact version number that needs to be tagged use |
| 286 | |
Christian Egli | 5f9c03f | 2014-09-01 14:01:41 +0200 | [diff] [blame] | 287 | git tag -s v2.6.0 -m "Release 2.6.0" <commit> |
| 288 | git push origin v2.6.0 |
Christian Egli | eddc466 | 2009-03-09 13:27:20 +0000 | [diff] [blame] | 289 | |
| 290 | ** Make the release |
| 291 | Check out a clean copy in a different directory, like /tmp. Run |
| 292 | autogen.sh and configure with no special prefixes. Run make distcheck. |
| 293 | This will make sure that all needed files are present, and do a |
| 294 | general sanity check. Run make dist. This will produce a tarball. |
| 295 | |
Christian Egli | 9a3b3ce | 2009-05-27 13:46:37 +0000 | [diff] [blame] | 296 | ./autogen.sh && ./configure && make && make distcheck && make dist |
Christian Egli | eddc466 | 2009-03-09 13:27:20 +0000 | [diff] [blame] | 297 | |
| 298 | ** Upload |
Christian Egli | 88bfad9 | 2015-06-01 11:16:46 +0200 | [diff] [blame] | 299 | Add the tarball to the github liblouis releases page, i.e. add it |
| 300 | under https://github.com/liblouis/liblouis/releases with the specific |
| 301 | release and add a link to it in $WEBSITE/downloads/index.md. See below |
| 302 | for instructions on how to update the web site. |
Christian Egli | eddc466 | 2009-03-09 13:27:20 +0000 | [diff] [blame] | 303 | |
Christian Egli | 2ed702e | 2009-03-12 13:06:39 +0000 | [diff] [blame] | 304 | ** Online documentation |
Christian Egli | 71647d6 | 2014-05-20 09:20:28 +0200 | [diff] [blame] | 305 | The online documentation is part of the liblouis web site. To add it to the |
| 306 | site simply copy doc/liblouis.html to $WEBSITE/documentation/liblouis.html. |
| 307 | Make sure you add the proper YAML front matter. Again see below for |
| 308 | instructions on how to update the web site. |
Christian Egli | 2ed702e | 2009-03-12 13:06:39 +0000 | [diff] [blame] | 309 | |
Christian Egli | 71647d6 | 2014-05-20 09:20:28 +0200 | [diff] [blame] | 310 | ** Web site maintenance |
| 311 | The liblouis web site at liblouis.org is maintained with the help of |
| 312 | github pages (https://pages.github.com/). To edit the site just check |
| 313 | out the repo at https://github.com/liblouis/liblouis.github.io. You'll |
| 314 | need to know a few things about Jekyll (http://jekyllrb.com/) and |
Christian Egli | 3725f22 | 2016-07-15 10:19:55 +0200 | [diff] [blame] | 315 | markdown, the markup that is used to edit the content. In order to |
| 316 | update the site simply edit, commit and push. |
Christian Egli | 2ed702e | 2009-03-12 13:06:39 +0000 | [diff] [blame] | 317 | |
Christian Egli | 71647d6 | 2014-05-20 09:20:28 +0200 | [diff] [blame] | 318 | For the new release update the project web site. Add a post containing |
| 319 | the current NEWS to the _posts directory. |
Christian Egli | 2ed702e | 2009-03-12 13:06:39 +0000 | [diff] [blame] | 320 | |
Christian Egli | 2541973 | 2011-05-09 07:38:14 +0000 | [diff] [blame] | 321 | ** Announce |
| 322 | Send an announcement to the liblouis list |
| 323 | liblouis-liblouisxml@freelists.org. See ANNOUNCEMENT for an example. |
| 324 | |