# This module is part of NetBeans and is open-source.
# You can see http://www.netbeans.org/about/legal/index.html for details.
#
# You may use the binary however you like. The source file license is:
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
# Other names may be trademarks of their respective owners.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common
# Development and Distribution License("CDDL") (collectively, the
# "License"). You may not use this file except in compliance with the
# License. You can obtain a copy of the License at
# http://www.netbeans.org/cddl-gplv2.html
# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
# specific language governing permissions and limitations under the
# License.  When distributing the software, include this License Header
# Notice in each file and include the License file at
# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the GPL Version 2 section of the License file that
# accompanied this code. If applicable, add the following below the
# License Header, with the fields enclosed by brackets [] replaced by
# your own identifying information:
# "Portions Copyrighted [year] [name of copyright owner]"
#
# Contributor(s):
#
# The Original Software is NetBeans. The Initial Developer of the Original
# Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
# Microsystems, Inc. All Rights Reserved.

OpenIDE-Module-Display-Category=C/C++
OpenIDE-Module-Long-Description=ELF\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30d0\u30c3\u30b0\u30fb\u30bb\u30af\u30b7\u30e7\u30f3\u304b\u3089\u306e\u60c5\u5831\u8aad\u53d6\u308a\u3092\u53ef\u80fd\u306b\u3059\u308b\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30fb\u30e2\u30b8\u30e5\u30fc\u30eb
OpenIDE-Module-Name=C/C++ Dwarf\u51e6\u7406
OpenIDE-Module-Short-Description=Dwarf\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u8aad\u53d6\u308a

