-- -- Yoink Configuration Rules -- Use this file with config.lua to generate config files. -- local project = "Yoink" local version = "0.1" local website = "http://www.dogcows.com/yoink" local contact = "chaz@dogcows.com" local check = require "check" local util = require "utility" return string.format("%s %s", project, version), { name = "Yoink Configuration", caption = "Choose the category of settings to view/change.", { name = "Installation Paths", caption = "Set the directory paths where program files will be installed.", { symbol = "prefix", value = "/usr/local", cmdline = "--prefix", name = "Prefix", caption = "Set the base installation directory.", check = function(value) libdir = value .. "/lib" return value end }, { symbol = "exec_prefix", value = "$(prefix)", cmdline = "--exec-prefix", name = "Executable Prefix", caption = "Set the base installation directory for executables.", visible = function() return showAdvanced end }, { symbol = "bindir", value = "$(exec_prefix)/bin", cmdline = "--bindir", name = "Binaries", caption = "Set the executable storage directory." }, { symbol = "libdir", value = "/usr/local/lib" }, { symbol = "datarootdir", value = "$(prefix)/share", cmdline = "--datarootdir", name = "Data Root", caption = "Set the base installation directory for resource files.", visible = function() return showAdvanced end }, { symbol = "datadir", value = "$(datarootdir)", cmdline = "--datadir", name = "Data", caption = "Set the program resource storage directory." }, { symbol = "pkgdatadir", value = "$(datadir)/$(projectName)", config = "YOINK_DATADIR", export = "pkgdatadir", name = "Package Data", caption = "Set the program resource storage directory.", visible = function() return showAdvanced end }, { symbol = "mandir", value = "$(datarootdir)/man", cmdline = "--mandir", name = "Manuals", caption = "Set the manual page storage directory." } }, { name = "Build Options", caption = "Set toolset commands and flags.", { symbol = "build", value = util.exec("config.guess"), cmdline = "--build", name = "Build Triplet", caption = "Set the build triplet.", check = function(value) return value end }, { symbol = "host", value = "", cmdline = "--host", name = "Host Triplet", caption = "Set the host triplet.", check = function(value) if value == "" then CC = "gcc" CXX = "g++" AR = "ar" RANLIB = "ranlib" WINDRES = "windres" else CC = value .. "-gcc" CXX = value .. "-g++" AR = value .. "-ar" RANLIB = value .. "-ranlib" WINDRES = value .. "-windres" end if value:find("mingw32") then platform = "win32" EXEEXT = ".exe" else platform = "posix" EXEEXT = "" end return value end, before = {"dependencies", "CC", "CXX", "AR", "RANLIB", "WINDRES"} }, { symbol = "EXEEXT", value = "", name = "Executable Suffix", export = "EXEEXT", caption = "Set the extension of binary executables.", help = [[ Some platforms follow certain conventions with regard to the file extension of executables. By default, the build system will create executables with no suffix, but specifying this option will cause the text to be appended to the names of these files. This option may be changed without your intervention if automatic checks determine there is a common executable suffix for the host platform. ]], visible = function() return showAdvanced end }, { symbol = "platform", value = {"posix", "win32"}, config = "PLATFORM", name = "Platform", caption = "Set the architectural platform to target.", visible = function() return showAdvanced end, check = function(value) if value == "win32" then PKG_LDLIBS = PKG_LDLIBS:setFlag("-lws2_32") else PKG_LDLIBS = PKG_LDLIBS:unsetFlag("-lws2_32") end return value end, before = {"LDLIBS"} }, { name = "Toolset Options", caption = "Customize the toolset.", help = [[ You can set which compilers and other tools to use. You may also specify which extra flags should be used during the compile and linking phase. ]], { symbol = "CC", value = "cc", cmdline = "CC", name = "CC", caption = "Set the C compiler command." }, { symbol = "CXX", value = "g++", cmdline = "CXX", name = "CXX", caption = "Set the C++ compiler command." }, { symbol = "AR", value = "ar", cmdline = "AR", name = "AR", caption = "Set the archiver for static libraries command." }, { symbol = "RANLIB", value = "ranlib", cmdline = "RANLIB", name = "RANLIB", caption = "Set the archive indexer command." }, { symbol = "WINDRES", value = "windres", cmdline = "WINDRES", name = "WINDRES", caption = "Set the Windows resource compiler command.", visible = function() return platform == "win32" end }, "------------INSERT-BLANK-LINE------------", { symbol = "CFLAGS", value = "-Wall -Wno-uninitialized -O2", cmdline = "CFLAGS", name = "CFLAGS", caption = "Set the C compiler flags." }, { symbol = "CXXFLAGS", value = "$(CFLAGS)", cmdline = "CXXFLAGS", name = "CXXFLAGS", caption = "Set the C++ compiler flags." }, { symbol = "CPPFLAGS", value = "", cmdline = "CPPFLAGS", name = "CPPFLAGS", caption = "Set the C preprocessor flags." }, { symbol = "LDLIBS", value = "", cmdline = "LIBS", name = "LIBS", caption = "Set the libraries the executable should link with." }, { symbol = "LDFLAGS", value = "", cmdline = "LDFLAGS", name = "LDFLAGS", caption = "Set the linker flags." }, { symbol = "dependencies", value = "sdl gl glu libpng openal vorbisfile lua|lua5.1", check = function(value) local value, err = util.pkgfind(value, libdir) if value then PKG_CFLAGS = util.pkgconfig("CFLAGS", value, libdir) PKG_LDLIBS = util.pkgconfig("LIBS", value, libdir) .. " -lz" PKG_LDFLAGS = util.pkgconfig("LDFLAGS", value, libdir) end return value, err end, after = {"prefix"}, temp = true }, { symbol = "PKG_CFLAGS", value = "", after = {"dependencies"} }, { symbol = "PKG_CXXFLAGS", value = "$(PKG_CFLAGS)", after = {"PKG_CFLAGS"} }, { symbol = "PKG_LDLIBS", value = "", after = {"dependencies"} }, { symbol = "PKG_LDFLAGS", value = "", after = {"dependencies"} } }, "------------INSERT-BLANK-LINE------------", { symbol = "tracking", value = true, cmdline = "--enable-dependency-tracking", name = "Dependency Tracking", caption = "Enable tracking of code dependencies.", help = [[ If you are working on the code, you want this enabled so that the files you edit will automatically be rebuilt when you run make. This may add some overhead to the build process. If in doubt, say Yes. ]] }, { symbol = "profile", value = false, cmdline = "--enable-profile", config = "ENABLE_PROFILING", name = "Profiling", caption = "Compile in gprof instructions for profiling.", help = [[ Yoink can be compiled with extra instructions to generate statistical data regarding the performance of the code. This data is saved to a file which can be used by the gprof program to generate a nice report. If in doubt, say No. ]], check = function(value) if value then PKG_CFLAGS = PKG_CFLAGS:setFlag("-pg") PKG_LDFLAGS = PKG_LDFLAGS:setFlag("-pg") else PKG_CFLAGS = PKG_CFLAGS:unsetFlag("-pg") PKG_LDFLAGS = PKG_LDFLAGS:unsetFlag("-pg") end return value end } }, { name = "Program Features", caption = "Choose which features to compile into the program.", { symbol = "debug", value = false, cmdline = "--enable-debug", config = {"DEBUG", "!NDEBUG"}, name = "Debug Mode", caption = "Compile in debug codepaths.", help = [[ The debug target mode enables runtime assertions and other codepaths appropriate for finding bugs and diagnosing problems. The release target mode will avoid compiling in this extra overhead and also set some compiler flags for optimizing the performance of the code. Note that logging and exception-handling facilities are still available in release mode, and debug symbols are always available provided you do not explicitly strip them out. Therefore, many problems can be diagnosed without these extra codepaths. If in doubt, say No. ]], check = function(value) if value then CFLAGS = CFLAGS:setFlag("-Wall", "-g") end return value end }, { symbol = "clock_gettime", value = false, cmdline = "--enable-clock_gettime", config = "ENABLE_CLOCK_GETTIME", name = "clock_gettime", caption = "Use a high-res clock on platforms that support it.", help = [[ By default, Yoink will use whatever timing facility is provided by SDL. This only provides a low-resolution guarantee. On some targets, a much higher-resolution timer is available through the use of clock_gettime(2). On such platforms, SDL might have been built to use this time source. This option will cause Yoink to use it directly so that the high resolution is guaranteed. If in doubt, say No. ]], visible = function() return platform == "posix" end }, { symbol = "doublePrecision", value = false, cmdline = "--enable-double-precision", config = "ENABLE_DOUBLE_PRECISION", name = "Double Precision", caption = "Use doubles for floating point numbers.", help = [[ The most common data type for storing non-integral numbers is called a float. These are quickly processed on modern hardware, but they suffer problems in accuracy. A much more accurate data type is a double, but they may take a bit longer to process. In most cases, floats are adequate. Yet, using doubles will help prevent small inaccuracies from accumulating over time and becoming a bigger deal. If in doubt, say No. ]] }, { symbol = "hotloading", value = false, cmdline = "--enable-hotloading", config = "ENABLE_HOTLOADING", name = "Hotloading", caption = "Allow assets to reload themselves automatically.", help = [[ Hotloading allows game resources to be reloaded into the game automatically whenever they are changed on disk. For example, if you are running Yoink at the same time as you are editing one of its image files, any changes you save to the file will immediately be seen in the game. Other types of assets are also hotloadable. This is very useful to content creators interested in rapid development. Currently only recent Linux kernels are supported. There is a small amount of overhead associated with hotloading; as such, it is not recommended unless you plan to take advantage of its benefits. If in doubt, say No. ]], visible = function() return platform == "posix" end }, { symbol = "threads", value = true, cmdline = "--enable-threads", config = "ENABLE_THREADS", name = "Threads", caption = "Use threads for concurrency where appropriate.", help = [[ If you have multiple processors or cores, enabling threads will allow the workload to be shared. This may have limited usefulness even if you have only a single core. If in doubt, say Yes. ]] }, { symbol = "gui", value = {"none", "gtk", "qt4"}, cmdline = "--with-gui", config = "WITH_GUI", name = "GUI Toolkit", caption = "Set which (if any) widget toolkit to use for dialogs.", help = [[ Sometimes Yoink will show a dialog window for the purpose of providing diagnostics information. If you have KDE, you probably want to choose QT4 for this purpose. If you have Gnome or any other environment, you may prefer GTK2. This option will make certain QT4 or GTK2 libraries dependencies. If you choose "none," no dialog windows will be shown, and any such information can be seen from the terminal output. Under certain targets, the native API will be used and this option will have no effect. For example, a mingw32 target will automatically use native win32 dialogs. If in doubt, say None. ]], visible = function() return platform == "posix" end, check = function(value) dependencies = dependencies:unsetFlag("gtk+-2.0", "QtGui") if value == "gtk" then dependencies = dependencies:setFlag("gtk+-2.0") elseif value == "qt4" then dependencies = dependencies:setFlag("QtGui") end return value end, before = {"dependencies"} } }, { name = "Package Strings", caption = "Set the package strings.", visible = function() return showAdvanced end, { symbol = "PACKAGE", value = project, config = {"PACKAGE_NAME", "PACKAGE"}, name = "Package Name", export = "PACKAGE", caption = "Set the name of the program.", check = function(value) projectName = util.symbolize(value) return value end }, { symbol = "projectName", value = util.symbolize(project), export = "projectName", }, { symbol = "VERSION", value = version, config = "PACKAGE_VERSION", export = "VERSION", name = "Version", caption = "Set the three-part version number of the program.", check = function(value) versionMajor, versionMinor, versionRevision = util.splitVersion(value) return value end, before = {"versionMajor", "versionMinor", "versionRevision"} }, { symbol = "packageString", value = "$(PACKAGE) $(VERSION)", config = "PACKAGE_STRING", name = "Full String", caption = "Set the complete package string." }, { symbol = "TARNAME", value = "$(projectName)", config = "PACKAGE_TARNAME", name = "Archive Name", caption = "Set the name used in creating tarballs." }, { symbol = "archiveFormat", value = {"bzip2", "gzip", "lzma", "xz", "all"}, name = "Default Archive Format", caption = "Set the default compression format for tarballs." }, { symbol = "email", value = contact, config = "PACKAGE_BUGREPORT", export = "email", name = "Email Address", caption = "Set the email address for collecting bug reports." }, { symbol = "website", value = website, config = "PACKAGE_URL", name = "Website URL", caption = "Set the project website URL." }, { symbol = "versionMajor", value = 0, config = "VERSION_MAJOR" }, { symbol = "versionMinor", value = 0, config = "VERSION_MINOR" }, { symbol = "versionRevision", value = 0, config = "VERSION_REVISION" }, { symbol = "gitHead", value = "", check = function(value) local hash, code = util.exec("git show-ref --head HEAD | sed -n 's/\\(.*\\) HEAD/\\1/p'") if code == 0 then value = hash end return value end }, { symbol = "manCompression", value = {"none", "bzip2", "gzip"}, cmdline = "--with-man-compression", name = "Manual Compression", caption = "Set which compression to use for installed man pages" }, { symbol = "includeConfig", value = true, config = "INCLUDE_CONFIG_FILE", name = "Compile config.mk into executable", caption = "What the name says." } }, "------------INSERT-BLANK-LINE------------", { symbol = "showAdvanced", value = false, name = "Show Advanced Options", caption = "Show advanced (and often less useful) options." } }