diff --git a/.buckconfig b/.buckconfig new file mode 100644 index 000000000000..5fa3abc3dc67 --- /dev/null +++ b/.buckconfig @@ -0,0 +1,13 @@ +[alias] + api = //:api + api_install = //solenv/maven:api_install + api_deploy = //solenv/maven:api_deploy + +[buildfile] + includes = //solenv/buck/build.defs + +[project] + ignore = .git,workdir,instdir + +[cache] + mode = dir diff --git a/.buckversion b/.buckversion new file mode 100644 index 000000000000..3c6074560bc6 --- /dev/null +++ b/.buckversion @@ -0,0 +1 @@ +6659a474fb2ba6e921bb38c1b55d4c9ba6073cfa diff --git a/.gitignore b/.gitignore index 30f0becfc2e9..9a56535a8aac 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ # # where stuff is built +/buck-out /instdir /instdir_for_build /workdir @@ -75,6 +76,7 @@ \#* *.kdev4 .kdev_include_paths +.buckd .directory .cproject .project diff --git a/BUCK b/BUCK new file mode 100644 index 000000000000..66b0dbdabcec --- /dev/null +++ b/BUCK @@ -0,0 +1,59 @@ +prebuilt_jar( + name = 'juh', + binary_jar = 'instdir/program/classes/juh.jar', + visibility = ['PUBLIC'], +) + +prebuilt_jar( + name = 'jurt', + binary_jar = 'instdir/program/classes/jurt.jar', + visibility = ['PUBLIC'], +) + +prebuilt_jar( + name = 'officebean', + binary_jar = 'instdir/program/classes/officebean.jar', + visibility = ['PUBLIC'], +) + +prebuilt_jar( + name = 'ridl', + binary_jar = 'instdir/program/classes/ridl.jar', + visibility = ['PUBLIC'], +) + +prebuilt_jar( + name = 'unoil', + binary_jar = 'instdir/program/classes/unoil.jar', + visibility = ['PUBLIC'], +) + +prebuilt_jar( + name = 'unoloader', + binary_jar = 'instdir/program/classes/unoloader.jar', + visibility = ['PUBLIC'], +) + +zip_file( + name = 'api', + srcs = [ + ':juh', + '//javaunohelper:juh-src', + '//javaunohelper:juh-javadoc', + ':jurt', + '//jurt:jurt-src', + '//jurt:jurt-javadoc', + ':officebean', + '//bean:officebean-src', + '//bean:officebean-javadoc', + ':ridl', + '//ridljar:ridl-src', + '//ridljar:ridl-javadoc', + ':unoil', + '//unoil:unoil-src', + '//unoil:unoil-javadoc', + ':unoloader', + '//ridljar/source/unoloader:unoloader-src', + '//ridljar/source/unoloader:unoloader-javadoc', + ] +) diff --git a/bean/BUCK b/bean/BUCK new file mode 100644 index 000000000000..94a235b0a87a --- /dev/null +++ b/bean/BUCK @@ -0,0 +1,23 @@ + +java_sources( + name = 'officebean-src', + srcs = glob(['com/**']), + visibility = ['PUBLIC'], +) + +java_doc( + name = 'officebean-javadoc', + title = 'LibreOffice API', + pkgs = [ + 'com.sun.star.comp.beans', + ], + paths = ['.'], + srcs = glob(['com/**']), + deps = [ + '//:juh', + '//:officebean', + '//:unoil', + '//:ridl', + ], + visibility = ['PUBLIC'], +) diff --git a/bean/com/sun/star/comp/beans/LocalOfficeWindow.java b/bean/com/sun/star/comp/beans/LocalOfficeWindow.java index 1fc5768790e5..5d18036e54b5 100644 --- a/bean/com/sun/star/comp/beans/LocalOfficeWindow.java +++ b/bean/com/sun/star/comp/beans/LocalOfficeWindow.java @@ -79,7 +79,7 @@ public class LocalOfficeWindow * Receives a notification about the connection has been closed. * This method has to set the connection to null. * - * @source The event object. + * @param source The event object. */ public void disposing(EventObject source) { diff --git a/bean/com/sun/star/comp/beans/OOoBean.java b/bean/com/sun/star/comp/beans/OOoBean.java index 9400695865c4..4d49de896492 100644 --- a/bean/com/sun/star/comp/beans/OOoBean.java +++ b/bean/com/sun/star/comp/beans/OOoBean.java @@ -23,11 +23,9 @@ import com.sun.star.uno.UnoRuntime; // @requirement FUNC.PERF.LRN/0.6 // @requirement FUNC.PERF.LOC/0.6 // @requirement FUNC.PERF.FIX/0.6 +// @requirement FUNC.RES.OTH/0.2 +// No other resources are needed yet. /** This is the basic JavaBean for all OOo application modules. - - @requirement FUNC.RES.OTH/0.2 - No other resources are needed yet. - @since OOo 2.0.0 */ public class OOoBean @@ -80,7 +78,8 @@ public class OOoBean } // @requirement FUNC.PER/0.2 - /** @internal + // @internal + /** */ @Deprecated public void writeExternal( java.io.ObjectOutput aObjOut ) @@ -89,7 +88,8 @@ public class OOoBean } // @requirement FUNC.PER/0.2 - /** @internal + // @internal + /** */ @Deprecated public void readExternal( java.io.ObjectInput aObjIn ) @@ -155,9 +155,8 @@ public class OOoBean nOOoCheckCycle = nMilliSecs; } + // @internal /** Sets a connection to an OOo instance. - - @internal */ private synchronized void setOOoConnection(OfficeConnection iNewConnection) throws HasConnectionException, NoConnectionException { @@ -927,7 +926,7 @@ public class OOoBean /** returns the Frame of the bean. - @returns + @return a Java class which implements all interfaces which the service Frame implements. Thus, methods can be called directly without queryInterface. @@ -950,7 +949,7 @@ public class OOoBean // @requirement API.SIM.SEAP/0.2 /** returns the of the bean. - @returns + @return a Java class which implements all interfaces which the service Controller implements. Thus, methods can be called directly without queryInterface. @@ -978,7 +977,7 @@ public class OOoBean /** returns the of the bean. - @returns + @return a Java class which implements all interfaces which the service OfficeDocument implements. @@ -1362,10 +1361,9 @@ xLayoutManager.showElement("private:resource/menubar/menubar"); // Helper Classes - + // @internal /** Helper class to listen on the connection to learn when it dies. - @internal */ private class EventListener extends Thread diff --git a/javaunohelper/BUCK b/javaunohelper/BUCK new file mode 100644 index 000000000000..7f1120dab5f5 --- /dev/null +++ b/javaunohelper/BUCK @@ -0,0 +1,20 @@ + +java_sources( + name = 'juh-src', + srcs = glob(['com/**']), + visibility = ['PUBLIC'], +) + +java_doc( + name = 'juh-javadoc', + title = 'LibreOffice Makes it easier to use UNO with Java', + pkgs = [ + 'com.sun.star', + ], + paths = ['.'], + srcs = glob(['com/**']), + deps = [ + '//:juh', + ], + visibility = ['PUBLIC'], +) diff --git a/jurt/BUCK b/jurt/BUCK new file mode 100644 index 000000000000..f2349aa017e0 --- /dev/null +++ b/jurt/BUCK @@ -0,0 +1,21 @@ + +java_sources( + name = 'jurt-src', + srcs = glob(['com/**']), + visibility = ['PUBLIC'], +) + +java_doc( + name = 'jurt-javadoc', + title = 'LibreOffice Java Uno Runtime', + pkgs = [ + 'com.sun.star', + ], + paths = ['.'], + srcs = glob(['com/**']), + deps = [ + '//:jurt', + '//:unoloader', + ], + visibility = ['PUBLIC'], +) diff --git a/ridljar/BUCK b/ridljar/BUCK new file mode 100644 index 000000000000..382287d09ff9 --- /dev/null +++ b/ridljar/BUCK @@ -0,0 +1,20 @@ + +java_sources( + name = 'ridl-src', + srcs = glob(['com/**']), + visibility = ['PUBLIC'], +) + +java_doc( + name = 'ridl-javadoc', + title = 'LibreOffice types for the Java Uno typesystem', + pkgs = [ + 'com.sun.star', + ], + paths = ['.'], + srcs = glob(['com/**']), + deps = [ + '//:ridl', + ], + visibility = ['PUBLIC'], +) diff --git a/ridljar/source/unoloader/BUCK b/ridljar/source/unoloader/BUCK new file mode 100644 index 000000000000..26781304f906 --- /dev/null +++ b/ridljar/source/unoloader/BUCK @@ -0,0 +1,20 @@ + +java_sources( + name = 'unoloader-src', + srcs = glob(['com/**']), + visibility = ['PUBLIC'], +) + +java_doc( + name = 'unoloader-javadoc', + title = 'LibreOffice Uno loader', + pkgs = [ + 'com.sun.star.lib.unoloader', + ], + paths = ['.'], + srcs = glob(['com/**']), + deps = [ + '//:ridl', + ], + visibility = ['PUBLIC'], +) diff --git a/solenv/bin/version.py b/solenv/bin/version.py new file mode 100755 index 000000000000..18c04414178d --- /dev/null +++ b/solenv/bin/version.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +from __future__ import print_function +from optparse import OptionParser +import os.path +import re +import sys + +M = { + 'juh': 'javaunohelper', + 'jurt': 'jurt', + 'officebean': 'bean', + 'ridl': 'ridljar', + 'unoil': 'unoil', + 'unoloader': 'ridljar', +} + +parser = OptionParser() +_, args = parser.parse_args() + +if not len(args): + parser.error('not enough arguments') +elif len(args) > 1: + parser.error('too many arguments') + +DEST = r'\g<1>%s\g<3>' % args[0] + + +def replace_in_file(filename, src_pattern): + try: + f = open(filename, "r") + s = f.read() + f.close() + s = re.sub(src_pattern, DEST, s) + f = open(filename, "w") + f.write(s) + f.close() + except IOError as err: + print('error updating %s: %s' % (filename, err), file=sys.stderr) + +src_pattern = re.compile(r'^(\s*)([-.@\w]+)(\s*)$', + re.MULTILINE) + +for a in ['juh', 'jurt', 'officebean', 'ridl', 'unoil', 'unoloader']: + replace_in_file(os.path.join(M[a], 'pom.%s.xml' % a), src_pattern) + +src_pattern = re.compile(r"^(LIBREOFFICE_VERSION = ')([-.@\w]+)(')$", + re.MULTILINE) +replace_in_file('solenv/maven/VERSION', src_pattern) diff --git a/solenv/buck/build.defs b/solenv/buck/build.defs new file mode 100644 index 000000000000..b7b81ec8cb3c --- /dev/null +++ b/solenv/buck/build.defs @@ -0,0 +1,49 @@ +def java_sources( + name, + srcs, + visibility = [] + ): + java_library( + name = name, + resources = srcs, + visibility = visibility, + ) + +def java_doc( + name, + title, + pkgs, + paths, + srcs = [], + deps = [], + visibility = [], + do_it_wrong = False, + ): + if do_it_wrong: + sourcepath = paths + else: + sourcepath = ['$SRCDIR/' + n for n in paths] + genrule( + name = name, + cmd = ' '.join([ + 'while ! test -f .buckconfig; do cd ..; done;', + 'javadoc', + '-quiet', + '-protected', + '-encoding UTF-8', + '-charset UTF-8', + '-notimestamp', + '-windowtitle "' + title + '"', + '-link http://docs.oracle.com/javase/7/docs/api', + '-subpackages ', + ':'.join(pkgs), + '-sourcepath ', + ':'.join(sourcepath), + ' -classpath ', + ':'.join(['$(location %s)' % n for n in deps]), + '-d $TMP', + ]) + ';jar cf $OUT -C $TMP .', + srcs = srcs, + out = name + '.jar', + visibility = visibility, +) diff --git a/solenv/maven/BUCK b/solenv/maven/BUCK new file mode 100644 index 000000000000..f5bca38be2a3 --- /dev/null +++ b/solenv/maven/BUCK @@ -0,0 +1,41 @@ +include_defs('//solenv/maven/VERSION') +include_defs('//solenv/maven/package.defs') + +URL = 'https://oss.sonatype.org/content/repositories/snapshots' \ + if LIBREOFFICE_VERSION.endswith('-SNAPSHOT') else \ + 'https://oss.sonatype.org/service/local/staging/deploy/maven2' + +maven_package( + repository = 'sonatype-nexus-staging', + url = URL, + version = LIBREOFFICE_VERSION, + jar = { + 'juh': '//:juh', + 'jurt': '//:jurt', + 'officebean': '//:officebean', + 'ridl': '//:ridl', + 'unoil': '//:unoil', + 'unoloader': '//:unoloader', + }, + src = { + 'juh': '//javaunohelper:juh-src', + 'jurt': '//jurt:jurt-src', + 'officebean': '//bean:officebean-src', + 'ridl': '//ridljar:ridl-src', + 'unoil': '//unoil:unoil-src', + 'unoloader': '//ridljar/source/unoloader:unoloader-src', + }, + doc = { + 'juh': '//javaunohelper:juh-javadoc', + 'jurt': '//jurt:jurt-javadoc', + 'officebean': '//bean:officebean-javadoc', + 'ridl': '//ridljar:ridl-javadoc', + 'unoil': '//unoil:unoil-javadoc', + 'unoloader': '//ridljar/source/unoloader:unoloader-javadoc', + }, +) + +python_binary( + name = 'mvn', + main = 'mvn.py', +) diff --git a/solenv/maven/README.md b/solenv/maven/README.md new file mode 100644 index 000000000000..62945683ea9b --- /dev/null +++ b/solenv/maven/README.md @@ -0,0 +1,373 @@ += Uploading LibreOffice API to Maven Central + +This file documents the prerequisites and workflow to upload LibreOffice +API to Maven Central or local Maven repository. + +To install LibreOffice API to local Maven repository or deploy the API +to the Maven Central, extra build toolchain is required. + +`Ant` is used to bootstrap `Buck` build tool. `Buck` build tool is used to +build sources and javadocs for the API and install or deploy the artifacts +to Maven repository. `Maven` commands are invoked for that from within +`Buck` driven build. To be able to upload the API to Maven Central, access +must be granted to LibreOffice project on OSSRH. + + +== Buck + +`Buck` is new build tool that uses Python to write build files. It is +maintained by Facebook and is available under Apache 2 license. + + +=== Installing Buck + +There is currently no binary distribution of `Buck`, so it has to be manually +built and installed. Apache Ant and gcc are required. + +Clone the git and build it: + +---- + git clone https://github.com/facebook/buck + cd buck + ant +---- + +If you don't have a `bin/` directory in your home directory, create one: + +---- + mkdir ~/bin +---- + +Add the `~/bin` folder to the path: + +---- + PATH=~/bin:$PATH +---- + +Note that the buck executable needs to be available in all shell sessions, +so also make sure it is appended to the path globally. + +Add a symbolic link in `~/bin` to the buck and buckd executables: + +---- + ln -s `pwd`/bin/buck ~/bin/ + ln -s `pwd`/bin/buckd ~/bin/ +---- + +Verify that `buck` is accessible: + +---- + which buck +---- + +To enable autocompletion of buck commands, install the autocompletion +script from `./scripts/buck_completion.bash` in the buck project. Refer +to the script's header comments for installation instructions. + + +=== Prerequisites + +Buck requires Python version 2.7 to be installed. The Maven download toolchain +requires `curl` to be installed. + + +=== Using Buck daemon + +Buck ships with a daemon command `buckd`, which uses the +link:https://github.com/martylamb/nailgun[Nailgun] protocol for running +Java programs from the command line without incurring the JVM startup +overhead. + +Using a Buck daemon can save significant amounts of time as it avoids the +overhead of starting a Java virtual machine, loading the buck class files +and parsing the build files for each command. + +It is safe to run several buck daemons started from different project +directories and they will not interfere with each other. Buck's documentation +covers daemon in http://facebook.github.io/buck/command/buckd.html[buckd]. + +To use `buckd` the additional +link:https://facebook.github.io/watchman[watchman] program must be installed. + +To disable `buckd`, the environment variable `NO_BUCKD` must be set. It's not +recommended to put it in the shell config, as it can be forgotten about it and +then assumed Buck was working as it should when it should be using buckd. +Prepend the variable to Buck invocation instead: + +---- + NO_BUCKD=1 buck build api +---- + + +=== Installing watchman + +Watchman is used internally by Buck to monitor directory trees and is needed +for buck daemon to work properly. Because buckd is activated by default in the +latest version of Buck, it searches for the watchman executable in the +path and issues a warning when it is not found and kills buckd. + +To prepare watchman installation on Linux: + +---- + git clone https://github.com/facebook/watchman.git + cd watchman + ./autogen.sh +---- + +To install it in user home directory (without root privileges): + +---- + ./configure --prefix $HOME/watchman + make install +---- + +To install it system wide: + +---- + ./configure + make + sudo make install +---- + +Put $HOME/watchman/bin/watchman in path or link to $HOME/bin/watchman. + +To install watchman on OS X: + +---- + brew install --HEAD watchman +---- + +See the original documentation for more information: +link:https://facebook.github.io/watchman/docs/install.html[Watchman +installation]. + + +=== Override Buck's settings + +Additional JVM args for Buck can be set in `.buckjavaargs` in the +project root directory. For example to override Buck's default 1GB +heap size: + +---- + cat > .buckjavaargs < + sonatype-nexus-staging + USER + PASSWORD + +---- + +* Request permissions to upload artifacts to the `org.libreoffice` +repository on Maven Central: + +Ask for this permission by adding a comment on the +link:https://issues.sonatype.org/browse/OSSRH-19129[OSSRH-19129] Jira +ticket at Sonatype. + +The request needs to be approved by someone who already has this +permission by commenting on the same issue. + +* Generate and publish a PGP key + +Generate and publish a PGP key as described in +link:http://central.sonatype.org/pages/working-with-pgp-signatures.html[ +Working with PGP Signatures]. + +Please be aware that after publishing your public key it may take a +while until it is visible to the Sonatype server. + +The PGP key is needed to be able to sign the artifacts before the +upload to Maven Central. + +The PGP passphrase can be put in `~/.m2/settings.xml`: + +---- + + + + gpg + + gpg2 + mypassphrase + + + + + gpg + + +---- + +It can also be included in the key chain on OS X. + + +== Update Versions + +Before publishing new artifacts to Maven Central, `LIBREOFFICE_VERSION` +in the `VERSION` file must be updated, e.g. change it from `5.0.0` to `5.1.0`. + +In addition the version must be updated in a number of pom.xml files. + +To do this run the `./solenv/bin/version.py` script and provide the new +version as parameter, e.g.: + +---- + ./solenv/bin/version.py 5.1.0 +---- + + +== Build LibreOffice + +Build LibreOffice as usually, so that API JARs are created. + + +== Publish the LibreOffice artifacts to local Maven repository + +Execute this command to install LibreOffice API to local Maven repository: + +---- + buck build api_install +---- + +Once executed, he local Maven respoitory contains the LibreOffice API +artifacts: + +---- + $ ls -1 ~/.m2/repository/org/libreoffice/unoil/5.1.0/ + _maven.repositories + unoil-5.1.0.jar + unoil-5.1.0-javadoc.jar + unoil-5.1.0.pom + unoil-5.1.0-sources.jar +---- + + +== Publish the LibreOffice artifacts to Maven Central + +* Make sure you have done the configuration for deploying to Maven Central. +* Make sure that the version is updated in the `VERSION` file and in +the `pom.xml` files as described above. + +Push the API to Maven Central: + +---- + buck build api_deploy +---- + +For troubleshooting, the environment variable `VERBOSE` can be set. This +prints out the commands that are executed by the Buck build process: + +---- + VERBOSE=1 buck build api_deploy +---- + +If no artifacts are uploaded, clean the `buck-out` folder and retry: + +---- + rm -rf buck-out +---- + +* To where the artifacts are uploaded depends on the `LIBREOFFICE_VERSION` +in the `VERSION` file: + +** SNAPSHOT versions are directly uploaded into the Sonatype snapshots +repository and no further action is needed: + +https://oss.sonatype.org/content/repositories/snapshots/org/libreoffice/ + +** Release versions are uploaded into a staging repository in the +link:https://oss.sonatype.org/[Sonatype Nexus Server]. + +* Verify the staging repository + +** Go to the link:https://oss.sonatype.org/[Sonatype Nexus Server] and +sign in with your Sonatype credentials. + +** Click on 'Build Promotion' in the left navigation bar under +'Staging Repositories' and find the `orglibreoffice-XXXX` staging +repository. + +** Verify its content + +While the staging repository is open you can upload further content and +also replace uploaded artifacts. If something is wrong with the staging +repository you can drop it by selecting it and clicking on `Drop`. + +** Run Sonatype validations on the staging repository + +Select the staging repository and click on `Close`. This runs the +Sonatype validations on the staging repository. The repository will +only be closed if everything is OK. A closed repository cannot be +modified anymore, but you may still drop it if you find any issues. + +** Test closed staging repository + +Once a repository is closed you can find the URL to it in the `Summary` +section, e.g. https://oss.sonatype.org/content/repositories/orglibreoffice-4711 + +Use this URL for further testing of the artifacts in this repository, +e.g. to try building a extension against this API in this repository +update the version in the `pom.xml` and configure the repository: + +---- + + + mexus-staging-repository + https://oss.sonatype.org/content/repositories/orglibreoffice-4711 + + +---- + +* Release the staging repository + +How to release a staging repository is described in the +link:https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide#SonatypeOSSMavenRepositoryUsageGuide-8.a.2.ReleasingaStagingRepository[ +Sonatype OSS Maven Repository Usage Guide]. + +[WARNING] +Releasing artifacts to Maven Central cannot be undone! + +** Find the closed staging repository in the +link:https://oss.sonatype.org/[Sonatype Nexus Server], select it and +click on `Release`. + +** The released artifacts are available in +https://oss.sonatype.org/content/repositories/releases/org/libreoffice/ + +** It may take up to 2 hours until the artifacts appear on Maven +Central: + +http://central.maven.org/maven2/org/libreoffice/ + +* [optional]: View download statistics + +** Sign in to the +link:https://oss.sonatype.org/[Sonatype Nexus Server]. + +** Click on 'Views/Repositories' in the left navigation bar under +'Central Statistics'. + +** Select `org.libreoffice` as `Project`. diff --git a/solenv/maven/VERSION b/solenv/maven/VERSION new file mode 100644 index 000000000000..c99b63d49f41 --- /dev/null +++ b/solenv/maven/VERSION @@ -0,0 +1,7 @@ +# Maven style API version (e.g. '2.x-SNAPSHOT'). +# +# Used by :install and :deploy when talking to the destination repository. As +# we currently have no stable releases, we use the "build number" scheme +# described at: +# http://mojo.codehaus.org/versions-maven-plugin/version-rules.html +LIBREOFFICE_VERSION = '@version@' diff --git a/bin/mvn.py b/solenv/maven/mvn.py similarity index 53% rename from bin/mvn.py rename to solenv/maven/mvn.py index d5a1c9a0d165..caa15eeb9fd8 100755 --- a/bin/mvn.py +++ b/solenv/maven/mvn.py @@ -7,19 +7,25 @@ from __future__ import print_function from optparse import OptionParser -from os import path +from os import path, environ +from subprocess import check_output from sys import stderr -try: - from subprocess import check_output -except ImportError: - from subprocess import Popen, PIPE - def check_output(*cmd): - return Popen(*cmd, stdout=PIPE).communicate()[0] + +M = { + 'juh': 'javaunohelper', + 'jurt': 'jurt', + 'officebean': 'bean', + 'ridl': 'ridljar', + 'unoil': 'unoil', + 'unoloader': 'ridljar', +} + opts = OptionParser() opts.add_option('--repository', help='maven repository id') opts.add_option('--url', help='maven repository url') +opts.add_option('-o') opts.add_option('-a', help='action (valid actions are: install,deploy)') -opts.add_option('-v', help='libreoffice version') +opts.add_option('-v', help='gerrit version') opts.add_option('-s', action='append', help='triplet of artifactId:type:path') args, ctx = opts.parse_args() @@ -27,34 +33,45 @@ if not args.v: print('version is empty', file=stderr) exit(1) -common = [ - '-DgroupId=org.libreoffice', - '-Dversion=%s' % args.v, -] - -self = path.dirname(path.abspath(__file__)) -mvn = ['mvn', '--file', path.join(self, 'fake_pom.xml')] +root = path.abspath(__file__) +while not path.exists(path.join(root, '.buckconfig')): + root = path.dirname(root) if 'install' == args.a: - cmd = mvn + ['install:install-file'] + common + cmd = [ + 'mvn', + 'install:install-file', + '-Dversion=%s' % args.v, + ] elif 'deploy' == args.a: - cmd = mvn + [ - 'deploy:deploy-file', + cmd = [ + 'mvn', + 'gpg:sign-and-deploy-file', '-DrepositoryId=%s' % args.repository, '-Durl=%s' % args.url, - ] + common + ] else: print("unknown action -a %s" % args.a, file=stderr) exit(1) for spec in args.s: artifact, packaging_type, src = spec.split(':') + exe = cmd + [ + '-DpomFile=%s' % path.join(root, '%s/pom.%s.xml' % (M[artifact], artifact)), + '-Dpackaging=%s' % packaging_type, + '-Dfile=%s' % src, + ] try: - check_output(cmd + [ - '-DartifactId=%s' % artifact, - '-Dpackaging=%s' % packaging_type, - '-Dfile=%s' % src, - ]) + if environ.get('VERBOSE'): + print(' '.join(exe), file=stderr) + check_output(exe) except Exception as e: print('%s command failed: %s' % (args.a, e), file=stderr) exit(1) + +with open(args.o, 'w') as fd: + if args.repository: + print('Repository: %s' % args.repository, file=fd) + if args.url: + print('URL: %s' % args.url, file=fd) + print('Version: %s' % args.v, file=fd) diff --git a/solenv/maven/package.defs b/solenv/maven/package.defs new file mode 100644 index 000000000000..2c67d8fe9dbb --- /dev/null +++ b/solenv/maven/package.defs @@ -0,0 +1,28 @@ +def maven_package( + version, + repository = None, + url = None, + jar = {}, + src = {}, + doc = {}): + cmd = ['$(exe //solenv/maven:mvn)', '-v', version, '-o', '$OUT'] + api_cmd = [] + for type,d in [('jar', jar), ('java-source', src), ('javadoc', doc)]: + for a,t in d.iteritems(): + api_cmd.append('-s %s:%s:$(location %s)' % (a,type,t)) + + genrule( + name = 'api_install', + cmd = ' '.join(cmd + api_cmd + ['-a', 'install']), + out = 'api_install.info', + ) + + if repository and url: + genrule( + name = 'api_deploy', + cmd = ' '.join(cmd + api_cmd + [ + '-a', 'deploy', + '--repository', repository, + '--url', url]), + out = 'api_deploy.info', + ) diff --git a/unoil/BUCK b/unoil/BUCK new file mode 100644 index 000000000000..e84663c81d4f --- /dev/null +++ b/unoil/BUCK @@ -0,0 +1,21 @@ +genrule( + name = 'unoil-src', + cmd = ' && '.join([ + 'cd $TMP', + 'echo "FAKE SOURCE ARCHIVE" > README', + 'zip -qr $OUT *', + ]), + out = 'unoil-src.jar', + visibility = ['PUBLIC'], +) + +genrule( + name = 'unoil-javadoc', + cmd = ' && '.join([ + 'cd $TMP', + 'echo "FAKE JAVADOC ARCHIVE" > README', + 'zip -qr $OUT *', + ]), + out = 'unoil-javadoc.jar', + visibility = ['PUBLIC'], +)