diff options
author | John Stebbins <[email protected]> | 2015-08-25 09:48:14 -0700 |
---|---|---|
committer | John Stebbins <[email protected]> | 2015-11-09 08:39:18 -0800 |
commit | 2ae0de42922185fd1b23751c58d8a1ff671f52be (patch) | |
tree | 864229a9ecd20c71b8fd00ba80adce61f2abd20a | |
parent | 602ede716370c1ca16e784f8008a75c14f77f854 (diff) |
build: use git version info instead of svn
Migrate from svn to git. Since our build system automatically generates
version info from the svn repo, this needs to change when we move the
repo to git.
-rw-r--r-- | doc/texi/Building.linux.texi | 4 | ||||
-rw-r--r-- | doc/texi/base/handbrake.texi.m4 | 4 | ||||
-rw-r--r-- | doc/texi/building/appendix.repo.texi | 4 | ||||
-rw-r--r-- | doc/texi/building/chapter.via.terminal.texi | 2 | ||||
-rw-r--r-- | doc/texi/building/command.texi | 2 | ||||
-rw-r--r-- | doc/texi/building/prerequisites.common.texi | 2 | ||||
-rw-r--r-- | libhb/hb.c | 59 | ||||
-rw-r--r-- | libhb/hb.h | 3 | ||||
-rw-r--r-- | libhb/project.h.m4 | 10 | ||||
-rw-r--r-- | make/configure.py | 154 | ||||
-rw-r--r-- | make/include/tool.defs | 1 | ||||
-rw-r--r-- | pkg/linux/module.defs | 35 | ||||
-rw-r--r-- | pkg/linux/module.rules | 62 | ||||
-rw-r--r-- | pkg/module.rules | 5 | ||||
-rwxr-xr-x | scripts/repo-info.sh | 67 | ||||
-rwxr-xr-x | scripts/tag-release.sh | 86 | ||||
-rw-r--r-- | test/test.c | 10 |
17 files changed, 376 insertions, 134 deletions
diff --git a/doc/texi/Building.linux.texi b/doc/texi/Building.linux.texi index 79da9b796..26d7790b2 100644 --- a/doc/texi/Building.linux.texi +++ b/doc/texi/Building.linux.texi @@ -33,7 +33,7 @@ The @b{GTK UI} introduces some significant extra build requirements. GTK version Ubuntu 14.04 packages: @itemize @bullet -@item subversion (cli/gui) +@item git (cli/gui) @item cmake (cli/gui) @item yasm (cli/gui) @item build-essential (cli/gui) @@ -66,7 +66,7 @@ Ubuntu 14.04 packages: To install these packages: @example -sudo apt-get install subversion cmake yasm build-essential autoconf libtool \ +sudo apt-get install git cmake yasm build-essential autoconf libtool \ zlib1g-dev libbz2-dev libogg-dev libtheora-dev libvorbis-dev \ libsamplerate-dev libxml2-dev libfribidi-dev libfreetype6-dev \ libfontconfig1-dev libass-dev libmp3lame-dev libx264-dev intltool \ diff --git a/doc/texi/base/handbrake.texi.m4 b/doc/texi/base/handbrake.texi.m4 index 1367c4d58..099e7f78f 100644 --- a/doc/texi/base/handbrake.texi.m4 +++ b/doc/texi/base/handbrake.texi.m4 @@ -20,10 +20,10 @@ dnl @set HB-version-hex __HB_version_hex @set HB-build __HB_build @set HB-repo-url __HB_repo_url -@set HB-repo-root __HB_repo_root @set HB-repo-branch __HB_repo_branch -@set HB-repo-uuid __HB_repo_uuid +@set HB-repo-tag __HB_repo_tag @set HB-repo-rev __HB_repo_rev +@set HB-repo-hash __HB_repo_hash @set HB-repo-date __HB_repo_date @set HB-repo-official __HB_repo_official @set HB-repo-type __HB_repo_type diff --git a/doc/texi/building/appendix.repo.texi b/doc/texi/building/appendix.repo.texi index ea7bf2d8a..59b501ed0 100644 --- a/doc/texi/building/appendix.repo.texi +++ b/doc/texi/building/appendix.repo.texi @@ -1,10 +1,10 @@ @appendix Project Repository Details @example url: @value{HB-repo-url} -root: @value{HB-repo-root} branch: @value{HB-repo-branch} -uuid: @value{HB-repo-uuid} +tag: @value{HB-repo-tag} rev: @value{HB-repo-rev} +hash: @value{HB-repo-hash} date: @value{HB-repo-date} type: @value{HB-repo-type} @end example diff --git a/doc/texi/building/chapter.via.terminal.texi b/doc/texi/building/chapter.via.terminal.texi index b5c61eb38..b98301b66 100644 --- a/doc/texi/building/chapter.via.terminal.texi +++ b/doc/texi/building/chapter.via.terminal.texi @@ -62,7 +62,7 @@ Clean-room procedures dictate that when certain factors change, old builds shoul @itemize @item configure with different options -@item subversion working dir is updated and you want configure to re-evaluate working dir metadata. +@item git working dir is updated and you want configure to re-evaluate working dir metadata. @item build corruption is suspected @end itemize diff --git a/doc/texi/building/command.texi b/doc/texi/building/command.texi index fedb58188..cd97764c0 100644 --- a/doc/texi/building/command.texi +++ b/doc/texi/building/command.texi @@ -1,4 +1,4 @@ @macro COMMAND-checkout{} -svn checkout @value{HB-repo-url} @value{HB-acro-lower}-@value{HB-repo-branch} +git clone @value{HB-repo-url} @value{HB-acro-lower}-@value{HB-repo-branch} cd @value{HB-acro-lower}-@value{HB-repo-branch} @end macro diff --git a/doc/texi/building/prerequisites.common.texi b/doc/texi/building/prerequisites.common.texi index 64c21fd38..30b1621f1 100644 --- a/doc/texi/building/prerequisites.common.texi +++ b/doc/texi/building/prerequisites.common.texi @@ -1,7 +1,7 @@ The following general tools are used on various platforms and it is recommended you use these versions or similar: @itemize @bullet -@item subversion - 1.6.16 +@item git - 2.4.3 @item python - Python 2.7.1 @item curl - curl 7.21.4 (or wget) @item m4 - GNU M4 1.4.6 diff --git a/libhb/hb.c b/libhb/hb.c index ab71570f6..1af021cd5 100644 --- a/libhb/hb.c +++ b/libhb/hb.c @@ -503,15 +503,68 @@ hb_handle_t * hb_init_dl( int verbose, int update_check ) return h; } +// Make sure these strings at least exist in the executable even though +// they may not all be visible in the frontend. +static const char* hb_title = HB_PROJECT_TITLE; +static const char* hb_name = HB_PROJECT_NAME; +static const char* hb_website = HB_PROJECT_URL_WEBSITE; +static const char* hb_community = HB_PROJECT_URL_COMMUNITY; +static const char* hb_irc = HB_PROJECT_URL_IRC; +static const char* hb_version = HB_PROJECT_VERSION; +static const int hb_build = HB_PROJECT_BUILD; +static const char* hb_repo_url = HB_PROJECT_REPO_URL; +static const char* hb_repo_tag = HB_PROJECT_REPO_TAG; +static const int hb_repo_rev = HB_PROJECT_REPO_REV; +static const char* hb_repo_hash = HB_PROJECT_REPO_HASH; +static const char* hb_repo_branch = HB_PROJECT_REPO_BRANCH; +static const char* hb_repo_remote = HB_PROJECT_REPO_REMOTE; +static const char* hb_repo_type = HB_PROJECT_REPO_TYPE; + +const char * hb_get_full_description() +{ + static char * desc = NULL; + if (desc == NULL) + { + desc = hb_strdup_printf("%s\n" + "\tWebsite: %s\n" + "\tForum: %s\n" + "\tIRC: %s\n" + "\tBuild Type: %s\n" + "\tRepository: %s\n" + "\tRelease Tag: %s\n" + "\tRevision: %d\n" + "\tCommit Hash: %s\n" + "\tBranch: %s\n" + "\tRemote: %s", + hb_title, hb_website, hb_community, hb_irc, + hb_repo_type, hb_repo_url, hb_repo_tag, hb_repo_rev, + hb_repo_hash, hb_repo_branch, hb_repo_remote); + } + return desc; +} /** * Returns current version of libhb. * @param h Handle to hb_handle_t. * @return character array of version number. */ -char * hb_get_version( hb_handle_t * h ) +const char * hb_get_version( hb_handle_t * h ) { - return HB_PROJECT_VERSION; + // Silence compiler warnings for unused variables + ((void)(hb_title)); + ((void)(hb_name)); + ((void)(hb_website)); + ((void)(hb_community)); + ((void)(hb_irc)); + ((void)(hb_version)); + ((void)(hb_repo_url)); + ((void)(hb_repo_tag)); + ((void)(hb_repo_rev)); + ((void)(hb_repo_hash)); + ((void)(hb_repo_branch)); + ((void)(hb_repo_remote)); + ((void)(hb_repo_type)); + return hb_version; } /** @@ -521,7 +574,7 @@ char * hb_get_version( hb_handle_t * h ) */ int hb_get_build( hb_handle_t * h ) { - return HB_PROJECT_BUILD; + return hb_build; } /** diff --git a/libhb/hb.h b/libhb/hb.h index 743a2ccfa..1cd471561 100644 --- a/libhb/hb.h +++ b/libhb/hb.h @@ -29,7 +29,8 @@ hb_handle_t * hb_init( int verbose, int update_check ); hb_handle_t * hb_init_dl ( int verbose, int update_check ); // hb_init for use with dylib /* hb_get_version() */ -char * hb_get_version( hb_handle_t * ); +const char * hb_get_full_description(); +const char * hb_get_version( hb_handle_t * ); int hb_get_build( hb_handle_t * ); /* hb_check_update() diff --git a/libhb/project.h.m4 b/libhb/project.h.m4 index 7e70b5b36..ae54f255c 100644 --- a/libhb/project.h.m4 +++ b/libhb/project.h.m4 @@ -21,12 +21,14 @@ dnl <<#>>define HB_PROJECT_VERSION_HEX 0x<<>>__HB_version_hex<<>>LL <<#>>define HB_PROJECT_BUILD __HB_build <<#>>define HB_PROJECT_REPO_URL "__HB_repo_url" -<<#>>define HB_PROJECT_REPO_ROOT "__HB_repo_root" -<<#>>define HB_PROJECT_REPO_UUID "__HB_repo_uuid" +<<#>>define HB_PROJECT_REPO_TAG "__HB_repo_tag" <<#>>define HB_PROJECT_REPO_REV __HB_repo_rev -<<#>>define HB_PROJECT_REPO_DATE "__HB_repo_date" -<<#>>define HB_PROJECT_REPO_OFFICIAL __HB_repo_official +<<#>>define HB_PROJECT_REPO_HASH "__HB_repo_hash" +<<#>>define HB_PROJECT_REPO_BRANCH "__HB_repo_branch" +<<#>>define HB_PROJECT_REPO_REMOTE "__HB_repo_remote" <<#>>define HB_PROJECT_REPO_TYPE "__HB_repo_type" +<<#>>define HB_PROJECT_REPO_OFFICIAL __HB_repo_official +<<#>>define HB_PROJECT_REPO_DATE "__HB_repo_date" <<#>>define HB_PROJECT_BUILD_SPEC "__BUILD_spec" <<#>>define HB_PROJECT_BUILD_MACHINE "__BUILD_machine" diff --git a/make/configure.py b/make/configure.py index a825f64b1..c5bcf915f 100644 --- a/make/configure.py +++ b/make/configure.py @@ -159,12 +159,12 @@ class Configure( object ): if os.access( name, os.X_OK ): return name return None - + if not os.environ.has_key( 'PATH' ) or os.environ[ 'PATH' ] == '': path = os.defpath else: path = os.environ['PATH'] - + for dir in path.split( os.pathsep ): f = os.path.join( dir, name ) if os.access( f, os.X_OK ): @@ -317,7 +317,7 @@ class ShellProbe( Action ): ## ## returns true if feature successfully compiles ## -## +## class CCProbe( Action ): def __init__( self, pretext, command, test_file ): super( CCProbe, self ).__init__( 'probe', pretext ) @@ -358,7 +358,7 @@ class CCProbe( Action ): ## ## returns true if feature successfully compiles ## -## +## class LDProbe( Action ): def __init__( self, pretext, command, lib, test_file ): super( LDProbe, self ).__init__( 'probe', pretext ) @@ -444,7 +444,7 @@ class HostTupleProbe( ShellProbe, list ): if self.match( '*-*-cygwin*' ): self.systemf = self[2][0].upper() + self[2][1:] - + ## glob-match against spec def match( self, *specs ): for spec in specs: @@ -519,7 +519,7 @@ class IfHost( object ): def __nonzero__( self ): return self.value != None - + def __str__( self ): return self.value @@ -551,7 +551,7 @@ class ArchAction( Action ): def _action( self ): self.fail = False - ## some match on system should be made here; otherwise we signal a warning. + ## some match on system should be made here; otherwise we signal a warning. if host.match( '*-*-cygwin*' ): pass elif host.match( '*-*-darwin11.*' ): @@ -673,74 +673,67 @@ class SelectMode( dict ): ## Builds are classed into one of the following types: ## ## release -## must be built from official svn with '/tags/' in the url +## must be built from official git at version tag ## developer -## must be built from official svn but is not a release -## unofficial -## all other builds +## must be built from official git but is not a release ## class RepoProbe( ShellProbe ): def __init__( self ): - svn = 'svn' - - ## Possible the repo was created using an incompatible version than what is - ## available in PATH when probe runs. Workaround by checking for file - ## .svn/HANDBRAKE_REPO_PROBE which points to a preferred svn executable. + # Find script that creates repo info try: - hrp = os.path.join( cfg.src_dir, '.svn', 'HANDBRAKE_REPO_PROBE' ) - if os.path.isfile( hrp ) and os.path.getsize( hrp ) > 0: - file = cfg.open( hrp, 'r' ) - line = file.readline().strip() - file.close() - if line: - svn = line + repo_info = os.path.join( cfg.src_dir, 'scripts', 'repo-info.sh' ) + if not os.path.isfile( repo_info ): + cfg.errln( 'Missing required script %s\n', repo_info ) + sys.exit( 1 ) except: - pass + sys.exit( 1 ) - super( RepoProbe, self ).__init__( 'svn info', '%s info %s' % (svn,cfg.src_dir) ) + super( RepoProbe, self ).__init__( 'repo info', '%s %s' % + (repo_info, cfg.src_dir) ) - self.url = 'svn://nowhere.com/project/unknown' - self.root = 'svn://nowhere.com/project' + self.url = 'git://nowhere.com/project/unknown' + self.tag = '' self.branch = 'unknown' - self.uuid = '00000000-0000-0000-0000-000000000000'; + self.remote = 'unknown' self.rev = 0 + self.hash = 'deadbeaf' + self.shorthash = 'deadbea' self.date = '0000-00-00 00:00:00 -0000' self.official = 0 - self.type = 'unofficial' + self.type = 'developer' def _parseSession( self ): for line in self.session: ## grok fields - m = re.match( '([^:]+):\\s+(.+)', line ) + m = re.match( '([^\=]+)\=(.*)', line ) if not m: continue (name,value) = m.groups() - if name == 'URL': + if name == 'URL' and value != '': self.url = value - elif name == 'Repository Root': - self.root = value - elif name == 'Repository UUID': - self.uuid = value - elif name == 'Revision': + elif name == 'TAG': + self.tag = value + elif name == 'BRANCH': + self.branch = value + elif name == 'REMOTE': + self.remote = value + elif name == 'REV': self.rev = int( value ) - elif name == 'Last Changed Date': - # strip chars in parens - if value.find( ' (' ): - self.date = value[0:value.find(' (')] - else: - self.date = value - - ## grok branch - i = self.url.rfind( '/' ) - if i != -1 and i < len(self.url)-1: - self.branch = self.url[i+1:] - - # type-classification via repository UUID - if self.uuid == 'b64f7644-9d1e-0410-96f1-a4d463321fa5': + elif name == 'DATE': + self.date = value + elif name == 'HASH': + self.hash = value + self.shorthash = value[:7] + + # type-classification via repository URL + official_url = 'https://github.com/HandBrake/HandBrake.git' # HTTPS + if self.url == '[email protected]:HandBrake/HandBrake.git': # SSH + self.url = official_url + + if self.url == official_url: self.official = 1 - m = re.match( '([^:]+)://([^/]+)/(.+)', self.url ) - if m and re.match( '.*tags/.*', m.group( 3 )): + if self.branch == '' and self.rev == 0: self.type = 'release' else: self.type = 'developer' @@ -748,12 +741,12 @@ class RepoProbe( ShellProbe ): self.msg_end = self.url def _failSession( self ): - # Look for svn info in version file. + # Look for repo info in version file. # # Version file would be created manually by source packager. # e.g. - # $ svn info HandBrake > HandBrake/version.txt - # $ tar -czf handbrake-source.tgz --exclude .svn HandBrake + # $ HandBrake/scripts/repo-info.sh HandBrake > HandBrake/version.txt + # $ tar -czf handbrake-source.tgz --exclude .git HandBrake cfg.infof( 'probe: version.txt...' ) try: hvp = os.path.join( cfg.src_dir, 'version.txt' ) @@ -793,8 +786,8 @@ class Project( Action ): self.name_upper = self.name.upper() self.vmajor = 0 - self.vminor = 10 - self.vpoint = 2 + self.vminor = 0 + self.vpoint = 0 def _action( self ): ## add architecture to URL only for Mac @@ -803,24 +796,33 @@ class Project( Action ): else: url_arch = '' + if repo.tag != '': + m = re.match( '([0-9]+)\.([0-9]+)\.([0-9]+)', repo.tag ) + if not m: + cfg.errln( 'Invalid repo tag format %s\n', repo.tag ) + sys.exit( 1 ) + (vmajor, vminor, vpoint) = m.groups() + self.vmajor = int(vmajor) + self.vminor = int(vminor) + self.vpoint = int(vpoint) + if repo.type == 'release': self.version = '%d.%d.%d' % (self.vmajor,self.vminor,self.vpoint) url_ctype = '' url_ntype = 'stable' self.build = time.strftime('%Y%m%d') + '00' self.title = '%s %s (%s)' % (self.name,self.version,self.build) - elif repo.type == 'developer': - self.version = '%dsvn' % (repo.rev) + else: + if repo.branch != '': + self.version = '%d.%d.%d-%d-%s-%s' % (self.vmajor, self.vminor, + self.vpoint, repo.rev, repo.shorthash, repo.branch) + else: + self.version = '%d.%d.%d-%d-%s' % (self.vmajor, self.vminor, + self.vpoint, repo.rev, repo.shorthash) url_ctype = '_unstable' url_ntype = 'unstable' self.build = time.strftime('%Y%m%d') + '01' - self.title = '%s svn%d (%s)' % (self.name,repo.rev,self.build) - else: - self.version = 'rev%d' % (repo.rev) - url_ctype = '_unofficial' - url_ntype = 'unofficial' - self.build = time.strftime('%Y%m%d') + '99' - self.title = '%s rev%d (%s)' % (self.name,repo.rev,self.build) + self.title = '%s %s (%s)' % (self.name,self.version,self.build) self.url_appcast = 'https://handbrake.fr/appcast%s%s.xml' % (url_ctype,url_arch) self.url_appnote = 'https://handbrake.fr/appcast/%s.html' % (url_ntype) @@ -1206,7 +1208,7 @@ def createCLI(): h = IfHost( 'enable HWD features', '*-*-*', none=optparse.SUPPRESS_HELP ).value grp.add_option( '--enable-hwd', default=False, action='store_true', help=h ) - + h = IfHost( 'enable use of x265 encoding', '*-*-*', none=optparse.SUPPRESS_HELP ).value grp.add_option( '--enable-x265', default=True, action='store_true', help=h ) grp.add_option( '--disable-x265', dest="enable_x265", action='store_false' ) @@ -1653,13 +1655,15 @@ int main() doc.add( 'HB.build', project.build ) doc.add( 'HB.repo.url', repo.url ) - doc.add( 'HB.repo.root', repo.root ) - doc.add( 'HB.repo.branch', repo.branch ) - doc.add( 'HB.repo.uuid', repo.uuid ) + doc.add( 'HB.repo.tag', repo.tag ) doc.add( 'HB.repo.rev', repo.rev ) - doc.add( 'HB.repo.date', repo.date ) - doc.add( 'HB.repo.official', repo.official ) + doc.add( 'HB.repo.hash', repo.hash ) + doc.add( 'HB.repo.shorthash', repo.shorthash ) + doc.add( 'HB.repo.branch', repo.branch ) + doc.add( 'HB.repo.remote', repo.remote ) doc.add( 'HB.repo.type', repo.type ) + doc.add( 'HB.repo.official', repo.official ) + doc.add( 'HB.repo.date', repo.date ) doc.addBlank() doc.add( 'HOST.spec', host.spec ) @@ -1700,7 +1704,7 @@ int main() doc.add( 'BUILD/', cfg.build_final + os.sep ) doc.add( 'PREFIX', cfg.prefix_final ) doc.add( 'PREFIX/', cfg.prefix_final + os.sep ) - + doc.addBlank() doc.add( 'FEATURE.local_yasm', int( options.enable_local_yasm )) doc.add( 'FEATURE.local_autotools', int( options.enable_local_autotools )) @@ -1850,7 +1854,7 @@ except AbortError, x: try: cfg.record_log() except: - pass - sys.exit( 1 ) + pass + sys.exit( 1 ) sys.exit( 0 ) diff --git a/make/include/tool.defs b/make/include/tool.defs index 29f45e9a7..3efe5d83f 100644 --- a/make/include/tool.defs +++ b/make/include/tool.defs @@ -11,3 +11,4 @@ WGET.exe = wget MV.exe = mv ZIP.exe = zip LN.exe = ln +GIT.exe = git diff --git a/pkg/linux/module.defs b/pkg/linux/module.defs index 2570d0857..3b1a81f8e 100644 --- a/pkg/linux/module.defs +++ b/pkg/linux/module.defs @@ -1,8 +1,19 @@ PKG.deb.machine = `dpkg --print-architecture` PKG.rpm.machine = `rpm -E "%_target_cpu"` -PKG.release = 1 +PKG.release = $(HB.repo.rev) PKG.rpm.dist = `rpm -E "%dist"` +ifeq ($(HB.repo.tag),) + tag = 0.0.0 +endif +ifeq ($(HB.repo.type),release) + PKG.rpm.hb.version = $(tag) +else ifeq ($(HB.repo.branch),) + PKG.rpm.hb.version = $(tab).$(HB.repo.shorthash) +else + PKG.rpm.hb.version = $(tag).$(HB.repo.shorthash).$(HB.repo.branch) +endif + ############################################################################### @@ -12,27 +23,29 @@ STAGE.out.cli/ = $(STAGE.out/)cli/ ############################################################################### -PKG.rpm.src.tar.bz2 = $(STAGE.out.src/)rpm/$(PKG.basename).tar.bz2 +PKG.rpm.basename = $(HB.name.lower)-$(PKG.rpm.hb.version) +PKG.rpm.src.tar.bz2 = $(STAGE.out.src/)rpm/$(PKG.rpm.basename).tar.bz2 STAGE.out.rpm.src/ = $(STAGE.out.src/)rpm/ PKG.debian = $(PKG.in/)linux/debian PKG.cli.deb = $(PKG.out/)$(HB.name)-$(HB.version)-Ubuntu_CLI_$(BUILD.machine).deb PKG.gui.deb = $(PKG.out/)$(HB.name)-$(HB.version)-Ubuntu_GUI_$(BUILD.machine).deb -PKG.deb.basename = handbrake-$(HB.version) -PKG.src.deb.tar = handbrake_$(HB.version).tar.gz +PKG.deb.basename = $(HB.name.lower)-$(HB.version) +PKG.src.deb.tar = $(HB.name.lower)_$(HB.version).tar.gz PKG.src.deb.stamp = $(STAGE.out.src/).debsrc.stamp -PKG.src.deb = $(PKG.out/)handbrake_$(HB.version).deb +PKG.src.deb = $(PKG.out/)$(HB.name.lower)_$(HB.version).deb -PKG.cli.tmp.deb = $(PKG.out/)handbrake-cli_$(HB.version)_$(PKG.deb.machine).deb -PKG.gui.tmp.deb = $(PKG.out/)handbrake-gtk_$(HB.version)_$(PKG.deb.machine).deb +PKG.cli.tmp.deb = $(PKG.out/)$(HB.name.lower)-cli_$(HB.version)_$(PKG.deb.machine).deb +PKG.gui.tmp.deb = $(PKG.out/)$(HB.name.lower)-gtk_$(HB.version)_$(PKG.deb.machine).deb PKG.native.rpm.stamp = $(RPM.out/).rpm.stamp +PKG.rpm.stamp = $(PKG.out/).rpm.stamp -PKG.gui.native.rpm = $(RPM.out/)RPMS/$(PKG.rpm.machine)/$(HB.name)-gui-$(HB.version)-$(PKG.release)$(PKG.rpm.dist).$(PKG.rpm.machine).rpm -PKG.cli.native.rpm = $(RPM.out/)RPMS/$(PKG.rpm.machine)/$(HB.name)-cli-$(HB.version)-$(PKG.release)$(PKG.rpm.dist).$(PKG.rpm.machine).rpm +PKG.gui.native.rpm = $(RPM.out/)RPMS/$(PKG.rpm.machine)/$(HB.name.lower)-gui-$(PKG.rpm.hb.version)-$(PKG.release)$(PKG.rpm.dist).$(PKG.rpm.machine).rpm +PKG.cli.native.rpm = $(RPM.out/)RPMS/$(PKG.rpm.machine)/$(HB.name.lower)-cli-$(PKG.rpm.hb.version)-$(PKG.release)$(PKG.rpm.dist).$(PKG.rpm.machine).rpm -PKG.cli.rpm = $(PKG.out/)$(HB.name)-$(HB.version)-Fedora_CLI_$(BUILD.machine).rpm -PKG.gui.rpm = $(PKG.out/)$(HB.name)-$(HB.version)-Fedora_GUI_$(BUILD.machine).rpm +PKG.cli.rpm = $(PKG.out/)$(HB.name.lower)-cli-$(PKG.rpm.hb.version)-$(PKG.release)$(PKG.rpm.dist).$(PKG.rpm.machine).rpm +PKG.gui.rpm = $(PKG.out/)$(HB.name.lower)-gui-$(PKG.rpm.hb.version)-$(PKG.release)$(PKG.rpm.dist).$(PKG.rpm.machine).rpm RPM.out = $(STAGE.out/)rpm RPM.out/ = $(STAGE.out/)rpm/ RPMROOT.out = $(PWD)/$(STAGE.out/)rpmroot diff --git a/pkg/linux/module.rules b/pkg/linux/module.rules index 23692fb31..c0c2fba34 100644 --- a/pkg/linux/module.rules +++ b/pkg/linux/module.rules @@ -1,5 +1,5 @@ pkg.create.deb:: $(PKG.gui.deb) $(PKG.cli.deb) -pkg.create.rpm:: $(PKG.gui.rpm) +pkg.create.rpm:: $(PKG.rpm.stamp) pkg.create.src.deb:: $(PKG.src.deb.stamp) pkg.create.tar:: pkg.create $(PKG.cli.tar) @@ -21,17 +21,18 @@ $(STAGE.out.cli/): # RPM binary package rules # $(PKG.rpm.src.tar.bz2): $(STAGE.out.rpm.src/) - $(TAR.exe) cjf $@ -C $(STAGE.out.rpm.src/) $(PKG.basename) + $(TAR.exe) cjf $(PKG.rpm.src.tar.bz2) -C $(STAGE.out.rpm.src/) $(PKG.rpm.basename) $(STAGE.out.rpm.src/): GNUmakefile # -$(MKDIR.exe) -p $(STAGE.out.rpm.src/)$(PKG.basename) # tar c --exclude build ../* | tar x -C $(STAGE.out.rpm.src/)$(PKG.basename) -$(RM.exe) -rf $(STAGE.out.src/) make contrib.fetch - svn export -r$(HB.repo.rev) $(HB.repo.url) $@/$(PKG.basename) - svn info $(HB.repo.url)@$(HB.repo.rev) > $@/$(PKG.basename)/version.txt - -$(MKDIR.exe) $(STAGE.out.rpm.src/)$(PKG.basename)/download - $(CP.exe) $(SRC/)download/*.tar.* $(STAGE.out.rpm.src/)$(PKG.basename)/download + $(MKDIR.exe) -p $@ + $(GIT.exe) -C $(SRC/) archive --format=tar --prefix=$(PKG.rpm.basename)/ $(HB.repo.shorthash) | $(TAR.exe) -xC $@ + $(SRC/)scripts/repo-info.sh $(SRC/) > $@/$(PKG.rpm.basename)/version.txt + -$(MKDIR.exe) $(STAGE.out.rpm.src/)$(PKG.rpm.basename)/download + $(CP.exe) $(SRC/)download/*.tar.* $(STAGE.out.rpm.src/)$(PKG.rpm.basename)/download $(PKG.native.rpm.stamp): $(PKG.rpm.src.tar.bz2) -$(MKDIR.exe) -p $(RPM.out/)SOURCES @@ -40,18 +41,19 @@ $(PKG.native.rpm.stamp): $(PKG.rpm.src.tar.bz2) -$(MKDIR.exe) -p $(RPM.out/)RPMS -$(MKDIR.exe) -p $(RPM.out/)SRPMS -$(MKDIR.exe) -p $(RPMROOT.out/) - echo "%define name $(HB.name)" > $(RPM.out/)SPECS/ghb.spec - echo "%define release 1" >> $(RPM.out/)SPECS/ghb.spec - echo "%define version $(HB.version)" >> $(RPM.out/)SPECS/ghb.spec + echo "%define name $(HB.name.lower)" > $(RPM.out/)SPECS/ghb.spec + echo "%define release $(PKG.release)" >> $(RPM.out/)SPECS/ghb.spec + echo "%define version $(PKG.rpm.hb.version)" >> $(RPM.out/)SPECS/ghb.spec cat $(GTK.src/)ghb.spec >> $(RPM.out/)SPECS/ghb.spec $(CP.exe) $(PKG.rpm.src.tar.bz2) $(RPM.out/)SOURCES rpmbuild --define="_topdir $(PWD)/$(RPM.out)" --buildroot $(RPMROOT.out) -ba $(RPM.out/)SPECS/ghb.spec $(TOUCH.exe) $(PKG.native.rpm.stamp) -$(PKG.gui.rpm): | $(dir $(PKG.gui.rpm)) -$(PKG.gui.rpm): $(PKG.native.rpm.stamp) +$(PKG.rpm.stamp): | $(dir $(PKG.gui.rpm)) +$(PKG.rpm.stamp): $(PKG.native.rpm.stamp) $(CP.exe) $(PKG.gui.native.rpm) $(PKG.gui.rpm) $(CP.exe) $(PKG.cli.native.rpm) $(PKG.cli.rpm) + $(TOUCH.exe) $(PKG.rpm.stamp) # # Debian binary package rules @@ -77,32 +79,34 @@ $(PKG.cli.deb): $(PKG.gui.tmp.deb) # Debian source package rules # pkg.push.src.deb:: $(PKG.src.deb.stamp) - (cd $(STAGE.out.src/)utopic && dput handbrake-snapshots handbrake_$(HB.version)ppa1~utopic1_source.changes ) - (cd $(STAGE.out.src/)trusty && dput handbrake-snapshots handbrake_$(HB.version)ppa1~trusty1_source.changes ) + (cd $(STAGE.out.src/)vivid && dput handbrake-snapshots $(HB.name.lower)_$(HB.version)ppa1~vivid1_source.changes ) + (cd $(STAGE.out.src/)trusty && dput handbrake-snapshots $(HB.name.lower)_$(HB.version)ppa1~trusty1_source.changes ) $(PKG.src.deb.stamp): GNUmakefile -$(RM.exe) -rf $(STAGE.out.src/) make contrib.fetch - svn export -r$(HB.repo.rev) $(HB.repo.url) $(STAGE.out.src/)utopic/$(PKG.deb.basename) - svn info $(HB.repo.url)@$(HB.repo.rev) > $(STAGE.out.src/)utopic/$(PKG.deb.basename)/version.txt - $(CP.exe) -a $(SRC/)download $(STAGE.out.src/)utopic/$(PKG.deb.basename) - cp -a $(PWD)/$(PKG.debian) $(STAGE.out.src/)utopic/$(PKG.deb.basename) - $(CP.exe) $(STAGE.out.src/)utopic/$(PKG.deb.basename)/debian/control.utopic $(STAGE.out.src/)utopic/$(PKG.deb.basename)/debian/control - $(CP.exe) $(STAGE.out.src/)utopic/$(PKG.deb.basename)/debian/rules.utopic $(STAGE.out.src/)utopic/$(PKG.deb.basename)/debian/rules - echo "handbrake ($(HB.version)ppa1~utopic1) utopic; urgency=low" > $(STAGE.out.src/)utopic/$(PKG.deb.basename)/debian/changelog - echo " * Snapshot" >> $(STAGE.out.src/)utopic/$(PKG.deb.basename)/debian/changelog - echo " - See timeline at http://trac.handbrake.fr/timeline" >> $(STAGE.out.src/)utopic/$(PKG.deb.basename)/debian/changelog - echo "" >> $(STAGE.out.src/)utopic/$(PKG.deb.basename)/debian/changelog - echo " -- John Stebbins <[email protected]> Sun, 11 Apr 2010 9:51:07 -0800" >> $(STAGE.out.src/)utopic/$(PKG.deb.basename)/debian/changelog - $(TAR.exe) czf $(STAGE.out.src/)utopic/$(PKG.src.deb.tar) -C $(STAGE.out.src/)utopic $(PKG.deb.basename) - (cd $(STAGE.out.src/)utopic/$(PKG.deb.basename) && debuild -S -kjstebbins.hb) - svn export -r$(HB.repo.rev) $(HB.repo.url) $(STAGE.out.src/)trusty/$(PKG.deb.basename) - svn info $(HB.repo.url)@$(HB.repo.rev) > $(STAGE.out.src/)trusty/$(PKG.deb.basename)/version.txt + $(MKDIR.exe) -p $(STAGE.out.src/)vivid + $(GIT.exe) -C $(SRC/) archive --format=tar --prefix=$(PKG.deb.basename)/ $(HB.repo.shorthash) | $(TAR.exe) -xC $(STAGE.out.src/)vivid/ + $(SRC/)scripts/repo-info.sh $(SRC/) > $(STAGE.out.src/)vivid/$(PKG.deb.basename)/version.txt + $(CP.exe) -a $(SRC/)download $(STAGE.out.src/)vivid/$(PKG.deb.basename) + cp -a $(PWD)/$(PKG.debian) $(STAGE.out.src/)vivid/$(PKG.deb.basename) + $(CP.exe) $(STAGE.out.src/)vivid/$(PKG.deb.basename)/debian/control.vivid $(STAGE.out.src/)vivid/$(PKG.deb.basename)/debian/control + $(CP.exe) $(STAGE.out.src/)vivid/$(PKG.deb.basename)/debian/rules.vivid $(STAGE.out.src/)vivid/$(PKG.deb.basename)/debian/rules + echo "$(HB.name.lower) ($(HB.version)ppa1~vivid1) vivid; urgency=low" > $(STAGE.out.src/)vivid/$(PKG.deb.basename)/debian/changelog + echo " * Snapshot" >> $(STAGE.out.src/)vivid/$(PKG.deb.basename)/debian/changelog + echo " - See timeline at http://trac.handbrake.fr/timeline" >> $(STAGE.out.src/)vivid/$(PKG.deb.basename)/debian/changelog + echo "" >> $(STAGE.out.src/)vivid/$(PKG.deb.basename)/debian/changelog + echo " -- John Stebbins <[email protected]> Sun, 11 Apr 2010 9:51:07 -0800" >> $(STAGE.out.src/)vivid/$(PKG.deb.basename)/debian/changelog + $(TAR.exe) czf $(STAGE.out.src/)vivid/$(PKG.src.deb.tar) -C $(STAGE.out.src/)vivid $(PKG.deb.basename) + (cd $(STAGE.out.src/)vivid/$(PKG.deb.basename) && debuild -S -kjstebbins.hb) + $(MKDIR.exe) -p $(STAGE.out.src/)trusty + $(GIT.exe) -C $(SRC/) archive --format=tar --prefix=$(PKG.deb.basename)/ $(HB.repo.shorthash) | $(TAR.exe) -xC $(STAGE.out.src/)trusty/ + $(SRC/)scripts/repo-info.sh $(SRC/) > $(STAGE.out.src/)trusty/$(PKG.deb.basename)/version.txt $(CP.exe) -a $(SRC/)download $(STAGE.out.src/)trusty/$(PKG.deb.basename) cp -a $(PWD)/$(PKG.debian) $(STAGE.out.src/)trusty/$(PKG.deb.basename) $(CP.exe) $(STAGE.out.src/)trusty/$(PKG.deb.basename)/debian/control.trusty $(STAGE.out.src/)trusty/$(PKG.deb.basename)/debian/control $(CP.exe) $(STAGE.out.src/)trusty/$(PKG.deb.basename)/debian/rules.trusty $(STAGE.out.src/)trusty/$(PKG.deb.basename)/debian/rules - echo "handbrake ($(HB.version)ppa1~trusty1) trusty; urgency=low" > $(STAGE.out.src/)trusty/$(PKG.deb.basename)/debian/changelog + echo "$(HB.name.lower) ($(HB.version)ppa1~trusty1) trusty; urgency=low" > $(STAGE.out.src/)trusty/$(PKG.deb.basename)/debian/changelog echo " * Snapshot" >> $(STAGE.out.src/)trusty/$(PKG.deb.basename)/debian/changelog echo " - See timeline at http://trac.handbrake.fr/timeline" >> $(STAGE.out.src/)trusty/$(PKG.deb.basename)/debian/changelog echo "" >> $(STAGE.out.src/)trusty/$(PKG.deb.basename)/debian/changelog diff --git a/pkg/module.rules b/pkg/module.rules index 9c0457e3b..5ec109fd3 100644 --- a/pkg/module.rules +++ b/pkg/module.rules @@ -17,8 +17,9 @@ $(PKG.src.tar.bz2): | $(STAGE.out.src/) $(TAR.exe) cjf $@ -C $(STAGE.out.src/) $(PKG.basename) $(STAGE.out.src/): - svn export -r$(HB.repo.rev) $(HB.repo.url) $@/$(PKG.basename) - svn info $(HB.repo.url)@$(HB.repo.rev) > $@/$(PKG.basename)/version.txt + $(MKDIR.exe) -p $@ + $(GIT.exe) -C $(SRC/) archive --format=tar --prefix=$(PKG.basename)/ $(HB.repo.shorthash) | $(TAR.exe) -xC $@ + $(SRC/)scripts/repo-info.sh $(SRC/) $(GIT.exe) > $@/$(PKG.basename)/version.txt $(PKG.src-contrib.tar.bz2): $(TAR.exe) cjf $@ -C $(CONTRIB.download/) \ diff --git a/scripts/repo-info.sh b/scripts/repo-info.sh new file mode 100755 index 000000000..72d974d04 --- /dev/null +++ b/scripts/repo-info.sh @@ -0,0 +1,67 @@ +#! /bin/bash +# +# Retrieves git repository info for directory ${1} using command ${2} + +# Args +REPO_DIR='.' +if [[ ${1} ]]; then + REPO_DIR=${1} +fi +GIT_EXE='git' +if [[ ${2} ]]; then + GIT_EXE=${2} +fi + +# Switch to working directory +if ! cd ${REPO_DIR} 2>/dev/null; then + echo "Invalid directory ${REPO_DIR}." 1>&2 + exit 1 +fi + +# Check whether we have git +if ! hash ${GIT_EXE} 2>/dev/null; then + echo "Command '${GIT_EXE}' not found." 1>&2 + exit 1 +fi + +# Check if there is a valid git repo here +HASH=$(${GIT_EXE} rev-parse HEAD) +ERR=$? +if [[ ${ERR} -ne 0 ]]; then + echo "Not a valid repository." 1>&2 + exit ${ERR} +elif [[ -z ${HASH} ]]; then + echo "Not a valid repository." 1>&2 + exit 1 +fi + +# Retrieve info +URL=$(${GIT_EXE} config remote.origin.url) +TAG=$(${GIT_EXE} describe --abbrev=0) +if [[ ${TAG} ]]; then + REV=$(${GIT_EXE} rev-list ${TAG}.. --count) +else + TAG=$(${GIT_EXE} describe $(${GIT_EXE} rev-list --tags --max-count=1)) + if [[ ${TAG} ]]; then + REV=$(${GIT_EXE} rev-list $(${GIT_EXE} merge-base 0.10.2 HEAD).. --count) + else + REV=$(${GIT_EXE} rev-list HEAD --count) + fi +fi +BRANCH=$(${GIT_EXE} symbolic-ref -q --short HEAD) +REMOTE="${URL}" +UPSTREAM=$(${GIT_EXE} config branch.${BRANCH}.remote) +if [[ ${UPSTREAM} ]]; then + REMOTE="${UPSTREAM}" +fi +DATE=$(${GIT_EXE} log -1 --format="format:%ai") + +# Output +# Only write tag and rev if they exist. A fresh clone currently has no tags. +echo "URL=${URL}" +echo "HASH=${HASH}" +if [[ ${TAG} ]]; then echo "TAG=${TAG}"; fi +if [[ ${REV} ]]; then echo "REV=${REV}"; fi +echo "BRANCH=${BRANCH}" +echo "REMOTE=${REMOTE}" +echo "DATE=${DATE}" diff --git a/scripts/tag-release.sh b/scripts/tag-release.sh new file mode 100755 index 000000000..64f98103e --- /dev/null +++ b/scripts/tag-release.sh @@ -0,0 +1,86 @@ +#! /bin/bash +# +# Usage: tag-release.sh <release-ver> [<commit>] +# +# Creates a new branch and tag for the release +# Optionally, the release can be based off a specific git commit. +# + +TAG=${1} +COMMIT=${2} + +if [ "x${TAG}" == "x" ]; then + echo "Missing release tag (e.g. 0.10.0)" +fi + +if [ "x${COMMIT}" == "x" ]; then + echo "Creating release tag ${TAG} and branch ${TAG}-dev from HEAD, proceed?" +else + echo "Creating release tag ${TAG} and branch ${TAG}-dev from ${COMMIT}, proceed?" +fi +read proceed +if [[ ( "x${proceed}" != "xy" ) && ( "x${proceed}" != "xY" ) ]] ; then + echo "Aborting..." + exit 0 +fi + +if [ "x${COMMIT}" != "x" ]; then + # create release branch from specific commit + git checkout "${COMMIT}" -b "${TAG}-dev" + ERR=$? +else + # create release branch from head of current branch + git checkout -b "${TAG}-dev" + ERR=$? +fi +if [ ${ERR} -ne 0 ]; then + echo "Failed to create branch ${TAG}-dev" + exit ${ERR} +fi + +# creat tag +git tag -a "${TAG}" -m "Release ${TAG}" HEAD +ERR=$? +if [ ${ERR} -ne 0 ]; then + echo "Failed to create tag ${TAG}" + # cleanup... remove the branch that was created + git branch -d "${TAG}-dev" + exit ${ERR} +fi + +# checkout tag in preparation for building release +# this should put you in a "detached HEAD" state +git checkout "${TAG}" +ERR=$? +if [ ${ERR} -ne 0 ]; then + echo "Failed to checkout tag ${TAG}" + # cleanup... remove the branch that was created + git branch -d "${TAG}-dev" + exit ${ERR} +fi + +remote=$(git config remote.origin.url) +echo +echo "Do you wish to push this release branch and tag to $remote? (y/N)" +echo "You may want to do this manually after creating and verifying release." +echo "e.g." +echo " git push -u origin ${TAG}-dev" +echo " git push origin ${TAG}" +read proceed +if [[ ( "x${proceed}" == "xy" ) || ( "x${proceed}" == "xY" ) ]] ; then + git push -u origin "${TAG}-dev" + ERR=$? + if [ ${ERR} -ne 0 ]; then + echo "Failed to push branch ${TAG}-dev to remote" + exit ${ERR} + fi + git push origin "${TAG}" + ERR=$? + if [ ${ERR} -ne 0 ]; then + echo "Failed to push tag ${TAG}-dev to remote" + exit ${ERR} + fi +else + echo "Branch and tag are local, changes not pushed to remote!" +fi + diff --git a/test/test.c b/test/test.c index 42bacc98e..0a9d690de 100644 --- a/test/test.c +++ b/test/test.c @@ -3640,12 +3640,16 @@ static int ParseOptions( int argc, char ** argv ) #define QSV_IMPLEMENTATION 297 #define FILTER_NLMEANS 298 #define FILTER_NLMEANS_TUNE 299 + #define VERSION 300 + #define DESCRIBE 301 for( ;; ) { static struct option long_options[] = { { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, VERSION }, + { "describe", no_argument, NULL, DESCRIBE }, { "update", no_argument, NULL, 'u' }, { "verbose", optional_argument, NULL, 'v' }, { "no-dvdnav", no_argument, NULL, DVDNAV }, @@ -3788,6 +3792,12 @@ static int ParseOptions( int argc, char ** argv ) case 'h': ShowHelp(); exit( 0 ); + case VERSION: + printf("HandBrake %s\n", hb_get_version(NULL)); + exit( 0 ); + case DESCRIBE: + printf("%s\n", hb_get_full_description()); + exit( 0 ); case 'u': update = 1; break; |