buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSMakeOptions.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 588 c7c26511138f
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
* All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
* This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
* which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
* Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
* Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
* Description: 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
*/
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
package com.nokia.helium.sbs.ant.types;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    20
import java.util.List;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    21
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    22
import org.apache.tools.ant.BuildException;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import org.apache.tools.ant.types.Reference;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    24
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    25
import com.nokia.helium.core.ant.types.VariableSet;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
 * Helper class to store the variable set (list of variables
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
 * with name / value pair) for sbsmakeoptions inheriting from argSet.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
 *  * <sbsbuild id="sbs.dfs_build_ncp">
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
 *      <sbsinput refid="dfs_build_ncp_input"/>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
 * </sbsbuild>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
 *   <hlm:sbsmakeoptions id="commonEMakeOptions" engine="emake">
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
 *       <arg name="--emake-emulation" value="gmake" />
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
 *       <arg name="--emake-annodetail" value="basic,history,waiting" />
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
 *       <arg name="--emake-class" value="${ec.build.class}" />
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
 *       <arg name="--emake-historyfile" value="${build.log.dir}/ec_history/raptor_clean.emake.data" />
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
 *       <arg name="--case-sensitive" value="0" />
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
 *       <arg name="--emake-root" value="${build.drive}/;${env.EMAKE_ROOT};${helium.dir};${env.SBS_HOME}" />
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
 *   </hlm:sbsmakeoptions>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
 * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
 * @ant.type name="sbsMakeOptions" category="SBS"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
public class  SBSMakeOptions extends VariableSet {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
    private String engine;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
    private String ppThreads;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
    private boolean initialized;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
     * Helper function called by ant to create the new sbs make options
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
    public SBSMakeOptions createSBSMakeOptions() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
        SBSMakeOptions options =  new SBSMakeOptions();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
        add(options);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
        return options;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
     * Helper function to add the created varset
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
     * @param filter to be added to the varset
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
    public void add(SBSMakeOptions option) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
        super.add(option);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
     * Sets the engine type for this options 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
     * @param engine for which the make options are used
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
    public void setEngine(String engineName) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
        engine = engineName;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
     * Sets the ppthreads (no. bldinfs to process) 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
     * @param ppBlock no. bldinfs to process per block
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
    public void setPPThreads(String ppBlock) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
        ppThreads = ppBlock;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
     * Returns the ppthreads required for parallel parsing support from raptor
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
     * available from 2.11.2 of raptor for parallel builds. 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
     * @return the no. of threads to be used for parallel parsing the makefile.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
    public String getPPThreads() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
        if (ppThreads == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
            if (!initialized) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
                initializeAll();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
                initialized = true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
        return ppThreads;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
     * Returns the engine name 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
     * @return type of make engine
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
    public String getEngine() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
        if (engine == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
            if (!initialized) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
                initializeAll();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
                initialized = true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
            if (engine == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
                throw new BuildException("engine should not be null");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
        return engine;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
     * Initializes all the variableset associated with this options. First
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
     * initializes the current object and then the objects embedded within this
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
     * input. 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
    private void initializeAll() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
        List<VariableSet> varSets = getVariableSets();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
        initialize(this);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
        for (VariableSet varSet : varSets) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
            initialize(varSet);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   132
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
     * Initializes individual variable set 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
    private void initialize(VariableSet varSet) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
        SBSMakeOptions makeOptions = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
        Reference refId = varSet.getRefid();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
        if (refId != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
            try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
                makeOptions = (SBSMakeOptions)refId.getReferencedObject();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
                if (makeOptions != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
                    String refEngine = makeOptions.getEngine();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
                    String threads = makeOptions.getPPThreads();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
                    if (engine != null && !(engine.equals(refEngine))) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
                        throw new BuildException(" Config's engine type " + engine + " not matching with reference : " 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
                                + refId.getRefId() + ": engine: " + refEngine);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
                    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
                    if (ppThreads == null && threads != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
                        ppThreads = threads;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
                    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
                    if (engine == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
                        engine = refEngine;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
                    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
            } catch ( BuildException ex) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   156
                throw new BuildException(ex.getMessage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
}