Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
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
A509 - Web Application Deployment - Java - Ant build tool
  [694] Ant and Make - (2006-04-22)
  [3155] Rake - a build system using code written in Ruby - (2011-02-03)

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

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


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.
4759 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., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
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: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb