[ 
https://issues.apache.org/jira/browse/AVRO-163?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12797807#action_12797807
 ] 

Doug Cutting commented on AVRO-163:
-----------------------------------

Let's put all the implementations under lang/, so we have lang/java,
lang/c, etc.  Then at top-level, we'll have share/, doc/, and
dist/.

Langs builds will not be entirely standalone, but will read schemas
from ../../share/schemas, read test data from ../../share/test/data,
write interop data to ../../share/build/test/interop and publish
release artifacts to ../../dist.  (We can't use symlinks, since they don't work 
on Windows.)

The top-level build will be a shell script, build.sh, containing the
following targets:
  - test
    -- invokes each lang's test target
    -- invokes each lang's interop-gen target, placing output in 
../../share/build/test/interop/$lang
    -- invokes each lang's test-interop target, reading 
../../share/build/test/interop/*
    -- invokes each lang's start-interop-daemon target, copying ports & pids to 
../../share/build/test/interop/$lang.{port,pid}
    -- invokes each lang's test-interop-rpc target, which sends requests to 
../../share/build/test/interop/*.port
    -- kills each process in share/build/test/interop/*.pid
  - dist
    -- uses 'svn export' to create source release in dist/
    -- invokes each lang's dist target, which writes output to dist/
    -- invokes each lang's doc target, which writes output to 
share/build/$lang/doc, then tars these to dist/
  - clean, invokes each lang's clean target and removes share/build

The top-level build will invoke the lang targets in language-specific
ways, e.g., running 'ant dist' for Java, and 'make dist' for C.

In the first version of this, for simplifcation, I will leave out
interop testing.


> Each language Avro supports should be a separate package
> --------------------------------------------------------
>
>                 Key: AVRO-163
>                 URL: https://issues.apache.org/jira/browse/AVRO-163
>             Project: Avro
>          Issue Type: Improvement
>          Components: c, c++, java, python
>         Environment: We currently release Avro as a single monolithic tarball 
> with ant being used to build all the languages that Avro supports.
>            Reporter: Matt Massie
>            Assignee: Doug Cutting
>            Priority: Critical
>             Fix For: 1.3.0
>
>         Attachments: AVRO-163-cpp.patch, AVRO-163.patch, AVRO-163.patch
>
>   Original Estimate: 8h
>  Remaining Estimate: 8h
>
> *Build Issue*
> While ant is used for building Java projects, it is almost never used to 
> build python, c++ or c projects.  C and C++ projects are often managed using 
> autotools while Python uses setuptools.  Forcing these languages to use a 
> foreign build system ('ant') is suboptimal and will cause us headaches as we 
> move forward.
> *Release issue*
> Releasing a single monolithic package forces users of one language to 
> download binary and source for all languages.  For example, at this time the 
> Avro C distribution is only 384K in size (built using autotools 'make 
> distcheck' target).  People interested in using the C implementation would be 
> forced to download a large monolithic tarball (currently 3.8 MB) that 
> includes dozens of third-party jar files for the Java implementation.  
> Furthermore, C users would be forced to use 'ant' as the top-level build 
> tool.  This monolithic approach would also prevent us from submitting Avro 
> for inclusion in Linux distribution yum/apt repositories as RPM and Debian 
> packages.  It's important to allow C/C++ code to have a pristine release 
> tarball on which to base Debian and RPM packaging.
> *Solution*
> Create top-level directories: 'java', 'python', 'c++ ' , 'c', 'shared' and 
> 'release'.  Each language directory would contain the source for that 
> language and use the build system natural for that language, e.g. ant, 
> autotools, setuptools, gem, etc.  The 'shared' directory would have, for 
> example, common test schema and data files for interoperability testing 
> between each language.  A simple top-level bash script would call into each 
> language to build a release package, documentation, etc. into the 'release' 
> directory.  Each Avro release would then be compromised of package(s) for 
> each language Avro supports, e.g. avro-java-1.2.3.tar.gz, 
> pyavro-1.2.3.tar.gz, avro-c++-1.2.3.tar.gz and avro-c-1.2.3.tar.gz.  Later 
> on, we'll also likely have libavro-devel-1.2.3-1.x86_64.rpm too.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to