#!/bin/sh if [ "${1}" != "" ];then TOPDIR=${1} else TOPDIR=../../.. fi # ------------------------------------------------------------------------------ # 設定 # ------------------------------------------------------------------------------ PROJECT=project TOPDIR_REGEXP=`echo "${TOPDIR}" | sed "s/\\([\\.|\\/]\\)/\\\\\\\\\\1/g"` TARGET_OS=`grep "TARGET_OS" "${TOPDIR}/env.mk" | grep -v "^#" | sed "s/.*\\(OS_.*\\)$/\\1/"` # ------------------------------------------------------------------------------ # 設定ファイル定義 # ------------------------------------------------------------------------------ INCLUDE_P_ENV=../include_p.env INCLUDE_C_ENV=../include_c.env TYPE_ENV=../type.env CONFIG_DIR=../config MAKEFILE=${CONFIG_DIR}/Makefile ADLINT_CINIT_H=${CONFIG_DIR}/adlint_cinit.h ADLINT_PINIT_H=${CONFIG_DIR}/adlint_pinit.h ADLINT_FILES_TXT=${CONFIG_DIR}/adlint_files.txt ADLINT_TRAITS_YML=${CONFIG_DIR}/adlint_traits.yml # ------------------------------------------------------------------------------ # adlint_traits.yml 生成 # ------------------------------------------------------------------------------ function mkTraits() { cat <<EOF > ${ADLINT_TRAITS_YML} # ------------------------------------------------------------------------------ # ADLINT のバージョン # ------------------------------------------------------------------------------ version: "3.0.0" # ------------------------------------------------------------------------------ # ソースコード検査パッケージ設定 # ------------------------------------------------------------------------------ exam_packages: - "c_builtin" # ============================================================================== # プロジェクトの設定 # ============================================================================== project_traits: # ---------------------------------------------------------------------------- # プロジェクト名 # ---------------------------------------------------------------------------- project_name: "${PROJECT}" # ---------------------------------------------------------------------------- # プロジェクト ルートディレクトリ # ---------------------------------------------------------------------------- project_root: "${TOPDIR}" # ---------------------------------------------------------------------------- # 対象ファイル # ---------------------------------------------------------------------------- target_files: inclusion_paths: - "${TOPDIR}" exclusion_paths: # ---------------------------------------------------------------------------- # プロジェクト固有のイニシャルヘッダファイル # ---------------------------------------------------------------------------- initial_header: "${ADLINT_PINIT_H}" # ---------------------------------------------------------------------------- # プロジェクトヘッダファイル検索パス # ---------------------------------------------------------------------------- file_search_paths: - "${TOPDIR}/include" - "${TOPDIR}/include/sc" EOF # 追加 include パスを追加します. if [ -f ${INCLUDE_P_ENV} ]; then cat ${INCLUDE_P_ENV} >> ${ADLINT_TRAITS_YML} fi cat <<EOF >> ${ADLINT_TRAITS_YML} # ---------------------------------------------------------------------------- # コーディングスタイル # ---------------------------------------------------------------------------- # indent_style: "K%R" # indent_style: "GNU" coding_style: indent_style: "Allman" tab_width: 4 indent_width: 4 # ---------------------------------------------------------------------------- # ファイルエンコード # ---------------------------------------------------------------------------- file_encoding: UTF-8 # ============================================================================== # コンパイラの設定 # ============================================================================== compiler_traits: # ---------------------------------------------------------------------------- # コンパイラ固有のイニシャルヘッダファイル # ---------------------------------------------------------------------------- initial_header: "${ADLINT_CINIT_H}" # ---------------------------------------------------------------------------- # コンパイラヘッダファイル検索パス # ---------------------------------------------------------------------------- file_search_paths: EOF # 追加 include パスを追加します. if [ -f ${INCLUDE_C_ENV} ]; then cat ${INCLUDE_C_ENV} >> ${ADLINT_TRAITS_YML} fi cat <<EOF >> ${ADLINT_TRAITS_YML} # ---------------------------------------------------------------------------- # コンパイラ型タイプ # ---------------------------------------------------------------------------- standard_types: EOF cat ${TYPE_ENV} >> ${ADLINT_TRAITS_YML} cat <<EOF >> ${ADLINT_TRAITS_YML} # ---------------------------------------------------------------------------- # コンパイラ固有の拡張機能調整 (使用時 W0061出力) # ---------------------------------------------------------------------------- extension_substitutions: "__extension__": "" "__attribute__(__adlint__any)": "" "__cdecl": "" "__inline__": "inline" "__asm__ __adlint__any(__adlint__any)": "" "near": "" "far": "" # ---------------------------------------------------------------------------- # コンパイラ固有の拡張機能調整 (使用時 エラー出力なし) # ---------------------------------------------------------------------------- arbitrary_substitutions: "typeof": "__typeof__" "__typeof": "__typeof__" "alignof": "__alignof__" "__alignof": "__alignof__" # ============================================================================== # リンカの設定 # ============================================================================== linker_traits: identifier_max: 128 identifier_ignore_case: false # ============================================================================== # メッセージ設定 # ============================================================================== message_traits: language: "ja_JP" individual_suppression: true exclusion: messages: W0070: "c_builtin" W0105: "c_builtin" W0576: "c_builtin" W0628: "c_builtin" inclusion: EOF } # ------------------------------------------------------------------------------ # adlint_cinit.h 生成 # ------------------------------------------------------------------------------ function mkCinit() { cat adlint_cinit.h.tmpl >> ${ADLINT_CINIT_H} } # ------------------------------------------------------------------------------ # adlint_pinit.h 生成 # ------------------------------------------------------------------------------ function mkPinit() { cat <<EOF > ${ADLINT_PINIT_H} /* ============================================================================= * プロジェクトのマクロ・型定義 * ============================================================================= */ #define TARGET_OS ${TARGET_OS} EOF } # ------------------------------------------------------------------------------ # adlint_files.txt 生成 # ------------------------------------------------------------------------------ function mkFiles() { find ${TOPDIR}/modules -name *.c | grep -v unittest > ${ADLINT_FILES_TXT} echo "" >> ${ADLINT_FILES_TXT} } # ------------------------------------------------------------------------------ # Makefile 生成 # ------------------------------------------------------------------------------ function mkMakefile() { cat <<EOF > ${MAKEFILE} PROJECT = ${PROJECT} SOURCES = \\ EOF cat ${ADLINT_FILES_TXT} | sed "s/${TOPDIR_REGEXP}\\//\t/" >> ${MAKEFILE} cat <<EOF >> ${MAKEFILE} VPATH=${TOPDIR} VPATH_COMPONENTS=3 EOF cat Makefile.tmpl >> ${MAKEFILE} } # ------------------------------------------------------------------------------ # 各設定ファイル生成 # ------------------------------------------------------------------------------ if [ ! -f ${ADLINT_TRAITS_YML} ]; then mkTraits fi if [ ! -f ${ADLINT_CINIT_H} ]; then mkCinit fi if [ ! -f ${ADLINT_PINIT_H} ]; then mkPinit fi mkFiles mkMakefile