X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=blobdiff_plain;f=build-pspp;h=d6ffcceb18c8a30b943987ed99121c806e13dcef;hp=7cc875656ba299ecc98c4bd3cb5d434ab2a78ad1;hb=HEAD;hpb=fd1247a5edae6f466e9e2107ae6157e9db34f0a3 diff --git a/build-pspp b/build-pspp index 7cc875656b..b449a5c89c 100755 --- a/build-pspp +++ b/build-pspp @@ -27,8 +27,10 @@ where TARBALL is the name of a tarball produced by "make dist" Options: --help Print this usage message and exit + --ssw=TARBALL Get ssw from TARBALL instead of from Git. --no-binary Build source tarballs but no binaries. - --batch Do not print progress to stdout.""" + --batch Do not print progress to stdout. + --no-perl Do not build Perl module.""" % (sys.argv[0], sys.argv[0])) sys.exit(0) @@ -115,6 +117,7 @@ def write_timing(id, time): def fail(): + set_var("result", "failure") sys.stderr.write("Build failed, refer to:\n\t%s\nfor details.\n" % logfile) sys.exit(1) @@ -163,12 +166,91 @@ def ref_to_commit(ref, repo='.'): return backquotes("cd %s && %s rev-parse %s" % (repo, GIT, ref)) +def add_commit_to_version(name, commit, dir, extra_news = None): + abbrev_commit = commit[:6] + + # Extract version number. + start_step("Extract %s repository version number" % name) + fields = backquotes("cd %s && autoconf -t AC_INIT" % dir).split(':') + file, line, macro, package, repo_version = fields[:5] + rest = fields[5:] + set_var("%s_repo_version" % name, repo_version) + + # Is this a "gnits" mode tree? + start_step("Checking %s Automake mode" % name) + + am_mode = "gnu" + for s in open("%s/Makefile.am" % dir): + if "gnits" in s: + am_mode = "gnits" + break + LOG.write("%s Automake mode is %s\n" % (name, am_mode)) + + # Generate version number for build. + # We want to append -g012345, but if we're in Gnits mode and the + # version number already has a hyphen, we have to omit it. + start_step("Generate %s build version number" % name) + version = repo_version + if '-' not in version: + version += '-' + version += 'g' + abbrev_commit + set_var("%s_version" % name, version) + + # Append -g012345 to configure.ac version number. + start_step("Updating %s version number in %s" % (name, file)) + fullname = "%s/%s" % (dir, file) + NEWFILE = open("%s.new" % fullname, "w") + ln = 1 + for s in open(fullname): + if ln != int(line): + NEWFILE.write(s) + else: + NEWFILE.write("AC_INIT([%s], [%s]" % (package, version)) + for field in rest: + NEWFILE.write(", [%s]" % field) + NEWFILE.write(")\n") + ln += 1 + NEWFILE.close() + os.rename("%s.new" % fullname, fullname) + + # Add note to beginning of NEWS (otherwise "make dist" fails). + start_step("Updating %s NEWS" % name) + fullname = "%s/NEWS" % name + NEWFILE = open("%s.new" % fullname, "w") + found_changes = False + for s in open(fullname): + if not found_changes and (s.startswith('Changes') or repo_version in s): + found_changes = True + NEWFILE.write("""\ +Changes from %(repo_version)s to %(version)s: + + * Built from PSPP commit %(revision)s + in branch %(branch)s on builder %(builder)s. + +""" + % {'repo_version': repo_version, + 'version': version, + 'revision': commit, + 'branch': branch, + 'builder': builder}) + if extra_news: + NEWFILE.write(extra_news) + NEWFILE.write('\n') + + NEWFILE.write(s) + NEWFILE.close() + os.rename("%s.new" % fullname, fullname) + + return version + try: opts, args = getopt.gnu_getopt(sys.argv[1:], "ho:", ["help", "binary", "no-binary", "batch", "no-batch", + "no-perl", "output=", + "ssw=", "builder=", "build-number="]) except getopt.GetoptError as err: # print help information and exit: @@ -180,6 +262,8 @@ batch = not os.isatty(1) builddir = None build_number = None builder = None +build_perl = True +ssw = "https://git.savannah.gnu.org/git/ssw.git master" for o, a in opts: if o in ("-h", "--help"): print_usage() @@ -197,6 +281,10 @@ for o, a in opts: builder = a elif o == "--build-number": build_number = a + elif o == "--no-perl": + build_perl = False + elif o == "--ssw": + ssw = a else: assert False, "unhandled option" if builder is None: @@ -246,9 +334,6 @@ set_var("build_number", build_number) GIT = "git --git-dir=%s/.git" % topdir -# ssw = "https://alpha.gnu.org/gnu/ssw/spread-sheet-widget-0.4.tar.gz" -ssw = "https://git.savannah.gnu.org/git/ssw.git master" - if ssw.endswith('.tar.gz'): ssw_basename = os.path.basename(ssw) ssw_file = '%s/%s' % (topdir, ssw_basename) @@ -262,9 +347,6 @@ if len(args) == 2: if not Path(ssw_file).exists(): start_step("Retrieve spread-sheet-widget tarball %s" % ssw_file) run("wget -O %s %s" % (ssw_file, ssw)) - - start_step("Extract %s into %s" % (ssw_file, ssw_dir)) - run("tar xzf %s" % ssw_file) elif ' ' in ssw: ssw_url, ssw_ref = ssw.split() @@ -273,13 +355,29 @@ if len(args) == 2: start_step("Check out %s in ssw" % ssw_ref) run("cd %s && git checkout %s" % (ssw_dir, ssw_ref)) - set_var("ssw_commit", ref_to_commit("HEAD", "ssw")) + ssw_commit = ref_to_commit("HEAD", "ssw") + set_var("ssw_commit", ssw_commit) + + ssw_version = add_commit_to_version("ssw", ssw_commit, "ssw") start_step("Bootstrap ssw") - run("cd %s && ./bootstrap" % ssw_dir) + run("cd ssw && ./bootstrap") + + start_step("Configure ssw source") + run("cd ssw && mkdir _build && cd _build && ../configure", + "configure") + + start_step("Make ssw source tarball") + run("cd ssw/_build && make -j128 dist", "dist") + ssw_dir = "spread-sheet-widget-%s" % ssw_version + ssw_file = "ssw/_build/%s.tar.gz" % ssw_dir + save_result("ssw source distribution", ssw_file) else: assert False + start_step("Extract %s into %s" % (ssw_file, ssw_dir)) + run("tar xzf %s" % ssw_file) + start_step("Configure spread-sheet-widget") run("cd %s && ./configure --prefix=''" % ssw_dir) @@ -299,57 +397,12 @@ if len(args) == 2: set_var("pspp_ref", "refs/builds/%s/pspp" % build_number) revision = ref_to_commit("refs/builds/%s/pspp" % build_number) set_var("pspp_commit", revision) - abbrev_commit = revision[:6] # Extract source. start_step("Extract branch into source directory") run("%s archive --format=tar --prefix=pspp/ refs/builds/%s/pspp | tar xf -" % (GIT, build_number)) - # Extract version number. - start_step("Extract repository version number") - fields = backquotes("cd pspp && autoconf -t AC_INIT").split(':') - file, line, macro, package, repo_version = fields[:5] - rest = fields[5:] - set_var("repo_version", repo_version) - - # Is this a "gnits" mode tree? - start_step("Checking Automake mode") - - am_mode = "gnu" - for s in open("pspp/Makefile.am"): - if "gnits" in s: - am_mode = "gnits" - break - LOG.write("Automake mode is %s\n" % am_mode) - - # Generate version number for build. - # We want to append -g012345, but if we're in Gnits mode and the - # version number already has a hyphen, we have to omit it. - start_step("Generate build version number") - version = repo_version - if '-' not in version: - version += '-' - version += 'g' + abbrev_commit - set_var("version", version) - - # Append -g012345 to configure.ac version number. - start_step("Updating version number in %s" % file) - fullname = "pspp/%s" % file - NEWFILE = open("%s.new" % fullname, "w") - ln = 1 - for s in open(fullname): - if ln != int(line): - NEWFILE.write(s) - else: - NEWFILE.write("AC_INIT([%s], [%s]" % (package, version)) - for field in rest: - NEWFILE.write(", [%s]" % field) - NEWFILE.write(")\n") - ln += 1 - NEWFILE.close() - os.rename("%s.new" % fullname, fullname) - # Get Gnulib commit number. start_step("Reading README.Git to find Gnulib commit number") fullname = "pspp/README.Git" @@ -362,36 +415,11 @@ if len(args) == 2: if gnulib_commit is None: sys.stderr.write("%s does not specify a Git commit number\n" % fullname) - sys.exit(1) + fail() set_var("gnulib_commit", gnulib_commit) - # Add note to beginning of NEWS (otherwise "make dist" fails). - start_step("Updating NEWS") - fullname = "pspp/NEWS" - NEWFILE = open("%s.new" % fullname, "w") - found_changes = False - for s in open(fullname): - if not found_changes and s.startswith('Changes'): - found_changes = True - NEWFILE.write("""\ -Changes from %(repo_version)s to %(version)s: - - * Built from PSPP commit %(revision)s - in branch %(branch)s on builder %(builder)s. - - * Built from Gnulib commit %(gnulib_commit)s. - -""" - % {'repo_version': repo_version, - 'version': version, - 'revision': revision, - 'branch': branch, - 'builder': builder, - 'gnulib_commit': gnulib_commit}) - - NEWFILE.write(s) - NEWFILE.close() - os.rename("%s.new" % fullname, fullname) + version = add_commit_to_version("pspp", revision, "pspp", + " * Built from Gnulib commit %(gnulib_commit)s.\n") # If we don't already have that Gnulib commit, update Gnulib. rc = os.system("%s rev-parse --verify --quiet %s^0 > /dev/null" @@ -422,7 +450,7 @@ Changes from %(repo_version)s to %(version)s: # Distribute. start_step("Make source tarball") - run("cd pspp/_build && make -j$(nproc) dist", "dist") + run("cd pspp/_build && make -j128 dist", "dist") tarname = "pspp-%s.tar.gz" % version tarball = save_result("source distribution", "pspp/_build/%s" % tarname, 1) @@ -434,14 +462,13 @@ Changes from %(repo_version)s to %(version)s: # Build examples for user manual. start_step("Build examples for user manual") - run("cd pspp/_build && make -j$(nproc) example-outputs example-html") + run("cd pspp/_build && make -j$(nproc) figure-spvs figure-txts figure-texis figure-htmls") # Build user manual start_step("Build user manual") run("cd pspp && " "GENDOCS_TEMPLATE_DIR=%s %s/gendocs.sh -s doc/pspp.texi -I doc " - "-I _build/doc/examples -I doc/examples " - "-o %s/user-manual --email bug-gnu-pspp@gnu.org " + "-I _build/doc -o %s/user-manual --email bug-gnu-pspp@gnu.org " "pspp \"GNU PSPP User Manual\"" % (topdir, topdir, resultsdir), "user-manual") saved_result("User Manual", "user-manual") @@ -483,18 +510,20 @@ if build_binary: start_step("Configuring") run("chmod -R a-w %s/%s" % (builddir, tarball_dir)) run("chmod u+w %s/%s" % (builddir, tarball_dir)) - run("chmod -R u+w %s/%s/perl-module" % (builddir, tarball_dir)) + if build_perl: + run("chmod -R u+w %s/%s/perl-module" % (builddir, tarball_dir)) run("mkdir %s/%s/_build" % (builddir, tarball_dir)) run("chmod a-w %s/%s" % (builddir, tarball_dir)) ok = try_run( "cd %(builddir)s/%(tarball_dir)s/_build && ../configure " - "--with-perl-module --enable-relocatable --prefix='' " + "--%(perl)s-perl-module --enable-relocatable --prefix='' " "PKG_CONFIG_PATH=$PWD/../../../source/%(ssw_dir)s/inst/lib/pkgconfig " "CPPFLAGS=\"-I$PWD/../../../source/%(ssw_dir)s/inst/include\" " - "LDFLAGS=\"-L$PWD/../../../source/%(ssw_dir)s/inst/lib\"" + "LDFLAGS=\"-L$PWD/../../../source/%(ssw_dir)s/inst/lib\" " % {"builddir": builddir, "tarball_dir": tarball_dir, - "ssw_dir": ssw_dir}, + "ssw_dir": ssw_dir, + "perl": "with" if build_perl else "without"}, "bin-configure") for basename in ("config.h", "config.log"): save_result_if_exists("build configuration", @@ -505,21 +534,23 @@ if build_binary: start_step("Build") run("cd %s/%s/_build && make -j$(nproc)" % (builddir, tarball_dir), "build") - run("cd %s/%s/_build/perl-module && perl Makefile.PL && make -j$(nproc)" - % (builddir, tarball_dir), "build Perl module") + if build_perl: + run("cd %s/%s/_build/perl-module && perl Makefile.PL && make -j$(nproc)" + % (builddir, tarball_dir), "build Perl module") start_step("Install") run("cd %s/%s/_build && make -j$(nproc) install DESTDIR=$PWD/pspp-%s" % (builddir, tarball_dir, binary_version), "install") run("cd ../source/%s && make -j$(nproc) install DESTDIR=%s/%s/_build/pspp-%s" % (ssw_dir, builddir, tarball_dir, binary_version)) - run("cd %s/%s/_build/perl-module && " - "make -j$(nproc) install DESTDIR=%s/%s/_build/pspp-%s" - % (builddir, tarball_dir, builddir, tarball_dir, binary_version), - "install Perl module") - run("cd %s/%s/_build/perl-module && " - "make -j$(nproc) install DESTDIR=$PWD/inst" - % (builddir, tarball_dir)) + if build_perl: + run("cd %s/%s/_build/perl-module && " + "make -j$(nproc) install DESTDIR=%s/%s/_build/pspp-%s" + % (builddir, tarball_dir, builddir, tarball_dir, binary_version), + "install Perl module") + run("cd %s/%s/_build/perl-module && " + "make -j$(nproc) install DESTDIR=$PWD/inst" + % (builddir, tarball_dir)) start_step("Make binary distribution") run("cd %s/%s/_build && tar cfz pspp-%s.tar.gz pspp-%s" @@ -543,10 +574,11 @@ if build_binary: % (builddir, tarball_dir, binary_version), "uninstall") start_step("Check uninstall") - run("(cd %s/%s/_build/perl-module/inst && find -type f -print) | " - "(cd %s/%s/_build/pspp-%s && xargs rm)" - % (builddir, tarball_dir, - builddir, tarball_dir, binary_version), "uninstall Perl module") + if build_perl: + run("(cd %s/%s/_build/perl-module/inst && find -type f -print) | " + "(cd %s/%s/_build/pspp-%s && xargs rm)" + % (builddir, tarball_dir, + builddir, tarball_dir, binary_version), "uninstall Perl module") run("cd %s/%s/_build && " "make -j$(nproc) distuninstallcheck distuninstallcheck_dir=$PWD/pspp-%s" % (builddir, tarball_dir, binary_version), @@ -555,3 +587,4 @@ if build_binary: # distcleancheck start_step("Success") +set_var("result", "success")