Browse Source

build.go: allow definition of an installdir, instead of requiring "mv" commands

Instead of having a bunch of mv commands in your Post section, you can
instead define an "Install" field such as /$ARCH/bin/ into which your
compiled program(s) will be copied. Old behavior still works too.

(Oops, forgot to line-wrap commit message)

Change-Id: I115c5b0a4f1e5cb43c4578f3fdcbf6db1ca442dc
John Floren 8 years ago
parent
commit
5166f2fb0b
3 changed files with 55 additions and 125 deletions
  1. 2 2
      BUILD.conf
  2. 2 121
      sys/src/cmd/cmds.json
  3. 51 2
      util/build.go

+ 2 - 2
BUILD.conf

@@ -1,7 +1,7 @@
 #!/bin/bash
-#### INSTAL PARAMS ####
+#### INSTALL PARAMS ####
 
-ARCH=amd64
+export ARCH=amd64
 
 ### DIRS ###
 BASEDIR=${_BUILD_DIR}

+ 2 - 121
sys/src/cmd/cmds.json

@@ -141,125 +141,6 @@
 	"yacc.c"
 	],
 	"Post": [
-	"mv aan $HARVEY/amd64/bin/",
-	"mv archfs $HARVEY/amd64/bin/",
-	"mv ascii $HARVEY/amd64/bin/",
-	"mv awd $HARVEY/amd64/bin/",
-	"mv basename $HARVEY/amd64/bin/",
-	"mv bsplit $HARVEY/amd64/bin/",
-	"mv cal $HARVEY/amd64/bin/",
-	"mv calendar $HARVEY/amd64/bin/",
-	"mv calls $HARVEY/amd64/bin/",
-	"mv cat $HARVEY/amd64/bin/",
-	"mv chgrp $HARVEY/amd64/bin/",
-	"mv chmod $HARVEY/amd64/bin/",
-	"mv cleanname $HARVEY/amd64/bin/",
-	"mv clock $HARVEY/amd64/bin/",
-	"mv cmp $HARVEY/amd64/bin/",
-	"mv col $HARVEY/amd64/bin/",
-	"mv colors $HARVEY/amd64/bin/",
-	"mv comm $HARVEY/amd64/bin/",
-	"mv cp $HARVEY/amd64/bin/",
-	"mv cpu $HARVEY/amd64/bin/",
-	"mv crop $HARVEY/amd64/bin/",
-	"mv dc $HARVEY/amd64/bin/",
-	"mv dd $HARVEY/amd64/bin/",
-	"mv deroff $HARVEY/amd64/bin/",
-	"mv du $HARVEY/amd64/bin/",
-	"mv ecp $HARVEY/amd64/bin/",
-	"mv ed $HARVEY/amd64/bin/",
-	"mv factor $HARVEY/amd64/bin/",
-	"mv fcp $HARVEY/amd64/bin/",
-	"mv file $HARVEY/amd64/bin/",
-	"mv fmt $HARVEY/amd64/bin/",
-	"mv fortune $HARVEY/amd64/bin/",
-	"mv freq $HARVEY/amd64/bin/",
-	"mv getmap $HARVEY/amd64/bin/",
-	"mv gview $HARVEY/amd64/bin/",
-	"mv hget $HARVEY/amd64/bin/",
-	"mv histogram $HARVEY/amd64/bin/",
-	"mv history $HARVEY/amd64/bin/",
-	"mv html2ms $HARVEY/amd64/bin/",
-	"mv iconv $HARVEY/amd64/bin/",
-	"mv idiff $HARVEY/amd64/bin/",
-	"mv import $HARVEY/amd64/bin/",
-	"mv init $HARVEY/amd64/",
-	"mv join $HARVEY/amd64/bin/",
-	"mv kbmap $HARVEY/amd64/bin/",
-	"mv kprof $HARVEY/amd64/bin/",
-	"mv ktrace $HARVEY/amd64/bin/",
-	"mv lens $HARVEY/amd64/bin/",
-	"mv lnfs $HARVEY/amd64/bin/",
-	"mv lock $HARVEY/amd64/bin/",
-	"mv look $HARVEY/amd64/bin/",
-	"mv mc $HARVEY/amd64/bin/",
-	"mv md5sum $HARVEY/amd64/bin/",
-	"mv mkdir $HARVEY/amd64/bin/",
-	"mv mntgen $HARVEY/amd64/bin/",
-	"mv ms2html $HARVEY/amd64/bin/",
-	"mv mtime $HARVEY/amd64/bin/",
-	"mv mug $HARVEY/amd64/bin/",
-	"mv mv $HARVEY/amd64/bin/",
-	"mv netstat $HARVEY/amd64/bin/",
-	"mv news $HARVEY/amd64/bin/",
-	"mv nfs $HARVEY/amd64/bin/",
-	"mv nm $HARVEY/amd64/bin/",
-	"mv nntpfs $HARVEY/amd64/bin/",
-	"mv ns $HARVEY/amd64/bin/",
-	"mv pbd $HARVEY/amd64/bin/",
-	"mv p $HARVEY/amd64/bin/",
-	"mv pcc $HARVEY/amd64/bin/",
-	"mv pipefile $HARVEY/amd64/bin/",
-	"mv pr $HARVEY/amd64/bin/",
-	"mv primes $HARVEY/amd64/bin/",
-	"mv prof $HARVEY/amd64/bin/",
-	"mv ps $HARVEY/amd64/bin/",
-	"mv pump $HARVEY/amd64/bin/",
-	"mv pwd $HARVEY/amd64/bin/",
-	"mv ramfs $HARVEY/amd64/bin/",
-	"mv ratrace $HARVEY/amd64/bin/",
-	"mv rdbfs $HARVEY/amd64/bin/",
-	"mv read $HARVEY/amd64/bin/",
-	"mv resample $HARVEY/amd64/bin/",
-	"mv rm $HARVEY/amd64/bin/",
-	"mv rx $HARVEY/amd64/bin/",
-	"mv screenlock $HARVEY/amd64/bin/",
-	"mv seconds $HARVEY/amd64/bin/",
-	"mv sed $HARVEY/amd64/bin/",
-	"mv seq $HARVEY/amd64/bin/",
-	"mv sha1sum $HARVEY/amd64/bin/",
-	"mv size $HARVEY/amd64/bin/",
-	"mv sleep $HARVEY/amd64/bin/",
-	"mv sort $HARVEY/amd64/bin/",
-	"mv split $HARVEY/amd64/bin/",
-	"mv srvfs $HARVEY/amd64/bin/",
-	"mv stats $HARVEY/amd64/bin/",
-	"mv strings $HARVEY/amd64/bin/",
-	"mv strip $HARVEY/amd64/bin/",
-	"mv sum $HARVEY/amd64/bin/",
-	"mv swap $HARVEY/amd64/bin/",
-	"mv tail $HARVEY/amd64/bin/",
-	"mv tar $HARVEY/amd64/bin/",
-	"mv tee $HARVEY/amd64/bin/",
-	"mv testalarm $HARVEY/amd64/bin/",
-	"mv test $HARVEY/amd64/bin/",
-	"mv time $HARVEY/amd64/bin/",
-	"mv tlsclient $HARVEY/amd64/bin/",
-	"mv tlssrv $HARVEY/amd64/bin/",
-	"mv touch $HARVEY/amd64/bin/",
-	"mv tprof $HARVEY/amd64/bin/",
-	"mv trace $HARVEY/amd64/bin/",
-	"mv tr $HARVEY/amd64/bin/",
-	"mv tweak $HARVEY/amd64/bin/",
-	"mv unicode $HARVEY/amd64/bin/",
-	"mv uniq $HARVEY/amd64/bin/",
-	"mv unlnfs $HARVEY/amd64/bin/",
-	"mv unmount $HARVEY/amd64/bin/",
-	"mv wc $HARVEY/amd64/bin/",
-	"mv webcookies $HARVEY/amd64/bin/",
-	"mv webfsget $HARVEY/amd64/bin/",
-	"mv winwatch $HARVEY/amd64/bin/",
-	"mv xd $HARVEY/amd64/bin/",
-	"mv yacc $HARVEY/amd64/bin/"
-	]
+	],
+	"Install": "/$ARCH/bin/"
 }

+ 51 - 2
util/build.go

@@ -36,6 +36,7 @@ type build struct {
 	// Targets.
 	Program string
 	Library string
+	Install string // where to place the resulting binary/lib
 }
 
 var (
@@ -80,6 +81,7 @@ func process(f string, b *build) {
 	b.SourceFilesCmd = append(b.SourceFilesCmd, build.SourceFilesCmd...)
 	b.Program += build.Program
 	b.Library += build.Library
+	b.Install += build.Install
 	// For each source file, assume we create an object file with the last char replaced
 	// with 'o'. We can get smarter later.
 
@@ -145,7 +147,7 @@ func link(b *build) {
 				log.Fatalf("refusing to overwrite extension-less source file %v", n)
 				continue
 			}
-			n = n[0:len(n)-len(ext)]
+			n = n[0 : len(n)-len(ext)]
 			args := []string{"-o", n}
 			f := path.Base(n)
 			o := f[:len(f)] + ".o"
@@ -185,6 +187,52 @@ func link(b *build) {
 	}
 }
 
+func install(b *build) {
+	if b.Install == "" {
+		return
+	}
+	installpath := adjust([]string{os.ExpandEnv(b.Install)})
+
+	if len(b.SourceFilesCmd) > 0 {
+		for _, n := range b.SourceFilesCmd {
+			// Split off the last element of the file
+			var ext = filepath.Ext(n)
+			if len(ext) == 0 {
+				log.Fatalf("refusing to overwrite extension-less source file %v", n)
+				continue
+			}
+			n = n[0 : len(n)-len(ext)]
+			args := []string{n}
+			args = append(args, installpath...)
+
+			cmd := exec.Command("mv", args...)
+
+			cmd.Stdin = os.Stdin
+			cmd.Stderr = os.Stderr
+			cmd.Stdout = os.Stdout
+			log.Printf("%v", cmd.Args)
+			err := cmd.Run()
+			if err != nil {
+				log.Fatalf("%v\n", err)
+			}
+		}
+	} else {
+		args := []string{b.Program}
+		args = append(args, installpath...)
+		cmd := exec.Command("mv", args...)
+
+		cmd.Stdin = os.Stdin
+		cmd.Stderr = os.Stderr
+		cmd.Stdout = os.Stdout
+		log.Printf("%v", cmd.Args)
+		err := cmd.Run()
+		if err != nil {
+			log.Fatalf("%v\n", err)
+		}
+	}
+
+}
+
 func run(b *build, cmd []string) {
 	for _, v := range cmd {
 		cmd := exec.Command("bash", "-c", v)
@@ -232,9 +280,10 @@ func project(root string) {
 		//library(b)
 		log.Printf("\n\n*** Building %v ***\n\n", b.Library)
 	}
-	if len(b.SourceFilesCmd ) > 0 {
+	if len(b.SourceFilesCmd) > 0 {
 		link(b)
 	}
+	install(b)
 	run(b, b.Post)
 }