]> Dogcows Code - chaz/yoink/blob - options.lua
4839144d99f97a9ca19c30b40c6ecf39645a4bd5
[chaz/yoink] / options.lua
1
2 --
3 -- Yoink Configuration Rules
4 -- Use this file with config.lua to generate config files.
5 --
6
7 local project = "Yoink"
8 local version = "0.1"
9 local website = "http://www.dogcows.com/yoink"
10 local contact = "chaz@dogcows.com"
11
12
13 local check = require "check"
14 local util = require "utility"
15
16 return string.format("%s %s", project, version),
17 {
18 name = "Yoink Configuration",
19 caption = "Choose the category of settings to view/change.",
20 {
21 name = "Installation Paths",
22 caption = "Set the directory paths where program files will be installed.",
23 {
24 symbol = "prefix",
25 value = "/usr/local",
26 cmdline = "--prefix",
27 name = "Prefix",
28 caption = "Set the base installation directory.",
29 check = function(value)
30 libdir = value .. "/lib"
31 return value
32 end
33 },
34 {
35 symbol = "exec_prefix",
36 value = "$(prefix)",
37 cmdline = "--exec-prefix",
38 name = "Executable Prefix",
39 caption = "Set the base installation directory for executables.",
40 visible = function() return showAdvanced end
41 },
42 {
43 symbol = "bindir",
44 value = "$(exec_prefix)/bin",
45 cmdline = "--bindir",
46 name = "Binaries",
47 caption = "Set the executable storage directory."
48 },
49 {
50 symbol = "libdir",
51 value = "/usr/local/lib"
52 },
53 {
54 symbol = "datarootdir",
55 value = "$(prefix)/share",
56 cmdline = "--datarootdir",
57 name = "Data Root",
58 caption = "Set the base installation directory for resource files.",
59 visible = function() return showAdvanced end
60 },
61 {
62 symbol = "datadir",
63 value = "$(datarootdir)",
64 cmdline = "--datadir",
65 name = "Data",
66 caption = "Set the program resource storage directory."
67 },
68 {
69 symbol = "pkgdatadir",
70 value = "$(datadir)/$(projectName)",
71 config = "YOINK_DATADIR",
72 export = "pkgdatadir",
73 name = "Package Data",
74 caption = "Set the program resource storage directory.",
75 visible = function() return showAdvanced end
76 },
77 {
78 symbol = "mandir",
79 value = "$(datarootdir)/man",
80 cmdline = "--mandir",
81 name = "Manuals",
82 caption = "Set the manual page storage directory."
83 }
84 },
85 {
86 name = "Build Options",
87 caption = "Set toolset commands and flags.",
88 {
89 symbol = "build",
90 value = util.exec("config.guess"),
91 cmdline = "--build",
92 name = "Build Triplet",
93 caption = "Set the build triplet.",
94 check = function(value) return value end
95 },
96 {
97 symbol = "host",
98 value = "",
99 cmdline = "--host",
100 name = "Host Triplet",
101 caption = "Set the host triplet.",
102 check = function(value)
103 if value == ""
104 then
105 CC = "gcc"
106 CXX = "g++"
107 AR = "ar"
108 RANLIB = "ranlib"
109 WINDRES = "windres"
110 else
111 CC = value .. "-gcc"
112 CXX = value .. "-g++"
113 AR = value .. "-ar"
114 RANLIB = value .. "-ranlib"
115 WINDRES = value .. "-windres"
116 end
117 if value:find("mingw32")
118 then
119 platform = "win32"
120 EXEEXT = ".exe"
121 else
122 platform = "posix"
123 EXEEXT = ""
124 end
125 return value
126 end,
127 before = {"dependencies", "CC", "CXX", "AR", "RANLIB", "WINDRES"}
128 },
129 {
130 symbol = "EXEEXT",
131 value = "",
132 name = "Executable Suffix",
133 export = "EXEEXT",
134 caption = "Set the extension of binary executables.",
135 help = [[
136 Some platforms follow certain conventions with regard
137 to the file extension of executables. By default, the
138 build system will create executables with no suffix,
139 but specifying this option will cause the text to be
140 appended to the names of these files.
141
142 This option may be changed without your intervention if
143 automatic checks determine there is a common executable
144 suffix for the host platform.
145 ]],
146 visible = function() return showAdvanced end
147 },
148 {
149 symbol = "platform",
150 value = {"posix", "win32"},
151 config = "PLATFORM",
152 name = "Platform",
153 caption = "Set the architectural platform to target.",
154 visible = function() return showAdvanced end,
155 check = function(value)
156 if value == "win32"
157 then
158 PKG_LDLIBS = PKG_LDLIBS:setFlag("-lws2_32")
159 else
160 PKG_LDLIBS = PKG_LDLIBS:unsetFlag("-lws2_32")
161 end
162 return value
163 end,
164 before = {"LDLIBS"}
165 },
166 {
167 name = "Toolset Options",
168 caption = "Customize the toolset.",
169 help = [[
170 You can set which compilers and other tools to use.
171 You may also specify which extra flags should be used
172 during the compile and linking phase.
173 ]],
174 {
175 symbol = "CC",
176 value = "cc",
177 cmdline = "CC",
178 name = "CC",
179 caption = "Set the C compiler command."
180 },
181 {
182 symbol = "CXX",
183 value = "g++",
184 cmdline = "CXX",
185 name = "CXX",
186 caption = "Set the C++ compiler command."
187 },
188 {
189 symbol = "AR",
190 value = "ar",
191 cmdline = "AR",
192 name = "AR",
193 caption = "Set the archiver for static libraries command."
194 },
195 {
196 symbol = "RANLIB",
197 value = "ranlib",
198 cmdline = "RANLIB",
199 name = "RANLIB",
200 caption = "Set the archive indexer command."
201 },
202 {
203 symbol = "WINDRES",
204 value = "windres",
205 cmdline = "WINDRES",
206 name = "WINDRES",
207 caption = "Set the Windows resource compiler command.",
208 visible = function() return platform == "win32" end
209 },
210 "------------INSERT-BLANK-LINE------------",
211 {
212 symbol = "CFLAGS",
213 value = "-Wall -Wno-uninitialized -O2",
214 cmdline = "CFLAGS",
215 name = "CFLAGS",
216 caption = "Set the C compiler flags."
217 },
218 {
219 symbol = "CXXFLAGS",
220 value = "$(CFLAGS)",
221 cmdline = "CXXFLAGS",
222 name = "CXXFLAGS",
223 caption = "Set the C++ compiler flags."
224 },
225 {
226 symbol = "CPPFLAGS",
227 value = "",
228 cmdline = "CPPFLAGS",
229 name = "CPPFLAGS",
230 caption = "Set the C preprocessor flags."
231 },
232 {
233 symbol = "LDLIBS",
234 value = "",
235 cmdline = "LIBS",
236 name = "LIBS",
237 caption = "Set the libraries the executable should link with."
238 },
239 {
240 symbol = "LDFLAGS",
241 value = "",
242 cmdline = "LDFLAGS",
243 name = "LDFLAGS",
244 caption = "Set the linker flags."
245 },
246 {
247 symbol = "dependencies",
248 value = "sdl gl glu libpng openal vorbisfile lua|lua5.1",
249 check = function(value)
250 local value, err = util.pkgfind(value, libdir)
251 if value
252 then
253 PKG_CFLAGS = util.pkgconfig("CFLAGS", value, libdir)
254 PKG_LDLIBS = util.pkgconfig("LIBS", value, libdir) .. " -lz"
255 PKG_LDFLAGS = util.pkgconfig("LDFLAGS", value, libdir)
256 end
257 return value, err
258 end,
259 after = {"prefix"},
260 temp = true
261 },
262 {
263 symbol = "PKG_CFLAGS",
264 value = "",
265 after = {"dependencies"}
266 },
267 {
268 symbol = "PKG_CXXFLAGS",
269 value = "$(PKG_CFLAGS)",
270 after = {"PKG_CFLAGS"}
271 },
272 {
273 symbol = "PKG_LDLIBS",
274 value = "",
275 after = {"dependencies"}
276 },
277 {
278 symbol = "PKG_LDFLAGS",
279 value = "",
280 after = {"dependencies"}
281 }
282 },
283 "------------INSERT-BLANK-LINE------------",
284 {
285 symbol = "tracking",
286 value = true,
287 cmdline = "--enable-dependency-tracking",
288 name = "Dependency Tracking",
289 caption = "Enable tracking of code dependencies.",
290 help = [[
291 If you are working on the code, you want this enabled
292 so that the files you edit will automatically be
293 rebuilt when you run make. This may add some overhead
294 to the build process.
295
296 If in doubt, say Yes.
297 ]]
298 },
299 {
300 symbol = "profile",
301 value = false,
302 cmdline = "--enable-profile",
303 config = "ENABLE_PROFILING",
304 name = "Profiling",
305 caption = "Compile in gprof instructions for profiling.",
306 help = [[
307 Yoink can be compiled with extra instructions to
308 generate statistical data regarding the performance of
309 the code. This data is saved to a file which can be
310 used by the gprof program to generate a nice report.
311
312 If in doubt, say No.
313 ]],
314 check = function(value)
315 if value
316 then
317 PKG_CFLAGS = PKG_CFLAGS:setFlag("-pg")
318 PKG_LDFLAGS = PKG_LDFLAGS:setFlag("-pg")
319 else
320 PKG_CFLAGS = PKG_CFLAGS:unsetFlag("-pg")
321 PKG_LDFLAGS = PKG_LDFLAGS:unsetFlag("-pg")
322 end
323 return value
324 end
325 }
326 },
327 {
328 name = "Program Features",
329 caption = "Choose which features to compile into the program.",
330 {
331 symbol = "debug",
332 value = false,
333 cmdline = "--enable-debug",
334 config = {"DEBUG", "!NDEBUG"},
335 name = "Debug Mode",
336 caption = "Compile in debug codepaths.",
337 help = [[
338 The debug target mode enables runtime assertions and
339 other codepaths appropriate for finding bugs and
340 diagnosing problems. The release target mode will
341 avoid compiling in this extra overhead and also set
342 some compiler flags for optimizing the performance of
343 the code.
344
345 Note that logging and exception-handling facilities are
346 still available in release mode, and debug symbols are
347 always available provided you do not explicitly strip
348 them out. Therefore, many problems can be diagnosed
349 without these extra codepaths.
350
351 If in doubt, say No.
352 ]],
353 check = function(value)
354 if value then
355 CFLAGS = CFLAGS:setFlag("-Wall", "-g")
356 end
357 return value
358 end
359 },
360 {
361 symbol = "clock_gettime",
362 value = false,
363 cmdline = "--enable-clock_gettime",
364 config = "ENABLE_CLOCK_GETTIME",
365 name = "clock_gettime",
366 caption = "Use a high-res clock on platforms that support it.",
367 help = [[
368 By default, Yoink will use whatever timing facility is
369 provided by SDL. This only provides a low-resolution
370 guarantee. On some targets, a much higher-resolution
371 timer is available through the use of clock_gettime(2).
372 On such platforms, SDL might have been built to use
373 this time source. This option will cause Yoink to use
374 it directly so that the high resolution is guaranteed.
375
376 If in doubt, say No.
377 ]],
378 visible = function() return platform == "posix" end
379 },
380 {
381 symbol = "doublePrecision",
382 value = false,
383 cmdline = "--enable-double-precision",
384 config = "ENABLE_DOUBLE_PRECISION",
385 name = "Double Precision",
386 caption = "Use doubles for floating point numbers.",
387 help = [[
388 The most common data type for storing non-integral
389 numbers is called a float. These are quickly processed
390 on modern hardware, but they suffer problems in
391 accuracy. A much more accurate data type is a double,
392 but they may take a bit longer to process.
393
394 In most cases, floats are adequate. Yet, using doubles
395 will help prevent small inaccuracies from accumulating
396 over time and becoming a bigger deal.
397
398 If in doubt, say No.
399 ]]
400 },
401 {
402 symbol = "hotloading",
403 value = false,
404 cmdline = "--enable-hotloading",
405 config = "ENABLE_HOTLOADING",
406 name = "Hotloading",
407 caption = "Allow assets to reload themselves automatically.",
408 help = [[
409 Hotloading allows game resources to be reloaded into
410 the game automatically whenever they are changed on
411 disk. For example, if you are running Yoink at the
412 same time as you are editing one of its image files,
413 any changes you save to the file will immediately be
414 seen in the game. Other types of assets are also
415 hotloadable. This is very useful to content creators
416 interested in rapid development.
417
418 Currently only recent Linux kernels are supported.
419 There is a small amount of overhead associated with
420 hotloading; as such, it is not recommended unless you
421 plan to take advantage of its benefits.
422
423 If in doubt, say No.
424 ]],
425 visible = function() return platform == "posix" end
426 },
427 {
428 symbol = "threads",
429 value = true,
430 cmdline = "--enable-threads",
431 config = "ENABLE_THREADS",
432 name = "Threads",
433 caption = "Use threads for concurrency where appropriate.",
434 help = [[
435 If you have multiple processors or cores, enabling
436 threads will allow the workload to be shared. This
437 may have limited usefulness even if you have only a
438 single core.
439
440 If in doubt, say Yes.
441 ]]
442 },
443 {
444 symbol = "gui",
445 value = {"none", "gtk", "qt4"},
446 cmdline = "--with-gui",
447 config = "WITH_GUI",
448 name = "GUI Toolkit",
449 caption = "Set which (if any) widget toolkit to use for dialogs.",
450 help = [[
451 Sometimes Yoink will show a dialog window for the
452 purpose of providing diagnostics information. If you
453 have KDE, you probably want to choose QT4 for this
454 purpose. If you have Gnome or any other environment,
455 you may prefer GTK2. This option will make certain QT4
456 or GTK2 libraries dependencies. If you choose "none,"
457 no dialog windows will be shown, and any such
458 information can be seen from the terminal output.
459
460 Under certain targets, the native API will be used and
461 this option will have no effect. For example, a
462 mingw32 target will automatically use native win32
463 dialogs.
464
465 If in doubt, say None.
466 ]],
467 visible = function() return platform == "posix" end,
468 check = function(value)
469 dependencies = dependencies:unsetFlag("gtk+-2.0", "QtGui")
470 if value == "gtk" then dependencies = dependencies:setFlag("gtk+-2.0")
471 elseif value == "qt4" then dependencies = dependencies:setFlag("QtGui") end
472 return value
473 end,
474 before = {"dependencies"}
475 }
476 },
477 {
478 name = "Package Strings",
479 caption = "Set the package strings.",
480 visible = function() return showAdvanced end,
481 {
482 symbol = "PACKAGE",
483 value = project,
484 config = {"PACKAGE_NAME", "PACKAGE"},
485 name = "Package Name",
486 export = "PACKAGE",
487 caption = "Set the name of the program.",
488 check = function(value)
489 projectName = util.symbolize(value) return value
490 end
491 },
492 {
493 symbol = "projectName",
494 value = util.symbolize(project),
495 export = "projectName",
496 },
497 {
498 symbol = "VERSION",
499 value = version,
500 config = "PACKAGE_VERSION",
501 export = "VERSION",
502 name = "Version",
503 caption = "Set the three-part version number of the program.",
504 check = function(value)
505 versionMajor, versionMinor, versionRevision = util.splitVersion(value)
506 return value
507 end,
508 before = {"versionMajor", "versionMinor", "versionRevision"}
509 },
510 {
511 symbol = "packageString",
512 value = "$(PACKAGE) $(VERSION)",
513 config = "PACKAGE_STRING",
514 name = "Full String",
515 caption = "Set the complete package string."
516 },
517 {
518 symbol = "TARNAME",
519 value = "$(projectName)",
520 config = "PACKAGE_TARNAME",
521 name = "Archive Name",
522 caption = "Set the name used in creating tarballs."
523 },
524 {
525 symbol = "archiveFormat",
526 value = {"bzip2", "gzip", "lzma", "xz", "all"},
527 name = "Default Archive Format",
528 caption = "Set the default compression format for tarballs."
529 },
530 {
531 symbol = "email",
532 value = contact,
533 config = "PACKAGE_BUGREPORT",
534 export = "email",
535 name = "Email Address",
536 caption = "Set the email address for collecting bug reports."
537 },
538 {
539 symbol = "website",
540 value = website,
541 config = "PACKAGE_URL",
542 name = "Website URL",
543 caption = "Set the project website URL."
544 },
545 {
546 symbol = "versionMajor",
547 value = 0,
548 config = "VERSION_MAJOR"
549 },
550 {
551 symbol = "versionMinor",
552 value = 0,
553 config = "VERSION_MINOR"
554 },
555 {
556 symbol = "versionRevision",
557 value = 0,
558 config = "VERSION_REVISION"
559 },
560 {
561 symbol = "gitHead",
562 value = "",
563 check = function(value)
564 local hash, code = util.exec("git show-ref --head HEAD | sed -n 's/\\(.*\\) HEAD/\\1/p'")
565 if code == 0 then value = hash end
566 return value
567 end
568 },
569 {
570 symbol = "manCompression",
571 value = {"none", "bzip2", "gzip"},
572 cmdline = "--with-man-compression",
573 name = "Manual Compression",
574 caption = "Set which compression to use for installed man pages"
575 },
576 {
577 symbol = "includeConfig",
578 value = true,
579 config = "INCLUDE_CONFIG_FILE",
580 name = "Compile config.mk into executable",
581 caption = "What the name says."
582 }
583 },
584 "------------INSERT-BLANK-LINE------------",
585 {
586 symbol = "showAdvanced",
587 value = false,
588 name = "Show Advanced Options",
589 caption = "Show advanced (and often less useful) options."
590 }
591 }
592
This page took 0.055096 seconds and 3 git commands to generate.