jsk-ros-pkg / jsk_robot

jsk-ros-pkg/jsk_robot
https://github.com/jsk-ros-pkg/jsk_robot
73 stars 97 forks source link

CMakeLists.txt add install command to work on > catkin config --install > catkin build -vi --summarize #1925

Open k-okada opened 1 week ago

k-okada commented 1 week ago

we checked that necessary files are installed

(export ROS_PACKAGE_PATH=$(pwd)/src; for dir in install/share/*; do pkg=$(basename $dir); echo -e "\n\n$pkg"; echo diff -r install/share/$pkg $(rospack find $pkg) --exclude CMakeLists.txt --exclude .gitignore --exclude setup.py --exclude README.md --exclude CHANGELOG.rst --exclude cmake ; ./check.py $(basename $dir); done > diff.dir)

where check.py is


import sys
import os
import copy
import filecmp
import rospkg

def compare_directories(install_dir, src_dir, ignore=None):
    # Initialize dictionaries to store results
    results = {
        'unique_to_dir1': [],
        'unique_to_dir2': [],
        'differences': [],
        'common_files': []
    }

    # Recursively compare directory structures and files
    comparison = filecmp.dircmp(install_dir, src_dir, ignore=ignore)

    # Files only in dir1
    results['unique_to_dir1'] = comparison.left_only

    # Files only in dir2
    results['unique_to_dir2'] = comparison.right_only

    # Files present in both directories but different
    results['differences'] = comparison.diff_files

    # Files that are identical in both directories
    results['common_files'] = comparison.same_files

    return results

def list_all_subdirectories(root_dir):
    subdirectories = []
    for dirpath, dirnames, _ in os.walk(root_dir):
        for dirname in dirnames:
            subdirectories.append(os.path.join(dirpath, dirname))
    return subdirectories

if __name__ == '__main__':
    rospack = rospkg.RosPack()
    pkg_name = sys.argv[1]
    pkg_path = rospack.get_path(pkg_name)
    print("## Check [{}]".format(pkg_name))
    for dir in ['.'] + [os.path.relpath(dir, pkg_path) for dir in list_all_subdirectories(pkg_path)]:
        install_dir = os.path.join('install/share/', pkg_name, dir)
        src_dir = os.path.join(pkg_path, dir)
        if os.path.exists(install_dir):
            differences = compare_directories(install_dir, src_dir,
                                              ignore=['env-hooks', 'cmake', '.gitignore', 'CMakeLists.txt', 'CHANGELOG.rst', 'README.md', 'setup.py'])
        else:
            print('> Only in {}'.format(src_dir))
            continue

        # Display the results
        for file in differences['unique_to_dir1']:
            print("> Files only in directory 1: {}".format([os.path.join(dir, file)]))
        for file in copy.copy(differences['unique_to_dir2']):
            if os.path.exists(os.path.join('install/lib/', pkg_name, file)):
                differences['unique_to_dir2'].remove(file)
        for file in differences['unique_to_dir2']:
            print("> Files only in directory 2: {}".format([os.path.join(dir, file)]))
        for file in differences['differences']:
            print("> Different files: {}".format([os.path.join(dir, file)]))
        #print("Common files (identical):", differences['common_files'])