@@ -17,6 +17,16 @@ import (
17
17
"golang.org/x/tools/go/vcs"
18
18
)
19
19
20
+ type packageType int
21
+
22
+ const (
23
+ typeGuess packageType = iota
24
+ typeLibrary
25
+ typeProgram
26
+ typeLibraryProgram
27
+ typeProgramLibrary
28
+ )
29
+
20
30
var (
21
31
dep14 bool
22
32
pristineTar bool
@@ -388,39 +398,40 @@ func normalizeDebianProgramName(str string) string {
388
398
}
389
399
390
400
// This follows https://fedoraproject.org/wiki/PackagingDrafts/Go#Package_Names
391
- func debianNameFromGopkg (gopkg , t string , allowUnknownHoster bool ) string {
401
+ func debianNameFromGopkg (gopkg string , t packageType , allowUnknownHoster bool ) string {
392
402
parts := strings .Split (gopkg , "/" )
393
403
394
- if t == "program" {
404
+ if t == typeProgram || t == typeProgramLibrary {
395
405
return normalizeDebianProgramName (parts [len (parts )- 1 ])
396
406
}
397
407
398
408
host := parts [0 ]
399
- if host == "github.com" {
409
+ switch host {
410
+ case "github.com" :
400
411
host = "github"
401
- } else if host == "code.google.com" {
412
+ case "code.google.com" :
402
413
host = "googlecode"
403
- } else if host == "cloud.google.com" {
414
+ case "cloud.google.com" :
404
415
host = "googlecloud"
405
- } else if host == "gopkg.in" {
416
+ case "gopkg.in" :
406
417
host = "gopkg"
407
- } else if host == "golang.org" {
418
+ case "golang.org" :
408
419
host = "golang"
409
- } else if host == "google.golang.org" {
420
+ case "google.golang.org" :
410
421
host = "google"
411
- } else if host == "bitbucket.org" {
422
+ case "bitbucket.org" :
412
423
host = "bitbucket"
413
- } else if host == "bazil.org" {
424
+ case "bazil.org" :
414
425
host = "bazil"
415
- } else if host == "pault.ag" {
426
+ case "pault.ag" :
416
427
host = "pault"
417
- } else if host == "howett.net" {
428
+ case "howett.net" :
418
429
host = "howett"
419
- } else if host == "go4.org" {
430
+ case "go4.org" :
420
431
host = "go4"
421
- } else if host == "salsa.debian.org" {
432
+ case "salsa.debian.org" :
422
433
host = "debian"
423
- } else {
434
+ default :
424
435
if allowUnknownHoster {
425
436
suffix , _ := publicsuffix .PublicSuffix (host )
426
437
host = host [:len (host )- len (suffix )- len ("." )]
@@ -574,11 +585,15 @@ func execMake(args []string, usage func()) {
574
585
false ,
575
586
"Keep using a pristine-tar branch as in the old workflow.\n Strongly discouraged, see \" pristine-tar considered harmful\" \n https://michael.stapelberg.ch/posts/2018-01-28-pristine-tar/\n and the \" Drop pristine-tar branches\" section at\n https://go-team.pages.debian.net/workflow-changes.html" )
576
587
577
- var pkgType string
578
- fs .StringVar (& pkgType ,
588
+ var pkgTypeString string
589
+ fs .StringVar (& pkgTypeString ,
579
590
"type" ,
580
591
"" ,
581
- "One of \" library\" or \" program\" " )
592
+ "Set package type, one of:\n " +
593
+ ` * "library" (aliases: "lib", "l", "dev")` + "\n " +
594
+ ` * "program" (aliases: "prog", "p")` + "\n " +
595
+ ` * "library+program" (aliases: "lib+prog", "l+p", "both")` + "\n " +
596
+ ` * "program+library" (aliases: "prog+lib", "p+l", "combined")` )
582
597
583
598
fs .StringVar (& wrapAndSort ,
584
599
"wrap-and-sort" ,
@@ -608,9 +623,33 @@ func execMake(args []string, usage func()) {
608
623
gopkg = rr .Root
609
624
}
610
625
611
- debsrc := debianNameFromGopkg (gopkg , "library" , allowUnknownHoster )
612
-
613
- if strings .TrimSpace (pkgType ) != "" {
626
+ // Set default source and binary package names.
627
+ // Note that debsrc may change depending on the actual package type.
628
+ debsrc := debianNameFromGopkg (gopkg , typeLibrary , allowUnknownHoster )
629
+ debLib := debsrc + "-dev"
630
+ debProg := debianNameFromGopkg (gopkg , typeProgram , allowUnknownHoster )
631
+
632
+ var pkgType packageType
633
+
634
+ switch strings .TrimSpace (pkgTypeString ) {
635
+ case "" , "guess" :
636
+ pkgType = typeGuess
637
+ case "library" , "lib" , "l" , "dev" :
638
+ pkgType = typeLibrary
639
+ case "program" , "prog" , "p" :
640
+ pkgType = typeProgram
641
+ case "library+program" , "lib+prog" , "l+p" , "both" :
642
+ // Example packages: golang-github-alecthomas-chroma,
643
+ // golang-github-tdewolff-minify, golang-github-spf13-viper
644
+ pkgType = typeLibraryProgram
645
+ case "program+library" , "prog+lib" , "p+l" , "combined" :
646
+ // Example package: hugo
647
+ pkgType = typeProgramLibrary
648
+ default :
649
+ log .Fatalf ("-type=%q not recognized, aborting\n " , pkgTypeString )
650
+ }
651
+
652
+ if pkgType != typeGuess {
614
653
debsrc = debianNameFromGopkg (gopkg , pkgType , allowUnknownHoster )
615
654
if _ , err := os .Stat (debsrc ); err == nil {
616
655
log .Fatalf ("Output directory %q already exists, aborting\n " , debsrc )
@@ -644,19 +683,15 @@ func execMake(args []string, usage func()) {
644
683
log .Fatalf ("Could not create a tarball of the upstream source: %v\n " , err )
645
684
}
646
685
647
- if strings . TrimSpace ( pkgType ) == "" {
686
+ if pkgType == typeGuess {
648
687
if u .firstMain != "" {
649
688
log .Printf ("Assuming you are packaging a program (because %q defines a main package), use -type to override\n " , u .firstMain )
650
- pkgType = "program"
689
+ pkgType = typeProgram
651
690
debsrc = debianNameFromGopkg (gopkg , pkgType , allowUnknownHoster )
652
691
} else {
653
- pkgType = "library"
692
+ pkgType = typeLibrary
654
693
}
655
694
}
656
- debbin := debsrc + "-dev"
657
- if pkgType == "program" {
658
- debbin = debsrc
659
- }
660
695
661
696
if _ , err := os .Stat (debsrc ); err == nil {
662
697
log .Fatalf ("Output directory %q already exists, aborting\n " , debsrc )
@@ -692,7 +727,7 @@ func execMake(args []string, usage func()) {
692
727
for _ , dep := range u .repoDeps {
693
728
if len (golangBinaries ) == 0 {
694
729
// fall back to heuristic
695
- debdependencies = append (debdependencies , debianNameFromGopkg (dep , "library" , allowUnknownHoster )+ "-dev" )
730
+ debdependencies = append (debdependencies , debianNameFromGopkg (dep , typeLibrary , allowUnknownHoster )+ "-dev" )
696
731
continue
697
732
}
698
733
bin , ok := golangBinaries [dep ]
@@ -703,7 +738,7 @@ func execMake(args []string, usage func()) {
703
738
debdependencies = append (debdependencies , bin )
704
739
}
705
740
706
- if err := writeTemplates (dir , gopkg , debsrc , debbin , debversion , pkgType , debdependencies , u .vendorDirs ); err != nil {
741
+ if err := writeTemplates (dir , gopkg , debsrc , debLib , debProg , debversion , pkgType , debdependencies , u .vendorDirs ); err != nil {
707
742
log .Fatalf ("Could not create debian/ from templates: %v\n " , err )
708
743
}
709
744
@@ -715,6 +750,20 @@ func execMake(args []string, usage func()) {
715
750
log .Printf ("\n " )
716
751
log .Printf ("Packaging successfully created in %s\n " , dir )
717
752
log .Printf ("\n " )
753
+ log .Printf (" Source: %s\n " , debsrc )
754
+ switch pkgType {
755
+ case typeLibrary :
756
+ log .Printf (" Package: %s\n " , debLib )
757
+ case typeProgram :
758
+ log .Printf (" Package: %s\n " , debProg )
759
+ case typeLibraryProgram :
760
+ log .Printf (" Package: %s\n " , debLib )
761
+ log .Printf (" Package: %s\n " , debProg )
762
+ case typeProgramLibrary :
763
+ log .Printf (" Package: %s\n " , debProg )
764
+ log .Printf (" Package: %s\n " , debLib )
765
+ }
766
+ log .Printf ("\n " )
718
767
log .Printf ("Resolve all TODOs in %s, then email it out:\n " , itpname )
719
768
log .Printf (" sendmail -t < %s\n " , itpname )
720
769
log .Printf ("\n " )
0 commit comments