Mercurial > projects > doodle
view bob.cfg @ 139:e33f37b14893 default tip
Port to 'no-more-make' https://github.com/GrahamStJack/no-more-make
author | David Bryant <bagnose@gmail.com> |
---|---|
date | Sun, 30 Sep 2012 15:41:25 +0930 |
parents | |
children |
line wrap: on
line source
############################################################################### # Example bob configuration file. # # Used by 'bob-config' to establish a build directory, from which a 'bob' # command will build your project. # # This file should be located at the top level of a repository, below which # are source directories. # # Before running bob-config, you need to: # * Check out the project's source repository(s). # * Ensure that all the project's external dependencies are available, # either in standard system locations or in local project-specific # locations. # Bob does not verify external dependencies. # # If your project is built for a number of target architectures, use # one config file for each architecture, and specify which one on the bob-config # command-line. # ############################################################################### # # Top-level syntax is a series of sections, each starting with a line: # [section-name] # # Comment lines begin with '#'. # # The syntax for each section is section-specific, and described in each # section. # ############################################################################### [defines] # Define variables. # # Any relative paths provided in variable definitions are relative to # the directory this file is in, which is also the working directory # of bob-config. # # A variable definition is: name = text # # Variables used by bob are: # # PROJECT - Path to directory containing the project's top-level Bobfile. # REPOS - Paths to other repos (if any), below which are source # directories that are available to build as part of this project. # SYS_INC - Non-standard paths searched for system includes. # SYS_LIB - Non-standard paths searched for system libraries. # SYS_PATH - Non-standard paths searched for system utilities. # SYS_IMP - Non-standard paths searched for D imports. # C_EXTERN - Top-level C/C++ packages that are external to the project. # D_EXTERN - Top-level D packages that are external to the project. # # Also required are build commands. # # Build-command variables are used by bob to create the output files specified # in the project's Bobfile(s). They are of the form: # <input-ext> <output-ext>(s) = command # Reserved extensions with special meaning are: # .obj -> object file # .slib -> static library # .dlib -> dynamic library # .exe -> executable # The extensions actually used vary with platform. # Libraries and executables are built from object files. # # The commands that use object files to create libraries and executables are # specified with the extension of the source files, not .obj. # .c source files may be mixed with other types of source files, # but others may not. .h files are assumed to be header files. # # Reserved variables defined by bob from information in Bobfiles are: # # INPUT - Paths of the input file(s) relative to the build dir. # OUTPUT - Paths of the resultant built file(s) relative to the build dir. # PROJ_INC - Project include or import paths. # PROJ_LIB - Project library paths. # LIBS - Required libraries. # # ${} expands a variable, cross-multiplying it with whatever it is adjacent to. # eg, if HEADERS = one two three, then -I${HEADERS} becomes -Ione -Itwo -Ithree. # If the variable is empty, the cross-multiplication is also empty. # If there is no adjacent text, the variable's value is used. # Variable expansion occurs just before a build command is issued, after # all dependencies are known. # Required PROJECT = doodle REPOS = SYS_IMP = SYS_INC = SYS_LIB = SYS_PATH = C_EXTERN = D_EXTERN = core std glib gdk gtk gtkc cairo # Compiler switches CFLAGS = -fpic -pedantic -Werror -Wall -Wno-long-long -Wundef -Wredundant-decls -DFILE_PATH=${INPUT} C++FLAGS = ${CFLAGS} -Woverloaded-virtual -Wsign-promo -Wctor-dtor-privacy -Wnon-virtual-dtor DFLAGS = -w -wi -gc -Isrc/gtk LINKFLAGS = DLINKFLAGS = -L-L/home/dbryant/source/d/GtkD # Build commands # Contrived example of source-code generation. .H .h = cp ${INPUT} ${OUTPUT} .CPP .cpp = cp ${INPUT} ${OUTPUT} # Documentation .rst .html = rst2html ${INPUT} ${OUTPUT} # Object files .c .obj = gcc -c ${INPUT} -isystem${SYS_INC} -iquote${PROJ_INC} ${CFLAGS} -o ${OUTPUT} .cpp .obj = g++ -c ${INPUT} -isystem${SYS_INC} -iquote${PROJ_INC} ${C++FLAGS} -o ${OUTPUT} .d .obj = dmd -c ${INPUT} -I${SYS_IMP} -I${PROJ_INC} ${DFLAGS} -of${OUTPUT} # Static libraries .c .slib = rm -f ${OUTPUT} && ar csr ${OUTPUT} ${INPUT} .cpp .slib = rm -f ${OUTPUT} && ar csr ${OUTPUT} ${INPUT} .d .slib = rm -f ${OUTPUT} && ar csr ${OUTPUT} ${INPUT} # Dynamic libraries .c .dlib = gcc -shared ${INPUT} ${LINKFLAGS} -L${SYS_LIB} -L${PROJ_LIB} -l{LIBS} -o ${OUTPUT} .cpp .dlib = g++ -shared ${INPUT} ${LINKFLAGS} -L${SYS_LIB} -L${PROJ_LIB} -l{LIBS} -o ${OUTPUT} # Executables .c .exe = gcc ${INPUT} ${LINKFLAGS} -L${SYS_LIB} -L${PROJ_LIB} -l${LIBS} -o ${OUTPUT} .cpp .exe = g++ ${INPUT} ${LINKFLAGS} -L${SYS_LIB} -L${PROJ_LIB} -l${LIBS} -o ${OUTPUT} .d .exe = dmd ${INPUT} ${DLINKFLAGS} -L-L${SYS_LIB} -L-L${PROJ_LIB} -L-l${LIBS} -of${OUTPUT} [modes] # For each mode, add to already-defined variables. # Format of a mode is: the name of the mode, followed by indented # variable additions. eg: # # debug # CFLAGS += ggdb3 # # Exactly one mode is in use for a given build directory, and is specified # on the bob-config command line. eg: mode=debug debug CFLAGS += -O1 -ggdb3 C++FLAGS += -O1 -ggdb3 DFLAGS += release CFLAGS += -O2 -NDEBUG C++FLAGS += -O2 -NDEBUG DFLAGS += -O -release