def build(upload, upload_tmp, testing, build_test_installer, build_rel_installer, build_prerelease, skip_transl_update, svn_revision, target_platform): verify_started_in_right_directory() try_find_config_files() if build_prerelease: if svn_revision is None: run_cmd_throw("svn", "update") (out, err) = run_cmd_throw("svn", "info") ver = str(parse_svninfo_out(out)) else: # allow to pass in an SVN revision, in case SVN itself isn't # available ver = svn_revision else: ver = extract_sumatra_version(os.path.join("src", "Version.h")) if upload: verify_correct_branch(ver) verify_not_tagged_yet(ver) log("Version: '%s'" % ver) # don't update translations for release versions to prevent Trunk changes # from messing up the compilation of a point release on a branch if build_prerelease and not skip_transl_update: trans_upload.uploadStringsIfChanged() changed = trans_download.downloadAndUpdateTranslationsIfChanged() # Note: this is not a perfect check since re-running the script will # proceed if changed: print( "\nNew translations have been downloaded from apptranslator.og" ) print( "Please verify and checkin src/Translations_txt.cpp and strings/translations.txt" ) sys.exit(1) filename_base = "SumatraPDF-%s" % ver if build_prerelease: filename_base = "SumatraPDF-prerelease-%s" % ver s3_dir = "sumatrapdf/rel" if build_prerelease: s3_dir = "sumatrapdf/prerel" if upload_tmp: upload = True s3_dir += "tmp" if upload: log("Will upload to s3 at %s" % s3_dir) conf = load_config() s3.set_secrets(conf.aws_access, conf.aws_secret) s3.set_bucket("kjkpub") s3_prefix = "%s/%s" % (s3_dir, filename_base) s3_exe = s3_prefix + ".exe" s3_installer = s3_prefix + "-install.exe" s3_pdb_lzsa = s3_prefix + ".pdb.lzsa" s3_pdb_zip = s3_prefix + ".pdb.zip" s3_exe_zip = s3_prefix + ".zip" s3_files = [s3_exe, s3_installer, s3_pdb_lzsa, s3_pdb_zip] if not build_prerelease: s3_files.append(s3_exe_zip) cert_pwd = None cert_path = os.path.join("scripts", "cert.pfx") if upload: map(s3.verify_doesnt_exist, s3_files) verify_path_exists(cert_path) conf = load_config() cert_pwd = conf.GetCertPwdMustExist() obj_dir = "obj-rel" if target_platform == "X64": obj_dir += "64" if not testing and not build_test_installer and not build_rel_installer: shutil.rmtree(obj_dir, ignore_errors=True) shutil.rmtree(os.path.join("mupdf", "generated"), ignore_errors=True) config = "CFG=rel" if build_test_installer and not build_prerelease: obj_dir = "obj-dbg" config = "CFG=dbg" extcflags = "" if build_prerelease: extcflags = "EXTCFLAGS=-DSVN_PRE_RELEASE_VER=%s" % ver platform = "PLATFORM=%s" % (target_platform or "X86") # build executables for signing (building the installer will build the rest) (out, err) = run_cmd_throw("nmake", "-f", "makefile.msvc", config, extcflags, platform, "SumatraPDF", "Uninstaller") if build_test_installer: print_run_resp(out, err) exe = os.path.join(obj_dir, "SumatraPDF.exe") sign_retry(exe, cert_pwd) sign_retry(os.path.join(obj_dir, "SumatraPDF-no-MuPDF.exe"), cert_pwd) sign_retry(os.path.join(obj_dir, "uninstall.exe"), cert_pwd) (out, err) = run_cmd_throw("nmake", "-f", "makefile.msvc", "Installer", config, platform, extcflags) if build_test_installer: print_run_resp(out, err) if build_test_installer or build_rel_installer: sys.exit(0) installer = os.path.join(obj_dir, "Installer.exe") sign_retry(installer, cert_pwd) pdb_lzsa_archive = create_pdb_lzsa_archive(obj_dir, "%s.pdb.lzsa" % filename_base) pdb_zip_archive = create_pdb_zip_archive(obj_dir, "%s.pdb.zip" % filename_base) builds_dir = os.path.join("builds", ver) if os.path.exists(builds_dir): shutil.rmtree(builds_dir) os.makedirs(builds_dir) copy_to_dst_dir(exe, builds_dir) copy_to_dst_dir(installer, builds_dir) copy_to_dst_dir(pdb_lzsa_archive, builds_dir) copy_to_dst_dir(pdb_zip_archive, builds_dir) # package portable version in a .zip file if not build_prerelease: exe_zip_name = "%s.zip" % filename_base zip_one_file(obj_dir, "SumatraPDF.exe", exe_zip_name) exe_zip_path = os.path.join(obj_dir, exe_zip_name) copy_to_dst_dir(exe_zip_path, builds_dir) if not upload: return if build_prerelease: jstxt = 'var sumLatestVer = %s;\n' % ver jstxt += 'var sumBuiltOn = "%s";\n' % time.strftime("%Y-%m-%d") jstxt += 'var sumLatestName = "%s";\n' % s3_exe.split("/")[-1] jstxt += 'var sumLatestExe = "http://kjkpub.s3.amazonaws.com/%s";\n' % s3_exe jstxt += 'var sumLatestPdb = "http://kjkpub.s3.amazonaws.com/%s";\n' % s3_pdb_zip jstxt += 'var sumLatestInstaller = "http://kjkpub.s3.amazonaws.com/%s";\n' % s3_installer s3.upload_file_public(installer, s3_installer) s3.upload_file_public(pdb_lzsa_archive, s3_pdb_lzsa) s3.upload_file_public(pdb_zip_archive, s3_pdb_zip) s3.upload_file_public(exe, s3_exe) if build_prerelease: s3.upload_data_public(jstxt, "sumatrapdf/sumatralatest.js") # don't set a Stable version for prerelease builds txt = "[SumatraPDF]\nLatest %s\n" % ver s3.upload_data_public(txt, "sumatrapdf/sumpdf-prerelease-update.txt") # keep updating the legacy file for now txt = "%s\n" % ver s3.upload_data_public(txt, "sumatrapdf/sumpdf-prerelease-latest.txt") delete_old_pre_release_builds() else: # update the Latest version for manual update checks but # leave the Stable version for automated update checks update_url = "http://kjkpub.s3.amazonaws.com/sumatrapdf/sumpdf-update.txt" ver_stable = get_stable_version(update_url, "2.5.2") s3.upload_file_public(exe_zip_path, s3_exe_zip) s3.upload_data_public( "[SumatraPDF]\nLatest %s\nStable %s\n" % (ver, ver_stable), "sumatrapdf/sumpdf-update.txt") if not build_prerelease: svn_tag_release(ver) upload_sources.upload(ver)
def build(upload, upload_tmp, testing, build_test_installer, build_rel_installer, build_prerelease, skip_transl_update, svn_revision, target_platform): verify_started_in_right_directory() try_find_config_files() if build_prerelease: if svn_revision is None: run_cmd_throw("svn", "update") (out, err) = run_cmd_throw("svn", "info") ver = str(parse_svninfo_out(out)) else: # allow to pass in an SVN revision, in case SVN itself isn't # available ver = svn_revision else: ver = extract_sumatra_version(os.path.join("src", "Version.h")) if upload: verify_correct_branch(ver) verify_not_tagged_yet(ver) log("Version: '%s'" % ver) # don't update translations for release versions to prevent Trunk changes # from messing up the compilation of a point release on a branch if build_prerelease and not skip_transl_update: trans_upload.uploadStringsIfChanged() changed = trans_download.downloadAndUpdateTranslationsIfChanged() # Note: this is not a perfect check since re-running the script will # proceed if changed: print( "\nNew translations have been downloaded from apptranslator.og") print( "Please verify and checkin src/Translations_txt.cpp and strings/translations.txt") sys.exit(1) filename_base = "SumatraPDF-%s" % ver if build_prerelease: filename_base = "SumatraPDF-prerelease-%s" % ver s3_dir = "sumatrapdf/rel" if build_prerelease: s3_dir = "sumatrapdf/prerel" if upload_tmp: upload = True s3_dir += "tmp" if upload: log("Will upload to s3 at %s" % s3_dir) conf = load_config() s3.set_secrets(conf.aws_access, conf.aws_secret) s3.set_bucket("kjkpub") s3_prefix = "%s/%s" % (s3_dir, filename_base) s3_exe = s3_prefix + ".exe" s3_installer = s3_prefix + "-install.exe" s3_pdb_lzsa = s3_prefix + ".pdb.lzsa" s3_pdb_zip = s3_prefix + ".pdb.zip" s3_exe_zip = s3_prefix + ".zip" s3_files = [s3_exe, s3_installer, s3_pdb_lzsa, s3_pdb_zip] if not build_prerelease: s3_files.append(s3_exe_zip) cert_pwd = None cert_path = os.path.join("scripts", "cert.pfx") if upload: map(s3.verify_doesnt_exist, s3_files) verify_path_exists(cert_path) conf = load_config() cert_pwd = conf.GetCertPwdMustExist() obj_dir = "obj-rel" if target_platform == "X64": obj_dir += "64" if not testing and not build_test_installer and not build_rel_installer: shutil.rmtree(obj_dir, ignore_errors=True) shutil.rmtree(os.path.join("mupdf", "generated"), ignore_errors=True) config = "CFG=rel" if build_test_installer and not build_prerelease: obj_dir = "obj-dbg" config = "CFG=dbg" extcflags = "" if build_prerelease: extcflags = "EXTCFLAGS=-DSVN_PRE_RELEASE_VER=%s" % ver platform = "PLATFORM=%s" % (target_platform or "X86") # build executables for signing (building the installer will build the rest) (out, err) = run_cmd_throw("nmake", "-f", "makefile.msvc", config, extcflags, platform, "SumatraPDF", "Uninstaller") if build_test_installer: print_run_resp(out, err) exe = os.path.join(obj_dir, "SumatraPDF.exe") sign_retry(exe, cert_pwd) sign_retry(os.path.join(obj_dir, "SumatraPDF-no-MuPDF.exe"), cert_pwd) sign_retry(os.path.join(obj_dir, "uninstall.exe"), cert_pwd) (out, err) = run_cmd_throw("nmake", "-f", "makefile.msvc", "Installer", config, platform, extcflags) if build_test_installer: print_run_resp(out, err) if build_test_installer or build_rel_installer: sys.exit(0) installer = os.path.join(obj_dir, "Installer.exe") sign_retry(installer, cert_pwd) pdb_lzsa_archive = create_pdb_lzsa_archive(obj_dir, "%s.pdb.lzsa" % filename_base) pdb_zip_archive = create_pdb_zip_archive(obj_dir, "%s.pdb.zip" % filename_base) builds_dir = os.path.join("builds", ver) if os.path.exists(builds_dir): shutil.rmtree(builds_dir) os.makedirs(builds_dir) copy_to_dst_dir(exe, builds_dir) copy_to_dst_dir(installer, builds_dir) copy_to_dst_dir(pdb_lzsa_archive, builds_dir) copy_to_dst_dir(pdb_zip_archive, builds_dir) # package portable version in a .zip file if not build_prerelease: exe_zip_name = "%s.zip" % filename_base zip_one_file(obj_dir, "SumatraPDF.exe", exe_zip_name) exe_zip_path = os.path.join(obj_dir, exe_zip_name) copy_to_dst_dir(exe_zip_path, builds_dir) if not upload: return if build_prerelease: jstxt = 'var sumLatestVer = %s;\n' % ver jstxt += 'var sumBuiltOn = "%s";\n' % time.strftime("%Y-%m-%d") jstxt += 'var sumLatestName = "%s";\n' % s3_exe.split("/")[-1] jstxt += 'var sumLatestExe = "http://kjkpub.s3.amazonaws.com/%s";\n' % s3_exe jstxt += 'var sumLatestPdb = "http://kjkpub.s3.amazonaws.com/%s";\n' % s3_pdb_zip jstxt += 'var sumLatestInstaller = "http://kjkpub.s3.amazonaws.com/%s";\n' % s3_installer s3.upload_file_public(installer, s3_installer) s3.upload_file_public(pdb_lzsa_archive, s3_pdb_lzsa) s3.upload_file_public(pdb_zip_archive, s3_pdb_zip) s3.upload_file_public(exe, s3_exe) if build_prerelease: s3.upload_data_public(jstxt, "sumatrapdf/sumatralatest.js") # don't set a Stable version for prerelease builds txt = "[SumatraPDF]\nLatest %s\n" % ver s3.upload_data_public(txt, "sumatrapdf/sumpdf-prerelease-update.txt") # keep updating the legacy file for now txt = "%s\n" % ver s3.upload_data_public(txt, "sumatrapdf/sumpdf-prerelease-latest.txt") delete_old_pre_release_builds() else: # update the Latest version for manual update checks but # leave the Stable version for automated update checks update_url = "http://kjkpub.s3.amazonaws.com/sumatrapdf/sumpdf-update.txt" ver_stable = get_stable_version(update_url, "2.5.2") s3.upload_file_public(exe_zip_path, s3_exe_zip) s3.upload_data_public("[SumatraPDF]\nLatest %s\nStable %s\n" % (ver, ver_stable), "sumatrapdf/sumpdf-update.txt") if not build_prerelease: svn_tag_release(ver) upload_sources.upload(ver)