2011-08-21 46 views
5

Khi bạn xây dựng perl từ nguồn, bạn có tùy chọn chạy make test trước khi cài đặt perl ở đích cuối cùng của nó.kiểm tra perl sau khi được cài đặt

Có thể thực hiện tương đương với make test sau khi đã cài đặt perl không?

Lưu ý rằng tôi sẽ không có nguồn gốc. Những gì tôi muốn làm là để tải về kho lưu trữ tar nguồn cho cùng một phiên bản của perl mà tôi đã cài đặt và sau đó chạy các bài kiểm tra (từ kho lưu trữ tar nguồn) chống lại perl được cài đặt.

Có thể/không thể? Dễ dàng/khó? Làm thế nào tôi sẽ đi về điều này?

Trả lời

1

Bạn có thể bắt đầu bằng cách đọc tệp t/TEST trong mã nguồn perl.

Chú ý những điều sau:

  1. Nó sử dụng "# ./ perl!" Như cô-bang

  2. Sau đó, vào khoảng dòng 142, nó hoạt động chdir vào thư mục t.

Khi bắt đầu, bạn có thể sửa đổi dòng ngang hàng để trỏ nó vào tệp thực thi perl đã cài đặt và sao chép nội dung của thư mục 't' vào thư mục gói lõi perl (hoặc cách khác) .

Đó là cách tôi bắt đầu.

Cách khác là tạo danh sách tất cả các tệp đã cài đặt khi bạn chạy cài đặt (làm cho nó cài đặt perl trong thư mục tạm thời và sau đó thực hiện ls -lR trên thư mục đó để định danh danh sách) và sau đó sao chép những tập tin từ perl được cài đặt vào thư mục nguồn perl của bạn.

Sử dụng hệ thống kiểm soát phiên bản (ví dụ git) có thể giúp ích rất nhiều ở đây để bạn có thể dễ dàng quay lại phiên bản nguyên sơ của bất kỳ tệp nào mà bạn có thể đã ghi đè trên đường đi.

+0

haven; chưa thử điều này, nhưng tôi cho rằng trước tiên tôi phải thực hiện 'Cấu hình' và' make' ... hmmmm .... – ErikR

2
  • Có thể.
  • Khó.
  • Không đáng.

Chạy thử nghiệm với Perl đã cài đặt thay vì Perl được xây dựng mới sẽ yêu cầu bạn hiểu cách thuyết phục hệ thống thử nghiệm bỏ qua tất cả công việc chưa thực hiện và chạy thử bằng cách sử dụng cài đặt Perl. Bạn sẽ không thể nói 'làm bài kiểm tra' vì điều đầu tiên mà nó muốn làm là xây dựng Perl. Trên thực tế, nhiều hơn đến điểm, bạn không thể nói 'làm thử nghiệm' bởi vì bạn sẽ không có một makefile.

Tại sao bạn muốn thực hiện việc này? Nếu bạn không tin tưởng vào hệ thống Perl, đừng sử dụng nó. Tự xây dựng, thử nghiệm và cài đặt nó ở vị trí của bạn thay vì vị trí hệ thống. Tôi làm điều đó hầu hết thời gian; Tôi không mạo hiểm phá vỡ Perl của hệ thống bằng cách sửa đổi nó và sử dụng của riêng tôi. Tất nhiên, tôi có 5.10.0, 5.10.1, 5.12.1, 5.14.0 và 5.14.1 được xây dựng (bởi tôi) để tôi chơi cùng. Tôi thường có ít nhất một phiên bản 5.8.x, nhưng không có trên máy tính này vào lúc này.

Ngoài ra, hãy nhớ rằng những người cài đặt một hệ thống Perl là lành mạnh. Họ chạy các bài kiểm tra và không cài đặt Perl trừ khi các bài kiểm tra tất cả vượt qua (hoặc đáng kể tất cả vượt qua).

+0

Đó là lý do tại sao tôi tự hỏi bạn có phải thực hiện 'Cấu hình' hay không và 'make' trước. Sau đó, thử khai thác thử nghiệm vào sử dụng perl của bạn thay vì chỉ perl được xây dựng. Đối với lý do tại sao bất cứ ai muốn làm điều này - giả sử bạn nhận được một tar-ball của một perl đã được cài đặt. Sau khi giải nén nó tôi muốn để có thể kiểm tra nó. Tôi có lý do của tôi :-) – ErikR

+0

Bạn sẽ phải chạy cấu hình để có được một makefile. Nếu bạn chạy 'make test' mà không phải chạy 'make' trước, thì 'make test' sẽ chạy 'plain make' cho bạn, vì vậy bạn sẽ kết thúc với việc xây dựng phần mềm trước khi chạy bất kỳ thử nghiệm nào. Hơn nữa, bạn sẽ phải làm việc khá chăm chỉ để tránh kiểm tra các mô-đun trong khu vực xây dựng và để kiểm tra các mô-đun đã cài đặt thay thế. Nó đang lật đổ bộ kiểm tra Perl được thiết kế cho cái gì. Tôi cho rằng bạn có thể thử sao chép mã được cài đặt trên bản dựng, nhưng ngay cả điều đó cũng không tầm thường, đặc biệt nếu bố cục không chuẩn. –

+0

Tôi nghĩ rằng bạn sẽ phải làm nghịch đảo của 'make install' với Perl đã cài đặt của bạn. Điều này có thể tùy ý phức tạp hoặc thậm chí không thể. – musiKk

2

có thể, chỉ có một chút khó khăn (không Configure hoặc make cần thiết), có thể hữu ích:

Đề án thử nghiệm trong tải phân phối nguồn tất cả mọi thứ ra khỏi thư mục lib` thư mục /path/to/src/distribution/lib'. The key to running your existing perl installation against this test suite is to put all of the install libraries into this. Điều này có thể được thực hiện với một cái gì đó như:

cd /path/to/src/distribution 
mv lib lib-original 
mkdir lib 
/path/to/installed/perl -e 'system qq{cp -prv "$_/." lib/}' \ 
     -e 'for "lib-original",grep /../,reverse(@INC)' 

(có lẽ là một perl lệnh mạnh mẽ hơn mà sử dụng -MFile::Copy, nhưng một liner này nhanh chóng-và-bẩn đã cho tôi đi). Chúng tôi sử dụng reverse @INC để các thư viện ở phía trước @INC sẽ ghi đè các thư viện sau này chứ không phải cách khác. Điều khoản grep /../,... ngăn chúng tôi sao chép . vào lib, điều này có thể không hữu ích.

Tôi đã tìm thấy một vài thử nghiệm sử dụng đường dẫn được mã hóa cứng đến perl, pseds2p trong thư mục nguồn. Bạn sẽ muốn đảm bảo rằng các tệp này tồn tại và các thử nghiệm nhắm mục tiêu các phiên bản đã cài đặt của các chương trình này.

rm -f perl t/perl psed t/psed x2p/s2p 
ln -s /path/to/installed/perl perl 
ln -s /path/to/installed/perl t/perl 
ln -s /path/to/installed/psed psed 
ln -s /path/to/installed/psed t/psed 
ln -s /path/to/installed/s2p x2p/s2p 

Bây giờ sử dụng thường xuyên Unix-y thành ngữ khi chạy thử nghiệm bộ Perl:

cd t 
/path/to/installed/perl -MExtUtils::Command::MM \ 
     -e 'test_harness(0,"../lib")' */*.t 

Một số xét nghiệm có thể rõ ràng về việc kiểm tra tính toàn vẹn của quá trình xây dựng từ mã nguồn, vì vậy một số thất bại được mong đợi.

(quá trình này được thử nghiệm trên v5.14.0, v5.8.9, v5.10.1)

Cập nhật: khó yên. Có rất nhiều thư mục t khác bên trong một bản phân phối nguồn điển hình. Bạn cũng có thể muốn thử:

cd /path/to/source/distribution 

for dir in */*/ 
do 
     if [ -d $dir/t ] ; then 
      pushd $dir 
      echo Testing $dir 
      /path/to/installed/perl -MExtUtils::Command::MM \ 
        -e 'test_harness(0,"../../lib","lib")' t/*.t 
      popd 
     fi 
done 

Nhiều thử nghiệm này kiểm tra rõ ràng tính toàn vẹn của bản dựng, vì vậy bạn có thể mong đợi nhiều thử nghiệm này thất bại.

Các vấn đề liên quan