xref: /core/
Name Date Size

..22-Feb-2017252

.buckconfigH A D04-Dec-2015223

.buckversionH A D04-Dec-201541

.clang-formatH A D09-Nov-20171.4 KiB

.editorconfigH A D02-Dec-2017449

.git-hooks/H16-Dec-201774

.gitattributesH A D01-Sep-201677

.gitignoreH A D25-Dec-20172.8 KiB

.gitmodulesH A D10-Nov-2012319

.gitreviewH A D07-Jul-201292

accessibility/H22-Jul-2017144

android/H08-Sep-2017192

animations/H22-Apr-2017105

apple_remote/H29-Apr-2014110

autogen.shH A D18-Aug-20179 KiB

avmedia/H23-Dec-20174 KiB

basctl/H22-Jul-2017262

basegfx/H22-Apr-2017164

basic/H27-Nov-2017227

bean/H22-Apr-2017230

bin/H23-Dec-20174 KiB

binaryurp/H22-Apr-2017205

bridges/H20-Oct-2017234

BUCKH A D04-Dec-20151.2 KiB

canvas/H16-Sep-20174 KiB

chart2/H23-Dec-20174 KiB

cli_ure/H25-Nov-20174 KiB

codemaker/H28-Jun-2017262

comphelper/H08-Dec-20174 KiB

compilerplugins/H07-Dec-2017111

config.guessH A D08-Jan-201641.9 KiB

config.subH A D08-Jun-201734.9 KiB

config_host/H23-Dec-20174 KiB

config_host.mk.inH A D19-Dec-201726.1 KiB

config_host_lang.mk.inH A D26-Mar-2015263

configmgr/H22-Apr-2017200

configure.acH A D31-Dec-2017437.1 KiB

connectivity/H12-Sep-20174 KiB

COPYINGH A D09-Aug-201134.3 KiB

COPYING.LGPLH A D09-Aug-20117.5 KiB

COPYING.MPLH A D14-Dec-201316.3 KiB

cppcanvas/H10-Oct-2017233

cppu/H22-Apr-20174 KiB

cppuhelper/H26-Nov-20174 KiB

cpputools/H22-Apr-2017129

cui/H05-Sep-20174 KiB

dbaccess/H16-Dec-20174 KiB

desktop/H16-Sep-20174 KiB

dictionaries/H17-Oct-20126

distro-configs/H30-Nov-20174 KiB

download.lstH A DToday19.3 KiB

drawinglayer/H16-Sep-2017204

dtrans/H22-Apr-2017256

editeng/H24-Oct-20174 KiB

embeddedobj/H01-Aug-2017166

embedserv/H22-Apr-2017142

emfio/H16-Sep-2017215

eventattacher/H22-Apr-2017106

extensions/H02-Aug-20174 KiB

external/H07-Dec-20174 KiB

extras/H08-Dec-20174 KiB

filter/H19-Dec-20174 KiB

forms/H22-Jul-20174 KiB

formula/H03-Aug-2017270

fpicker/H03-Aug-2017325

framework/H24-Nov-20174 KiB

gH A D28-Apr-20178.2 KiB

helpcompiler/H15-May-2015171

helpcontent2/H17-Oct-20126

hwpfilter/H22-Apr-2017167

i18nlangtag/H22-Apr-2017170

i18npool/H16-May-20174 KiB

i18nutil/H22-Apr-2017103

icon-themes/H12-Dec-2017269

idl/H22-Apr-2017109

idlc/H10-Jun-2017156

include/H17-Sep-20174 KiB

install-shH A D27-Feb-201213.7 KiB

instsetoo_native/H24-Nov-2017328

io/H22-Apr-2017154

ios/H28-Nov-2017238

javaunohelper/H22-Apr-2017234

jurt/H17-May-20174 KiB

jvmaccess/H22-Apr-2017122

jvmfwk/H22-Apr-20174 KiB

l10ntools/H22-Jul-20174 KiB

leak-suppress.txtH A D22-Jul-20171.2 KiB

Library_merged.mkH A D22-Apr-20171,013

librelogo/H11-Nov-2014177

libreofficekit/H24-Dec-20174 KiB

lingucomponent/H19-Oct-2017257

linguistic/H22-Apr-2017213

lo.xcent.inH A D05-Mar-2016734

logerritH A D07-Sep-20178.3 KiB

lotuswordpro/H18-Oct-2017190

m4/H15-Dec-20174 KiB

Makefile.fetchH A D22-Dec-20179.6 KiB

Makefile.gbuildH A D06-Aug-20173 KiB

Makefile.inH A D22-Dec-201718.1 KiB

mysqlc/H16-Sep-2017190

nlpsolver/H06-Jan-2015191

o3tl/H27-Oct-2017101

odk/H01-Jan-20184 KiB

offapi/H15-Dec-2017140

officecfg/H21-Dec-2017253

onlineupdate/H23-Aug-20174 KiB

oovbaapi/H09-Sep-2017118

oox/H11-Sep-2017336

opencl/H13-Jul-2016110

osx/H03-Feb-201745

package/H21-Jun-2017228

postprocess/H19-Dec-20174 KiB

pyuno/H28-Sep-20174 KiB

qadevOOo/H17-Dec-2017153

readlicense_oo/H23-Feb-2017247

README.crossH A D18-Aug-20179.4 KiB

README.mdH A D31-Dec-20175.5 KiB

README.SolarisH A D05-Jun-20161.1 KiB

registry/H10-Jun-2017272

remotebridges/H22-Apr-2017110

reportbuilder/H15-Dec-2017181

reportdesign/H14-Dec-20174 KiB

Repository.mkH A D24-Dec-201726.1 KiB

RepositoryExternal.mkH A D19-Dec-201784 KiB

RepositoryFixes.mkH A D11-Feb-20174.5 KiB

RepositoryModule_build.mkH A D22-Jul-20171.5 KiB

RepositoryModule_host.mkH A D22-Jul-20174.4 KiB

ridljar/H08-Jun-2016309

sal/HToday4 KiB

salhelper/H28-Jun-2017167

sanitize-ubsan-blacklistH A D01-Nov-201543

sax/H14-Sep-2017284

sc/H16-Dec-20178 KiB

scaddins/H02-Aug-2017238

sccomp/H09-Dec-2017231

schema/H30-Aug-201681

scp2/H19-Dec-20174 KiB

scripting/H22-Apr-20174 KiB

sd/H16-Nov-20174 KiB

sdext/H11-Nov-20174 KiB

setup_native/H17-May-20174 KiB

sfx2/H24-Nov-20174 KiB

shell/H20-Dec-20174 KiB

slideshow/H22-Apr-2017298

smoketest/H24-Oct-20174 KiB

solenv/H22-Dec-20174 KiB

soltools/H22-Aug-2013132

sot/H22-Apr-2017193

starmath/H22-Jul-20174 KiB

stoc/H22-Apr-20174 KiB

store/H22-Apr-2017115

svgio/H22-Apr-2017169

svl/H24-Aug-20174 KiB

svtools/H15-Dec-20174 KiB

svx/H05-Nov-20174 KiB

sw/H21-Dec-20174 KiB

swext/H10-Oct-2015169

sysui/H08-Dec-2017322

TEMPLATE.SOURCECODE.HEADERH A D09-Nov-20165.5 KiB

test/H17-Dec-2017267

testtools/H07-Jun-20174 KiB

toolkit/H13-Jun-2017325

tools/H02-Nov-2017255

translations/H17-Oct-20126

ucb/H23-Sep-20174 KiB

ucbhelper/H22-Apr-2017105

udkapi/H07-Mar-2014117

uitest/H08-Jun-20174 KiB

UnoControls/H22-Apr-2017124

unodevtools/H28-May-2016129

unoidl/H17-Jun-2017241

unoil/H25-Nov-2017190

unotest/H22-Apr-2017211

unotools/H02-Aug-2017208

unoxml/H22-Apr-2017252

ure/H05-Mar-2016115

uui/H22-Jul-2017234

vbahelper/H22-Apr-2017154

vcl/H22-Dec-20178 KiB

winaccessibility/H23-Sep-2017218

wizards/H22-Jul-20174 KiB

writerfilter/H16-Jun-2017277

writerperfect/H23-Dec-20174 KiB

xmerge/H20-Aug-2013122

xmlhelp/H20-May-2016141

xmloff/H14-Jun-2017290

xmlreader/H22-Apr-2017105

xmlscript/H22-Apr-2017173

xmlsecurity/H13-Dec-20174 KiB

README.cross

1Cross-compiling LibreOffice
2***************************
3
4Cross-compilation works, to various degree, to the following
5platforms: iOS, Android, and Raspbian.
6
7Note that this document has not been updated very often, and not
8everything here necessarily is true any more.
9
10
11General
12-------
13
14In GNU Autoconf terminology, "build" is the platform on which you are
15running a build of some software and "host" is the platform on which
16the software you are building will run. Only in the specific case of
17building compilers and other programming tools is the term "target"
18used to indicate the platform for which the tools your are building
19will produce code. As LibreOffice is not a compiler, the "target" term
20should not be used in the context of cross-compilation.
21
22(For a case where all three of "build", "host" and "target" are
23different: consider a gcc cross-compiler running on Windows, producing
24code for Android, where the cross-compiler itself was built on
25Linux. (This is a real case.) An interesting tidbit is that such
26configurations are called "Canadian Cross".)
27
28Even though the LibreOffice build mechanism is highly unorthodox, the
29configure script takes the normal --build and --host options like any
30GNU Autoconf -based configure script. To cross-compile, you basically
31need just to specify a suitable --host option and things should work
32out nicely. In practice, many details need to be handled. See examples
33below.
34
35Note that in the case of LibreOffice, it is uncommon to run the
36configure script directly. Normally one uses the autogen.sh script.
37The autogen.sh script reads command-line options from file called
38autogen.input if it exists. The typical way of working is to keep
39the configure parameters in that file and edit it as needed.
40
41
42What is so hard, then?
43----------------------
44
45Despite the fact that the configure script takes normal --build and
46--host options, that is just the beginning. It was necessary to
47separate tests for "host" and "build" platforms in the configure
48script. See the git log for details. And the reasonably "standard"
49configure.in is just the top level; when we get down to the actual
50makefilery used to build the bits of LibreOffice, it gets much worse.
51
52
53iOS
54***
55
56iOS is the operating system on Apple's mobile devices. Clearly for a
57device like the iPad it would not be acceptable to run a normal
58LibreOffice application with overlapping windows and mouse-oriented
59GUI widgets.
60
61It makes sense to use only a part of LibreOffice's code for iOS. Lots
62of the GUI-oriented code should be left out. iOS apps that want to use
63the applicable LibreOffice code will handle all their GUI in a
64platform-dependent manner. How well it will be possible to do such a
65split remains to be seen.
66
67Obviously we want it to be possible to eventually distribute apps
68using LibreOffice code through the App Store. Technically, one
69important special aspect of iOS is that apps in the App Store are not
70allowed to load own dynamic libraries. (System libraries are used in
71the form of dynamic libraries, just like on Mac OS X, of which iOS is
72a variant.)
73
74Thus all the libraries in LibreOffice that normally are shared
75libraries (DLLs on Windows, shared objects (.so) on Linux, dynamic
76libraries on Mac OS X (.dylib)) must be built as static archives
77instead. This has some interesting consequences for how UNO is
78implemented and used.
79
80An iOS app is a "bundle" that contains a single executable. In an app
81using LibreOffice code, that executable then contains the necessary
82LibreOffice libraries and UNO components statically linked.
83
84The Apple tool-chain for iOS cross-building is available only for OS
85X. In order to be able to run and debug an app on an actual device
86(and not just the iOS Simulator) you need to be registered in the iOS
87Developer Program.
88
89Here is an autogen.input for iOS (device) using Xcode 4.6, on OS X 10.8:
90
91--build=i386-apple-darwin10.7.0
92--host=arm-apple-darwin10
93--enable-dbgutil
94--enable-debug
95--enable-werror
96
97For the iOS Simulator, but note that building for the simulator is
98broken at the moment (July 2014):
99
100--build=i386-apple-darwin10.7.0
101--host=arm-apple-darwin10
102--enable-ios-simulator
103--enable-dbgutil
104--enable-debug
105--enable-werror
106
107You will have to install autoconf and automake yourself before running
108autogen.sh. They are no longer included in Xcode 4.3 and later (not
109even in the add-on "command line tools").
110
111The -mmacosx-version-min=10.7 is necessary when building for the iOS
112simulator to avoid clang replacing simple calls to fprintf with calls
113to fwrite$UNIX2003 which Xcode then warns that doesn't exist on iOS.
114
115
116Android
117*******
118
119From a technical point of view the core Android OS (the kernel) is
120Linux, but everything else is different. Unlike iOS, an Android app
121can use shared objects just fine, so that aspect of UNO doesn't need
122special handling. Except that there is a silly low limit in the
123Android dynamic linker on the number of libraries you can dlopen. This
124is a limitation in user-level (but system-provided and not really
125replaceable) code, not the kernel.
126
127Thus, just like for iOS, also for Android the LibreOffice libraries
128and UNO components are built as static archives. For Android, those
129static archives, and any app-specific native code, are linked into one
130single app-specific shared library, called liblo-native-code.so.
131
132For the GUI, the same holds as said above for iOS. The GUI layer needs
133to be platform-specific, written in Java.
134
135Android cross-compilation work has been done mainly on Linux (openSUSE
136in particular). Earlier also cross-compiling from OS X was tried. The
137Android cross-compilation tool-chain (the "Native Development Kit", or
138NDK) is available for Linux, OS X and Windows, but trying to
139cross-compile LibreOffice from Windows will probably drive you insane.
140
141You will also need the Android SDK as full "make" also builds a couple
142of Android apps where the upper layer is written in Java.
143
144Use the "android" tool from the SDK to install the SDK Tools, SDK
145Platform Tools, the API 15 SDK Platform and the Android Support
146Library. If you want to run the Android apps in the emulator, you of
147course need an appropriate system image for that.
148
149Here is an autogen.input for Android on ARM when cross-compiling
150from Linux:
151
152--enable-dbgutil
153--enable-werror
154--with-distro=LibreOfficeAndroid
155
156And here is an (quite old) autogen.input for Android on X86:
157
158--with-android-ndk=/opt/libreoffice/android-ndk-r8b
159--with-android-ndk-toolchain-version=4.6
160--with-android-sdk=/opt/libreoffice/android-sdk-linux
161--build=i586-suse-linux
162--enable-ccache
163--with-distro=LibreOfficeAndroidX86
164
165A LibreOffice app for Android is being developed progress in the
166android/source directory.
167
168To run the app, do "make install" followed by either "make run" or
169starting it from Android itself. You most likely want to have an "adb logcat"
170running in another window. To debug, run "make debugrun".
171
172NB: If you happen to upgrade to Android SDK Tools 23, and the build (using
173'make verbose=t android') fails for you with:
174
175       [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
176       [dx] java.io.FileNotFoundException: /local/libreoffice/android-sdk-linux/tools/support/annotations.jar (no such file or directory)
177
178you need to copy the annotations.jar from an older sdk; like
179
180wget 'http://dl-ssl.google.com/android/repository/tools_r22.6.2-linux.zip'
181unzip tools_r22.6.2-linux.zip
182cp tools/support/annotations.jar <android-sdk-linux>/tools/support/
183
184Raspbian
185********
186
187In theory, this should work also for another Linux, it does not need to be Raspbian.
188But this cross-compilation work is tested from Debian and openSUSE to Raspbian.
189
190You will need headers, pkg-config files and libraries from a Raspbian
191system to build against. Available at
192https://dev-www.libreoffice.org/extern/ . Look for the latest
193raspbian-root-*.tar.gz . For instance:
194
195$ wget https://dev-www.libreoffice.org/extern/raspbian-root-20140120.tar.gz
196$ mkdir raspbian-root
197$ cd raspbian-root
198$ tar -xf raspbian-root-20140120.tar.gz
199
200You can build cross-compiler yourself or get the executables here:
201$ git clone git://github.com/raspberrypi/tools
202
203tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian is known to work.
204
205Then create pkg-config wrapper, something like:
206$ cat > pkg-config-wrapper-host << _EOF
207#!/bin/sh
208
209if [ "$CROSS_COMPILING" = TRUE ]; then
210   SYSROOT=$HOME/lo/raspbian-root
211   export PKG_CONFIG_PATH=${SYSROOT}/usr/lib/arm-linux-gnueabihf/pkgconfig:${SYSROOT}/usr/share/pkgconfig
212   export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/lib/pkgconfig
213   export PKG_CONFIG_SYSROOT_DIR=${SYSROOT}
214fi
215
216exec pkg-config "\$@"
217_EOF
218$ chmod +x pkg-config-wrapper-host
219
220This does not work with pkg-config 0.23. 0.26 is known to work.
221
222And you are ready to build with autogen.input similar to:
223
224PKG_CONFIG=<path-to-pkg-config-wrapper-host>
225CC=<path-to-arm-linux-gnueabihf-gcc> --sysroot=<path-to-raspbian_rootfs>
226CXX=<path-to-arm-linux-gnueabihf-g++> --sysroot=<path-to-raspbian_rootfs>
227--build=x86_64-unknown-linux-gnu
228--host=arm-unknown-linux-gnueabihf
229--disable-sdk
230--enable-python=system
231PYTHON_CFLAGS=-I<path-to-raspbian_rootfs>/usr/include/python2.7
232PYTHON_LIBS=-lpython2.7
233--with-java
234JAVAINC=-I<path-to-raspbian_rootfs>/usr/lib/jvm/java-6-openjdk-armhf/include
235--with-system-cairo
236--with-system-cppunit
237--with-system-icu
238--with-system-neon
239--with-system-nss
240--with-system-openldap
241--with-system-openssl
242--with-system-redland
243
244Finally, when you are ready to run the binaries in Raspbian,
245you may need to get more system libraries, who knows.
246$ sudo apt-get install libreoffice # or similar
247That installs libreoffice too, which you don't need because you have
248just built one, but I don't know how to avoid it easily.
249

README.md

1# LibreOffice
2[![Coverity Scan Build Status](https://scan.coverity.com/projects/211/badge.svg)](https://scan.coverity.com/projects/211) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/307/badge)](https://bestpractices.coreinfrastructure.org/projects/307)
3
4LibreOffice is an integrated office suite based on copyleft licenses
5and compatible with most document formats and standards. Libreoffice
6is backed by The Document Foundation, which represents a large
7independent community of enterprises, developers and other volunteers
8moved by the common goal of bringing to the market the best software
9for personal productivity. LibreOffice is open source, and free to
10download, use and distribute.
11
12A quick overview of the LibreOffice code structure.
13
14## Overview
15
16You can develop for LibreOffice in one of two ways, one
17recommended and one much less so. First the somewhat less recommended
18way: it is possible to use the SDK to develop an extension,
19for which you can read the API docs [here](http://api.libreoffice.org/)
20and [here](http://wiki.services.openoffice.org/wiki/Documentation/DevGuide).
21This re-uses the (extremely generic) UNO APIs that are also used by
22macro scripting in StarBasic.
23
24The best way to add a generally useful feature to LibreOffice
25is to work on the code base however. Overall this way makes it easier
26to compile and build your code, it avoids any arbitrary limitations of
27our scripting APIs, and in general is far more simple and intuitive -
28if you are a reasonably able C++ programmer.
29
30## The build chain and runtime baselines
31
32These are the current minimal operating system and compiler versions to
33run and compile LibreOffice, also used by the TDF builds:
34
35* Windows:
36    * Runtime: Windows 7
37    * Build: Cygwin + Visual Studio 2015 Update 3
38* macOS:
39    * Runtime: 10.9
40    * Build: 10.12 + Xcode 8
41* Linux:
42    * Runtime: RHEL 6 or CentOS 6
43    * Build: GCC 4.8.1 or Clang
44* iOS (only for LibreOfficeKit):
45    * Runtime: 11.2 (only support for newer i devices == 64 bit)
46    * Build: Xcode 9.0 and iPhone SDK 11.2
47
48At least Clang 3.4.2 is known to be too old to pass the configure.ac check "whether $CXX supports
49C++17, C++14, or C++11" in its current form (due to the #pragma GCC diagnostic ignored "-Wpragmas"
50that it does not understand).
51
52If you want to use Clang with the LibreOffice compiler plugins, the minimal
53version of Clang is 3.8. Since Xcode doesn't provide the compiler plugin
54headers, you have to compile your own Clang to use them on macOS.
55
56You can find the TDF configure switches in the distro-configs/ directory.
57
58To setup your initial build environment on Windows and macOS, we provide
59the LibreOffice Development Environment
60([LODE](https://wiki.documentfoundation.org/Development/lode)) scripts.
61
62For more information see the build instructions for your platform in the
63[TDF wiki](https://wiki.documentfoundation.org/Development).
64
65## The important bits of code
66
67Each module should have a `README` file inside it which has some
68degree of documentation for that module; patches are most welcome to
69improve those. We have those turned into a web page here:
70
71http://docs.libreoffice.org/
72
73However, there are two hundred modules, many of them of only
74peripheral interest for a specialist audience. So - where is the
75good stuff, the code that is most useful. Here is a quick overview of
76the most important ones:
77
78Module    | Description
79----------|-------------------------------------------------
80sal/      | this provides a simple System Abstraction Layer
81tools/    | this provides basic internal types: 'Rectangle', 'Color' etc.
82vcl/      | this is the widget toolkit library and one rendering abstraction
83framework | UNO framework, responsible for building toolbars, menus, status bars, and the chrome around the document using widgets from VCL, and XML descriptions from */uiconfig/* files
84sfx2/     | legacy core framework used by Writer/Calc/Draw: document model / load/save / signals for actions etc.
85svx/      | drawing model related helper code, including much of Draw/Impress
86
87Then applications
88
89Module    | Description
90----------|-------------------------------------------------
91desktop/  | this is where the 'main' for the application lives, init / bootstrap. the name dates back to an ancient StarOffice that also drew a desktop
92sw/       | Writer
93sc/       | Calc
94sd/       | Draw / Impress
95
96There are several other libraries that are helpful from a graphical perspective:
97
98Module    | Description
99----------|-------------------------------------------------
100basegfx/  | algorithms and data-types for graphics as used in the canvas
101canvas/   | new (UNO) canvas rendering model with various backends
102cppcanvas/ | C++ helper classes for using the UNO canvas
103drawinglayer/ | View code to render drawable objects and break them down into primitives we can render more easily.
104
105## Rules for #include directives (C/C++)
106
107Use the `"..."` form if and only if the included file is found next to the
108including file. Otherwise, use the `<...>` form. (For further details, see the
109mail [Re: C[++]: Normalizing include syntax ("" vs
110<>)](https://lists.freedesktop.org/archives/libreoffice/2017-November/078778.html).)
111
112The UNO API include files should consistently use double quotes, for the
113benefit of external users of this API.
114
115
116## Finding out more
117
118Beyond this, you can read the `README` files, send us patches, ask
119on the mailing list libreoffice@lists.freedesktop.org (no subscription
120required) or poke people on IRC `#libreoffice-dev` on irc.freenode.net -
121we're a friendly and generally helpful mob. We know the code can be
122hard to get into at first, and so there are no silly questions.
123

README.Solaris

1Instructions to compile LO on Solaris with gcc
2
3Disclaimer
4----------
5This is still work in progress
6Compiling LO on Solaris with gcc is a work done by Lanedo ( www.lanedo.com )
7Any inquiry could be sent to office-solaris@lanedo.com
8
9
10Prerequisites
11-------------
12
13A working Oracle Solaris 11 installation
14
15
16Installing Dependencies
17-----------------------
18
19sudo -s
20
21pkg install git make gcc-45 autoconf autogen automake-110 gnu-m4
22
23pkg install pkg:/system/header@0.5.11-0.175.0.0.0.2.1
24pkg install pkg:/developer/gperf@3.0.3-0.175.0.0.0.2.537
25pkg install pkg:/developer/parser/bison@2.3-0.175.0.0.0.2.537
26pkg install pkg:/developer/lexer/flex@2.5.35-0.175.0.0.0.2.537
27pkg install pkg:/developer/documentation-tool/doxygen@1.5.7.1-0.175.0.0.0.2.537
28
29
30Compiling
31---------
32
33CC="gcc" CXX="g++" ./autogen.sh --with-num-cpus=2 --with-max-jobs=4 --without-junit --disable-mozilla --with-system-curl --without-help --disable-cups --without-java --with-system-cairo --with-lang= --enable-gio --disable-gnome-vfs --disable-gstreamer --without-fonts --with-system-dicts --disable-mozilla --without-system-mozilla --disable-xmlsec --with-system-openssl
34
35gmake
36
37
38