diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/installer.nsi | 6 | ||||
| -rw-r--r-- | scripts/mingw-file-association.nsh | 225 | ||||
| -rwxr-xr-x | scripts/mingw-x-build-dependencies.sh | 39 | ||||
| -rwxr-xr-x | scripts/publish-mingw-x.sh | 53 | ||||
| -rwxr-xr-x | scripts/release-common.sh | 134 | ||||
| -rw-r--r-- | scripts/setenv-mingw-xbuild.sh | 43 | 
6 files changed, 451 insertions, 49 deletions
| diff --git a/scripts/installer.nsi b/scripts/installer.nsi index 269a30c..87ec18d 100644 --- a/scripts/installer.nsi +++ b/scripts/installer.nsi @@ -1,4 +1,4 @@ -!include "FileAssociation.nsh" +!include "mingw-file-association.nsh"  Name "OpenSCAD"  OutFile "openscad_setup.exe"  InstallDir $PROGRAMFILES\OpenSCAD @@ -6,8 +6,8 @@ DirText "This will install OpenSCAD on your computer. Choose a directory"  Section "install"  SetOutPath $INSTDIR  File openscad.exe -File /r examples -File /r libraries +File /r /x mingw-cross-env examples +File /r /x mingw-cross-env libraries  ${registerExtension} "$INSTDIR\openscad.exe" ".scad" "OpenSCAD_File"  CreateShortCut $SMPROGRAMS\OpenSCAD.lnk $INSTDIR\openscad.exe  WriteUninstaller $INSTDIR\Uninstall.exe diff --git a/scripts/mingw-file-association.nsh b/scripts/mingw-file-association.nsh new file mode 100644 index 0000000..380b468 --- /dev/null +++ b/scripts/mingw-file-association.nsh @@ -0,0 +1,225 @@ +/* +nsis.sourceforge.net COPYRIGHT +Copyright (C) 1995-2009 Contributors + +Note the 'edit' page of the wiki at nsis.sourceforge.net specifically  +states the following: + +"All contributions sent to this wiki are generally considered to be in  +the zlib/libpng license (see License for details)." + +The NSIS 'license' link on the wiki states the following: + +"All NSIS source code, plug-ins, documentation, examples, header files  +and graphics, with the exception of the compression modules and where  +otherwise noted, are licensed under the zlib/libpng license." + +http://nsis.sourceforge.net/File_Assocation lists these authors: + +Author: Vytautas (talk, contrib) +Author: intersol (talk, contrib) +Author: chefkoch (talk, contrib) + +ZLIB/LIBPNG LICENSE +------------------- + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +      1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +      2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +      3. This notice may not be removed or altered from any source distribution. +*/ + +/* +_____________________________________________________________________________ +  +                       File Association +_____________________________________________________________________________ +  + Based on code taken from http://nsis.sourceforge.net/File_Association  +  + Usage in script: + 1. !include "FileAssociation.nsh" + 2. [Section|Function] +      ${FileAssociationFunction} "Param1" "Param2" "..." $var +    [SectionEnd|FunctionEnd] +  + FileAssociationFunction=[RegisterExtension|UnRegisterExtension] +  +_____________________________________________________________________________ +  + ${RegisterExtension} "[executable]" "[extension]" "[description]" +  +"[executable]"     ; executable which opens the file format +                   ; +"[extension]"      ; extension, which represents the file format to open +                   ; +"[description]"    ; description for the extension. This will be display in Windows Explorer. +                   ; +  +  + ${UnRegisterExtension} "[extension]" "[description]" +  +"[extension]"      ; extension, which represents the file format to open +                   ; +"[description]"    ; description for the extension. This will be display in Windows Explorer. +                   ; +  +_____________________________________________________________________________ +  +                         Macros +_____________________________________________________________________________ +  + Change log window verbosity (default: 3=no script) +  + Example: + !include "FileAssociation.nsh" + !insertmacro RegisterExtension + ${FileAssociation_VERBOSE} 4   # all verbosity + !insertmacro UnRegisterExtension + ${FileAssociation_VERBOSE} 3   # no script +*/ +  +  +!ifndef FileAssociation_INCLUDED +!define FileAssociation_INCLUDED +  +!include Util.nsh +  +!verbose push +!verbose 3 +!ifndef _FileAssociation_VERBOSE +  !define _FileAssociation_VERBOSE 3 +!endif +!verbose ${_FileAssociation_VERBOSE} +!define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE` +!verbose pop +  +!macro FileAssociation_VERBOSE _VERBOSE +  !verbose push +  !verbose 3 +  !undef _FileAssociation_VERBOSE +  !define _FileAssociation_VERBOSE ${_VERBOSE} +  !verbose pop +!macroend +  +  +  +!macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION +  !verbose push +  !verbose ${_FileAssociation_VERBOSE} +  Push `${_DESCRIPTION}` +  Push `${_EXTENSION}` +  Push `${_EXECUTABLE}` +  ${CallArtificialFunction} RegisterExtension_ +  !verbose pop +!macroend +  +!macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION +  !verbose push +  !verbose ${_FileAssociation_VERBOSE} +  Push `${_EXTENSION}` +  Push `${_DESCRIPTION}` +  ${CallArtificialFunction} UnRegisterExtension_ +  !verbose pop +!macroend +  +  +  +!define RegisterExtension `!insertmacro RegisterExtensionCall` +!define un.RegisterExtension `!insertmacro RegisterExtensionCall` +  +!macro RegisterExtension +!macroend +  +!macro un.RegisterExtension +!macroend +  +!macro RegisterExtension_ +  !verbose push +  !verbose ${_FileAssociation_VERBOSE} +  +  Exch $R2 ;exe +  Exch +  Exch $R1 ;ext +  Exch +  Exch 2 +  Exch $R0 ;desc +  Exch 2 +  Push $0 +  Push $1 +  +  ReadRegStr $1 HKCR $R1 ""  ; read current file association +  StrCmp "$1" "" NoBackup  ; is it empty +  StrCmp "$1" "$R0" NoBackup  ; is it our own +    WriteRegStr HKCR $R1 "backup_val" "$1"  ; backup current value +NoBackup: +  WriteRegStr HKCR $R1 "" "$R0"  ; set our file association +  +  ReadRegStr $0 HKCR $R0 "" +  StrCmp $0 "" 0 Skip +    WriteRegStr HKCR "$R0" "" "$R0" +    WriteRegStr HKCR "$R0\shell" "" "open" +    WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0" +Skip: +  WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' +  WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" +  WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' +  +  Pop $1 +  Pop $0 +  Pop $R2 +  Pop $R1 +  Pop $R0 +  +  !verbose pop +!macroend +  +  +  +!define UnRegisterExtension `!insertmacro UnRegisterExtensionCall` +!define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall` +  +!macro UnRegisterExtension +!macroend +  +!macro un.UnRegisterExtension +!macroend +  +!macro UnRegisterExtension_ +  !verbose push +  !verbose ${_FileAssociation_VERBOSE} +  +  Exch $R1 ;desc +  Exch +  Exch $R0 ;ext +  Exch +  Push $0 +  Push $1 +  +  ReadRegStr $1 HKCR $R0 "" +  StrCmp $1 $R1 0 NoOwn ; only do this if we own it +  ReadRegStr $1 HKCR $R0 "backup_val" +  StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key +  DeleteRegKey HKCR $R0 +  Goto NoOwn +  +Restore: +  WriteRegStr HKCR $R0 "" $1 +  DeleteRegValue HKCR $R0 "backup_val" +  DeleteRegKey HKCR $R1 ;Delete key with association name settings +  +NoOwn: +  +  Pop $1 +  Pop $0 +  Pop $R1 +  Pop $R0 +  +  !verbose pop +!macroend +  +!endif # !FileAssociation_INCLUDED + diff --git a/scripts/mingw-x-build-dependencies.sh b/scripts/mingw-x-build-dependencies.sh index e820e20..76bb7d4 100755 --- a/scripts/mingw-x-build-dependencies.sh +++ b/scripts/mingw-x-build-dependencies.sh @@ -19,15 +19,8 @@ if [ ! -f $OPENSCADDIR/openscad.pro ]; then  	echo "Must be run from the OpenSCAD source root directory"  	exit 0  fi -BASEDIR=$HOME/openscad_deps -MXEDIR=$BASEDIR/mxe -PATH=$MXEDIR/usr/bin:$PATH -mkdir -p $BASEDIR - -echo MXEDIR: $MXEDIR -echo BASEDIR: $BASEDIR  echo OPENSCADDIR: $OPENSCADDIR -echo PATH modified with $MXEDIR/usr/bin +  if [ ! $NUMCPU ]; then  	echo "note: you can 'export NUMCPU=x' for multi-core compiles (x=number)";  	NUMCPU=1 @@ -40,35 +33,27 @@ if [ ! $NUMJOBS ]; then  		NUMJOBS=1  	fi  fi -echo NUMCPU: $NUMCPU -echo NUMJOBS: $NUMJOBS -cd $BASEDIR -if [ ! -e mxe ]; then +. ./scripts/setenv-mingw-xbuild.sh + +if [ ! -e $BASEDIR ]; then +	mkdir -p $BASEDIR +fi + +if [ ! -e $MXEDIR ]; then  	echo "Downloading MXE into " $MXEDIR +	cd $MXEDIR/..  	git clone git://github.com/mxe/mxe.git  fi  echo "entering" $MXEDIR  cd $MXEDIR  echo "make mpfr eigen opencsg cgal qt -j $NUMCPU JOBS=$NUMJOBS" -make mpfr eigen opencsg cgal qt -j $NUMCPU JOBS=$NUMJOBS -#make mpfr -j$NUMCPU JOBS=$NUMJOBS # for testing +make mpfr eigen opencsg cgal qt nsis -j $NUMCPU JOBS=$NUMJOBS +#make mpfr -j $NUMCPU JOBS=$NUMJOBS # for testing  echo "leaving" $MXEDIR +  echo "entering $OPENSCADDIR"  cd $OPENSCADDIR -if [ -e mingw-cross-env ]; then -	rm ./mingw-cross-env -fi -echo "linking mingw-cross-env directory" -ln -s $MXEDIR/usr/i686-pc-mingw32/ ./mingw-cross-env -echo -echo "now copy/paste the following to cross-build openscad" -echo -echo "export PATH=$MXEDIR/usr/bin:\$PATH" -echo "i686-pc-mingw32-qmake CONFIG+=mingw-cross-env openscad.pro" -#echo "make -j$NUMCPU" # causes parser_yacc.hpp errors -echo "make" -echo diff --git a/scripts/publish-mingw-x.sh b/scripts/publish-mingw-x.sh new file mode 100755 index 0000000..d6cebcd --- /dev/null +++ b/scripts/publish-mingw-x.sh @@ -0,0 +1,53 @@ +#!/bin/sh + +# This is run as part of the checklist in docs/release-checklist.txt +# +# Set this if we're doing a release build. Comment it out for development builds +#VERSION=2011.12 + +if test -z "$VERSION"; then +  VERSION=`date "+%Y.%m.%d"` +  COMMIT=-c +fi + +# Turn off ccache, just for safety +CCACHE_DISABLE=1 + +. ./scripts/setenv-mingw-xbuild.sh + +if [ ! -e $MXEDIR ]; then +  echo "MXEDIR: $MXEDIR" +  echo "MXEDIR is a non-existent path. Mingw cross tools not found." +  echo +  echo " Please run ./scripts/mingw-x-build-dependencies.sh to install MXE" +  echo " or modify MXEDIR to point to the root of your cross-tools setup" +  echo " ( Please see http://mxe.cc for more info ) " +  echo +  exit 1 +fi + +if [ ! -f $OPENSCADDIR/openscad.pro ]; then +  echo "Must be run from the OpenSCAD source root directory" +  exit 1 +fi + +OSTYPE=mingw-cross-env ./scripts/release-common.sh -v $VERSION $COMMIT + +if [ $? != 0 ]; then +	echo "release-common.sh returned error code: $?. build stopped." +  exit 1 +fi + +echo "Please upload these files to the appropriate location" +BINFILE=$DEPLOYDIR/OpenSCAD-$VERSION.zip +INSTALLFILE=$DEPLOYDIR/OpenSCAD-$VERSION-Installer.exe +echo $BINFILE +echo $INSTALLFILE + +echo +echo "Then copy/paste these commands into your shell:" +echo + +# Update snapshot filename on wab page +echo ./scripts/update-web.sh OpenSCAD-$VERSION.zip +echo ./scripts/update-web.sh OpenSCAD-$VERSION-Installer.exe diff --git a/scripts/release-common.sh b/scripts/release-common.sh index 94a8634..62f8ed8 100755 --- a/scripts/release-common.sh +++ b/scripts/release-common.sh @@ -2,11 +2,11 @@  #  # This script creates a binary release of OpenSCAD.  # This should work under Mac OS X, Windows (msys), and Linux cross-compiling -# for windows using mingw-cross-env (use like: OS=LINXWIN release-common.sh). +# for windows using mingw-cross-env (use like: OSTYPE=mingw-cross-env release-common.sh).  # Linux support pending.  # The script will create a file called openscad-<versionstring>.zip -# in the current directory. -#  +# in the current directory (or in the $DEPLOYDIR of a mingw cross build) +#  # Usage: release-common.sh [-v <versionstring>] [-c]  #  -v   Version string (e.g. -v 2010.01)  #  -c   Build with commit info @@ -24,6 +24,12 @@ printUsage()    echo "  Example: $0 -v 2010.01  } +OPENSCADDIR=$PWD +if [ ! -f $OPENSCADDIR/openscad.pro ]; then +  echo "Must be run from the OpenSCAD source root directory" +  exit 1 +fi +  if [[ "$OSTYPE" =~ "darwin" ]]; then    OS=MACOSX  elif [[ $OSTYPE == "msys" ]]; then @@ -54,6 +60,37 @@ if test -z "$VERSION"; then      VERSION=`date "+%Y.%m.%d"`  fi + +echo "Checking pre-requisites..." + +case $OS in +    LINXWIN) +        MAKENSIS= + +        if [ "`command -v makensis`" ]; then +            MAKENSIS=makensis +        elif [ "`command -v i686-pc-mingw32-makensis`" ]; then +            MAKENSIS=i686-pc-mingw32-makensis +        else +            echo "makensis not found. please install nsis" +            exit 1 +        fi +        echo NSIS makensis found: $MAKENSIS +    ;; +esac + +if [ ! -e $OPENSCADDIR/libraries/MCAD/__init__.py ]; then +  echo "Downloading MCAD" +  git submodule init +  git submodule update +else +  echo "MCAD found:" $OPENSCADDIR/libraries/MCAD +fi + +if [ -d .git ]; then +  git submodule update +fi +  echo "Building openscad-$VERSION $CONFIGURATION..."  case $OS in @@ -72,22 +109,34 @@ case $OS in          ;;      LINXWIN)           unset CONFIG +        . ./scripts/setenv-mingw-xbuild.sh          TARGET=release          ZIP="zip"          ZIPARGS="-r"          ;;  esac +  case $OS in      LINXWIN) -        i686-pc-mingw32-qmake VERSION=$VERSION OPENSCAD_COMMIT=$OPENSCAD_COMMIT CONFIG+=$CONFIG CONFIG+=mingw-cross-env CONFIG-=debug openscad.pro +        cd $DEPLOYDIR && i686-pc-mingw32-qmake VERSION=$VERSION OPENSCAD_COMMIT=$OPENSCAD_COMMIT CONFIG+=$CONFIG CONFIG+=mingw-cross-env CONFIG-=debug ../openscad.pro +        cd $OPENSCADDIR      ;;      *)          qmake VERSION=$VERSION OPENSCAD_COMMIT=$OPENSCAD_COMMIT CONFIG+=$CONFIG CONFIG-=debug openscad.pro      ;;  esac -make -s clean +case $OS in +    LINXWIN) +        cd $DEPLOYDIR && make -s clean +        cd $OPENSCADDIR +    ;; +    *) +        make -s clean +    ;; +esac +  case $OS in      MACOSX)           rm -rf OpenSCAD.app @@ -98,7 +147,16 @@ case $OS in          ;;  esac -make -j2 $TARGET +case $OS in +    LINXWIN) +        # make -jx sometimes has problems with parser_yacc +        cd $DEPLOYDIR && make $TARGET +        cd $OPENSCADDIR +    ;; +    *) +        make -j2 $TARGET +    ;; +esac  if [[ $? != 0 ]]; then    echo "Error building OpenSCAD. Aborting." @@ -112,6 +170,12 @@ case $OS in          EXAMPLESDIR=OpenSCAD.app/Contents/Resources/examples          LIBRARYDIR=OpenSCAD.app/Contents/Resources/libraries      ;; +    LINXWIN) +        EXAMPLESDIR=$DEPLOYDIR/openscad-$VERSION/examples/ +        LIBRARYDIR=$DEPLOYDIR/openscad-$VERSION/libraries/ +        rm -rf $DEPLOYDIR/openscad-$VERSION +        mkdir $DEPLOYDIR/openscad-$VERSION +		;;      *)          EXAMPLESDIR=openscad-$VERSION/examples/          LIBRARYDIR=openscad-$VERSION/libraries/ @@ -120,10 +184,6 @@ case $OS in      ;;  esac -if [ -d .git ]; then -  git submodule update -fi -  if [ -n $EXAMPLESDIR ]; then    echo $EXAMPLESDIR    mkdir -p $EXAMPLESDIR @@ -133,9 +193,14 @@ fi  if [ -n $LIBRARYDIR ]; then    echo $LIBRARYDIR    mkdir -p $LIBRARYDIR -  cp -R libraries/* $LIBRARYDIR +  # exclude the .git stuff from MCAD which is a git submodule. +  # tar is a relatively portable way to do exclusion, without the +  # risks of rm +  rm -f libraries.tar +  tar cf libraries.tar --exclude=.git* libraries +  cd $LIBRARYDIR/.. && tar xf $OPENSCADDIR/libraries.tar && cd $OPENSCADDIR +  rm -f libraries.tar    chmod -R u=rwx,go=r,+X $LIBRARYDIR/* -  rm -rf `find $LIBRARYDIR -name ".git"`  fi  echo "Creating archive.." @@ -158,15 +223,42 @@ case $OS in          ;;      LINXWIN)          #package +        echo "Creating binary package" +        cd $DEPLOYDIR          cp $TARGET/openscad.exe openscad-$VERSION          rm -f OpenSCAD-$VERSION.zip          "$ZIP" $ZIPARGS OpenSCAD-$VERSION.zip openscad-$VERSION -        cp scripts/installer.nsi openscad-$VERSION/ -        cd openscad-$VERSION && makensis installer.nsi && cd .. -        cp openscad-$VERSION/openscad_setup.exe OpenSCAD-$VERSION-Installer.exe  -        rm -rf openscad-$VERSION -        echo "Binary created: OpenSCAD-$VERSION.zip" -        echo "Installer created: OpenSCAD-$VERSION-Installer.exe" +        cd $OPENSCADDIR +        echo "Binary package created" + +        echo "Creating installer" +        echo "Copying NSIS files to $DEPLOYDIR/openscad-$VERSION" +        cp ./scripts/installer.nsi $DEPLOYDIR/openscad-$VERSION +        cp ./scripts/mingw-file-association.nsh $DEPLOYDIR/openscad-$VERSION +        cd $DEPLOYDIR/openscad-$VERSION +        NSISDEBUG=-V2 +        # NSISDEBUG=      # leave blank for full log +        echo $MAKENSIS $NSISDEBUG installer.nsi +        $MAKENSIS $NSISDEBUG installer.nsi +        cp $DEPLOYDIR/openscad-$VERSION/openscad_setup.exe $DEPLOYDIR/OpenSCAD-$VERSION-Installer.exe +        cd $OPENSCADDIR + +        BINFILE=$DEPLOYDIR/OpenSCAD-$VERSION.zip +        INSTFILE=$DEPLOYDIR/OpenSCAD-$VERSION-Installer.exe +        if [ -e $BINFILE ]; then +            if [ -e $INSTFILE ]; then +                echo +                echo "Binary created:" $BINFILE +                echo "Installer created:" $INSTFILE +                echo +            else +              echo "Build failed. Cannot find" $INSTFILE +              exit 1 +            fi +        else +          echo "Build failed. Cannot find" $BINFILE +          exit 1 +        fi          ;;      LINUX)          # Do stuff from release-linux.sh @@ -186,6 +278,10 @@ case $OS in          strip openscad-$VERSION/lib/openscad/*          cp scripts/installer-linux.sh openscad-$VERSION/install.sh          chmod 755 -R openscad-$VERSION/ -        tar cz openscad-$VERSION > openscad-$VERSION.x86-$ARCH.tar.gz +        PACKAGEFILE=openscad-$VERSION.x86-$ARCH.tar.gz +        tar cz openscad-$VERSION > $PACKAGEFILE +        echo +        echo "Binary created:" $PACKAGEFILE +        echo          ;;  esac diff --git a/scripts/setenv-mingw-xbuild.sh b/scripts/setenv-mingw-xbuild.sh new file mode 100644 index 0000000..e8976b7 --- /dev/null +++ b/scripts/setenv-mingw-xbuild.sh @@ -0,0 +1,43 @@ +#!/bin/sh -e +# +# set environment variables for mingw/mxe cross-build +# +# Usage: source ./scripts/setenv-mingw-xbuild.sh +# +# Prerequisites: +# +# Please see http://mxe.cc/#requirements +# +# Also see http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X +# + +export OPENSCADDIR=$PWD + +if [ ! $BASEDIR ]; then +	export BASEDIR=$HOME/openscad_deps +fi + +if [ ! $DEPLOYDIR ]; then +	export DEPLOYDIR=$OPENSCADDIR/mingw32 +fi + +if [ ! $MXEDIR ]; then +	export MXEDIR=$BASEDIR/mxe +fi + +export PATH=$MXEDIR/usr/bin:$PATH + +echo BASEDIR: $BASEDIR +echo MXEDIR: $MXEDIR +echo DEPLOYDIR: $DEPLOYDIR +echo PATH modified with $MXEDIR/usr/bin + +if [ ! -e $DEPLOYDIR ]; then +  mkdir -p $DEPLOYDIR +fi + +echo linking $MXEDIR/usr/i686-pc-mingw32/ to $DEPLOYDIR/mingw-cross-env +rm -f $DEPLOYDIR/mingw-cross-env +ln -s $MXEDIR/usr/i686-pc-mingw32/ $DEPLOYDIR/mingw-cross-env + + | 
