Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

k-okada
Copy link
Member

@k-okada k-okada commented Nov 15, 2024

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'])

> catkin config --install
> catkin build -vi --summarize

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'])

```

```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant