]> Dogcows Code - chaz/yoink/blob - options.lua
30d1c756f73ddc67cc4770d548eeac4c4965e9d9
[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
355 then
356 CFLAGS = CFLAGS:setFlag("-Wall", "-g")
357 CFLAGS = CFLAGS:replaceFlag("%-O%d?", "-O0")
358 end
359 return value
360 end
361 },
362 {
363 symbol = "clock_gettime",
364 value = false,
365 cmdline = "--enable-clock_gettime",
366 config = "ENABLE_CLOCK_GETTIME",
367 name = "clock_gettime",
368 caption = "Use a high-res clock on platforms that support it.",
369 help = [[
370 By default, Yoink will use whatever timing facility is
371 provided by SDL. This only provides a low-resolution
372 guarantee. On some targets, a much higher-resolution
373 timer is available through the use of clock_gettime(2).
374 On such platforms, SDL might have been built to use
375 this time source. This option will cause Yoink to use
376 it directly so that the high resolution is guaranteed.
377
378 If in doubt, say No.
379 ]],
380 visible = function() return platform == "posix" end
381 },
382 {
383 symbol = "doublePrecision",
384 value = false,
385 cmdline = "--enable-double-precision",
386 config = "ENABLE_DOUBLE_PRECISION",
387 name = "Double Precision",
388 caption = "Use doubles for floating point numbers.",
389 help = [[
390 The most common data type for storing non-integral
391 numbers is called a float. These are quickly processed
392 on modern hardware, but they suffer problems in
393 accuracy. A much more accurate data type is a double,
394 but they may take a bit longer to process.
395
396 In most cases, floats are adequate. Yet, using doubles
397 will help prevent small inaccuracies from accumulating
398 over time and becoming a bigger deal.
399
400 If in doubt, say No.
401 ]]
402 },
403 {
404 symbol = "hotloading",
405 value = false,
406 cmdline = "--enable-hotloading",
407 config = "ENABLE_HOTLOADING",
408 name = "Hotloading",
409 caption = "Allow assets to reload themselves automatically.",
410 help = [[
411 Hotloading allows game resources to be reloaded into
412 the game automatically whenever they are changed on
413 disk. For example, if you are running Yoink at the
414 same time as you are editing one of its image files,
415 any changes you save to the file will immediately be
416 seen in the game. Other types of assets are also
417 hotloadable. This is very useful to content creators
418 interested in rapid development.
419
420 Currently only recent Linux kernels are supported.
421 There is a small amount of overhead associated with
422 hotloading; as such, it is not recommended unless you
423 plan to take advantage of its benefits.
424
425 If in doubt, say No.
426 ]],
427 visible = function() return platform == "posix" end
428 },
429 {
430 symbol = "threads",
431 value = true,
432 cmdline = "--enable-threads",
433 config = "ENABLE_THREADS",
434 name = "Threads",
435 caption = "Use threads for concurrency where appropriate.",
436 help = [[
437 If you have multiple processors or cores, enabling
438 threads will allow the workload to be shared. This
439 may have limited usefulness even if you have only a
440 single core.
441
442 If in doubt, say Yes.
443 ]]
444 },
445 {
446 symbol = "gui",
447 value = {"none", "gtk", "qt4"},
448 cmdline = "--with-gui",
449 config = "WITH_GUI",
450 name = "GUI Toolkit",
451 caption = "Set which (if any) widget toolkit to use for dialogs.",
452 help = [[
453 Sometimes Yoink will show a dialog window for the
454 purpose of providing diagnostics information. If you
455 have KDE, you probably want to choose QT4 for this
456 purpose. If you have Gnome or any other environment,
457 you may prefer GTK2. This option will make certain QT4
458 or GTK2 libraries dependencies. If you choose "none,"
459 no dialog windows will be shown, and any such
460 information can be seen from the terminal output.
461
462 Under certain targets, the native API will be used and
463 this option will have no effect. For example, a
464 mingw32 target will automatically use native win32
465 dialogs.
466
467 If in doubt, say None.
468 ]],
469 visible = function() return platform == "posix" end,
470 check = function(value)
471 dependencies = dependencies:unsetFlag("gtk+-2.0", "QtGui")
472 if value == "gtk" then dependencies = dependencies:setFlag("gtk+-2.0")
473 elseif value == "qt4" then dependencies = dependencies:setFlag("QtGui") end
474 return value
475 end,
476 before = {"dependencies"}
477 }
478 },
479 {
480 name = "Package Strings",
481 caption = "Set the package strings.",
482 visible = function() return showAdvanced end,
483 {
484 symbol = "PACKAGE",
485 value = project,
486 config = {"PACKAGE_NAME", "PACKAGE"},
487 name = "Package Name",
488 export = "PACKAGE",
489 caption = "Set the name of the program.",
490 check = function(value)
491 projectName = util.symbolize(value) return value
492 end
493 },
494 {
495 symbol = "projectName",
496 value = util.symbolize(project),
497 export = "projectName",
498 },
499 {
500 symbol = "VERSION",
501 value = version,
502 config = "PACKAGE_VERSION",
503 export = "VERSION",
504 name = "Version",
505 caption = "Set the three-part version number of the program.",
506 check = function(value)
507 versionMajor, versionMinor, versionRevision = util.splitVersion(value)
508 return value
509 end,
510 before = {"versionMajor", "versionMinor", "versionRevision"}
511 },
512 {
513 symbol = "packageString",
514 value = "$(PACKAGE) $(VERSION)",
515 config = "PACKAGE_STRING",
516 name = "Full String",
517 caption = "Set the complete package string."
518 },
519 {
520 symbol = "TARNAME",
521 value = "$(projectName)",
522 config = "PACKAGE_TARNAME",
523 name = "Archive Name",
524 caption = "Set the name used in creating tarballs."
525 },
526 {
527 symbol = "archiveFormat",
528 value = {"bzip2", "gzip", "lzma", "xz", "all"},
529 name = "Default Archive Format",
530 caption = "Set the default compression format for tarballs."
531 },
532 {
533 symbol = "email",
534 value = contact,
535 config = "PACKAGE_BUGREPORT",
536 export = "email",
537 name = "Email Address",
538 caption = "Set the email address for collecting bug reports."
539 },
540 {
541 symbol = "website",
542 value = website,
543 config = "PACKAGE_URL",
544 name = "Website URL",
545 caption = "Set the project website URL."
546 },
547 {
548 symbol = "versionMajor",
549 value = 0,
550 config = "VERSION_MAJOR"
551 },
552 {
553 symbol = "versionMinor",
554 value = 0,
555 config = "VERSION_MINOR"
556 },
557 {
558 symbol = "versionRevision",
559 value = 0,
560 config = "VERSION_REVISION"
561 },
562 {
563 symbol = "gitHead",
564 value = "",
565 check = function(value)
566 local hash, code = util.exec("git show-ref --head HEAD | sed -n 's/\\(.*\\) HEAD/\\1/p'")
567 if code == 0 then value = hash end
568 return value
569 end
570 },
571 {
572 symbol = "manCompression",
573 value = {"none", "bzip2", "gzip"},
574 cmdline = "--with-man-compression",
575 name = "Manual Compression",
576 caption = "Set which compression to use for installed man pages"
577 },
578 {
579 symbol = "includeConfig",
580 value = true,
581 config = "INCLUDE_CONFIG_FILE",
582 name = "Compile config.mk into executable",
583 caption = "What the name says."
584 }
585 },
586 "------------INSERT-BLANK-LINE------------",
587 {
588 symbol = "showAdvanced",
589 value = false,
590 name = "Show Advanced Options",
591 caption = "Show advanced (and often less useful) options."
592 }
593 }
594
595
596 -- vi:ft=lua
597
This page took 0.055228 seconds and 4 git commands to generate.