123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- /*
- main.me -- Main MakeMe file for GoAhead
- This file contains the rules for targets to build and default settings for configuration.
- The MakeMe utility (https://embedthis.com/me) may be used to build GoAhead instead of make.
- MakeMe provides for configured builds and generates projects files.
- Alternatively, build using the 'make' utility in which case this file is not used.
- */
- Me.load({
- makeme: '>=0.9.0',
- plugins: [ 'installs' ],
- blend: [
- 'src/*/*.me',
- 'test/test.me',
- 'paks/ssl/*.me',
- 'doc/doc.me',
- ],
- configure: {
- requires: [ 'osdep' ],
- discovers: [ 'ssl' ],
- },
- settings: {
- integrate: true,
- /*
- Installation prefix set
- */
- prefixes: 'install-prefixes',
- manifest: 'installs/manifest.me',
- certs: {
- gendh: true
- },
- compiler: {
- fortify: true
- },
- /*
- Set to true for a static link, or use 'configure --static'
- static: false,
- */
- goahead: {
- /*
- Log for request access logging
- */
- accessLog: false,
- /*
- User authentication
- */
- auth: true,
- /*
- Select the password store mechanism. Set to: pam, file, custom
- If using PAM, must also set authPam to true
- */
- authStore: 'file',
- /*
- Automatically login. Useful for debugging.
- */
- autoLogin: false,
- clientCache: [ 'css', 'gif', 'ico', 'jpg', 'js', 'png', ],
- clientCacheLifespan: 86400,
- /*
- Build with CGI support and directory for CGI programs.
- */
- cgi: true,
- /*
- Prefix for CGI environment variables
- */
- cgiVarPrefix: "CGI_"
- /*
- Build with support for digest authentication
- */
- digest: true,
- /*
- Directory containing web documents to serve
- */
- documents: 'web',
- /*
- Build with support for javascript web templates
- */
- javascript: true,
- /*
- Define legacy APIs for compatibility with old GoAhead web server applications
- */
- legacy: false,
- /*
- Sandbox limits and allocation sizes
- */
- limitBuffer: 1024, /* I/O Buffer size. Also chunk size. */
- limitFiles: 0, /* Maximum files/sockets. Set to zero for unlimited. Unix only */
- limitFilename: 256, /* Maximum filename size */
- limitHeader: 2048, /* Maximum HTTP single header size */
- limitHeaders: 4096, /* Maximum HTTP header size */
- limitNumHeaders: 64, /* Maximum number of headers */
- limitParseTimeout: 5, /* Maximum time to parse the request headers */
- limitPassword: 32, /* Maximum password size */
- limitPost: 16384, /* Maximum POST incoming body size */
- limitPut: 204800000, /* Maximum PUT body size ~ 200MB */
- limitSessionLife: 1800, /* Session lifespan in seconds (30 mins) */
- limitSessionCount: 512, /* Maximum number of sessions to support */
- limitString: 256, /* Default string size */
- limitTimeout: 60, /* Request inactivity timeout in seconds */
- limitUri: 2048, /* Maximum URI size */
- limitUpload: 204800000, /* Maximum upload size ~ 200MB */
- /*
- Addresses to listen on. This specifies the protocol, interface and port.
- */
- listen: ['http://*:80', 'https://*:443']
- /*
- Enable application logging and tracing
- */
- logging: true,
- logfile: 'stderr:0',
- tracing: true,
- /*
- Temporary directory to hold PUT files
- This must be on the same filesystem as the web documents directory.
- */
- putDir: '.',
- /*
- Authentication realm. Replace with your realm.
- */
- realm: 'example.com',
- /*
- Replace malloc with a non-fragmenting allocator
- */
- replaceMalloc: false,
- /*
- Enable stealth options. Disable OPTIONS and TRACE methods.
- */
- stealth: true,
- ssl: {
- authority: '', /* Root certificates for verifying client certificates */
- cache: 512, /* Set the session cache size (items) */
- certificate: 'self.crt', /* Server certificate file. A valid certificate must be obtained */
- ciphers: '', /* Override cipher suite for SSL. */
- key: 'self.key', /* Server SSL key. This is by default set to a test key. This must be regenerated */
- logLevel: 5 /* Starting logging level for SSL messages */
- handshakes: 1, /* Set maximum number of renegotiations (zero means infinite) */
- revoke: '', /* List of revoked client certificates */
- ticket: true, /* Enable session resumption via ticketing - client side session caching */
- timeout: 86400, /* Session and ticketing duration in seconds */
- verifyIssuer: false, /* Verify issuer of client certificate */
- verifyPeer: false, /* Verify client certificates */
- },
- /*
- Upload file support
- */
- upload: true,
- uploadDir: 'tmp',
- /*
- Enable X-Frame-Origin to prevent clickjacking. Set to empty to disable.
- Set to: DENY, SAMEORIGIN, ALLOW uri
- */
- xframeHeader: 'SAMEORIGIN',
- },
- mbedtls: {
- compact: true, /* Compact edition - Disable non-essential ciphers and features */
- },
- /*
- Build without a file system (from ROM)
- */
- rom: false,
- },
- usage: {
- 'goahead.accessLog': 'Enable request access log (true|false)',
- 'goahead.caFile': 'File of client certificates (path)',
- 'goahead.certificate': 'Server certificate for SSL (path)',
- 'goahead.ciphers': 'SSL cipher suite (string)',
- 'goahead.cgi': 'Enable the CGI handler (true|false)',
- 'goahead.cgiBin': 'Directory CGI programs (path)',
- 'goahead.clientCache': 'Extensions to cache in the client (Array)',
- 'goahead.clientCacheLifespan':'Lifespan in seconds to cache in the client',
- 'goahead.javascript': 'Enable the Javascript JST handler (true|false)',
- 'goahead.key': 'Server private key for SSL (path)',
- 'goahead.legacy': 'Enable the GoAhead 2.X legacy APIs (true|false)',
- 'goahead.limitBuffer': 'I/O Buffer size. Also chunk size.',
- 'goahead.limitFilename': 'Maximum filename size',
- 'goahead.limitHeader': 'Maximum HTTP single header size',
- 'goahead.limitHeaders': 'Maximum HTTP header size',
- 'goahead.limitNumHeaders': 'Maximum number of headers',
- 'goahead.limitPassword': 'Maximum password size',
- 'goahead.limitPost': 'Maximum POST (and other method) incoming body size',
- 'goahead.limitPut': 'Maximum PUT body size ~ 200MB',
- 'goahead.limitSessionLife': 'Session lifespan in seconds (30 mins)',
- 'goahead.limitSessionCount': 'Maximum number of sessions to support',
- 'goahead.limitString': 'Default string allocation size',
- 'goahead.limitTimeout': 'Request inactivity timeout in seconds',
- 'goahead.limitUri': 'Maximum URI size',
- 'goahead.limitUpload': 'Maximum upload size ~ 200MB',
- 'goahead.listen': 'Addresses to listen to (["http://IP:port", ...])',
- 'goahead.logfile': 'Default location and level for debug log (path:level)',
- 'goahead.logging': 'Enable application logging (true|false)',
- 'goahead.pam': 'Enable Unix Pluggable Auth Module (true|false)',
- 'goahead.putDir': 'Define the directory for file uploaded via HTTP PUT (path)',
- 'goahead.realm': 'Authentication realm (string)',
- 'goahead.revoke': 'List of revoked client certificates',
- 'goahead.replaceMalloc': 'Replace malloc with non-fragmenting allocator (true|false)',
- 'goahead.ssl.cache': 'Set the session cache size (items)',
- 'goahead.ssl.logLevel': 'Starting logging level for SSL messages',
- 'goahead.ssl.renegotiate': 'Enable/Disable SSL renegotiation (defaults to true)',
- 'goahead.ssl.ticket': 'Enable session resumption via ticketing - client side session caching',
- 'goahead.ssl.timeout': 'Session and ticketing duration in seconds',
- 'goahead.stealth': 'Run in stealth mode. Disable OPTIONS, TRACE (true|false)',
- 'goahead.tune': 'Optimize (size|speed|balanced)',
- 'goahead.upload': 'Enable file upload (true|false)',
- 'goahead.uploadDir': 'Define directory for uploaded files (path)',
- 'rom': 'Build without a file system (true|false)',
- },
- customize: [
- /*
- The optional custom.me file is loaded after main.me is fully processed. It can
- thus override any setting. Feel free to create and customize.
- */
- 'custom.me',
- ],
- scripts: {
- postconfig: `
- if (me.settings.goahead.authStore != 'pam') {
- me.settings.compiler.hasPam = false
- }
- `,
- },
- targets: {
- libgo: {
- type: 'lib',
- sources: [ 'src/*.c' ],
- headers: [ 'src/*.h' ],
- exclude: /goahead\.c/,
- depends: [ 'osdep', 'ssl' ],
- scripts: {
- prebuild: `
- if (me.settings.compiler.hasPam && me.settings.goahead.pam) {
- me.target.libraries.push('pam')
- }
- `
- },
- },
- goahead: {
- type: 'exe',
- sources: [ 'src/goahead.c' ],
- headers: [ 'src/*.h' ],
- depends: [ 'libgo', 'install-certs' ],
- scripts: {
- prebuild: `
- if (me.settings.compiler.hasPam) {
- me.target.libraries.push('pam')
- }
- cp(['${BIN}/self.key', '${BIN}/self.crt'], 'src')
- cp(['${BIN}/self.key', '${BIN}/self.crt'], 'test')
- `,
- },
- },
- /*
- Compiler for web pages into C code
- */
- gopass: {
- enable: 'me.settings.goahead.auth',
- type: 'exe',
- sources: [ 'src/utils/gopass.c' ],
- headers: [ 'src/*.h' ],
- depends: [ 'libgo' ],
- },
- /*
- Compiler for web pages into C code
- */
- webcomp: {
- enable: 'me.settings.rom',
- type: 'exe',
- sources: [ 'src/utils/webcomp.c' ],
- headers: [ 'src/*.h' ],
- depends: [ ],
- },
- run: {
- home: 'src',
- run: 'goahead -v',
- },
- rom: {
- action: `
- let path = Path('src/rom.c')
- trace('Create', path)
- path.write(Cmd.run('webcomp rom.files', {dir: 'src'}))
- `,
- },
- install: {
- home: '${TOP}',
- generate: ' ',
- depends: [ 'all', 'stop', 'installBinary', 'start' ],
- action: `
- trace('Info', me.settings.title + ' installed at ' + me.prefixes.vapp)
- trace('Info', 'Configuration directory ' + me.prefixes.etc)
- trace('Info', 'Documents directory ' + me.prefixes.web)
- trace('Info', 'Executables directory ' + me.prefixes.vapp.join('bin'))
- trace('Info', 'Use "man goahead" for usage')
- trace('Info', 'Run via "cd ' + me.prefixes.etc + ' ; sudo goahead -v ' + me.prefixes.web + '"')
- trace('Info', 'Browse to ' + me.settings.goahead.listen[0].replace('*', 'localhost').replace(':80', '/'))
- let pid = Cmd.ps('goahead')
- if (pid && pid.length > 0) {
- trace('Info', me.settings.title + ' PID: ' + pid[0].pid)
- }
- `,
- },
- projects: {
- action: `genProjects('')`,
- },
- publish: {
- action: `publish()`,
- },
- mine: {
- action: `genProjects('', 'mine', Config.OS + '-' + Config.CPU)`,
- },
- mgen: {
- action: `genProjects('-with mbedtls', 'mine', Config.OS + '-' + Config.CPU)`,
- }
- },
- })
|