| // Copyright 2020 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| //go:build ignore | |
| // +build ignore | |
| // This program generates zipdata.go from $GOROOT/lib/time/zoneinfo.zip. | |
| package main | |
| import ( | |
| "bufio" | |
| "fmt" | |
| "os" | |
| "strconv" | |
| ) | |
| // header is put at the start of the generated file. | |
| // The string addition avoids this file (generate_zipdata.go) from | |
| // matching the "generated file" regexp. | |
| const header = `// Copyright 2020 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| ` + `// Code generated by generate_zipdata. DO NOT EDIT. | |
| // This file contains an embedded zip archive that contains time zone | |
| // files compiled using the code and data maintained as part of the | |
| // IANA Time Zone Database. | |
| // The IANA asserts that the data is in the public domain. | |
| // For more information, see | |
| // https://www.iana.org/time-zones | |
| // ftp://ftp.iana.org/tz/code/tz-link.htm | |
| // http://tools.ietf.org/html/rfc6557 | |
| package tzdata | |
| const zipdata = ` | |
| func main() { | |
| // We should be run in the $GOROOT/src/time/tzdata directory. | |
| data, err := os.ReadFile("../../../lib/time/zoneinfo.zip") | |
| if err != nil { | |
| die("cannot find zoneinfo.zip file: %v", err) | |
| } | |
| of, err := os.Create("zipdata.go") | |
| if err != nil { | |
| die("%v", err) | |
| } | |
| buf := bufio.NewWriter(of) | |
| buf.WriteString(header) | |
| ds := string(data) | |
| i := 0 | |
| const chunk = 60 | |
| for ; i+chunk < len(data); i += chunk { | |
| if i > 0 { | |
| buf.WriteRune('\t') | |
| } | |
| fmt.Fprintf(buf, "%s +\n", strconv.Quote(ds[i:i+chunk])) | |
| } | |
| fmt.Fprintf(buf, "\t%s\n", strconv.Quote(ds[i:])) | |
| if err := buf.Flush(); err != nil { | |
| die("error writing to zipdata.go: %v", err) | |
| } | |
| if err := of.Close(); err != nil { | |
| die("error closing zipdata.go: %v", err) | |
| } | |
| } | |
| func die(format string, args ...interface{}) { | |
| fmt.Fprintf(os.Stderr, format+"\n", args...) | |
| os.Exit(1) | |
| } |