Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Python, Lua, Tcl, C and C++ training - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Java, Ruby, MySQL and Linux / Tomcat systems
 
Scons - a build system in Python - building hello world

Scons ...

It's a build system!!

Like Make (if you're familiar with that) or Ant (if you know that!)

The initial problem being solved ...

You have a whole lot of different development files (source files, libraries, manual text, configuration, etc) and a whole load of steps you use to convert those files - perhaps via intermediates - to executable programs, webpages, etc.. An you have a whole load of tests you may want to run too. A batch file doesn't 'cut' it as shell really doesn't have the facilities, and there's a lot of checking that needs to be done to see whether steps of a very long build actually need to be done every time when you've only changed one element of the source.

Add to the above the need to build for different operating systems, for different environments, to packages the results for distribution and add a signature to them, and to work with source code control systems ... and there's you problem.

Features (text from the Scons site - they know what they want to sell!!)

• Configuration files are Python scripts--use the power of a real programming language to solve build problems.
• Reliable, automatic dependency analysis built-in for C, C++ and Fortran--no more "make depend" or "make clean" to get all of the dependencies. Dependency analysis is easily extensible through user-defined dependency Scanners for other languages or file types.
• Built-in support for C, C++, D, Java, Fortran, Yacc, Lex, Qt and SWIG, and building TeX and LaTeX documents. Easily extensible through user-defined Builders for other languages or file types.
• Building from central repositories of source code and/or pre-built targets.
• Built-in support for fetching source files from SCCS, RCS, CVS, BitKeeper and Perforce.
• Built-in support for Microsoft Visual Studio .NET and past Visual Studio versions, including generation of .dsp, .dsw, .sln and .vcproj files.
• Reliable detection of build changes using MD5 signatures; optional, configurable support for traditional timestamps.
• Improved support for parallel builds--like make -j but keeps N jobs running simultaneously regardless of directory hierarchy.
• Integrated Autoconf-like support for finding #include files, libraries, functions and typedefs.
• Global view of all dependencies--no more multiple build passes or reordering targets to build everything.
• Ability to share built files in a cache to speed up multiple builds--like ccache but for any type of target file, not just C/C++ compilation.
• Designed from the ground up for cross-platform builds, and known to work on Linux, other POSIX systems (including AIX, *BSD systems, HP/UX, IRIX and Solaris), Windows NT, Mac OS X, and OS/2

Installation (lets do it easy!)

Download, unpack the .tar.gz and
  sudo python setup.py install

The latest version (2.5.0) requires Python 2.7. "As we move towards Python 3" they say! - October 2016

http://scons.org/documentation.html

Hello Scons world

Building a "do nothing really" SConstruct file:

  WomanWithCat:q3 grahamellis$ vi SConstruct
  WomanWithCat:q3 grahamellis$ cat SConstruct
  # This is my Scons build file demo
  
  print "hello world"
  WomanWithCat:q3 grahamellis$ scons
  scons: Reading SConscript files ...
  hello world
  scons: done reading SConscript files.
  scons: Building targets ...
  scons: `.' is up to date.
  scons: done building targets.
  WomanWithCat:q3 grahamellis$ ls
  SConstruct
  WomanWithCat:q3 grahamellis$


Building a "make a program called hello from hello.c" construct file

  WomanWithCat:q3 grahamellis$ cat hello.c
  
  #include <stdio.h>
  
  int main() {
    printf("Hello World!\n");
  }
  
  WomanWithCat:q3 grahamellis$ cat scons_1
  
  Program('hello.c')
  
  WomanWithCat:q3 grahamellis$ scons -f scons_1
  scons: Reading SConscript files ...
  scons: done reading SConscript files.
  scons: Building targets ...
  gcc -o hello.o -c hello.c
  scons: done building targets.
  
  WomanWithCat:q3 grahamellis$ scons -f scons_1
  scons: Reading SConscript files ...
  scons: done reading SConscript files.
  scons: Building targets ...
  scons: `.' is up to date.
  scons: done building targets.
  
  WomanWithCat:q3 grahamellis$ ls
  SConstruct hello hello.c hello.o scons_1
  
  WomanWithCat:q3 grahamellis$ ./hello
  Hello World!


Building a program with multiple sources

  WomanWithCat:q3 grahamellis$ cat scons_2
  
  result = "mealorder"
  Program(result,['today.c','meals.c','snacks.c'])
  
  WomanWithCat:q3 grahamellis$
  
  
  WomanWithCat:q3 grahamellis$ cat today.c
  #include <stdio.h>
  
  #include "yum.h"
  
  int main() {
    printf("Rise and shine\n");
    breakfast();
    morning_coffee();
    lunch();
    afternoon_tea();
    dinner();
    supper();
    printf("Time for a kip\n");
    }
  WomanWithCat:q3 grahamellis$ cat yum.h
  void breakfast();
  void morning_coffee();
  void lunch();
  void afternoon_tea();
  void dinner();
  void supper();
  WomanWithCat:q3 grahamellis$ cat meals.c
  #include <stdio.h>
  
  void breakfast(){
    printf("breakfast\n");
    }
  
  void lunch(){
    printf("lunch\n");
    }
  
  void dinner(){
    printf("dinner\n");
    }
  WomanWithCat:q3 grahamellis$ cat snacks.c
  #include <stdio.h>
  
  void morning_coffee(){
    printf("morning coffee\n");
    }
  
  void supper(){
    printf("nightcap\n");
    }
  
  void afternoon_tea(){
    printf("afternoon tea\n");
    }
  WomanWithCat:q3 grahamellis$
  
  WomanWithCat:q3 grahamellis$ scons -f scons_2
  scons: Reading SConscript files ...
  scons: done reading SConscript files.
  scons: Building targets ...
  gcc -o today.o -c today.c
  gcc -o meals.o -c meals.c
  gcc -o snacks.o -c snacks.c
  gcc -o mealorder today.o meals.o snacks.o
  scons: done building targets.
  WomanWithCat:q3 grahamellis$ scons -f scons_2
  scons: Reading SConscript files ...
  scons: done reading SConscript files.
  scons: Building targets ...
  scons: `.' is up to date.
  scons: done building targets.
  WomanWithCat:q3 grahamellis$ vi today.c
  WomanWithCat:q3 grahamellis$ scons -f scons_2
  scons: Reading SConscript files ...
  scons: done reading SConscript files.
  scons: Building targets ...
  gcc -o today.o -c today.c
  gcc -o mealorder today.o meals.o snacks.o
  scons: done building targets.
  WomanWithCat:q3 grahamellis$ ./mealorder
  Rise and shine
  breakfast
  morning coffee
  morning coffee
  lunch
  afternoon tea
  afternoon tea
  dinner
  nightcap
  Time for a kip
  WomanWithCat:q3 grahamellis$

And here ends what we cover on this day ;-)
(written 2016-10-29)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y117 - Python - Already written modules
  [4710] Searching a Json or XML structure for a specific key / value pair in Python - (2016-10-30)
  [4697] Month, Day, Year number to day of week and month names in Python - English and Swedish - (2016-06-23)
  [4696] Programming with random numbers - yet re-using the same values for testing - (2016-06-22)
  [4452] Binary data handling - Python and Perl - (2015-03-09)
  [4441] Reading command line parameters in Python - (2015-02-23)
  [4086] Cacheing class for Python - using a local SQLite database as a key/value store - (2013-05-14)
  [4085] JSON from Python - first principles, easy example - (2013-05-13)
  [3479] Practical Extraction and Reporting - using Python and Extreme Programming - (2011-10-14)
  [3465] How can I do an FTP transfer in Python? - (2011-10-05)
  [3442] A demonstration of how many Python facilities work together - (2011-09-16)
  [2931] Syncronise - software, trains, and buses. Please! - (2010-08-22)
  [2890] Dates and times in Python - (2010-07-27)
  [2506] Good example of recursion in Python - analyse an RSS feed - (2009-11-18)
  [2020] Learning Python - many new example programs - (2009-01-31)

Y110 - Python - File Handling
  [4717] with in Python - examples of use, and of defining your own context - (2016-11-02)
  [4663] Easy data to object mapping (csv and Python) - (2016-03-24)
  [4593] Command line parameter handling in Python via the argparse module - (2015-12-08)
  [4451] Running an operating system command from your Python program - the new way with the subprocess module - (2015-03-06)
  [4438] Loving programming in Python - and ready to teach YOU how - (2015-02-22)
  [3764] Shell, Awk, Perl of Python? - (2012-06-14)
  [3558] Python or Lua - which should I use / learn? - (2011-12-21)
  [3083] Python - fresh examples from recent courses - (2010-12-11)
  [2870] Old prices - what would the equivalent price have been in 1966? - (2010-07-14)
  [2282] Checking robots.txt from Python - (2009-07-12)
  [2011] Conversion of OSI grid references to Eastings and Northings - (2009-01-28)
  [1442] Reading a file multiple times - file pointers - (2007-11-23)
  [183] The elegance of Python - (2005-01-19)
  [114] Relative or absolute milkman - (2004-11-10)

A158 -
A509 - Web Application Deployment - Java - Ant build tool
  [3155] Rake - a build system using code written in Ruby - (2011-02-03)
  [694] Ant and Make - (2006-04-22)


Back to
Some gems from an introduction to Python
Previous and next
or
Horse's mouth home
Forward to
Some gems from Intermediate Python
Some other Articles
A reminder of the key issues to consider in moving from Python 2 to Python 3
Convering from Python 2 to Python 3 - an update, and the 2to3 utility
Some gems from Intermediate Python
Scons - a build system in Python - building hello world
Some gems from an introduction to Python
Melksham trial train service is to be made permanent
Course dates - from October 2016 to December 2017
Three months in community rail pictures
What do people use the bus for in Wiltshire - survey interim results.
4754 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2017: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/4708_Sco ... world.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat