diff --git a/.gitignore b/.gitignore index 6b14fc8..35c9d5f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ *.pyc *.zip *.exe -osx64-Cura-* +darwin-Cura-* win32-Cura-* linux-Cura-* Printrun @@ -18,5 +18,4 @@ printrun.bat cura.bat object-mirror.png object.png -build/* -dist/* +*darwin.dmg diff --git a/package.sh b/package.sh index b3ec909..157d3ab 100755 --- a/package.sh +++ b/package.sh @@ -1,17 +1,17 @@ #!/bin/bash -# This script is to package the Cura package for Windows/Linux and OSx -# This script should run under Linux and OSx, as well as Windows with Cygwin. +# This script is to package the Cura package for Windows/Linux and Mac OS X +# This script should run under Linux and Mac OS X, as well as Windows with Cygwin. ############################# # CONFIGURATION ############################# ##Select the build target -BUILD_TARGET=${1:-all} +# BUILD_TARGET=${1:-all} #BUILD_TARGET=win32 #BUILD_TARGET=linux -#BUILD_TARGET=osx64 +BUILD_TARGET=darwin ##Do we need to create the final archive ARCHIVE_FOR_DISTRIBUTION=1 @@ -62,10 +62,50 @@ function extract if [ "$BUILD_TARGET" = "all" ]; then $0 win32 $0 linux - $0 osx64 + $0 darwin exit fi +############################# +# Darwin +############################# + +if [ "$BUILD_TARGET" = "darwin" ]; then + rm -rf scripts/darwin/build + rm -rf scripts/darwin/dist + + python setup.py py2app + rc=$? + if [[ $rc != 0 ]]; then + echo "Cannot build app." + exit 1 + fi + + cd scripts/darwin + + # Install QuickLook plugin + mkdir -p dist/Cura.app/Contents/Library/QuickLook + cp STLQuickLook.qlgenerator dist/Cura.app/Contents/Library/QuickLook/ + + # Archive app + $TAR cfp - dist/Cura.app | gzip --best -c > ../../${TARGET_DIR}.tar.gz + + # Create sparse image for distribution + hdiutil detach /Volumes/Cura\ -\ Ultimaker/ + rm -rf Cura.dmg.sparseimage + hdiutil convert DmgTemplateCompressed.dmg -format UDSP -o Cura.dmg + hdiutil resize -size 500m Cura.dmg.sparseimage + hdiutil attach Cura.dmg.sparseimage + cp -a dist/Cura.app /Volumes/Cura\ -\ Ultimaker/Cura/ + hdiutil detach /Volumes/Cura\ -\ Ultimaker + hdiutil convert Cura.dmg.sparseimage -format UDZO -imagekey zlib-level=9 -ov -o ../../${TARGET_DIR}.dmg + exit +fi + +############################# +# Rest +############################# + # Change working directory to the directory the script is in # http://stackoverflow.com/a/246128 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" @@ -100,13 +140,6 @@ if [ $BUILD_TARGET = "win32" ]; then downloadURL http://www.uwe-sieber.de/files/ejectmedia.zip #Get pypy downloadURL https://bitbucket.org/pypy/pypy/downloads/pypy-${PYPY_VERSION}-win32.zip -elif [ $BUILD_TARGET = "osx64" ]; then - downloadURL https://bitbucket.org/pypy/pypy/downloads/pypy-${PYPY_VERSION}-${BUILD_TARGET}.tar.bz2 - downloadURL http://python.org/ftp/python/2.7.3/python-2.7.3-macosx10.6.dmg - downloadURL http://sourceforge.net/projects/numpy/files/NumPy/1.6.2/numpy-1.6.2-py2.7-python.org-macosx10.3.dmg - downloadURL http://pypi.python.org/packages/source/p/pyserial/pyserial-2.6.tar.gz - downloadURL http://pypi.python.org/packages/source/P/PyOpenGL/PyOpenGL-3.0.2.tar.gz - downloadURL http://downloads.sourceforge.net/wxpython/wxPython2.9-osx-2.9.4.0-cocoa-py2.7.dmg else downloadURL https://bitbucket.org/pypy/pypy/downloads/pypy-${PYPY_VERSION}-${BUILD_TARGET}.tar.bz2 fi @@ -131,7 +164,7 @@ if [ $BUILD_TARGET = "win32" ]; then extract ffmpeg-20120927-git-13f0cd6-win32-static.7z ffmpeg-20120927-git-13f0cd6-win32-static/licenses extract comtypes-0.6.2.win32.exe extract ejectmedia.zip Win32 - + mkdir -p ${TARGET_DIR}/python mkdir -p ${TARGET_DIR}/Cura/ mv \$_OUTDIR/App/* ${TARGET_DIR}/python @@ -150,7 +183,7 @@ if [ $BUILD_TARGET = "win32" ]; then rm -rf VideoCapture-0.9-5 rm -rf numpy-1.6.2-sse2.exe rm -rf ffmpeg-20120927-git-13f0cd6-win32-static - + #Clean up portable python a bit, to keep the package size down. rm -rf ${TARGET_DIR}/python/PyScripter.* rm -rf ${TARGET_DIR}/python/Doc @@ -194,12 +227,12 @@ if (( ${ARCHIVE_FOR_DISTRIBUTION} )); then #cd ${TARGET_DIR} #7z a ../${TARGET_DIR}.zip * #cd .. - + if [ ! -z `which wine` ]; then #if we have wine, try to run our nsis script. rm -rf scripts/win32/dist ln -sf `pwd`/${TARGET_DIR} scripts/win32/dist - wine ~/.wine/drive_c/Program\ Files/NSIS/makensis.exe /DVERSION=${BUILD_NAME} scripts/win32/installer.nsi + wine ~/.wine/drive_c/Program\ Files/NSIS/makensis.exe /DVERSION=${BUILD_NAME} scripts/win32/installer.nsi mv scripts/win32/Cura_${BUILD_NAME}.exe ./ fi if [ -f '/c/Program Files (x86)/NSIS/makensis.exe' ]; then @@ -208,28 +241,6 @@ if (( ${ARCHIVE_FOR_DISTRIBUTION} )); then '/c/Program Files (x86)/NSIS/makensis.exe' -DVERSION=${BUILD_NAME} 'scripts/win32/installer.nsi' >> log.txt mv scripts/win32/Cura_${BUILD_NAME}.exe ./ fi - elif [ $BUILD_TARGET = "osx64" ]; then - echo "Building osx app" - mkdir -p scripts/osx64/Cura.app/Contents/Resources - mkdir -p scripts/osx64/Cura.app/Contents/Pkgs - rm -rf scripts/osx64/Cura.app/Contents/Resources/Cura - rm -rf scripts/osx64/Cura.app/Contents/Resources/pypy - cp -a ${TARGET_DIR}/* scripts/osx64/Cura.app/Contents/Resources - cp python-2.7.3-macosx10.6.dmg scripts/osx64/Cura.app/Contents/Pkgs - cp numpy-1.6.2-py2.7-python.org-macosx10.3.dmg scripts/osx64/Cura.app/Contents/Pkgs - cp pyserial-2.6.tar.gz scripts/osx64/Cura.app/Contents/Pkgs - cp PyOpenGL-3.0.2.tar.gz scripts/osx64/Cura.app/Contents/Pkgs - cp wxPython2.9-osx-2.9.4.0-cocoa-py2.7.dmg scripts/osx64/Cura.app/Contents/Pkgs - cd scripts/osx64 - $TAR cfp - Cura.app | gzip --best -c > ../../${TARGET_DIR}.tar.gz - hdiutil detach /Volumes/Cura\ -\ Ultimaker/ - rm -rf Cura.dmg.sparseimage - hdiutil convert DmgTemplateCompressed.dmg -format UDSP -o Cura.dmg - hdiutil resize -size 500m Cura.dmg.sparseimage - hdiutil attach Cura.dmg.sparseimage - cp -a Cura.app /Volumes/Cura\ -\ Ultimaker/Cura/ - hdiutil detach /Volumes/Cura\ -\ Ultimaker - hdiutil convert Cura.dmg.sparseimage -format UDZO -imagekey zlib-level=9 -ov -o ../../${TARGET_DIR}.dmg else echo "Archiving to ${TARGET_DIR}.tar.gz" $TAR cfp - ${TARGET_DIR} | gzip --best -c > ${TARGET_DIR}.tar.gz diff --git a/scripts/darwin/DmgTemplateCompressed.dmg b/scripts/darwin/DmgTemplateCompressed.dmg new file mode 100644 index 0000000..e982f21 Binary files /dev/null and b/scripts/darwin/DmgTemplateCompressed.dmg differ diff --git a/scripts/darwin/STLQuickLook.qlgenerator/Contents/Info.plist b/scripts/darwin/STLQuickLook.qlgenerator/Contents/Info.plist new file mode 100644 index 0000000..44f52f4 --- /dev/null +++ b/scripts/darwin/STLQuickLook.qlgenerator/Contents/Info.plist @@ -0,0 +1,75 @@ + + + + + BuildMachineOSBuild + 12C60 + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeRole + QLGenerator + LSItemContentTypes + + com.pleasantsoftware.uti.stl + + + + CFBundleExecutable + STLQuickLook + CFBundleIdentifier + com.pleasantsoftware.qlgenerator.STLQuickLook + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + STLQuickLook + CFBundleShortVersionString + 1.1 + CFBundleVersion + 2 + CFPlugInDynamicRegisterFunction + + CFPlugInDynamicRegistration + YES + CFPlugInFactories + + C02E94A7-9A81-43CB-9663-4C4F30F4D259 + QuickLookGeneratorPluginFactory + + CFPlugInTypes + + 5E2D9680-5022-40FA-B806-43349622E5B9 + + C02E94A7-9A81-43CB-9663-4C4F30F4D259 + + + CFPlugInUnloadFunction + + DTCompiler + + DTPlatformBuild + 4G2008a + DTPlatformVersion + GM + DTSDKBuild + 12C37 + DTSDKName + macosx10.8 + DTXcode + 0452 + DTXcodeBuild + 4G2008a + QLNeedsToBeRunInMainThread + + QLPreviewHeight + 600 + QLPreviewWidth + 800 + QLSupportsConcurrentRequests + + QLThumbnailMinimumSize + 48 + + diff --git a/scripts/darwin/STLQuickLook.qlgenerator/Contents/MacOS/STLQuickLook b/scripts/darwin/STLQuickLook.qlgenerator/Contents/MacOS/STLQuickLook new file mode 100755 index 0000000..f004690 Binary files /dev/null and b/scripts/darwin/STLQuickLook.qlgenerator/Contents/MacOS/STLQuickLook differ diff --git a/scripts/darwin/STLQuickLook.qlgenerator/Contents/Resources/English.lproj/InfoPlist.strings b/scripts/darwin/STLQuickLook.qlgenerator/Contents/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..1a053bd Binary files /dev/null and b/scripts/darwin/STLQuickLook.qlgenerator/Contents/Resources/English.lproj/InfoPlist.strings differ diff --git a/scripts/darwin/STLQuickLook.qlgenerator/Contents/Resources/stlTagImage.png b/scripts/darwin/STLQuickLook.qlgenerator/Contents/Resources/stlTagImage.png new file mode 100755 index 0000000..e0c61a2 Binary files /dev/null and b/scripts/darwin/STLQuickLook.qlgenerator/Contents/Resources/stlTagImage.png differ diff --git a/setup.py b/setup.py index bcd181f..4a48301 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,4 @@ # coding=utf-8 - import sys import os @@ -26,26 +25,12 @@ if sys.platform.startswith('darwin'): u'LSItemContentTypes': [u'org.khronos.collada.digital-asset-exchange'], u'LSHandlerRank': u'Alternate' }, - { - u'CFBundleTypeName': u'Stereo Lithography 3D Object', - u'CFBundleTypeExtensions': [u'stl'], - u'CFBundleTypeMIMETypes': [u'text/plain'], - u'CFBundleTypeRole': u'Viewer', - u'LSHandlerRank': u'Alternate' - }, { u'CFBundleTypeName': u'Wavefront 3D Object', u'CFBundleTypeExtensions': [u'obj'], u'CFBundleTypeMIMETypes': [u'application/obj-3d'], u'CFBundleTypeRole': u'Viewer', u'LSHandlerRank': u'Alternate' - }, - { - u'CFBundleTypeName': u'Digital Asset Exchange (DAE)', - u'CFBundleTypeExtensions': [u'dae'], - u'CFBundleTypeMIMETypes': [u'model/vnd.collada+xml'], - u'CFBundleTypeRole': u'Viewer', - u'LSHandlerRank': u'Alternate' } ], u'UTImportedTypeDeclarations': [ @@ -54,13 +39,13 @@ if sys.platform.startswith('darwin'): u'UTTypeConformsTo': [u'public.data'], u'UTTypeDescription': u'Stereo Lithography 3D object', u'UTTypeReferenceURL': u'http://en.wikipedia.org/wiki/STL_(file_format)', - u'UTTypeTagSpecification:': {u'public.filename-extension': [u'stl']} + u'UTTypeTagSpecification': {u'public.filename-extension': [u'stl'], u'public.mime-type': [u'text/plain']} }, { u'UTTypeIdentifier': u'org.khronos.collada.digital-asset-exchange', u'UTTypeConformsTo': [u'public.xml', u'public.audiovisual-content'], u'UTTypeDescription': u'Digital Asset Exchange (DAE)', - u'UTTypeTagSpecification': {u'public.filename-extension': [u'dae']} + u'UTTypeTagSpecification': {u'public.filename-extension': [u'dae'], u'public.mime-type': [u'model/vnd.collada+xml']} } ] } @@ -70,7 +55,9 @@ if sys.platform.startswith('darwin'): 'includes': ['objc', 'Foundation'], 'resources': DATA_FILES, 'optimize': '2', - 'plist': PLIST + 'plist': PLIST, + 'bdist_base': 'scripts/darwin/build', + 'dist_dir': 'scripts/darwin/dist' } setup( @@ -78,7 +65,7 @@ if sys.platform.startswith('darwin'): app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, - setup_requires=['py2app'], + setup_requires=['py2app'] ) else: import zipfile