PIKT

Samples: defines.cfg

PIKT Logo
Home FAQ News Intro Samples Tutorial Reference Software Authors Licensing SiteSearch


In this sample defines.cfg, we specify a set of logical "defines"--preprocessor conditional switches for including or excluding sections of the configuration files.

You use these defines together with the '#ifdef <define>' preprocessor directive to customize your PIKT configurations according to certain conditions--those you specify directly, or conditions based on the current system or network state.

///////////////////////////////////////////////////////////////////////////////
//
// PIKT defines.cfg -- preprocessor logical switches
// 
///////////////////////////////////////////////////////////////////////////////
// 
// in this file, you must declare all preprocessor defines
// 
// setting a define entails listing an identifier in the left-most column
// of this file, then, on the same line or on any indented followup line,
// specifying either 1 or TRUE or YES or ON
// 
// unsetting a define entails listing an identifier in the left-most column
// followed by either 0 or FALSE or NO or OFF
// 
// so, for example,
// 
// debug        TRUE            // or 1 or YES or ON
// 
// declares and sets the "debug" define (logical flag or switch) and
// 
// debug        FALSE           // or 0 or NO or OFF
// 
// declares and unsets the "debug" define
// 
// then, in any subsequent configuration file (macros.cfg, alerts.cfg,
// alarms.cfg, programs.cfg, objects.cfg), you can wrap any of the new
// define preprocessor directives (#ifdef, #ifndef, #elifdef, #elifndef,
// #endifdef, ...) around config file lines, and include/exclude them at will
// 
// for example, you might have
// 
// #ifdef debug
//              output mail "<blah blah blah>"               // debug message
// #endifdef
// 
// listing a define in this defines.cfg file sets or unsets that define;
// you can override a define setting in two ways:  either (a) by using
// the #def(ine) or #undef(ine) preprocessor directives later on in the
// config files, or (b) by adding -/+D <def> to your piktc command line
// 
// so, if you have the following in this defines.cfg file
// 
// debug        FALSE
// 
// you have set debug to FALSE (i.e., undefined it);  you can override this
// at the command line by, e.g.,
// 
// piktc -iv +D debug +A all +P all +F all +O all ...
// 
// or by adding the following line anywhere following in the config files:
// 
// #define debug
// 
// you can turn this example define on and off at will throughout the
// config files by a succession of suitable preprocessor statements:
// 
//      ...
// #define debug                // sets debug to TRUE
//      ...
// #undefine debug              // unsets debug, i.e., sets debug to FALSE
//      ...
// #def debug                   // alternate form of "#define"
//      ...
// #undef debug                 // alternate form of "#undefine"
//      ...
// 
// #def(ine) and #undef(ine) statements have global effect; that is, if
// you set (or unset) a define in one file, it remains set (or unset)
// through the remainder of that file and on into the next (unless or until
// you change its setting by a new #def(ine) or #undef(ine) directive)
// 
// #def(ine) and #undef(ine) statements in the config files have the
// highest priority, and command-line defines/undefines override any
// settings in the defines.cfg file
// 
// if you #def(ine) or #undef(ine) an identifier in a config file, else
// use -/+D <identifier> at the command line, without first declaring that
// identifier in defines.cfg, that will generate an error
// 
// per-machine #if directives take precedence over define directives;
// so, for example,
// 
// #if linux
//      [ aaa ... ]
// #ifdef paranoid
//      [ bbb ... ]
// #endifdef
//      [ ccc ... ]
// #endif
// 
// would have the aaa, bbb & ccc stuff appear only on linux machines, and
// the bbb stuff only if paranoid is set (defined); on the other hand,
// with
// 
// #ifdef paranoid
//      [ aaa ... ]
// #if linux
//      [ bbb ... ]
// #endif
//      [ ccc ... ]
// #endifdef
// 
// the aaa & ccc stuff would appear on all machines, if paranoid is set,
// while the bbb stuff would appear only on linux machines with paranoid
// defined
// 
// this, however, would lead to error on non-linux systems:
// 
// #ifdef paranoid
//      [ aaa ... ]
// #if linux
//      [ bbb ... ]
// #endifdef
//      [ ccc ... ]
// #endif
// 
// because there would be no concluding #endifdef on those machines
// 
// observe that you can set/unset defines on a per-machine basis in the
// defines.cfg file, for example
// 
// #if mailserver
// secure       TRUE
// #else
// secure       FALSE
// #endif
// 
// or, alternatively and equivalently,
// 
// secure
// #if mailserver
//              TRUE
// #else
//              FALSE
// #endif
// 
// finally, remember that use of defines is entirely optional; it is not
// even necessary to have any defines.cfg file at all (although if you
// use -/+D or #def or ... elsewhere without a defines.cfg, this too will
// generate an error)
// 
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

test            FALSE   // set to TRUE when we want to run PIKT in test
                        // mode (e.g., after a major program revision),
                        // or when we are testing a new alarm/script

///////////////////////////////////////////////////////////////////////////////

debug
#if testsys
                TRUE
#else
                FALSE   // by default, don't run any debug code
#endif

///////////////////////////////////////////////////////////////////////////////

doexec
#if newsys
                FALSE   // if FALSE, don't exec any commands or take any
                        // actions that might change anything; output
                        // messages (logs, etc.) or take other innocuous
                        // actions only; you might unset doexec if you are
                        // checking out PIKT for the first time and want
                        // to proceed cautiously, or if you have just
                        // set up PIKT on a new machine and want to check
                        // out the config for that machine first
#else
                TRUE
#endif

///////////////////////////////////////////////////////////////////////////////

verbose
#if newsys
                TRUE    // if TRUE, output mail about routine execs, such as
                        // "deleting <this>" or "truncating <that>"; usually
                        // set this to FALSE; but occasionally set this to
                        // TRUE to get a fuller report of all that PIKT is
                        // doing silently, behind-the-scenes
#else
                FALSE
#endif

///////////////////////////////////////////////////////////////////////////////

stifle          
#if misscritsys | systems | newsys
                FALSE   // by default, limit how often certain relatively
                        // unimportant warnings get sent; from time to time,
                        // undefine stifle so that we may get a complete set
                        // of warnings; note that, in the sample alarms.cfg,
                        // one technique for stifling messages is by
                        // comparing a current value with a history value
                        // (e.g., #cap > %cap); we have not wrapped
                        // '#ifdef stifle' around all such constructs; doing
                        // so is left as an exercise for the reader
#else
                TRUE
#endif

///////////////////////////////////////////////////////////////////////////////

setup           FALSE   // if we are doing initial setup

///////////////////////////////////////////////////////////////////////////////

holiday         FALSE   // are we in a holiday period (e.g., xmas)?
                        // set this to TRUE when entering a holiday period,
                        // then re-enable all alerts to set up special
                        // restricted holiday schedule; after the holiday,
                        // set back to FALSE, then re-enable (hence reschedule)
                        // all alerts

///////////////////////////////////////////////////////////////////////////////

deftmp          FALSE   // for saving global define value temporarily
deftmp1         FALSE
deftmp2         FALSE

///////////////////////////////////////////////////////////////////////////////

dst                     // TRUE if Daylight Savings Time now applies,
                        // FALSE otherwise
                        // at our site, `date +%Z` returns "CDT" if DST is in
                        // effect, "CST" otherwise; substitute your own time
                        // zone string as needed
#verbatim <defines/dst_defines.cfg> [if [ `date +%Z` = "CDT" ]; then echo TRUE;
                                     else echo FALSE; fi]

///////////////////////////////////////////////////////////////////////////////

#include <defines/security_defines.cfg>

///////////////////////////////////////////////////////////////////////////////

page
#if newsys
                FALSE   // keep silent
#else
                TRUE    // issue pages
#endif
#pexec "/dev/null" [if =wednesday =mailmsg1(review the defines.cfg:page setting,
                    REMINDER, =piktadmin) fi]

#ifdef test
#  setdef page = FALSE
#endifdef

#ifdef paranoid
#  setdef page = TRUE
#endifdef

///////////////////////////////////////////////////////////////////////////////

[For more examples, see Samples.]


Home | FAQ | News | Intro | Samples | Tutorial | Reference | Software | Authors | Licensing | SiteSearch
Links | SiteIndex | Pikt-Users | Pikt-Workers | Contribute | ContactUs | Top of Page
Page best viewed at 1024x768.   Page last updated 2005-06-22.
This site is PIKT® powered.
PIKT® is a registered trademark of the University of Chicago.
Copyright © 1998-2005 Robert Osterlund.  All rights reserved.

Computer Books at Amazon.com

Perl Debugger Pocket Reference
Perl Debugger Pocket Reference

Higher-Order Perl: Transforming Programs with Programs
Higher-Order Perl: Transforming Programs with Programs

Python Cookbook
Python Cookbook

The Art of UNIX Programming
The Art of UNIX Programming

Perl CD Bookshelf
Perl CD Bookshelf