GithubHelp home page GithubHelp logo

lucy-charmonizer's Introduction

NAME

    Charmonizer - Use C to configure C.

OVERVIEW

    Charmonizer is a tool for probing, normalizing, and testing the build
    environment provided by a C compiler and an operating system.  It works by
    attempting to compile lots of little programs and analyzing the output
    from those that build successfully.  `
    
    Charmonizer modules are ordinary ANSI C files, and the configuration
    application that you write is an ordinary C executable.  
    
REQUIREMENTS

    Charmonizer's only prerequisite is an ISO C90-compliant compiler which can
    be invoked from C via the system() command.  The build system assumes you
    have a corresponding make or nmake executable.  Folks hacking on the Charmonizer
    source need to be aware of  ../devel/bin/gen_charmonizer_makefiles.pl which
    generates the makefiles from the src tree.
    
PROBING

        #include "Charmonizer/Probe.h"
        #include "Charmonizer/Probe/Integers.h"
        #include "Charmonizer/Probe/LargeFiles.h"

        int main() 
        {
            /* Tell Charmonizer about your OS and compiler. */
            chaz_Probe_init("cc", "-I/usr/local/include", NULL);
            
            /* Run desired Charmonizer modules. */
            chaz_Integers_run();
            chaz_LargeFiles_run();

            /* Tear down. */
            chaz_Probe_clean_up();

            return 0;
        }

    The purpose of Charmonizer's probing toolset is to generate a single C
    header file called "charmony.h", gathering together information that is
    ordinarily only available at runtime and assigning predictable names to
    functionality which may go by many different aliases on different systems.

    One header file, "Charmonizer/Probe.h", provides the primary interface and
    a suite of topically oriented modules -- e.g.
    "Charmonizer/Probe/LargeFiles.h", "Charmonizer/Probe/Integers.h" -- do the
    heavy lifting.  Each topical module exports 1 main function,
    ModuleName_run(), which runs all the relevant compiler probes and appends
    output to charmony.h.  As you run each module in turn, "charmony.h" gets
    built up incrementally; it can be further customized by writing your own
    content to it at any point.

TESTING 

    #include "Charmonizer/Test.h"
    #include "Charmonizer/Test/Integers.h"
    #include "Charmonizer/Test/Largefile.h"
    #include "MyTest.h"

    int main() {
        int all_tests_pass = 0;

        /* Set up. */
        chaz_Test_init();
        chaz_Integers_init_test();
        chaz_LargeFiles_init_test();
        MyTest_init_test();

        /* Run all the tests */
        all_tests_pass = chaz_Test_run_all_tests();

        /* Tear down. */
        chaz_Test_clean_up();

        return all_tests_pass;
    }

    Charmonizer provides both a general test harness for writing your own
    tests, and a corresponding test module for each probing module. The stock
    tests can be found within "Charmonizer/Test" -- e.g. at
    "Charmonizer/Test/Integers.h".  
    
    The stock tests require access to "charmony.h".  Not all tests will pass
    in every environment, and the expectation is that you will append
    charmony.h with ifdef tests as necessary to draw in supplementary code:

        #ifndef HAS_DIRENT_H
          #include "my/dirent.h"
        #endif

    Charmonizer restricts itself to working with what it finds, and
    does not supply a library of compatibility functions.

C NAMESPACE

    The "charmony.h" header prepends a prefix onto most of the symbols it
    exports: either "chy_" or "CHY_".  For public code, such as header files,
    this helps avoid namespace collisions.  For private code, the prefixes can
    be stripped via the CHY_USE_SHORT_NAMES symbol.

        #define CHY_USE_SHORT_NAMES
        #ifdef HAS_LONG_LONG   /* alias for CHY_HAS_LONG_LONG */

FILESYSTEM NAMESPACE

    Charmonizer creates a number of temporary files within the current working
    directory while it runs.  These files all begin with "_charm".

lucy-charmonizer's People

Contributors

mikemccand avatar nwellnhof avatar rectang avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.