<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <!--
  /**
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  -->
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.14-SNAPSHOT</version>
  </parent>

  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper-recipes</artifactId>
  <packaging>pom</packaging>
  <name>Apache ZooKeeper - Recipes</name>
  <description>
    1) This module contains various Zookeeper recipe implementations.

    2) The recipe directory name should specify the name of the recipe you are implementing - eg. zookeeper-recipes-lock.

    3) It would be great if you can provide both the java and c recipes for the zookeeper recipes.
    C recipes go in to zookeeper-recipes/zookeeper-recipes-[recipe-name]/src/c
    Java implementation goes into zookeeper-recipes/zookeeper-recipes-[recipe-name]/src/java.

    4) The recipes hold high standards like our zookeeper c/java libraries, so make sure that you include
    some unit testing with both the c and java recipe code.

    5) Also, please name your c client public methods as
    zkr_recipe-name_methodname
    (eg. zkr_lock_lock in zookeeper-recipes-lock/src/c)

    6) To run the c tests in all the recipes,
    - make sure the main zookeeper c libraries in
    zookeeper-client-c are compiled. Run autoreconf -if;./configure; make. The libraries
    will be installed in {top}/src/c/.libs.
    - run autoreconf if;./configure;make run-check
    in zookeeper-recipes/$recipename/src/c

  </description>

  <modules>
    <module>zookeeper-recipes-election</module>
    <module>zookeeper-recipes-lock</module>
    <module>zookeeper-recipes-queue</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <id>source-package</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <skipAssembly>true</skipAssembly>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
