Trong bài đăng trên blog trước, chúng ta đã thảo luận về các biến thể xây dựng Windows khác nhau mà PostgreSQL hỗ trợ. Trong bài đăng này, chúng ta sẽ thảo luận về cách, với tư cách là nhà phát triển dựa trên Unix, bạn có thể kiểm tra xem bản vá của mình có thể hoạt động trên Windows hay không. (Để đơn giản hơn, tôi sẽ nói “Unix” có nghĩa là Linux, BSD, macOS và tương tự.)
Đầu tiên, có một số cách để kiểm tra bản vá của bạn mà không cần phải có Windows.
Nếu bản vá của bạn chạm vào hệ thống xây dựng, chẳng hạn như bằng cách thêm tệp mới hoặc nhiều khả năng hơn bằng cách thêm điều kiện, tùy chọn bản dựng mới hoặc logic đặc biệt bổ sung, nó có thể phá vỡ các tập lệnh xây dựng MSVC, phân tích cú pháp các tệp Unix, như chúng ta đã thảo luận lần cuối cùng. Nhưng bạn cũng có thể chạy các tập lệnh đó trên Unix. Không có (hầu như) không có gì cụ thể cho Windows trong chúng, vì tất cả những gì chúng thực sự làm là phân tích cú pháp một bộ tệp và tạo ra một bộ tệp khác. Bạn chỉ có thể chạy
perl src / tools / msvc / mkvcbuild.pl
và hãy xem chuyện gì xảy ra. Điều này hoạt động như cam kết 73c8596. (Có thể lưu công việc của bạn trước vì điều này có thể ghi đè lên một số tệp đã tạo được sử dụng bởi cấu hình không phải Windows cục bộ của bạn). Điều này sẽ tạo ra các tệp dự án cho Visual Studio mà bạn không thể thực hiện được nhiều, nhưng bạn có thể kiểm tra xem kịch bản có chạy hoàn toàn hay không, bạn có thể so sánh đầu ra trước và sau hoặc nếu bạn đã thực hiện "chỉnh sửa mù" cho bất kỳ các tệp trong src/tools/msvc/
bạn có thể xác minh những điều đó ở một mức độ nào đó.
Một cách khác là thực hiện các tùy chọn xây dựng thường được liên kết với Windows. Cái nào hữu ích tùy thuộc vào những gì bản vá của bạn thay đổi. Ví dụ:Windows xây dựng với HAVE_UNIX_SOCKETS
không xác định, vì vậy việc kiểm tra theo cách thủ công có thể đáng giá nếu bạn đang thực hiện các thay đổi trong mã mạng. (Nhưng điều này sẽ không còn nữa, vì Windows hiện thực sự hỗ trợ các ổ cắm miền Unix.) Tương tự, HAVE_WORKING_LINK
không được xác định trên Windows, mặc dù tác động của điều đó là nhỏ (và nó cũng sẽ biến mất; đôi khi hệ quả của việc viết các bài đăng trên blog như bài này là phát hiện ra rằng các vấn đề bạn muốn mô tả không nên có ngay từ đầu, và bạn đi sửa chúng). Bạn có thể thay đổi cả hai tùy chọn này bằng cách chỉnh sửa src/include/pg_config_manual.h
. Một tùy chọn quan trọng khác là EXEC_BACKEND
, thay thế fork()
kiểu Unix gọi bằng fork()
cộng với exec()
triển khai có thể được ánh xạ tới CreateProcess()
trên Windows. Điều này thực sự hiếm khi bị hỏng một cách đáng ngạc nhiên, nhưng nếu có, bạn có thể gỡ lỗi và sửa nó hoàn toàn trên hệ thống Unix. Để bật EXEC_BACKEND
, bạn có thể chỉnh sửa src/Makefile.global
và thêm -DEXEC_BACKEND
thành CPPFLAGS
hoặc có thể thêm định nghĩa vào src/include/pg_config_manual.h
. (Không chắc tại sao cái này khác với những cái khác; có lẽ đôi khi cần sửa một thứ khác. [Update:also fixed])
Khi các tùy chọn này hết, có lẽ đã đến lúc khởi động một hệ thống Windows thực sự. Tôi muốn thảo luận về hai tùy chọn dễ dàng có sẵn cho nhà phát triển bình thường. Trước tiên, bạn có thể tải xuống hình ảnh Windows demo từ Microsoft và nhập nó vào VirtualBox hoặc một cái gì đó tương tự. Các liên kết hiện tại mà tôi có thể tìm thấy là:
- https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
- https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
Cách thứ hai trong số này dùng để kiểm tra trình duyệt, vì vậy có lẽ cách thứ nhất tốt hơn bây giờ, nhưng lộ trình kiểm tra trình duyệt đã phổ biến trong một thời gian. Đây là những bản sao đánh giá miễn phí, nhưng vui lòng tự đọc giấy phép.
Thứ hai, bạn có thể khởi chạy phiên bản đám mây tại một nhà cung cấp dịch vụ điện toán đám mây. Tôi sẽ không nêu tên họ, nhưng bạn biết họ là ai.
Khi bạn có hệ điều hành Windows đang chạy, tôi khuyên bạn nên cài đặt MSYS2. (Liên kết tải xuống đầu tiên ở trên từ Microsoft cũng đã được cài đặt Visual Studio, nếu bạn thích điều đó.) Sử dụng trình duyệt (có lẽ là Internet Explorer hoặc bất cứ thứ gì được gọi là bây giờ) để truy cập msys2.org, chạy trình cài đặt và trong vài phút, bạn sẽ có một môi trường MSYS2 / MinGW đầy đủ sẵn sàng. Làm theo hướng dẫn trên trang web msys2.org để cập nhật trình quản lý gói. Sau đó, mở một trình bao MinGW (không phải MSYS2) từ menu Bắt đầu và chạy như sau để nhận các gói cần thiết cho phát triển PostgreSQL:
pacman -S git
Bây giờ bạn có thể git sao chép kho lưu trữ. Trong khi điều đó chạy…
pacman -S $ {MINGW_PACKAGE_PREFIX} -gcc $ {MINGW_PACKAGE_PREFIX} -gettext $ {MINGW_PACKAGE_PREFIX} -icu $ {MINGW_PACKAGE_PREFIX} -libxml2 $ {MisonW_PACKAGE}
MINGW_PACKAGE_PREFIX
là một biến môi trường được đặt cho bạn, vì vậy hãy nhập các lệnh như vậy. (Nó sẽ khác đối với MinGW 32 bit và 64 bit.) Các gói không có tiền tố là gói MSYS2 (tức là Cygwin). Xem lại phần 1 nếu điều này khó hiểu. Tại thời điểm này, bạn sẽ có một môi trường xây dựng MinGW đầy đủ cho PostgreSQL. Bạn có thể chạy cấu hình, thực hiện, kiểm tra, v.v. Các gói bổ sung có thể được yêu cầu đối với một số tùy chọn xây dựng, nhưng không phải tất cả các tùy chọn đều thực sự hoạt động; ví dụ:không có Readline (sử dụng Cygwin cho điều đó).Trong phần tiếp theo của loạt bài này, tôi sẽ xem xét các tùy chọn tích hợp tự động / tích hợp liên tục cho Windows có thể được sử dụng để xác minh các bản vá.