Sconstruct #4

  • //
  • guest/
  • robert_cowham/
  • perforce/
  • p4officediff/
  • main/
  • Sconstruct
  • View
  • Commits
  • Open Download .zip Download (3 KB)
# Sconstruct file for P4OfficeDiff
import string, os, re, glob, pprint

def filename(p):    # Return filename bit
    return os.path.split(p)[1]

VB6 = r'"C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.exe"'
MSBUILD = r'"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe"'
INNOSETUP = r'"C:\Program Files (x86)\Inno Setup 5\iscc.exe"'

#---------------------------------
# Also VB scanner for dependencies like:
# Module=Register; Register.bas
# Form=TimerForm.frm
# Form=p4vbTestForm.frm
# Class=WinHelp; WinHelp.cls
vbp_module_re = re.compile(r'^Module=\S+; (\S+)\s*$', re.M)
vbp_form_re = re.compile(r'^Form=(\S+)\s*$', re.M)
vbp_class_re = re.compile(r'^Class=\S+; (\S+)\s*$', re.M)

def vbp_scan(node, env, target, arg):
    contents = node.get_contents()
    includes = vbp_module_re.findall(contents)
    includes += vbp_form_re.findall(contents)
    includes += vbp_class_re.findall(contents)
    return includes

vbpscan = Scanner(name = 'vbp',
                function = vbp_scan,
                argument = None,
                skeys = ['.vbp'])

scanners = Environment().Dictionary('SCANNERS')

#---------------------------------
# Scan MSDEV SLN file for dependencies
vcxproj_re = re.compile(r'<File\s+RelativePath="([^"]*)', re.M)
vcxproj_re_exclude = re.compile(r'.*_i\..*')

def vcxproj_scan(node, env, target, arg):
    # print "Node: " + node.name + ': ' + node.get_abspath()
    contents = node.get_contents()
    includes = vcxproj_re.findall(contents)
    # print "Includes: " + ' '.join(includes)
    # Remove files generated by MIDL compiler (e.g. *_i.c or similar)
    includes = filter(lambda x:not vcxproj_re_exclude.match(x), includes)
    # print "Filtered Includes: " + ' '.join(includes)
    return includes

vcxprojscan = Scanner(name = 'vcxproj',
                function = vcxproj_scan,
                argument = None,
                skeys = ['.vcxproj'])

#---------------------------------
# Builder for Setup compiler
mkinstall = Builder(action = INNOSETUP + ' $SOURCES')
msvb = Builder(action = VB6 + ' /make $SOURCES')
msbuild = Builder(action = MSBUILD + ' $SOURCES /p:Configuration=Release')
 
files_dir = 'install/files'
setup = 'install/Output/P4OfficeDiffSetup.exe'
p4officediff = 'src/p4officediff.exe'
update_settings = 'update_settings/Release/update_settings.exe'

# Default target to build
Default(setup)
vars_to_copy = ['PATH', 'TEMP', 'TMP', 'SYSTEMDRIVE', 'SYSTEMROOT']
env_vars = {}
for k in vars_to_copy:
    env_vars[k] = os.environ[k]
env = Environment(BUILDERS = {'mkinstall' : mkinstall,
                              'msbuild' : msbuild,
                              'msvb' : msvb},
                  SCANNERS = scanners + [vbpscan, vcxprojscan],
                  ENV = env_vars)

FILES = []
env.Install(dir = files_dir, source = FILES)

for f in FILES:
    env.Depends(setup, files_dir + '/' + filename(f))

env.msvb(target = p4officediff, source = 'src/p4officediff.vbp')
env.msbuild(target = update_settings, source = 'update_settings/update_settings.vcxproj')

for f in [p4officediff, update_settings]:
    env.Install(dir = files_dir, source = f)
    env.Depends(setup, files_dir + '/' + filename(f))

env.mkinstall(target = setup, source = 'install/P4OfficeDiffSetup.iss')
# Change User Description Committed
#4 11861 Robert Cowham Tweak environment to allow msbuild to work
#3 11852 Robert Cowham Remove tabs
#2 11849 Robert Cowham Fix Mac line endings.
Get Scons working with MSBuild and update project file to use VS2010
#1 11846 Robert Cowham Rename P4WordDiff to P4OfficeDiff - start of process
//guest/robert_cowham/p4worddiff/main/Sconstruct
#2 11599 Robert Cowham Steps along the way.
Basic project works (P4WordDiff) - removed dependency on outdated OCX.
Also works better with Word 2010/13
Update_settings project updated to Visual Studio 2013 and compiles, even if it
doesn't work yet!
#1 11587 Robert Cowham Initial project from internal sources.
Needs updating (fgorm 2008 technology)!