| /******************************************************************************* |
| * Copyright (c) 2011, 2012 Red Hat, Inc. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Red Hat Incorporated - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.cdt.autotools.ui.editors; |
| |
| import org.eclipse.cdt.autotools.ui.editors.parser.AutoconfElement; |
| import org.eclipse.cdt.autotools.ui.editors.parser.AutoconfMacroElement; |
| import org.eclipse.cdt.autotools.ui.editors.parser.InvalidMacroException; |
| import org.eclipse.cdt.internal.autotools.core.AutotoolsPropertyConstants; |
| import org.eclipse.cdt.internal.autotools.core.VersionComparator; |
| |
| public class AcInitElement extends AutoconfMacroElement { |
| |
| private static final String BAD_VERSION_NUMBER = "AC_INIT_badVersionNumber"; //$NON-NLS-1$ |
| |
| public AcInitElement(String name) { |
| super(name); |
| } |
| |
| @Override |
| public void validate(String version) throws InvalidMacroException { |
| super.validate(version); |
| |
| if (this.getChildren().length == 0) |
| return; |
| |
| if (VersionComparator.compare(version, AutotoolsPropertyConstants.AC_VERSION_2_59) >= 0) { |
| if (this.getChildren().length < 2) |
| return; |
| |
| // autoconf 2.67 onwards allows a more relaxed VERSION string format, |
| // so only validate arguments for earlier versions |
| if (VersionComparator.compare(version, AutotoolsPropertyConstants.AC_VERSION_2_67) < 0) |
| this.validateMultipleArguments(); |
| } |
| |
| return; |
| } |
| |
| private void validateMultipleArguments() throws InvalidMacroException { |
| |
| // There are no restrictions on the first argument. |
| |
| // Validate second argument (version number). |
| AutoconfElement argument = this.getChildren()[1]; |
| // match a digit followed by a dot zero or more times |
| // but always end with a digit |
| if (!argument.getName().matches("(\\d*\\.)*((\\d+))")) { //$NON-NLS-1$ |
| throw new InvalidMacroException(AutoconfEditorMessages.getString(BAD_VERSION_NUMBER), argument); |
| } |
| } |
| } |