diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -156,18 +156,20 @@ i18n/hg.pot: $(PYFILES) $(DOCFILES) i18n # Packaging targets osx: - python -c 'import bdist_mpkg.script_bdist_mpkg' || \ - (echo "Missing bdist_mpkg (easy_install bdist_mpkg)"; false) - rm -rf dist/mercurial-*.mpkg - python -m bdist_mpkg.script_bdist_mpkg setup.py -- - python contrib/fixpax.py dist/mercurial-*.mpkg/Contents/Packages/*.pkg/Contents/Archive.pax.gz - OUTPUTDIR=$${OUTPUTDIR:=packages/osx} && \ - mkdir -p $$OUTPUTDIR && \ - N=`cd dist && echo mercurial-*.mpkg | sed 's,\.mpkg$$,,'` && \ - hdiutil create -srcfolder dist/$$N.mpkg/ -scrub -volname "$$N" \ - -ov $$OUTPUTDIR/$$N.dmg && \ - [ -n "$$KEEPMPKG" ] && mv dist/mercurial-*.mpkg $$OUTPUTDIR || \ - rm -rf dist/mercurial-*.mpkg + python setup.py install --optimize=1 \ + --root=build/mercurial/ --prefix=/usr/local/ \ + --install-lib=/Library/Python/2.7/site-packages/ + make -C doc all install DESTDIR="$(PWD)/build/mercurial/" + mkdir -p $${OUTPUTDIR:-dist} + pkgbuild --root build/mercurial/ --identifier org.mercurial-scm.mercurial \ + build/mercurial.pkg + HGVER=$$((cat build/mercurial/Library/Python/2.7/site-packages/mercurial/__version__.py; echo 'print(version)') | python) && \ + OSXVER=$$(sw_vers -productVersion | cut -d. -f1,2) && \ + productbuild --distribution contrib/macosx/distribution.xml \ + --package-path build/ \ + --version "$${HGVER}" \ + --resources contrib/macosx/ \ + "$${OUTPUTDIR:-dist/}"/Mercurial-"$${HGVER}"-macosx"$${OSXVER}".pkg deb: contrib/builddeb diff --git a/contrib/macosx/distribution.xml b/contrib/macosx/distribution.xml new file mode 100644 --- /dev/null +++ b/contrib/macosx/distribution.xml @@ -0,0 +1,19 @@ + + + Mercurial SCM + org.mercurial-scm + + + + + mercurial.pkg + + + + + + + diff --git a/tests/test-mac-packages.t b/tests/test-mac-packages.t --- a/tests/test-mac-packages.t +++ b/tests/test-mac-packages.t @@ -1,42 +1,44 @@ -#require test-repo slow osx bdistmpkg +#require test-repo slow osx osxpackaging $ OUTPUTDIR=`pwd` $ export OUTPUTDIR $ KEEPMPKG=yes $ export KEEPMPKG $ cd "$TESTDIR"/.. + $ rm -rf dist $ make osx > $OUTPUTDIR/build.log 2>&1 $ cd $OUTPUTDIR - $ ls -d *.dmg *.mpkg - mercurial-*-macosx10.*.dmg (glob) - mercurial-*-macosx10.*.mpkg (glob) + $ ls -d *.pkg + Mercurial-*-macosx10.*.pkg (glob) + + $ xar -xf Mercurial*.pkg Gather list of all installed files: - $ find *.mpkg -name Archive.bom | xargs lsbom > boms.txt - -TODO: update to -f 1,2,3 when we're confident the installed owner of -our files is corect. Right now it looks like it's the id of the user -that builds the mpkg, which is probably slightly wrong. + $ lsbom mercurial.pkg/Bom > boms.txt Spot-check some randomly selected files: - $ grep bdiff boms.txt | cut -d ' ' -f 1,2 - ./mercurial/bdiff.so 100775 - ./mercurial/pure/bdiff.py 100664 - ./mercurial/pure/bdiff.pyc 100664 - ./mercurial/pure/bdiff.pyo 100664 -TODO: man pages don't get installed - $ egrep 'man[15]' boms.txt | cut -d ' ' -f 1,2 - $ grep bser boms.txt | cut -d ' ' -f 1,2 - ./hgext/fsmonitor/pywatchman/bser.so 100775 - ./hgext/fsmonitor/pywatchman/pybser.py 100664 - ./hgext/fsmonitor/pywatchman/pybser.pyc 100664 - ./hgext/fsmonitor/pywatchman/pybser.pyo 100664 - $ grep localrepo boms.txt | cut -d ' ' -f 1,2 - ./mercurial/localrepo.py 100664 - ./mercurial/localrepo.pyc 100664 - ./mercurial/localrepo.pyo 100664 - $ grep '/hg ' boms.txt | cut -d ' ' -f 1,2 - ./hg 100775 + $ grep bdiff boms.txt | cut -d ' ' -f 1,2,3 + ./Library/Python/2.7/site-packages/mercurial/bdiff.so 100755 0/0 + ./Library/Python/2.7/site-packages/mercurial/pure/bdiff.py 100644 0/0 + ./Library/Python/2.7/site-packages/mercurial/pure/bdiff.pyc 100644 0/0 + ./Library/Python/2.7/site-packages/mercurial/pure/bdiff.pyo 100644 0/0 + $ egrep 'man[15]' boms.txt | cut -d ' ' -f 1,2,3 + ./usr/local/share/man/man1 40755 0/0 + ./usr/local/share/man/man1/hg.1 100644 0/0 + ./usr/local/share/man/man5 40755 0/0 + ./usr/local/share/man/man5/hgignore.5 100644 0/0 + ./usr/local/share/man/man5/hgrc.5 100644 0/0 + $ grep bser boms.txt | cut -d ' ' -f 1,2,3 + ./Library/Python/2.7/site-packages/hgext/fsmonitor/pywatchman/bser.so 100755 0/0 + ./Library/Python/2.7/site-packages/hgext/fsmonitor/pywatchman/pybser.py 100644 0/0 + ./Library/Python/2.7/site-packages/hgext/fsmonitor/pywatchman/pybser.pyc 100644 0/0 + ./Library/Python/2.7/site-packages/hgext/fsmonitor/pywatchman/pybser.pyo 100644 0/0 + $ grep localrepo boms.txt | cut -d ' ' -f 1,2,3 + ./Library/Python/2.7/site-packages/mercurial/localrepo.py 100644 0/0 + ./Library/Python/2.7/site-packages/mercurial/localrepo.pyc 100644 0/0 + ./Library/Python/2.7/site-packages/mercurial/localrepo.pyo 100644 0/0 + $ grep '/hg ' boms.txt | cut -d ' ' -f 1,2,3 + ./usr/local/bin/hg 100755 0/0 Note that we're not currently installing any /etc/mercurial stuff, including merge-tool configurations.