Compare commits

...

10 Commits

Author SHA1 Message Date
8ed6479c2d stray files 2021-04-25 12:23:20 -05:00
d4699042d1 install ex 3 2021-04-25 12:17:20 -05:00
Bassem Girgis
49ce99e992 change comments style 2017-09-27 01:20:27 -05:00
Bassem Girgis
912f188eb3 Get windows build working 2017-09-27 01:10:44 -05:00
Bassem Girgis
b2c1289afe Remove unneeded file 2017-09-27 00:58:40 -05:00
Bassem Girgis
799fc1a2b1 Finish 3rd example 2017-09-27 00:56:48 -05:00
Bassem Girgis
82a38a0c1f Edit presentation 2017-09-26 23:45:04 -05:00
Bassem Girgis
a90941799f Edit presentation 2017-09-26 23:37:02 -05:00
Bassem Girgis
0393cd381b Initial commit 2017-09-26 23:34:25 -05:00
Bassem Girgis
e854943328 Initial commit 2017-09-26 23:08:25 -05:00
26 changed files with 862 additions and 1 deletions

96
.clang-format Normal file
View File

@@ -0,0 +1,96 @@
Language: Cpp
# BasedOnStyle: Google
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: true
AlignConsecutiveDeclarations: false
AlignEscapedNewlinesLeft: false
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: TopLevelDefinitions
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true
BinPackArguments: false
BinPackParameters: false
BreakBeforeBraces : Custom
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
BeforeCatch: true
BeforeElse: true
IndentBraces: false
BreakBeforeBinaryOperators: None
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
IncludeCategories:
- Regex: '^<.*\.h>'
Priority: 1
- Regex: '^<.*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: false
IndentWidth: 2
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: false
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Left
ReflowComments: true
SortIncludes: true
SpaceAfterCStyleCast: true
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 2
UseTab: Never

64
.cproject Normal file
View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.1891867734">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.1891867734" moduleId="org.eclipse.cdt.core.settings" name="Release">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.1891867734" name="Release" parent="cdt.managedbuild.config.gnu.cross.exe.release">
<folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.1891867734." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.1200869658" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.704470878" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/>
<builder buildPath="${workspace_loc:/scons}/Release" id="cdt.managedbuild.builder.gnu.cross.1496558127" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.builder.gnu.cross"/>
<tool id="cdt.managedbuild.tool.gnu.cross.c.compiler.2041788835" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler">
<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.100898372" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
<option id="gnu.c.compiler.option.debugging.level.102916161" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.38314126" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1483936250" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler">
<option id="gnu.cpp.compiler.option.optimization.level.130197279" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
<option id="gnu.cpp.compiler.option.debugging.level.822637018" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1554915344" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cross.c.linker.899242295" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/>
<tool id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1567746957" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker">
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.787672451" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cross.archiver.78792473" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/>
<tool id="cdt.managedbuild.tool.gnu.cross.assembler.1975717274" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.149268296" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="scons.cdt.managedbuild.target.gnu.cross.exe.320713590" name="Executable" projectType="cdt.managedbuild.target.gnu.cross.exe"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.release.1891867734;cdt.managedbuild.config.gnu.cross.exe.release.1891867734.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1483936250;cdt.managedbuild.tool.gnu.cpp.compiler.input.1554915344">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.release.1891867734;cdt.managedbuild.config.gnu.cross.exe.release.1891867734.;cdt.managedbuild.tool.gnu.cross.c.compiler.2041788835;cdt.managedbuild.tool.gnu.c.compiler.input.38314126">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
</cproject>

41
.gitignore vendored Normal file
View File

@@ -0,0 +1,41 @@
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# scons
.sconsign.dblite
helloworld*
env.txt
build/
install/

33
.project Normal file
View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>scons</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.python.pydev.PyDevBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>org.python.pydev.pythonNature</nature>
</natures>
</projectDescription>

5
.pydevproject Normal file
View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
</pydev_project>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="cdt.managedbuild.config.gnu.cross.exe.release.1891867734" name="Release">
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1327539654838326403" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
</extension>
</configuration>
</project>

View File

@@ -1,2 +1,4 @@
# scons-presentation
A presentation titled "SCons; A Python-Based Build System"
A talk titled "SCons; A Python-Based Build System"

124
execEx/01/SConstruct Normal file
View File

@@ -0,0 +1,124 @@
Help("""
This is the first scons example. In this example we see a very simple way
of calling scons to create an executable
>> ls
main.cpp SConstruct
>> scons -h (get this help message)
>> scons -H (get scons command help)
usage: scons [OPTION] [TARGET] ...
SCons Options:
-b, -d, -e, -m, -S, -t, -w, --environment-overrides, --no-keep-going,
--no-print-directory, --print-directory, --stop, --touch
Ignored for compatibility.
-c, --clean, --remove Remove specified targets and dependencies.
-C DIR, --directory=DIR Change to DIR before doing anything.
--cache-debug=FILE Print CacheDir debug info to FILE.
--cache-disable, --no-cache
Do not retrieve built targets from CacheDir.
--cache-force, --cache-populate
Copy already-built targets into the CacheDir.
--cache-readonly Do not update CacheDir with built targets.
--cache-show Print build actions for files from CacheDir.
--config=MODE Controls Configure subsystem: auto, force,
cache.
-D Search up directory tree for SConstruct,
build all Default() targets.
--debug=TYPE Print various types of debugging information:
count, duplicate, explain, findlibs, includes,
memoizer, memory, objects, pdb, prepare,
presub, stacktrace, time.
--diskcheck=TYPE Enable specific on-disk checks.
--duplicate=DUPLICATE Set the preferred duplication methods. Must be
one of hard-soft-copy, soft-hard-copy,
hard-copy, soft-copy, copy
-f FILE, --file=FILE, --makefile=FILE, --sconstruct=FILE
Read FILE as the top-level SConstruct file.
-h, --help Print defined help message, or this one.
-H, --help-options Print this message and exit.
-i, --ignore-errors Ignore errors from build actions.
-I DIR, --include-dir=DIR Search DIR for imported Python modules.
--implicit-cache Cache implicit dependencies
--implicit-deps-changed Ignore cached implicit dependencies.
--implicit-deps-unchanged Ignore changes in implicit dependencies.
--interact, --interactive Run in interactive mode.
-j N, --jobs=N Allow N jobs at once.
-k, --keep-going Keep going when a target can't be made.
--max-drift=N Set maximum system clock drift to N seconds.
--md5-chunksize=N Set chunk-size for MD5 signature computation to
N kilobytes.
-n, --no-exec, --just-print, --dry-run, --recon
Don't build; just print commands.
--no-site-dir Don't search or use the usual site_scons dir.
--profile=FILE Profile SCons and put results in FILE.
-q, --question Don't build; exit status says if up to date.
-Q Suppress "Reading/Building" progress messages.
--random Build dependencies in random order.
-s, --silent, --quiet Don't print commands.
--site-dir=DIR Use DIR instead of the usual site_scons dir.
--stack-size=N Set the stack size of the threads used to run
jobs to N kilobytes.
--taskmastertrace=FILE Trace Node evaluation to FILE.
--tree=OPTIONS Print a dependency tree in various formats: all,
derived, prune, status.
-u, --up, --search-up Search up directory tree for SConstruct,
build targets at or below current directory.
-U Search up directory tree for SConstruct,
build Default() targets from local SConscript.
-v, --version Print the SCons version number and exit.
--warn=WARNING-SPEC, --warning=WARNING-SPEC
Enable or disable warnings.
-Y REPOSITORY, --repository=REPOSITORY, --srcdir=REPOSITORY
Search REPOSITORY for source and target files.
>> scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o main.o -c main.cpp
g++ -o helloworld main.o
scons: done building targets.
>> scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
>> ls -a
total 32
drwxr-xr-x 2 brgirgis users 96 Sep 26 22:50 ./
drwxr-xr-x 5 brgirgis users 36 Sep 26 22:44 ../
-rwxr-xr-x 1 brgirgis users 13176 Sep 26 22:50 helloworld*
-rw-r--r-- 1 brgirgis users 94 Sep 26 22:20 main.cpp
-rw-r--r-- 1 brgirgis users 2728 Sep 26 22:50 main.o
-rw-r--r-- 1 brgirgis users 1749 Sep 26 22:50 .sconsign.dblite
-rw-r--r-- 1 brgirgis users 400 Sep 26 22:50 SConstruct
>> scons -c
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Cleaning targets ...
Removed main.o
Removed helloworld
scons: done cleaning targets.
>> ls -a
total 12
drwxr-xr-x 2 brgirgis users 64 Sep 26 22:53 ./
drwxr-xr-x 5 brgirgis users 36 Sep 26 22:44 ../
-rw-r--r-- 1 brgirgis users 94 Sep 26 22:20 main.cpp
-rw-r--r-- 1 brgirgis users 1759 Sep 26 22:51 .sconsign.dblite
-rw-r--r-- 1 brgirgis users 1178 Sep 26 22:54 SConstruct
""")
Program('helloworld', 'main.cpp')

10
execEx/01/main.cpp Normal file
View File

@@ -0,0 +1,10 @@
#include <iostream>
int
main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}

75
execEx/02/SConstruct Normal file
View File

@@ -0,0 +1,75 @@
Help("""
This is the second scons example. In this example we explore more options in
scons. Once you start doing anything useful with scons other than showing
how simple scons works, you will have to create an environment to have more
control on the build.
One can "Dump()" the environment to see all the underlying details. We can
also compare between Linux and windows environments.
>> ls
foo.cpp foo.hpp main.cpp SConstruct
>> scons
scons: Reading SConscript files ...
------------------>starting
------------------>ending
scons: done reading SConscript files.
scons: Building targets ...
g++ -o foo.o -c foo.cpp
g++ -o main.o -c main.cpp
g++ -o helloworld main.o foo.o
scons: done building targets.
>> ls -a
total 68
drwxr-xr-x 2 brgirgis users 154 Sep 26 23:04 ./
drwxr-xr-x 5 brgirgis users 36 Sep 26 22:44 ../
-rw-r--r-- 1 brgirgis users 21096 Sep 26 23:04 env.txt
-rw-r--r-- 1 brgirgis users 48 Sep 26 22:42 foo.cpp
-rw-r--r-- 1 brgirgis users 109 Sep 26 22:40 foo.hpp
-rw-r--r-- 1 brgirgis users 1256 Sep 26 23:03 foo.o
-rwxr-xr-x 1 brgirgis users 13288 Sep 26 23:03 helloworld*
-rw-r--r-- 1 brgirgis users 117 Sep 26 22:41 main.cpp
-rw-r--r-- 1 brgirgis users 2872 Sep 26 23:03 main.o
-rw-r--r-- 1 brgirgis users 2441 Sep 26 23:04 .sconsign.dblite
-rw-r--r-- 1 brgirgis users 1348 Sep 26 23:04 SConstruct
>> scons --tree=all helloworld
scons: Reading SConscript files ...
------------------>starting
------------------>ending
scons: done reading SConscript files.
scons: Building targets ...
scons: `helloworld' is up to date.
+-helloworld
+-main.o
| +-main.cpp
| +-foo.hpp
| +-/usr/bin/g++
+-foo.o
| +-foo.cpp
| +-foo.hpp
| +-/usr/bin/g++
+-/usr/bin/g++
scons: done building targets.
""")
import os
print('------------------>starting')
env = Environment(ENV=os.environ)
open('env.txt', 'w').write(env.Dump())
env.Program(target='helloworld',
source=['main.cpp', 'foo.cpp'])
print('------------------>ending')

8
execEx/02/foo.cpp Normal file
View File

@@ -0,0 +1,8 @@
#include "foo.hpp"
int
foo()
{
return 32;
}

6
execEx/02/foo.hpp Normal file
View File

@@ -0,0 +1,6 @@
#ifndef SRC_EXECEX_02_FOO_HPP_
#define SRC_EXECEX_02_FOO_HPP_
int foo();
#endif // SRC_EXECEX_02_FOO_HPP_

12
execEx/02/main.cpp Normal file
View File

@@ -0,0 +1,12 @@
#include "foo.hpp"
#include <iostream>
int
main()
{
std::cout << "foo = " << foo() << std::endl;
return 0;
}

6
execEx/03/SConscript Normal file
View File

@@ -0,0 +1,6 @@
Import('env')
prog = env.Program(target='helloworld',
source=['main.cpp', 'foo.cpp'])
env.Install(env.installDir, prog)

92
execEx/03/SConstruct Normal file
View File

@@ -0,0 +1,92 @@
import os
Help("""
This is the third scons example. In this example we see more things that we
can do with scons. Namely: arguments, variant build directory, and install.
One can add the help for the expected build arguments using this help
function call
DEBUG=1,0 - enable debug build, default 1
ASSERT=1,0 - enable run time assertion, default 1 in DEBUG=1 and 0 otherwise
COMPILER=compilerName - compiler name
BUILDNAME=buildName - build name
""")
"""
Processing arguments
"""
debugArg = ARGUMENTS.get('DEBUG', '1')
if debugArg not in ['0', '1']:
raise RuntimeError('Check the DEBUG input argument.')
assertArg = '1' if debugArg == '1' else ARGUMENTS.get('ASSERT', '0')
if assertArg not in ['0', '1']:
raise RuntimeError('Check the ASSERT input argument.')
compilerName = ARGUMENTS.get('COMPILER', '')
buildName = ARGUMENTS.get('BUILDNAME', 'default')
"""
Initializing the environment
"""
env = Environment(ENV=os.environ,
CC='clang',
CXX='clang++')
ccFlags = []
linkFlags = []
if compilerName == 'gcc':
env.Replace(CC='gcc',
CXX='g++')
ccFlags = ["-std=c++1z", "-Wall", "-Wuninitialized", "-Wunused", "-Wconversion", "-fpermissive"]
if debugArg == '0':
ccFlags += ["-O3"]
linkFlags = ["-Wl,--export-dynamic"]
else:
ccFlags += ["-g", "-O0"]
linkFlags = ["-g"]
else:
ccFlags = ["-std=c++1z", "-Wall", "-Wuninitialized", "-Wunused", "-Wconversion", "-fpermissive"]
if debugArg == '0':
ccFlags += ["-O3"]
linkFlags = ["-Wl,--export-dynamic"]
else:
ccFlags += ["-g", "-O0"]
linkFlags = ["-g"]
env['CPPFLAGS'] = ccFlags
env['LINKFLAGS'] = linkFlags
cppDefine = {}
if assertArg == '0':
cppDefine['NDEBUG'] = None
env['CPPDEFINES'] = cppDefine
"""
Paths setup
"""
env.srcDir = Dir('#').abspath
env.buildDir = os.path.join(env.srcDir, 'build', buildName)
env.installDir = os.path.join(env.srcDir, 'install', buildName)
VariantDir(variant_dir=env.buildDir,
src_dir=env.srcDir,
duplicate=0)
Install(env.installDir, os.path.join(env.srcDir, 'bin'))
Alias('install', env.installDir)
Default('install')
"""
Add build targets
"""
SConscript(os.path.join(env.buildDir, 'SConscript'),
exports={'env' : env})

1
execEx/03/bin/badlink Symbolic link
View File

@@ -0,0 +1 @@
./bad

1
execEx/03/bin/link.sh Symbolic link
View File

@@ -0,0 +1 @@
./script.sh

0
execEx/03/bin/script.sh Executable file
View File

8
execEx/03/foo.cpp Normal file
View File

@@ -0,0 +1,8 @@
#include "foo.hpp"
int
foo()
{
return 32;
}

6
execEx/03/foo.hpp Normal file
View File

@@ -0,0 +1,6 @@
#ifndef SRC_EXECEX_02_FOO_HPP_
#define SRC_EXECEX_02_FOO_HPP_
int foo();
#endif // SRC_EXECEX_02_FOO_HPP_

12
execEx/03/main.cpp Normal file
View File

@@ -0,0 +1,12 @@
#include "foo.hpp"
#include <iostream>
int
main()
{
std::cout << "foo = " << foo() << std::endl;
return 0;
}

9
execEx/04/SConstruct Normal file
View File

@@ -0,0 +1,9 @@
env = Environment(tools=['default', 'cpythongen'])
hello = File('helloworld.py')
env.InstallPython('bin', hello)
env.Alias('install', 'bin')

View File

@@ -0,0 +1,229 @@
"""SCons.Tool.cpython
Tool-specific initialization for Python binary builder.
There normally shouldn't be any need to import this module directly.
It will usually be imported through the generic SCons.Tool.Tool()
selection method.
"""
#
# Copyright (c) 2001-7,2010 The SCons Foundation
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
__revision__ = "src/engine/SCons/Tool/python.py 3263 2008/07/31 13:50:51 MatiGruca"
import os
import sys
import SCons.Action
import SCons.Builder
import SCons.Errors
##########################################################################
# Create Python builder
def createPythonBuilder(env):
"""This is a utility function that creates the InstallPython
Builder in an Environment if it's not there already.
If it's there already, we return the existing one.
This builder is based on Install/InstallAs methods. It makes use
of those builder's functions: installFunc(), and
add_targets_to_INSTALLED_FILES()).
"""
try:
PythonInstallBuilder = env['BUILDERS']['InstallPython']
except KeyError:
from SCons.Tool.install import installFunc, add_targets_to_INSTALLED_FILES
installpython_action = SCons.Action.Action(installFunc, '$CPYTHON_PYCOMSTR')
PythonInstallBuilder = SCons.Builder.Builder(
action = installpython_action,
src_suffix = '$CPYTHON_SUFFIX',
target_factory = env.fs.Entry,
source_factory = env.fs.Entry,
multi = 1,
emitter = [ add_targets_to_INSTALLED_FILES ],
name = 'InstallPythonBuilder')
return PythonInstallBuilder
def InstallPython(env, target=None, source=None, dir=None, **kw):
"""InstallPython creates .pyc or .pyo files for .py source files
and adds them to the list of targets along with the source files.
They are later copied to the destination (target) directory.
InstallPython takes a target (destination) directory as its first
argument and a list of source files/directories as a second argument.
InstallPython returns the list of target files to copy to the
target directory.
"""
if target and dir:
raise SCons.Errors.UserError, "Both target and dir defined for InstallPython(), only one may be defined."
if not dir:
dir=target
try:
dnodes = env.arg2nodes(dir, env.fs.Dir)
except TypeError:
raise SCons.Errors.UserError, "Target `%s' of Install() is a file, but should be a directory. Perhaps you have the InstallPython() arguments backwards?" % str(dir)
sources = env.arg2nodes(source, env.fs.Entry)
tgt = []
try:
import py_compile
except ImportError:
raise SCons.Errors.InternalError, "Couldn't import py_compile module"
# import `compileall` module only if there is a dir in sources list
import SCons.Node
dir_in_sources = [isinstance(i, SCons.Node.FS.Dir) for i in sources]
if True in dir_in_sources:
try:
import compileall
except ImportError:
raise SCons.Errors.InternalError, "Couldn't import compileall module"
import glob
compile_pyc = True
try:
if int(env.subst('$CPYTHON_PYC')) == 0:
compile_pyc = False
except ValueError:
pass
if compile_pyc:
CPYTHON_TARGETSUFFIX = 'c'
else:
CPYTHON_TARGETSUFFIX = 'o'
PIB = PythonInstallBuilder
for dnode in dnodes:
for src in sources:
# add *.py and *.pyc files from a directory to tgt list
if isinstance(src, SCons.Node.FS.Dir) and compile_pyc:
compileall.compile_dir(str(src), maxlevels = 0, quiet = 1)
globpath = src.path + os.sep + '*.py'
py_and_pycs = glob.glob(globpath) + glob.glob(globpath+'c')
for filename in py_and_pycs:
target = env.fs.Entry('.'+os.sep+filename, dnode)
tgt.extend(apply(PIB, (env, target, filename), kw))
# add *.py and *.pyo files from a directory to tgt list
elif isinstance(src, SCons.Node.FS.Dir):
to_compile = []
py_files = glob.glob(src.path + os.sep + '*.py')
for py_file in py_files:
to_compile.append(py_file)
target_path = '.' + os.sep + py_file
# add '.py' file to tgt list
py_src = env.fs.Entry(py_file)
py_tgt = env.fs.Entry(target_path, dnode)
tgt.extend(apply(PIB, (env, py_tgt, py_src), kw))
# add '.pyo' file to tgt list
pyo_src = env.fs.Entry(py_file + CPYTHON_TARGETSUFFIX)
pyo_tgt = env.fs.Entry(target_path + CPYTHON_TARGETSUFFIX, dnode)
tgt.extend(apply(PIB, (env, pyo_tgt, pyo_src), kw))
act = SCons.Action.CommandAction('@$CPYTHON_PYCOM %s' % (' '.join(to_compile)))
act([], [], env)
# add single '.py' and '.pyc' or '.pyo' file to tgt list
else:
# add '.py' file to tgt list
target = env.fs.Entry('.'+os.sep+src.path, dnode)
tgt.extend(apply(PIB, (env, target, src), kw))
# .pyc or .pyo source and target files
pyco_src = env.fs.Entry(src.path + CPYTHON_TARGETSUFFIX)
pyco_tgt = env.fs.Entry(target.path + CPYTHON_TARGETSUFFIX)
if compile_pyc:
py_compile.compile(src.path)
else:
act = SCons.Action.CommandAction('@$CPYTHON_PYCOM %s' % (src.path))
act([], [], env)
# add '.pyc' or '.pyo' file to tgt list
tgt.extend(apply(PIB, (env, pyco_tgt, pyco_src), kw))
return tgt
def detect_python(env, version):
return '/usr/include/python%s' % version
def detect_python_lib(env, version):
return '/usr/lib/python%s' % version
def generate(env):
from SCons.Tool.install import copyFunc
try:
env['INSTALL']
except KeyError:
env['INSTALL'] = copyFunc
global PythonInstallBuilder
PythonInstallBuilder = createPythonBuilder(env)
py_version = '2.7'
sys_version = sys.version_info[:2]
if len(sys_version) == 2:
py_version = '%d.%d' % (sys_version[0], sys_version[1])
env.SetDefault(
CPYTHON_PYC = 1, # generate '.pyc' files by default
CPYTHON_EXE = 'python',
CPYTHON_PYO_FLAGS = '-O',
CPYTHON_PYO_CMD = "-c 'import sys,py_compile; [py_compile.compile(i) for i in sys.argv[1:]]'",
CPYTHON_PYCOM = '$CPYTHON_EXE $CPYTHON_PYO_FLAGS $CPYTHON_PYO_CMD',
CPYTHON_PYCOMSTR = 'Install file: "$SOURCE" as "$TARGET"',
CPYTHON_SUFFIX = '.py', # extension for Python source files
# Supporting variables for linking Boost.Python wrappers
CPYTHON_VERSION = py_version,
CPYTHON_INCLUDE = detect_python(env, py_version),
CPYTHON_LIB = detect_python_lib(env, py_version),
CPYTHON_BOOSTINC = '/usr/include',
CPYTHON_BOOSTLIB = '/usr/lib'
)
env.AppendUnique(CXXFLAGS=['-fPIC'])
env.Append(CPPPATH=['$CPYTHON_INCLUDE','$CPYTHON_BOOSTINC'])
env.AppendUnique(LINKFLAGS=['-shared','-Wl,--export-dynamic'])
env.Append(LIBPATH=['$CPYTHON_BOOSTLIB','$CPYTHON_LIB/config'])
env.AppendUnique(LIBS=['boost_python','python$CPYTHON_VERSION'])
try:
env.AddMethod(InstallPython, "InstallPython")
except AttributeError:
# Looks like we use a pre-0.98 version of SCons...
from SCons.Script.SConscript import SConsEnvironment
SConsEnvironment.InstallPython = InstallPython
def exists(env):
return 1

7
execEx/05/SConstruct Normal file
View File

@@ -0,0 +1,7 @@
Help("""
DEBUG=1,0 - enable debug build, default 1
""")
import sys
print('session python path:', str(sys.path).replace(', ', ',\n' + ' ' * 26))

BIN
execEx/05/bug.tar.gz Normal file

Binary file not shown.

BIN
pptx/SCons.pptx Normal file

Binary file not shown.