diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/googlecode_upload.py | 296 | ||||
-rwxr-xr-x | scripts/macosx-build-dependencies.sh | 24 | ||||
-rwxr-xr-x | scripts/publish-macosx.sh | 15 | ||||
-rw-r--r-- | scripts/setenv-unibuild.sh | 55 | ||||
-rwxr-xr-x | scripts/uni-build-dependencies.sh | 4 |
5 files changed, 381 insertions, 13 deletions
diff --git a/scripts/googlecode_upload.py b/scripts/googlecode_upload.py new file mode 100755 index 0000000..188dd6c --- /dev/null +++ b/scripts/googlecode_upload.py @@ -0,0 +1,296 @@ +#!/usr/bin/env python +# Google Code binary package uploader +# with Insturctions for uploading packages for OpenSCAD +# +# OpenSCAD Usage: +# +# 1. get a google account, get it added to the Google Code OpenSCAD project +# 2. go to https://code.google.com/hosting/settings for username & password +# ----- +# +# security note - +# +# it's not advisable to use a ~/.netrc file to store your password +# keep your googlecode password secret +# only upload from a secure machine +# user's personal data can be at risk if your account +# is compromised and a fake openscad were to be uploaded. +# notify the OpenSCAD maintainer if your computer is stolen or +# your google account is ever compromised. +# ----- +# 4. if you are making a Stable Release, check 'docs/release_checklist.txt' +# 5. create an OpenSCAD package (linux dev snapshot: ./scripts/release-common.sh) +# 6. Run this to do the upload: +# export SUMMARY="Linux x86-64 Snapshot" # replace as appropriate +# export PACKAGEFILE=openscad-2013.01.10.x86-64.tar.gz # replace as appropriate +# python ./scripts/googlecode_upload.py -s '$SUMMARY' -p openscad $PACKAGEFILE +# 7. It will ask for username. Use user.name@gmail.com (include the @ mail address) +# 8. It will ask for password. Copy/paste the password from the https google code settings page above +# Don't use the big bold password, use the 'plain font' password from the 'machine' line +# 9. Wait.... (there is no progress meter). It should say 'success' eventually. +# +# The rest of this file is original from Google with slight modifications by the +# OpenSCAD team. Modifications licensed under the same license as the +# original code from google - the Apache Software License 2.0: +# http://www.apache.org/licenses/LICENSE-2.0 + + +# +# Copyright 2006, 2007 Google Inc. All Rights Reserved. +# Author: danderson@google.com (David Anderson) +# +# Script for uploading files to a Google Code project. +# +# This is intended to be both a useful script for people who want to +# streamline project uploads and a reference implementation for +# uploading files to Google Code projects. +# +# To upload a file to Google Code, you need to provide a path to the +# file on your local machine, a small summary of what the file is, a +# project name, and a valid account that is a member or owner of that +# project. You can optionally provide a list of labels that apply to +# the file. The file will be uploaded under the same name that it has +# in your local filesystem (that is, the "basename" or last path +# component). Run the script with '--help' to get the exact syntax +# and available options. +# +# Note that the upload script requests that you enter your +# googlecode.com password. This is NOT your Gmail account password! +# This is the password you use on googlecode.com for committing to +# Subversion and uploading files. You can find your password by going +# to http://code.google.com/hosting/settings when logged in with your +# Gmail account. If you have already committed to your project's +# Subversion repository, the script will automatically retrieve your +# credentials from there (unless disabled, see the output of '--help' +# for details). +# +# If you are looking at this script as a reference for implementing +# your own Google Code file uploader, then you should take a look at +# the upload() function, which is the meat of the uploader. You +# basically need to build a multipart/form-data POST request with the +# right fields and send it to https://PROJECT.googlecode.com/files . +# Authenticate the request using HTTP Basic authentication, as is +# shown below. +# +# Licensed under the terms of the Apache Software License 2.0: +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Questions, comments, feature requests and patches are most welcome. +# Please direct all of these to the Google Code users group: +# http://groups.google.com/group/google-code-hosting + +"""Google Code file uploader script. +""" + +__author__ = 'danderson@google.com (David Anderson)' + +import httplib +import os.path +import optparse +import getpass +import base64 +import sys + + +def upload(file, project_name, user_name, password, summary, labels=None): + """Upload a file to a Google Code project's file server. + + Args: + file: The local path to the file. + project_name: The name of your project on Google Code. + user_name: Your Google account name. + password: The googlecode.com password for your account. + Note that this is NOT your global Google Account password! + summary: A small description for the file. + labels: an optional list of label strings with which to tag the file. + + Returns: a tuple: + http_status: 201 if the upload succeeded, something else if an + error occured. + http_reason: The human-readable string associated with http_status + file_url: If the upload succeeded, the URL of the file on Google + Code, None otherwise. + """ + # The login is the user part of user@gmail.com. If the login provided + # is in the full user@domain form, strip it down. + if user_name.endswith('@gmail.com'): + user_name = user_name[:user_name.index('@gmail.com')] + + form_fields = [('summary', summary)] + if labels is not None: + form_fields.extend([('label', l.strip()) for l in labels]) + + content_type, body = encode_upload_request(form_fields, file) + + upload_host = '%s.googlecode.com' % project_name + upload_uri = '/files' + auth_token = base64.b64encode('%s:%s'% (user_name, password)) + headers = { + 'Authorization': 'Basic %s' % auth_token, + 'User-Agent': 'Googlecode.com uploader v0.9.4', + 'Content-Type': content_type, + } + + server = httplib.HTTPSConnection(upload_host) + server.request('POST', upload_uri, body, headers) + resp = server.getresponse() + server.close() + + if resp.status == 201: + location = resp.getheader('Location', None) + else: + location = None + return resp.status, resp.reason, location + + +def encode_upload_request(fields, file_path): + """Encode the given fields and file into a multipart form body. + + fields is a sequence of (name, value) pairs. file is the path of + the file to upload. The file will be uploaded to Google Code with + the same file name. + + Returns: (content_type, body) ready for httplib.HTTP instance + """ + BOUNDARY = '----------Googlecode_boundary_reindeer_flotilla' + CRLF = '\r\n' + + body = [] + + # Add the metadata about the upload first + for key, value in fields: + body.extend( + ['--' + BOUNDARY, + 'Content-Disposition: form-data; name="%s"' % key, + '', + value, + ]) + + # Now add the file itself + file_name = os.path.basename(file_path) + f = open(file_path, 'rb') + file_content = f.read() + f.close() + + body.extend( + ['--' + BOUNDARY, + 'Content-Disposition: form-data; name="filename"; filename="%s"' + % file_name, + # The upload server determines the mime-type, no need to set it. + 'Content-Type: application/octet-stream', + '', + file_content, + ]) + + # Finalize the form body + body.extend(['--' + BOUNDARY + '--', '']) + + return 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body) + + +def upload_find_auth(file_path, project_name, summary, labels=None, + user_name=None, password=None, tries=3): + """Find credentials and upload a file to a Google Code project's file server. + + file_path, project_name, summary, and labels are passed as-is to upload. + + Args: + file_path: The local path to the file. + project_name: The name of your project on Google Code. + summary: A small description for the file. + labels: an optional list of label strings with which to tag the file. + config_dir: Path to Subversion configuration directory, 'none', or None. + user_name: Your Google account name. + tries: How many attempts to make. + """ + if user_name is None or password is None: + from netrc import netrc + authenticators = None + try: + authenticators = netrc().authenticators("code.google.com") + except: + print "Error accessing netrc authenticator. Trying alternate method" + if authenticators: + if user_name is None: + user_name = authenticators[0] + if password is None: + password = authenticators[2] + + while tries > 0: + if user_name is None: + # Read username if not specified or loaded from svn config, or on + # subsequent tries. + sys.stdout.write('Please enter your googlecode.com username: ') + sys.stdout.flush() + user_name = sys.stdin.readline().rstrip() + if password is None: + # Read password if not loaded from svn config, or on subsequent tries. + print 'Please enter your googlecode.com password.' + print '** Note that this is NOT your Gmail account password! **' + print 'It is the password you use to access Subversion repositories,' + print 'and can be found here: http://code.google.com/hosting/settings' + password = getpass.getpass() + + status, reason, url = upload(file_path, project_name, user_name, password, + summary, labels) + # Returns 403 Forbidden instead of 401 Unauthorized for bad + # credentials as of 2007-07-17. + if status in [httplib.FORBIDDEN, httplib.UNAUTHORIZED]: + # Rest for another try. + user_name = password = None + tries = tries - 1 + else: + # We're done. + break + + return status, reason, url + + +def main(): + parser = optparse.OptionParser(usage='googlecode-upload.py -s SUMMARY ' + '-p PROJECT [options] FILE') + parser.add_option('-s', '--summary', dest='summary', + help='Short description of the file') + parser.add_option('-p', '--project', dest='project', + help='Google Code project name') + parser.add_option('-u', '--user', dest='user', + help='Your Google Code username') + parser.add_option('-w', '--password', dest='password', + help='Your Google Code password') + parser.add_option('-l', '--labels', dest='labels', + help='An optional list of comma-separated labels to attach ' + 'to the file') + + options, args = parser.parse_args() + + if not options.summary: + parser.error('File summary is missing.') + elif not options.project: + parser.error('Project name is missing.') + elif len(args) < 1: + parser.error('File to upload not provided.') + elif len(args) > 1: + parser.error('Only one file may be specified.') + + file_path = args[0] + + if options.labels: + labels = options.labels.split(',') + else: + labels = None + + status, reason, url = upload_find_auth(file_path, options.project, + options.summary, labels, + options.user, options.password) + if url: + print 'The file was uploaded successfully.' + print 'URL: %s' % url + return 0 + else: + print 'An error occurred. Your file was not uploaded.' + print 'Google Code upload server said: %s (%s)' % (reason, status) + return 1 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/scripts/macosx-build-dependencies.sh b/scripts/macosx-build-dependencies.sh index 6313b2b..bfe0ede 100755 --- a/scripts/macosx-build-dependencies.sh +++ b/scripts/macosx-build-dependencies.sh @@ -13,11 +13,9 @@ # # Prerequisites: # - MacPorts: curl, cmake -# - Qt4 # # FIXME: # o Verbose option -# o Port to other platforms? # BASEDIR=$PWD/../libraries @@ -41,6 +39,25 @@ printUsage() echo " -c Force use of clang compiler" } +# FIXME: Support gcc/llvm/clang flags. Use -platform <whatever> to make this work? kintel 20130117 +build_qt() +{ + version=$1 + echo "Building Qt" $version "..." + cd $BASEDIR/src + rm -rf qt-everywhere-opensource-src-$version + if [ ! -f qt-everywhere-opensource-src-$version.tar.gz ]; then + curl -O http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-$version.tar.gz + fi + tar xzf qt-everywhere-opensource-src-$version.tar.gz + cd qt-everywhere-opensource-src-$version + if $OPTION_32BIT; then + QT_32BIT="-arch x86" + fi + ./configure -prefix $DEPLOYDIR -release $QT_32BIT -arch x86_64 -opensource -confirm-license -fast -no-qt3support -no-svg -no-phonon -no-audio-backend -no-multimedia -no-javascript-jit -no-script -no-scripttools -no-declarative -no-xmlpatterns -nomake demos -nomake examples -nomake docs -nomake translations -no-webkit + make -j6 install +} + # Hack warning: gmplib is built separately in 32-bit and 64-bit mode # and then merged afterwards. gmplib's header files are dependent on # the CPU architecture on which configure was run and will be patched accordingly. @@ -365,8 +382,9 @@ fi echo "Using basedir:" $BASEDIR mkdir -p $SRCDIR $DEPLOYDIR +build_qt 4.8.4 build_eigen 3.1.2 -build_gmp 5.0.5 +build_gmp 5.1.0 build_mpfr 3.1.1 build_boost 1.51.0 # NB! For CGAL, also update the actual download URL in the function diff --git a/scripts/publish-macosx.sh b/scripts/publish-macosx.sh index a2ded8a..e22e5bd 100755 --- a/scripts/publish-macosx.sh +++ b/scripts/publish-macosx.sh @@ -1,11 +1,12 @@ #!/bin/sh -# Set this if we're doing a release build. Comment it out for development builds -#VERSION=2011.12 +# NB! To build a release build, the VERSION environment variable needs to be set. +# See doc/release-checklist.txt if test -z "$VERSION"; then VERSION=`date "+%Y.%m.%d"` COMMIT=-c + SNAPSHOT=true fi # Turn off ccache, just for safety @@ -14,6 +15,9 @@ PATH=${PATH//\/opt\/local\/libexec\/ccache:} # This is the same location as DEPLOYDIR in macosx-build-dependencies.sh export OPENSCAD_LIBRARIES=$PWD/../libraries/install +# Make sure that the correct Qt tools are used +export PATH=$OPENSCAD_LIBRARIES/bin:$PATH + `dirname $0`/release-common.sh -v $VERSION $COMMIT if [[ $? != 0 ]]; then exit 1 @@ -24,10 +28,11 @@ echo "Sanity check of the app bundle..." if [[ $? != 0 ]]; then exit 1 fi -cp OpenSCAD-$VERSION.dmg ~/Dropbox/Public -ln -sf OpenSCAD-$VERSION.dmg ~/Dropbox/Public/OpenSCAD-latest.dmg -echo "Upload in progress..." +echo "Uploading..." +LABELS=OpSys-OSX,Type-Executable +if ! $SNAPSHOT; then LABELS=$LABELS,Featured; fi +`dirname $0`/googlecode_upload.py -s 'Mac OS X Snapshot' -p openscad OpenSCAD-$VERSION.dmg -l $LABELS # Update snapshot filename on wab page `dirname $0`/update-web.sh OpenSCAD-$VERSION.dmg diff --git a/scripts/setenv-unibuild.sh b/scripts/setenv-unibuild.sh index d13782c..881526e 100644 --- a/scripts/setenv-unibuild.sh +++ b/scripts/setenv-unibuild.sh @@ -34,11 +34,6 @@ setenv_common() echo OPENSCAD_LIBRARIES modified echo GLEWDIR modified - if [ "`command -v qmake-qt4`" ]; then - echo "Please re-run qmake-qt4 and run 'make clean' if necessary" - else - echo "Please re-run qmake and run 'make clean' if necessary" - fi } setenv_freebsd() @@ -73,6 +68,49 @@ setenv_linux_clang() echo QMAKESPEC has been modified: $QMAKESPEC } +clean_note() +{ + if [ $QT5_SETUP ]; then + QMAKEBIN=qmake + elif [ "`command -v qmake-qt4`" ]; then + QMAKEBIN=qmake-qt4 + else + QMAKEBIN=qmake + fi + echo "Please re-run" $QMAKEBIN "and run 'make clean' if necessary" +} + +setenv_qt5() +{ + QT5_SETUP=true + if [ ! $QTDIR ]; then + QTDIR=/opt/qt5 + echo Please set QTDIR before running this qt5 script. Assuming $QTDIR + fi + PATH=$QTDIR/bin:$PATH + LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH + LD_RUN_PATH=$QTDIR/lib:$LD_RUN_PATH + if [ "`echo $CC | grep clang`" ]; then + if [ "`uname | grep -i linux`" ]; then + QMAKESPEC=linux-clang + echo QMAKESPEC has been modified: $QMAKESPEC + fi + fi + + export QTDIR + export PATH + export LD_LIBRARY_PATH + export LD_RUN_PATH + export QMAKESPEC + + echo QTDIR is set to: $QTDIR + echo PATH has been modified with $QTDIR/bin + echo LD_LIBRARY_PATH has been modified with $QTDIR/lib + echo LD_RUN_PATH has been modified with $QTDIR/lib + + export QT5_SETUP +} + if [ "`uname | grep -i 'linux\|debian'`" ]; then setenv_common if [ "`echo $* | grep clang`" ]; then @@ -87,3 +125,10 @@ else setenv_common echo unknown system. guessed env variables. see 'setenv-unibuild.sh' fi + +if [ "`echo $* | grep qt5`" ]; then + setenv_qt5 +fi + +clean_note + diff --git a/scripts/uni-build-dependencies.sh b/scripts/uni-build-dependencies.sh index 88f2cf8..0c37605 100755 --- a/scripts/uni-build-dependencies.sh +++ b/scripts/uni-build-dependencies.sh @@ -31,6 +31,10 @@ # # . ./scripts/setenv-unibuild.sh clang # +# Enable Qt5 (experimental) +# +# . ./scripts/setenv-unibuild.sh qt5 +# printUsage() { |