############################################ # Copyright (c) 2012 Microsoft Corporation # # Auxiliary scripts for generate Makefiles and Visual # Studio project files. # # Author: Leonardo de Moura (leonardo) ############################################ import os import glob def is_debug(mode): return mode == 'Debug' def is_x64(platform): return platform == 'x64' def mk_dir(d): if not os.path.exists(d): os.makedirs(d) def module_src_dir(name): return '%s%s%s' % (SRC_DIR, os.sep, name) def module_build_dir(name): return '%s%s%s' % (BUILD_DIR, os.sep, name) def vs_header(f): f.write( '\n' '\n') GUI = 0 Name2GUI = {} def vs_project_configurations(f, name): global GUI, Name2GUI f.write(' \n') for mode in MODES: for platform in PLATFORMS: f.write(' \n' % (mode, platform)) f.write(' %s\n' % mode) f.write(' %s\n' % platform) f.write(' \n') f.write(' \n') f.write(' \n') f.write(' {00000000-0000-0000-000--%s}\n' % GUI) f.write(' %s\n' % name) f.write(' Win32Proj\n') f.write(' \n') f.write(' \n') Name2GUI[name] = GUI GUI = GUI + 1 def vs_lib_configurations(f, name): for mode in MODES: for platform in PLATFORMS: f.write(' \n' % (mode, platform)) f.write(' StaticLibrary\n') f.write(' Unicode\n') f.write(' false\n') f.write(' \n') f.write(' \n') f.write(' \n') f.write(' \n') f.write(' \n') f.write(' \n') f.write(' \n') f.write(' \n') for mode in MODES: for platform in PLATFORMS: if is_x64(platform): f.write(' $(SolutionDir)$(Platform)\$(Configuration)\\n' % (mode, platform)) else: f.write(' $(SolutionDir)$(Configuration)\\n' % (mode, platform)) for mode in MODES: for platform in PLATFORMS: f.write(' %s\n' % (mode, platform, name)) f.write(' .lib\n' % (mode, platform)) f.write(' \n') def vs_compilation_options(f, name, deps): for mode in MODES: for platform in PLATFORMS: f.write(' \n' % (mode, platform)) if is_x64(platform): f.write(' \n') f.write(' X64\n') f.write(' \n') f.write(' \n') if is_debug(mode): f.write(' Disabled\n') else: f.write(' Full\n') options = VS_COMMON_OPTIONS if is_debug(mode): options = "%s;%s" % (options, VS_DBG_OPTIONS) else: options = "%s;%s" % (options, VS_RELEASE_OPTIONS) if is_x64(platform): options = "%s;_AMD64_" % options f.write(' %s;%%(PreprocessorDefinitions)\n' % options) if is_debug(mode): f.write(' true\n') f.write(' EnableFastChecks\n') f.write(' Level3\n') f.write(' MultiThreadedDebugDLL\n') f.write(' true\n') f.write(' ProgramDatabase\n') f.write(' ') f.write('..\..\src\%s' % name) for dep in deps: f.write(';..\..\src\%s' % dep) f.write('\n') f.write(' \n') f.write(' \n') f.write(' $(OutDir)%s.lib\n' % name) f.write(' %(AdditionalLibraryDirectories)\n') if is_x64(platform): f.write(' MachineX64\n') else: f.write(' MachineX86\n') f.write(' \n') f.write(' \n') def add_vs_cpps(f, name): f.write(' \n') srcs = module_src_dir(name) for cppfile in glob.glob(os.path.join(srcs, '*.cpp')): f.write(' \n' % (os.sep, os.sep, cppfile)) f.write(' \n') def vs_footer(f): f.write( ' \n' ' \n' ' \n' '\n') def add_lib(name, deps): module_dir = module_build_dir(name) mk_dir(module_dir) vs_proj = open('%s%s%s.vcxproj' % (module_dir, os.sep, name), 'w') vs_header(vs_proj) vs_project_configurations(vs_proj, name) vs_lib_configurations(vs_proj, name) vs_compilation_options(vs_proj, name, deps) add_vs_cpps(vs_proj, name) vs_footer(vs_proj)