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