2015-03-23 36 views
6

Một số chức năng trong gói của tôi chạy nhanh hơn nhiều bằng cách sử dụng C++ 11 vùng chứa, nhưng CRAN không chấp nhận gói của tôi sử dụng cả hai $(SHLIB_OPENMP_CXXFLAGS)$(CXX1XSTD) vì nó không biên dịch trên Solaris (hoặc các nền tảng phụ khác). Lời khuyên từ CRAN là viết một kịch bản cấu hình, nhưng tôi nghĩ điều này sẽ mất quá nhiều thời gian để tôi học, và không cần thiết làm phức tạp mã của tôi cho các nền tảng mà ít người sử dụng.kiểm tra xem gói đang được kiểm tra bởi CRAN

Hiện tại, tôi vừa nhận xét tất cả mã C++ 11 và xóa $(CXX1XSTD) từ Makevars để gửi CRAN. Đây là một công việc tồi tệ xung quanh, và tôi muốn có thể phát hiện CRAN trong Makevars và làm cho buồng, vì vậy tôi không phải duy trì một ngã ba CRAN cho mỗi phiên bản.

Tôi vẫn kiểm tra xem C++ 11 có khả dụng hay không, nhưng nó chỉ là sự kết hợp của cờ C++ 11 và OpenMP trong Makevars, đó là trở ngại đối với bản sao Solaris với CRAN. Tôi cảm thấy phải có một cách tầm thường xung quanh việc này.

Có biến môi trường nào tôi nên sử dụng để kiểm tra xem CRAN có đang kiểm tra gói của tôi không và tôi có thể kiểm tra trong Makevars? Tôi đã tìm kiếm các cơ sở mã R và đọc R Internals và Viết R mở rộng, mặc dù tôi không thể nói tôi biết chúng bằng trái tim, mà một số người bảo trì CRAN mong đợi. Có các biến môi trường mà CRAN có khả năng là bộ nhưng tôi hy vọng thử nghiệm cho một cái gì đó như _R_CHECK_CRAN_INCOMING_=TRUE sẽ nâng cao ire của các nhà bảo trì.

Tôi không nghĩ rằng thử nghiệm "nếu solaris" trong Makevars là đủ: nó là sự hiện diện của cả hai cờ C++ 11 và OpenMP cùng nhau, điều này không được phép, vì chúng có khả năng thất bại trên nền tảng được sử dụng thậm chí ít hơn thường là Solaris.

Có lẽ tôi đang tiếp cận cách này sai.

+0

có một số gợi ý ở đây (giống như cách giải quyết): http: // stackoverflow.com/questions/36166288/skip-tests-on-cran-but-run-locally – Helix123

Trả lời

2

Mặc dù có thể thực hiện một thử nghiệm cho điều này, thực sự là cách chính xác là một tập lệnh cấu hình. Tôi đã sử dụng config.ac autoconf để tạo ra nó, mà không phải là khó khăn cuối cùng. Sau đó, mã C++ có thể sử dụng ifdef khi cần để kiểm tra sự hiện diện của các biểu tượng C++ 11 và vẫn sử dụng các khai báo OpenMP #pragma. Windows yêu cầu điều trị đặc biệt. Tôi đã sử dụng phương pháp từ gói RODBC. Điều này chưa được gửi cho CRAN hoặc được thử nghiệm trên Solaris, nhưng nó trực tiếp trả lời khuyến cáo của người bảo trì CRAN.

Xem: https://github.com/jackwasey/icd

file có liên quan bao gồm: configure.ac, src/config.h.in, src/Makevars.in

+0

miễn cưỡng chấp nhận câu trả lời của riêng tôi (chỉ). Kịch bản cấu hình trong gói của tôi bây giờ đã trưởng thành hơn và có thể được sử dụng như một ví dụ về những người khác muốn kết hợp OpenMP, C++ 11 trong một gói R. –

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